NutriSync — Developer Spec → Implementation Plan & Coverage
Source: NutriSync Collective — Complete Product & Developer Specification, v1.0, 29 pages. This plan extracts the user stories and functionality, records what is already built, and marks the remaining work. As of July 2026 the app is effectively 1:1 with the Figma prototype — the full screen set is built, wired to Supabase, and running the real-time CAS. The spec remains the single source of truth; where it conflicts with earlier inferences (e.g. luteal colour), the spec wins.
Status legend: ✅ done · 🟡 partial/foundation · ⬜ to build.
0. Corrections the spec forced (applied everywhere)
- Brand primary is
#E8472A; background cream #F5F2EB. App-wide brand orange is #FF5509, orb gradient #FF9269 → #FF5509. Typeface: Poppins throughout.
- Phase colours (authoritative): Menstrual
#E8472A · Follicular #6B9E6B (sage) · Ovulatory #D4A017 (gold) · Luteal #7B5EA7 (purple/lavender). Earlier pink luteal is corrected.
- Five scoring phases, not four: menstrual, follicular, ovulatory, early_luteal, late_luteal → four display phases.
- Bottom nav: Cycle (Home) · NutriLog (Meals) · Movement Log · Progress · Calendar.
- The Nutri / NutriBubble orb (official Figma artwork, avatar variants) is a first-class brand element and appears throughout.
1. What's already built against the spec
- ✅ CAS engine — implemented in
src/lib/cas.ts (ported from packages/core/cas.mjs): the §5.2 phase model and all five §6 components (C1 Phase Confidence 15 · C2 Biomarkers 25 · C3 Nutrition 30 · C4 Fitness 20 · C5 Logging 10) with the exact scoring tables and the §16 rules. 34/34 unit tests pass, including the §6.7 worked example.
- ✅ Real-time CAS recompute — logging recomputes the score live and upserts
daily_scores. Runs identically in the mobile app and the web app.
- ✅ Design tokens — colours, Poppins, and the NutriBubble orb locked to §2 and used everywhere.
- ✅ Database schema — the 8 core tables (users, cycles, daily_logs, nutrition_checklist, movement_checklist, meal_logs, daily_scores, user_phase_averages) plus content tables (phase_food, movement_activity, phase_tip), all with RLS per §16.
- ✅ Full mobile screen set — every screen below is built and functional on live data.
- ✅ Web app — the Claude Design bundle stitched to the same Supabase backend (real auth, session routing, reads/writes across all 8 tables, same CAS →
daily_scores, in-app export/delete).
- ✅ CI/CD (both tracks) — mobile OTA via EAS Update and web via wrangler Pages deploy, each auto-deploying on push.
2. User stories by module → status
Onboarding (§3) ✅
- Create an account and name your Nutri. ✅
- Answer Cycle Info including last period start date (the critical field), so phases can be calculated. ✅
- Provide Health, Nutrition prefs, NutriGoal, Nutri avatar, city, and consent, persisted to
users + cycles. ✅
- Answers cascade at the data layer (diet/allergy/condition filtering). ✅
- Acceptance: no health row persists without consent; BMR via Mifflin-St Jeor, never shown as calories. ✅
Daily Mood & Energy gate (§4) ✅
- On first open each calendar day, log mood then energy ("Before we Sync"), feeding CAS C2 & C5; shown once/day. ✅
Home / Cycle (§5) ✅
- Today's phase + cycle day ring (arc colour = phase colour), greeting, week strip, edit period + edit health, live Sync Score, 🔔 to Notification Center, bottom nav. ✅
cycle_day = today − last_period_start + 1, auto, never manual (§5.2). ✅
CAS (§6) ✅ engine + ✅ UI wiring
- CAS (0–100) updates in real time as the user logs (§15), writing
daily_scores. ✅
- CSS (Cycle Stability Score, §6.8) — donut on Progress; MVP = rolling avg of last 3 cycle CAS averages; full logic post-MVP. 🟡
NutriLog / Meals (§7) ✅
- Daily Tip / Body Insight change every day (indexed by cycle_day, modulated by NutriGoal), a pre-checked Nutri Basics checklist, and a free-text meal log. ✅
- Food lists filtered by diet/allergies/conditions before display (§7.3); checking recalculates C3 in real time. ✅
- Phase food content seeded to
phase_food. ✅
Movement Log (§8) ✅
- Phase movement tips + a pre-checked checklist + free-text log; highest-intensity checked item drives C4 (+ C2 sub-metric). ✅
Edit Period (§9) ✅
- Log flow (droplets), emotes/mood-state, pain, digestion, cravings, skin, sleep, energy, and related fields →
daily_logs, feeding biomarkers. ✅ (real Figma emotes)
- Sex log → calendar star (protected/unprotected, private). 🟡
- Pattern recognition after 2 cycles → Progress insights (§9.5). ⬜
Edit Health / NutriGoals (§10) ✅
- View/edit allergies & conditions; NutriGoal locked until completed_cycles ≥ 2 (§10.2), written to
users.nutrigoal / allergies / health_conditions. ✅
Notification Center (§ live feed) ✅
- A live feed computed from real cycle/phase/logging state — phase tip, check-in nudge, today's score, milestones — reached via the 🔔 on the home header. ✅
Calendar (§11) ✅
- Today banner + phase pill + month grid with phase-colour dots, predicted period, legend, selected-day insight. ✅
- Cycle History year view + sex-log stars. 🟡
Progress (§12) ✅
- CAS summary + component breakdown, history, and cycle insights. ✅
- CSS donut + full CAS-history charts (by-phase bars, contributors) and biomarker snapshot depth. 🟡
Settings (§13) ✅
- Personal Information, Sign-in & Security, Data Privacy (JSON export + delete account), Community Privacy, Notifications & Reminders, Choose Your Nutri, App Preferences (units/week-start/haptics/appearance, saved on-device), Nutritional Preferences (diet type + allergies →
users). ✅
- 2FA / passkeys. ⬜ (intentionally deferred)
Personalisation engine (§3.9, §7.3, §16) ✅
- Dietary restrictions/allergies/conditions/NutriGoal filter and modulate food, movement, tip, and insight content at the data layer. ✅
Longitudinal intelligence (§6.3, §6.8, §9.5) 🟡
- After 3 full cycles, biomarker scoring switches from population norms to the user's own per-phase averages (
user_phase_averages). 🟡 (schema live; full switch-over logic pending)
3. Non-negotiable rules (§16) — guardrails/tests
- Phase determined before score; no
last_period_start_date → C1 = 0 and CAS blocked. ✅
- Never penalise aligned symptoms (low energy menstrual, high appetite luteal, fragmented sleep/variable mood late-luteal = full marks). ✅
- Checklists default checked; user unchecks what she didn't do. ✅
- Fitness opt-out → 10/20 passive. ✅
- NutriGoal locked 2 cycles. ✅
- All data user-scoped, RLS on every table. ✅
- Sex-log stars (protected/unprotected), calendar-only, private. 🟡
- CSS ≠ CAS — daily alignment vs cross-cycle stability. (documented; CSS depth post-MVP)
- Daily content changes every day within a phase (indexed by cycle_day). ✅
- Personalisation overrides phase defaults at the data layer. ✅
- Cycle-length personalisation (not fixed 28). ✅
- After 3 cycles → personal averages. 🟡
- BMR internal only — never show calories. ✅
- NutriGoal modulates every tip/insight/food. ✅
4. Module status summary
| Module |
Status |
| CAS engine + real-time recompute |
✅ |
| Onboarding (account → Nutri → cycle date → prefs → consent) |
✅ |
| Daily Mood & Energy gate |
✅ |
| Home / Cycle (phase ring, live Sync Score, 🔔) |
✅ |
| NutriLog (tips + checklist + meal log + C3) |
✅ |
| Movement Log (checklist + C4) |
✅ |
| Edit Period (emotes, flow, symptoms) |
✅ |
| Edit Health / NutriGoals |
✅ |
| Notification Center (live feed) |
✅ |
| Calendar (month grid, predictions) |
✅ |
| Progress (CAS summary + history) |
✅ |
| Settings (incl. App Prefs + Nutritional Prefs) |
✅ |
| Web app stitched to Supabase |
✅ |
| CI/CD (mobile OTA + web Pages) |
✅ |
| Sex-log stars / Cycle History year view |
🟡 |
| CSS donut + full CAS-history charts |
🟡 |
| Pattern recognition (2 cycles) / personal averages (3 cycles) |
🟡 |
| Full auth-record deletion (service-role Edge Function) |
⬜ |
| Consent / cookie layer |
⬜ |
| 2FA / passkeys |
⬜ (deferred) |
| Wearable connectors |
⬜ (roadmap 2028) |
5. Remaining work
Depth on existing screens: sex-log stars and the Cycle History year view; the CSS donut and full CAS-history charts (by-phase bars, contributors) on Progress; biomarker-snapshot depth.
Intelligence: pattern recognition after 2 cycles and the switch to personal per-phase averages after 3 cycles (user_phase_averages schema is live; the logic is pending).
Compliance: full auth-record deletion via a service-role Edge Function, and a formal consent/cookie layer. (JSON export, in-app delete, and RLS are already live.)
Deferred by design: 2FA / passkeys, and wearable connectors (native dev build, roadmap 2028).
6. Content & assets still needed from the team
- The full per-cycle-day content library (Daily Tip + Body Insight for days 1–28+, × NutriGoal) — clinically reviewed — to deepen the seeded content.
- Any remaining Nutri avatar / animation variants beyond those already integrated.
- Confirmation of CAS sub-metric edge values where the spec's worked example is illustrative (the engine computes deterministically from the published tables).