34 tests across desktop + mobile (Chromium/Pixel 5). Verifies all client-side
React islands and interactive features that astro build/WebFetch cannot confirm.
API-dependent WritingIssue shows graceful error against local preview; resolves
on the live site where the PHP backend is available.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add og:title, og:description, og:image, og:url, og:type, og:site_name to BaseLayout
- Add og:locale (en_GB) + og:locale:alternate (fr_FR, nb_NO) multilingual signals
- Add article:published_time, article:section, article:author on all 5 article pages
- Add Twitter/X summary_large_image card and canonical link on every page
- Generate 13 Jazz Noir branded 1200x630 PNG OG images (satori + resvg-js)
- Add scripts/generate-og-images.mjs + Special Elite font for future regeneration
- Add public/images/articles/ and public/assets/ which were previously untracked
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Convert all data files (site, profile, norway, jazz, projects, cv) to Record<LocaleCode, string> fields
- Update all page templates to use LocaleCopy component for locale-aware rendering
- Fix CSS specificity conflict: .locale-copy .locale-copy__text (spec 20) now beats container span rules (spec 11)
- Update LocaleSwitcher, BaseLayout, and SectionCard for locale prop types
- Design system overhaul: Special Elite font, burgundy #8f2218, DG seal favicon
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Loads OpenPanel (analytics.bluenotelogic.com, client 6a6d90f8) only when user
accepts analytics cookies via the existing dg:cookie-consent consent event.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>