NutriSync — Design Review & Operational-Readiness Checklist
A review of the NutriSync design and the current shipped product, as of July 2026. When this checklist was first written, NutriSync was a Figma prototype with an open list of everything needed to make it real. That list is now mostly closed: the app is built and operational on Supabase, the screen set is effectively 1:1 with the Figma prototype, and the CAS (Cycle Alignment Score) engine runs on live data. This document therefore covers three things — what the design contains, what remains to make the product fully operational, and the short list of true blockers that are left.
Part 1 — Design review
1.1 Screens — Figma design and the shipped app
The mobile app now implements essentially the full Figma prototype. Below is the shipped screen set, all functional on live Supabase data:
| Area |
Screens / states (shipped) |
| Onboarding |
Welcome → Auth (sign up / sign in) → multi-step Wizard (persists to users + cycles) |
| Daily gate |
"Before we Sync" mood/energy gate (shows once per day) |
| Cycle (home) |
Phase ring + week strip + live Sync Score; 🔔 header entry to the Notification Center; edit period / edit health entries |
| NutriLog |
Daily Tip / Body Insight, per-phase tip card, Nutri Basics nutrient list, Today's Meal log, full Nutri Basics library |
| Movement Log |
Per-phase movement tips (menstrual / follicular / ovulatory / luteal) |
| Progress |
Cycle Alignment Score (current/last/best), volatility/aligned, weekly/monthly/yearly tabs, score-by-phase charts, top positive contributors / areas to improve |
| Calendar |
Phase-coloured month grid |
| Edit Period |
Real Figma emotes, flow droplets, symptom logging → daily_logs |
| Edit Health / Health Profile |
NutriGoal carousel (locked until 2 full cycles), Allergies chips, Health Conditions chips → users.nutrigoal / allergies / health_conditions |
| Notification Center |
Live feed computed from real cycle/phase/logging state — phase tip, check-in nudge, today's score, milestones |
| Settings |
Hub + 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) |
Visual polish shipped: the official Figma NutriBubble orb appears throughout, an animated branded "looking-around" loading screen, and real Figma emotes across period/symptom logging.
The screen set is now effectively 1:1 with the Figma prototype. Two known non-Figma gaps are intentionally deferred: wearable connectors (native-build only) and 2FA/passkeys.
1.2 Design system observations
- Per-phase colour system (core brand IP): menstrual
#E8472A, follicular #6B9E6B, ovulatory #D4A017, luteal #7B5EA7. Brand orange #FF5509; the orb gradient runs #FF9269 → #FF5509. Font is Poppins throughout. These are first-class tokens shared across web and React Native.
- Scoring names, resolved: the home "Sync Score" and the Progress "Cycle Alignment Score" are the same metric — the CAS — surfaced in two contexts. The naming is now consistent around CAS.
- Rich data-viz: rings, line/area charts, horizontal bars, contributor tags — all wired to real
daily_scores and phase-average data.
- Phase model:
cycleDay = today − last_period_start + 1, wrapped to cycle length; 5 internal phases (menstrual, follicular, ovulatory, early_luteal, late_luteal) collapse to 4 display phases (Menstrual, Follicular, Ovulatory, Luteal).
1.3 Strengths
- Cohesive, warm, distinctive brand; the per-phase colour language is a strong, defensible differentiator.
- Genuinely useful, science-led IA (cycle-synced nutrition + movement + scoring), now realised end-to-end on live data.
- Privacy instincts baked in: JSON export and in-app delete ship in the Data Privacy screen; RLS scopes every row to the signed-in user.
1.4 Remaining design refinements
Most original design gaps are resolved by the shipped build. What is worth continuing to polish:
- Empty / error / loading / offline states — verify coverage across every screen (the branded loading screen is in place; confirm no-data and failure states everywhere).
- Accessibility — verify text contrast on the coral/gradient surfaces (WCAG AA), min 44px touch targets, dynamic type, and that phase meaning is never conveyed by colour alone (pair colour with labels/icons).
- Localization — Switzerland + Spain launch implies EN/ES (and likely DE/FR for CH); design for longer strings.
- Content finalization — replace any remaining placeholder names/tips with finalized, clinically-reviewed content (advisor: Constanza Ramirez Milli).
- Edge cases — confirm behaviour for very long, irregular, contraceptive, pregnancy/menopause cycles in the phase logic and CAS.
Part 2 — What's needed to make the app fully operational
The headline has changed: the app is built and live on Supabase, so most of this section is done. Below, each area shows what is shipped and what remains. Items marked [BLOCKER] are the few things still gating a broader, compliant launch.
2.1 Design assets & specs — mostly done
- ✅ Phase colour tokens, Poppins type, orb gradient, official NutriBubble orb, emotes — all in the shipped app.
- ✅ Score definitions resolved (Sync == Alignment == CAS).
- Remaining: full empty/error/offline coverage, an accessibility pass, and responsive/web adaptations (the web app already runs; continue refining parity with mobile).
2.2 Product / algorithm specs (the IP) — done
- ✅ CAS spec, implemented and tested. The Cycle Alignment Score is 0–100 across 5 weighted components: C1 Phase Confidence (15) · C2 Biomarkers (25) · C3 Nutrition (30) · C4 Fitness (20) · C5 Logging (10). It lives in
src/lib/cas.ts (ported from packages/core/cas.mjs, 34 tests) and recomputes in real time as the user logs, writing daily_scores.
- ✅ Phase model spec implemented (see 1.2).
- Remaining as roadmap: the recommendation logic behind a future
/recommendations contract (rules for MVP → Apertus AI later), and a fuller clinically-reviewed content library with macros + sources.
2.3 Backend & data — done on Supabase (Phase 1)
- ✅ Auth & accounts, sessions, security — Supabase Auth with email sign-up/sign-in and session routing on both mobile and web.
- ✅ Database schema live — Postgres with 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).
- ✅ Per-user isolation — Row-Level Security scopes every row to
auth.uid(). The anon/publishable key is public and safe; the service_role key never ships client-side.
- ✅ Score computation + history — CAS writes
daily_scores, feeding the Progress charts.
- ✅ DSAR foundations — JSON export and in-app data deletion both work.
- [BLOCKER] Remaining: full auth-record deletion via a service-role Edge Function — in-app data delete works, but purging the underlying Supabase Auth identity needs a server-side function holding the
service_role key.
- [BLOCKER] Remaining: the consent / cookie layer on the web entry point.
- Roadmap: the AWS secure data zone (encrypted, private-subnet) for B2B scale — Epic A. Phase-1 region is EU.
- Ops note: keep "Confirm email" turned OFF in Supabase Auth so signup completes end-to-end.
2.4 Integrations — roadmap
- Payments/subscriptions (RevenueCat) for free vs premium gating + B2B seats.
- EU analytics feeding the admin console.
- Health/wearable connectors — Epic E, consent-gated, needs a native build (roadmap 2028).
- Transactional email + waitlist, error tracking (Sentry), push (Expo/FCM/APNs).
- Apertus AI integration (hosting, residency, latency, cost) — decision required.
2.5 Mobile app build / release — pipeline done, distribution pending
- ✅ EAS Update OTA pipeline live — repo
githubjuanjose/nutrisync-app; every push runs eas update --branch production, so installed builds refresh over-the-air.
- ✅ Charting wired; IA aligned to the Figma; signature screens built with per-phase colours.
- [BLOCKER] Remaining: paid Apple Developer Program ($99/yr) enrollment to unlock TestFlight. Meanwhile, the Android APK path (
eas build --profile preview --platform android) needs no paid account and produces a shareable link/QR for the Madrid testers.
- Later: Google Play ($25) listing, store privacy nutrition labels, data-safety form.
2.6 Web build / release — mostly done
- ✅ Unified web entry point live — marketing + web app + gated hub on the Cloudflare Pages project
nutrisync-collective (Epic F).
- ✅ CI/CD GitHub → prod live — repo
githubjuanjose/nutrisync-web; every push to main deploys via wrangler to Cloudflare Pages (Epic B).
- ✅ Protected business-case site — gated hub live (Epic H); the Cloudflare Access email whitelist was removed and is re-addable.
- Remaining: wire the admin/MIS console (Epic G) to live data — the page exists but is static/mock.
- Cleanup: a leftover dev "bundler error" overlay is hidden in production via
#__bundler_err{display:none}; the durable fix is to strip it in the Design export.
2.7 Legal, compliance & content — the main remaining track
- [BLOCKER] GDPR + Swiss FADP pack: DPIA, Records of Processing, privacy policy, terms, cookie/consent layer, DPAs with processors.
- Medical disclaimer + positioning (wellness, not medical device), reviewed by counsel.
- Clinical review sign-off on all phase/nutrition/movement content (advisor: Constanza Ramirez Milli).
- App-store compliance (health-data handling, sensitive-permission justifications).
- Localization EN/ES (+ DE/FR for CH).
2.8 Operations — roadmap (with AWS scale-up)
- Observability, alerting, on-call, incident runbook, DR drill — Epic I.
- Support workflow + feedback handling (the Send Feedback surface exists).
- Pilot instrumentation for employer/university/clinic programs (per GTM).
Part 3 — Top remaining blockers to "fully operational"
The heavy IP and build blockers from the original list — the CAS/phase algorithms, the signature screens, auth, the data schema, the CI/CD and unified web entry — are done. What remains is a short, tractable list:
- Paid Apple Developer Program enrollment ($99/yr) — required for TestFlight; a free Apple account has no "team" and cannot sign or distribute iOS builds. (Android APK distribution to the Madrid testers is unblocked and needs no paid account.)
- Full auth-record deletion — ship the service-role Edge Function so account deletion purges the Supabase Auth identity, not just the in-app data (which already deletes).
- Consent / cookie layer — add the privacy-first cookie/consent banner and consent capture on the web entry point (part of the GDPR/FADP pack).
- Wire the admin console — connect the existing static MIS/KPI page (Epic G) to live analytics behind Cloudflare Zero Trust.
- AWS migration for scale — Epics A/C/I: the secure data zone and containerized backend, triggered when B2B (employer/university/clinic) scale and residency obligations demand it. Not a prerequisite for the current pilot.
Everything else (wearable connectors, payments, the full localization and legal pack) layers on top of these and is tracked in 03-Platform-Backlog.md / backlog.csv.