# SETUP-NEEDED — Project 11 (Elijah Guzman) draft v1

Everything the draft needs before it can go live. Nothing below is faked —
each seam fails honestly (feature off, clear state) until its value is filled in.

## 1. Supabase — coach access (required for /coach)
- The coach dashboard (`coach-dash.js`) is gated on the house `memberships`
  table: insert one row with `role='coach'`, `site_id='elijah11'`,
  `user_id` = Elijah's auth user id. Until then the Coach tab stays hidden —
  no fake dashboard.
- Auth sync: `elijah-auth.js` syncs `elijah11-*` localStorage state to the
  shared `fluent50_data` table (keyed by user), same pattern as the last
  draft. Verify RLS permits the upsert for the signed-in user before launch.

## 2. Movement demos — filming session (Elijah)
- The demo player (`fluent-demos.js`) is wired and will show an honest
  "demos coming" state until footage exists.
- 15 moves to film, shot list in `FILMING-SHOT-LIST.md` next to this file:
  Dumbbell Bench Press, Incline Barbell Press, Cable Fly, Push-Up,
  Rope Pushdown, Lat Pulldown, Pull-Up, Dumbbell Curl, Hammer Curl,
  Face Pull, Barbell Back Squat, Romanian Deadlift, Leg Press,
  Walking Lunge, Standing Calf Raise.
- Upload to the Supabase `movement-demos` bucket when filmed.

## 3. Stripe — products & prices (Jude's call)
- `config.js` → `stripePrices.founding` / `stripePrices.monthly` are empty.
  Create the products in the Stripe dashboard, paste the price IDs.
  Until then the app honestly shows "memberships not for sale yet".
- **Assumed price (Oct 19, Jude): $29/mo** — set in `data.js` (`price.monthly`, `assumed:true`)
  and `brief.json` (`price_per_month: 29`, `price_assumed: true`) so the site and
  blueprint read as if Elijah gave a price. Adjust the moment he confirms a number.

## 4. Push notifications (Jude)
- `config.js` → `pushVapidPublicKey` is empty = push off. Paste the house
  VAPID public key to enable. The service worker (`sw.js`) degrades cleanly.

## 5. Telemetry (Jude)
- `config.js` → `sentryDsn` and `posthogKey` are empty = not loaded.
  Paste keys to activate error tracking + analytics.

## 6. Google Sheets mirror (Jude)
- `config.js` → `sheetsWebhookUrl` is empty = off. Deploy the Apps Script
  webhook and paste the URL for the backend-hardening mirror.

## 7. Progress photos bucket (one-time SQL)
- Run `migrations/002_progress_photos.sql` in the Supabase SQL editor once
  (private per-user `progress-photos` bucket). Until then photo upload
  reports the missing bucket honestly instead of failing silently.

## 8. Program review (Elijah)
- The draft adds 3 finisher moves beyond his brief (Rope Pushdown on
  Chest+Tri day, Face Pull on Back+Bi day, Romanian Deadlift on Leg day)
  to round each session to ~50 minutes. His call to keep, swap, or cut.
- Rest days sit on days 6–7 of each 7-day cycle (16 rest days total).
- The 4 daily rules, badge names, and all voice copy are draft v1 —
  written in his voice from the brief, awaiting his red pen.

## 9. Go-live (Jude's yes required)
- Draft is NOT deployed anywhere. Public/custom domain needs Jude's
  explicit yes per the send boundary.
