Static landing page and SEO content for Foil.
This repo was split out of the macOS app repository so web hosting, analytics, SEO, and marketing iteration can move independently from app release work.
Open index.html directly in a browser, or serve the directory with any static
file server:
python3 -m http.server 4173For the Vercel build output and launch checks:
npm run check:launchTo audit release drift before updating install copy:
npm run check:releaseTo smoke test a deployed preview or production URL:
SMOKE_URL=https://your-preview.example npm run check:deployedFor production, include the analytics assertion:
EXPECT_POSTHOG=1 EXPECTED_ANALYTICS_ENV=production SMOKE_URL=https://foil.neonwatty.com SITE_URL=https://foil.neonwatty.com npm run check:deployedThe deployed smoke fetches the live launch page inventory, verifies sitemap/canonical parity and deployed local assets, checks the six conversion event hooks, scans for stale GitHub Pages canonicals and unsupported bridge availability claims, and optionally asserts public PostHog config.
Sentry is intentionally not required for the current web launch. If it is activated later, include the Sentry assertion too:
EXPECT_POSTHOG=1 EXPECT_SENTRY=1 EXPECTED_ANALYTICS_ENV=production SMOKE_URL=https://foil.neonwatty.com SITE_URL=https://foil.neonwatty.com npm run check:deployed- Intended host: Vercel
- Analytics target: PostHog project
BugDrop + Foil(422537) - Production canonical default:
https://foil.neonwatty.com - Vercel build command:
npm run build - Vercel output directory:
dist - Set
SITE_URLif production moves to another canonical domain. - Set
POSTHOG_KEYand optionalPOSTHOG_HOSTto enable analytics. WhenPOSTHOG_KEYis unset, the analytics script exits without loading PostHog. Production Vercel currently setsPOSTHOG_KEY,POSTHOG_HOST,SITE_URL=https://foil.neonwatty.com, andFOIL_ANALYTICS_ENV=production. sayfoil.comandwww.sayfoil.comremain attached to the Vercel project and permanently redirect matching paths to the canonical subdomain.- Sentry is not enabled for the current web launch. Leave
SENTRY_DSNunset unless browser error monitoring is deliberately activated later; without a DSN, the observability script exits without loading Sentry. Seedocs/observability.md. - Vercel deployment setup and production smoke receipts are documented in
docs/deployment.md. - Search Console and indexing receipts are documented in
docs/seo.md. - Public privacy disclosure hygiene is covered by
npm run check:privacyand documented indocs/privacy-launch.md. - Install/download trust is covered by
npm run check:installand documented indocs/install-download.md. - Blog conversion hygiene is covered by
npm run check:blogand included innpm run check:launch; the page inventory lives indocs/blog-conversion.md. - Supabase capture is deferred until there is an approved capture use case,
RLS design, retention plan, and privacy/legal approval. See
docs/capture.md. .github/workflows/launch-smoke.ymlruns local launch checks on pull requests andmain; manual dispatch can also test a deployed URL.