feat(launch): repurpose /download as waitlist + expose main site in prod#36
Merged
Merged
Conversation
Removes the last blockers to flipping the splash gate so production
(main branch) serves the full site, which is needed for TestFlight +
App Store review. The app isn't downloadable yet — but the previous
/download page (placeholder app-store badges marked '(graphic needed)')
would be embarrassing for users and confidence-breaking for App Store
reviewers.
Three coordinated changes:
1. Extract the splash page's waitlist signup form into
components/shared/WaitlistSignupForm.tsx so both the splash and the
new /download can use it. Splash refactored to consume it; visual
no-change to the splash itself.
2. Rewrite /download as the pre-launch waitlist experience:
- Hero: 'Coming soon to iOS and Android' (was 'Download Being')
- Primary CTA: waitlist signup form
- REMOVED: placeholder iOS/Android badges + QR codes
- REMOVED: duplicate bottom 'Download for iOS / Android' CTA
- REFRAMED: pricing + system requirements as 'What to expect when
we launch'
- FAQ retained with one new entry ('When will Being launch?')
Every existing CTA across the site (5 of them on home/features/
philosophy) still routes to /download — they now land on a coherent
waitlist signup instead of broken download buttons.
3. DesktopNav 'Download' link text → 'Get Early Access'. URL unchanged.
4. NEXT_PUBLIC_SHOW_FULL_SITE flipped to unconditional 'true' in
deploy.yml. The splash component + redirect logic remain in the
codebase as emergency-fallback, but the splash is now unreachable
in deployed envs — / redirects to /home on both preview and main.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This was referenced May 26, 2026
MP2EZ
added a commit
that referenced
this pull request
May 26, 2026
…ge (#39) Closes three deployment-confidence gaps that the recent prod cutover (PR #37) made visible. # 1. Build with NEXT_PUBLIC_SHOW_FULL_SITE='true' in wrangler-smoke CI previously built without the env var, so the / → /home redirect codepath (production behavior) was never exercised in CI. Now matches the deploy.yml build mode. Readiness probe switched from / (now 307) to /home (always 200) so wrangler-dev startup detection still works. # 2. Extend wrangler-smoke route coverage Old coverage: POST /api/waitlist + GET /crisis (2 routes). New coverage adds 4 routes: - GET / → 307 with location: /home - GET /home → 200 + 'Mindfulness with meaning' body marker - GET /download → 200 + 'Coming soon' marker, NOT 'graphic needed' (catches if the page regresses to the pre-#36 placeholder badges) - GET /privacy/multi-state → 200 + 'Multi-State' body marker Each follows the existing /crisis assertion pattern. # 3. Post-deploy smoke against live URL (deploy.yml) Catches the failure mode CI cannot reach: DNS misconfig, custom-domain unbound, SSL broken, deploy succeeded-but-routed-wrong. After the wrangler-action deploy command succeeds: - Branch-aware URL (main → being.fyi, preview → workers.dev) - 15s sleep for Cloudflare edge propagation - Cache-busted curl on /home (200), /download (Coming soon marker), /privacy (Strict-Transport-Security header) - FAIL exits the workflow loudly so an alert fires Note on the 'Coming soon' assertion: temporary marker tied to pre-launch state. When the app launches and /download swaps to real app-store badges, update this assertion or replace with a durable marker like the H1 text. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Removes the last blockers to flipping the splash gate so production (`main` branch) serves the full site — needed for TestFlight + App Store review. The app isn't downloadable yet, but the previous `/download` page (placeholder app-store badges marked `(graphic needed)`) would have been embarrassing for users and confidence-breaking for App Store reviewers.
Three coordinated changes
1. Extract waitlist form into a shared component
New `components/shared/WaitlistSignupForm.tsx` — used by both the splash (`/`) and the rewritten `/download`. Splash refactored to consume it; visual no-change to the splash. POSTs to the existing `/api/waitlist` → Notion endpoint.
2. Rewrite `/download` as the pre-launch waitlist experience
Every existing CTA across the site (5 of them on `/home`, `/features`, `/philosophy`) still routes to `/download` — they now land on a coherent waitlist signup instead of broken download buttons. No CTA copy changes; the existing aspirational phrasing ("Begin Your Practice", "Download Being") works fine as a hook for waitlist signup.
3. DesktopNav copy + deploy gate
What this PR does NOT change
Verification
Screenshots: `docs/audits/2026-05-25-screenshots/download-AFTER.png` + `splash-AFTER.png` (untracked locally; not committed — see prior audit dir for the BEFORE state)
TestFlight readiness after this merge
What's checked off:
Still worth confirming separately:
Out of scope follow-ups
🤖 Generated with Claude Code