1. Static website ready Prove the Cloudflare Pages output is clean before touching campaigns.
Run the full repo check `npm run check` passes with homepage, SEO, links, revenue, lead capture, configurator, pricing and checklist guards. required Confirm public pages are indexed `/`, `/configurator.html`, `/snap/`, `/pricing-calculator.html`, `/launch-checklist.html`, `/sitemap.xml`, `/robots.txt` and `/llms.txt` are present. required Mobile smoke pass Homepage, configurator, pricing and one Snap page are readable on phone width with CTA buttons visible. QA
2. Buyer path ready Confirm the journey feels like a product, not a folder of pages.
Configurator recommends Snap tools Generate a construction preview and confirm the Sector App Layer recommends TRADESNAP, CADSNAP and GARAGESNAP. required Snap pages capture intent Submit at least one calculator lead and confirm it appears in `/snap/` and `/pricing-calculator.html` local preview. required Commercial offer is obvious Homepage must clearly sell Website, Website + Snap and Full Funnel packages from £1,997 to £14,997. sales
3. Runtime capture ready The frontend is already wired to one shared config file.
Set capture endpoint Update `_site/attoh-lead-config.js` with the live Railway or API endpoint for `/api/lead-capture`. required Set public token Use `ATTOH_LEAD_CAPTURE_PUBLIC_TOKEN` on the server and the matching public token in the static config file. required Run capture smoke test Submit a controlled public form and confirm CORS, token validation and endpoint acceptance from the browser. QA
4. API and persistence ready Keep demo capture and production capture clearly separated.
FastAPI server health `/health` responds successfully in the deployed environment before paid traffic goes live. required Lead storage configured Use `ATTOH_LEAD_STORE_DIR` for JSON fallback and `ATTOH_LEAD_SUPABASE_TABLE` when Supabase persistence is switched on. required Admin routes remain private `/api/leads` requires `X-Secret`; never expose lead list data through the static site. security
5. Domain and deploy ready Final checks before we point serious buyers at it.
Cloudflare Pages publishes `_site` Production build output is the static `_site` folder, with no hidden framework build step. required Canonical domain is clean Canonical URLs, sitemap URLs, Open Graph image and contact links resolve on `https://attoh.digital`. required Campaign links are tested Test homepage, configurator, pricing, Snap hub, one Snap page and this checklist from a fresh browser session. QA
6. Not hidden, not forgotten These are the serious production upgrades after launch demos start converting.
Database-backed persistence Move all paid/client records from in-memory or local JSON fallback into Supabase/Postgres tables with migrations. phase 2 Rate limiting and abuse controls Add rate limits, spam controls and monitoring to capture endpoints and Snap calculators before broad paid traffic. phase 2 Annual tax/legal review Snap calculators must be checked each tax/legal year before being positioned as live advisory-grade tools. phase 2
Operator command path The fast version when we need to prove the repo is ready before a push.
npm run launch:soft npm run launch:production python3 scripts/build_sitemap.py python3 scripts/check_launch_checklist.py git diff --check
Launch runway This is the practical order for finishing ATTOH Digital without losing quality.
Now: demo-to-sale Use the homepage, configurator, pricing and Snap tools to sell premium websites with a sector-specific app layer.
Next: live capture Deploy FastAPI, set the shared static config, run smoke tests, and route leads into JSON fallback or Supabase.
Then: platform hardening Add persistence migrations, rate limiting, monitoring, billing-state hardening and annual calculator verification.
Commercial truth: ATTOH Digital is launchable as a premium website and lead-generation product once this checklist is green. The full self-serve SaaS platform is the next runway, not something we need to fake today.