apps/public — KNOWLEDGE

Purpose: Standalone public/marketing site (Astro 7, static output, React islands) that will own https://prepaidqr.com after the apex cutover. Born 2026-08-04 from the public-site split (project/public-site-split-plan.md): every public page was ported from apps/dashboard’s (marketing)/(public) groups with copy, meta, and JSON-LD parity. Deployed to Cloudflare Workers static assets; live on https://public-dev.prepaidqr.com, production env reserved for prepaidqr.com at cutover.

Shows: 23 pages — / (full campaign landing), /learn + 8 articles, /about, /abuse, /privacy, /terms, /sub-processors, three free generators (/free-qr-code-generator, /free-vcard-qr-code-generator, /free-wifi-qr-code-generator), four workbench pages (/facebook-qr-code, /linkedin-qr-code, /youtube-qr-code, /google-review-qr-code), plus sitemap-index.xml, robots.txt, llms.txt, og.png, favicons/manifest, 404.

User can: read every public marketing/legal/learn surface · generate and download static QR codes entirely client-side on the seven tool pages · follow sign-in/sign-up/dashboard CTAs to https://app.prepaidqr.com.

Boundary: Owns page rendering, site chrome, SEO artifacts, the deploy config, and the staged app-path redirects. Does NOT own copy decisions (prose is ported verbatim from the dashboard sources, which stay canonical until the apex cutover — see the dual-maintenance bullet in (marketing)/KNOWLEDGE.md), pricing math (standalonePackPrice is a verbatim copy of the dashboard formula), auth (no Clerk here, ever), or the QR-code data model.

Implemented

Underlying