structured-data.html was called both in extend-head.html (line 2) and
baseof.html (line 56), resulting in duplicate JSON-LD blocks:
- Home: 2x WebSite schema
- Articles: 2x BlogPosting + 2x BreadcrumbList
Remove the redundant call in baseof.html. Article pages now emit 1
BlogPosting + 1 BreadcrumbList as intended.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Verify external source URLs in content/*.md are reachable. HEAD request
with GET fallback, treats known bot-blocker 403s (hhs.gov, jamanetwork,
consilium.europa.eu etc.) as OK.
Usage:
scripts/check-links.sh # all content files
scripts/check-links.sh --fast # stop at first failure
scripts/check-links.sh --verbose
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Two new articles covering this weeks news:
1. EU Commission age verification app (April 15) with parental options guide
2. Cyprus under-15 social media ban (April 16)
Also updates Greece article Cyprus section and global country data.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Template renders one Further Reading aside (essential-reading style)
with author-curated list + auto-appended layers-of-protection pillar
- Removed separate Essential reading aside
- Migrated 10 articles' ## Further Reading sections into frontmatter
further_reading: translationKey arrays
- Added further_reading i18n key in en/de/fr
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Use les parents / l'enfant / impersonal constructions instead of
vous/votre/vos in pillar and news articles. Legal pages keep direct
address. Same editorial bar as the DE pass.
Adds a layout-level "Essential reading" block below the article body
that links to the seven-layers pillar in the same language. Hidden on
the pillar article itself. Avoids hand-editing 18 markdown files and
guarantees every future article inherits the link automatically.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The inline "Protect Your Family Online" CTA block was too promotional
for the editorial tone. Removed from all pillar articles (TikTok,
parental controls, layers of protection) across EN/DE/FR, plus the new
Roblox/Fortnite/Discord draft. Shortcode file preserved in layouts/
for possible future use.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Two more evergreen parent-intent pillars:
- Parental controls 2026 practical guide: layered comparison of Screen
Time / Family Link / router DNS / VPN DNS with honest trade-offs
- Seven layers of online protection: ISP → router → VPN → OS → OS
plugins → browser plugins → in-app, framing VPN as the load-bearing
layer that travels with the device
All three languages share translationKey for hreflang.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
First of five parent-intent pillar articles targeting high-search-volume
queries. Funnels to Agiliton VPN via existing vpn-cta shortcode (now
also localised to French). Describes the curated blocklist (HaGeZi,
OISD, Cloudflare top-10k allowlist) without naming the backend engine.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The Danish model: age 15 default, parental opt-in from 13, enforced
on platforms via DSA Article 28, backed by MitID for age verification
and a 160M DKK child-safety fund. Covers Frederiksen's October 2025
parliament speech, November political agreement, December follow-up
package, and the Jutland Declaration signed by all 27 EU states during
Denmark's H2 2025 Council Presidency.
Remove min-width:4rem on the number (was pushing card past container),
add flex-wrap + flex:1 1 12rem on label so it wraps under the number
when the card itself is narrower than content. Slightly smaller number
font (2.25rem) for balance.
Covers the April 13, 2026 IW Bildungsmonitor (age 13) vs Kolleck taz
commentary (enforce DSA/GDPR, no age bar), federal government's
wait-and-see stance (expert commission autumn 2026), JIM-Studie 2025
screen-time numbers, state-level phone bans, and comparison to
France/Greece/Australia. New germany-screen-time shortcode for
age-group smartphone minutes bar chart.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace formal address (Sie/Ihre/Ihnen) with neutral/impersonal tone
in kinderschutzgesetze article. datenschutz.md kept as-is (legal req).
Remove duplicate Rybbit analytics script from extend-footer.html
(already loaded via baseof.html).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Research-verified all 20 entries against current sources (April 2026):
- Greece/Spain/Norway: passed → progress (not yet legislated)
- Brazil: passed → enforced (enforcement live since March 2026)
- Netherlands: removed fictional 'Children's Code', corrected to GDPR (UAVG)
- Sweden: removed fictional 'National Youth Guidelines', corrected to GDPR + DSA
- China: clarified age 14 is for personal data (PIPL), not social media access
- Canada: C-63 died Jan 2025, updated to reformulation status
- Japan: corrected law name to Child Welfare Act + Industry Guidelines
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Removed redundant child-safety-map shortcode (static table duplicating
country-table). Now one map module (world-map) and one table (country-table).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sorted by country name by default. Clickable headers to sort by
law, age, status, or year. All 20 countries from countries.json.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The interactive map fetches from /data/countries.json (static dir),
not Hugo data/ dir. Syncs Greece, Indonesia, Cyprus entries.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Includes Cyprus section (EU age verification pilot, proposed age limit increase).
Updates countries.json with Greece, Indonesia, Cyprus entries.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
New terms.html template renders tags as pills with article counts
instead of the generic list view with dates and read-more links.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Link check found go.agiliton.eu/vpn-appstore returns 404.
Correct URL is /vpn-app.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
stats-banner + map stay at top, child-safety-map moved after EU section,
law-charts moved before What Parents Can Do. No longer grouped together.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Removed **.md from paths-ignore -- content changes must deploy since
Hugo builds markdown into the site. Only docs/ and .session/ ignored.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
New Who We Are section: Wibke (journalist) and Christian (digital
entrepreneur), 25+ years expertise each, married ~20 years, two
children (10, 12). Laws are only part of the story -- tech needs
deep expertise but simple UX. DE neutral tone (no Sie/Ihre).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Header brand is now hardcoded English across all languages.
Homepage h1 uses subtitle from front matter:
- EN: Protecting Children in a Digital World
- DE: Kinderschutz in der digitalen Welt
- FR: Protéger les enfants dans un monde numérique
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Source links added for: Surgeon General advisory, Meta MYST study,
APA advisory, JAMA Psychiatry, Weill Cornell Medicine, World Happiness
Report, EU Commission DSA finding, Amnesty International. All 3 langs.
DE article rewritten to impersonal/neutral form — no Sie/Ihre in
parent advice section or crosslinks.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Read more links in map popups now point to the full overview article URL
with anchor (e.g. /en/child-protection-laws-2026-global-overview/#germany)
instead of just #germany which triggered fullscreen in the iframe.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Bar chart: after intro (early viewport)
- 5h card: after "They Knew"
- 2-3x card: after bullet list in "The Numbers"
- 3h+ card: after "Courts Are Catching Up"
New single-card shortcode addiction-stat with num/color/label params.
Removed grouped addiction-impact and addiction-stats shortcodes.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Chart after intro (early viewport), impact stat cards after bullet list
in The Numbers section. Old combined shortcode replaced.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace broken health impact chart (mixed units) with stat cards showing
5h avg, 2-3x risk, 3h+ threshold. Keep horizontal bar for percentages.
Add crosslinks at end of addiction article → global overview + France ban.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Two Chart.js visualizations: usage/addiction percentages (horizontal bar)
and health impact metrics. Multilingual labels. New shortcode:
addiction-stats.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- MDL lawsuit count: 1,745 (stale Apr 2025) → 2,400+ (Mar 2026)
- Katarina Barley quote: unverifiable, replaced with editorial summary
- Applied to all 3 languages
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Hugo strips --- (interprets as thematic break) from shortcode .Inner content.
Switch to ~~~ separator. Also fix split syntax (function-style instead of pipe)
and add trim to handle whitespace around items.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
New article: How Tech Companies Turned Addiction Into a Business Model
- covers design patterns, lawsuits, EU DSA enforcement, stats
- all 3 languages with FAQ sections
Fix Germany in countries.json: status "enforced" → "guidelines"
(JuSchG is traditional youth protection with limited digital extension,
not dedicated social media regulation)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Remove {{< vpn-cta >}} shortcode from all 3 language articles
(EN/DE/FR) — editorial VPN mentions kept intact. Footer now shows
"Powered by Agiliton VPN" linking to App Store, plus updated
copyright line.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>