Skip to content

feat(launch): repurpose /download as waitlist + expose main site in prod#36

Merged
MP2EZ merged 1 commit into
previewfrom
feat/launch-readiness-waitlist-download
May 26, 2026
Merged

feat(launch): repurpose /download as waitlist + expose main site in prod#36
MP2EZ merged 1 commit into
previewfrom
feat/launch-readiness-waitlist-download

Conversation

@MP2EZ
Copy link
Copy Markdown
Owner

@MP2EZ MP2EZ commented May 26, 2026

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

  • Hero: "Coming soon to iOS and Android" (was "Download Being")
  • Primary CTA: waitlist signup form embedded prominently
  • REMOVED: placeholder iOS/Android badges + QR codes ("graphic needed" placeholders gone)
  • REMOVED: duplicate bottom "Download for iOS / Android" CTA (the waitlist form is now the single conversion ask)
  • 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. 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

  • DesktopNav `Download` link text → `Get Early Access`. URL unchanged.
  • `NEXT_PUBLIC_SHOW_FULL_SITE` flipped to unconditional `'true'` in `deploy.yml`. Both `preview` and `main` now serve the full site. The splash component + redirect logic stay in the codebase as emergency-fallback (cleanup is a future tidy-PR).

What this PR does NOT change

  • URLs — `/download` keeps its URL; all 5 existing CTAs continue to point to it.
  • CTA copy on home/features/philosophy — "Begin Your Practice" / "Download Being" still work as aspirational hooks for waitlist signup. Bulk copy review can be a separate UX pass.
  • Pricing claims — "$79.99/year, 1 month free trial" already lived on the page pre-this-PR. No new pricing assertions introduced; the framing is just "when we launch" rather than "today."
  • Existing waitlist endpoint, splash component code, Notion integration — all reused as-is.

Verification

  • `npm run lint` — clean (one pre-existing unrelated warning)
  • `npm test` — 74 tests pass (incl. the splash form test against the extracted component)
  • `npm run build` — clean, all 16 routes generate as `○ (Static)`
  • Chrome DevTools on local prod build:
    • `/download`: "Coming soon to iOS and Android" hero, embedded waitlist form, "What to expect when we launch" pricing, no "graphic needed" placeholder text anywhere in body
    • `/`: splash still renders correctly (extracted form preserves all behavior)
    • DesktopNav reads "Get Early Access"
  • Smoke checked all 5 existing CTAs route to `/download` (URLs unchanged)

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:

  • ✅ Privacy URL (`/privacy`)
  • ✅ Support URL (`/support`)
  • ✅ No "available now" claims (now correctly framed as "coming soon")
  • ✅ No broken download links

Still worth confirming separately:

Out of scope follow-ups

  • Bulk CTA-copy review across home/features/philosophy (separate UX concern)
  • Removing the splash component + standalone layout (orphan now — keep for emergency fallback for the moment)
  • Real iOS/Android badges + QR codes (when app is in the stores, restore the badge-rendering section by reverting the relevant deletions)

🤖 Generated with Claude Code

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>
@MP2EZ MP2EZ merged commit 9cb4a50 into preview May 26, 2026
2 checks passed
@MP2EZ MP2EZ deleted the feat/launch-readiness-waitlist-download branch May 26, 2026 00:28
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant