Worker (worker/) renders and sends the plan email via Resend, with
the matching email-template.html and a VITE_WORKER_URL example env.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Full meta suite in index.html: description, canonical, robots,
Open Graph + Twitter cards, theme-color and JSON-LD structured data
- 1200x630 OG share card matching the homepage Plan-B wordmark
- Favicon set generated from the intro storm icon (svg + png + apple
touch + 192/512 PWA icons) and a web manifest
- robots.txt + sitemap.xml with hreflang alternates
- setLang() now syncs title/description/og tags on EN/DE toggle
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Faithful 1:1 port of the single-file index.html to a Vite + Vue 3.5
project. All visuals, behavior, translations, quiz logic, scoring,
SVG paint filters, and modifier panel preserved. The previous
single-file build is archived as index.original.html for A/B compare.
Inline onclick handlers in the static template are converted to
Vue's @click bindings — Vue 3 ignores string-valued on* attributes,
which silently broke the qpb-logo "back to landing" navigation.
Inline handlers inside dynamically-injected innerHTML strings
(quiz options, slider, nav buttons) keep working since the browser
parses them; their target functions are exposed on window from
onMounted.
Pinned: vue 3.5.13, vite 6.4.2, @vitejs/plugin-vue 5.2.1.
Zero npm audit vulnerabilities.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>