Roadmap β
Where UNDA is, what's next, and what we're not building yet. Updated: 2026-08-09.
Legend β
- β Shipped
- π§ In progress
- π Next up
- π Planned
- βΈοΈ Deferred / out of scope for now
Where we are β
UNDA is a cycle-aware workout tracker for iOS (Android after v1). Local-first by default, opt-in cloud sync (Phase 7), evidence-based phase-aware training recommendations, and privacy-first architecture.
Stack: Flutter (Dart), SQLite via sqflite_sqlcipher (AES-256 at rest), Riverpod, Cloudflare Pages for the OAuth redirect + this docs site.
Progress by phase β
Phase 0 β Design + prototype scaffold β β
- Product brief, UNDA visual system, 5-phase cycle model.
- Flutter skeleton, phase-prediction engine, recommender, workout library with sport-specific programming (road cycling, bouldering, running).
- Activity-import layer (
ActivityHistoryImporter) +ProfileInferenceServicethat proposes a personalised profile from imported activities.
Phase 1 β UNDA visual system β β
- Dark teal theme, Inter type via
google_fonts, outlined-button-first. - Today / Calendar / Plan / Insights / Settings screens.
- CustomPainter waveform driven by per-day phase energy.
- 3-step onboarding β welcome, age gate, health-consent, cycle length, last period.
Phase 2 β Persistence + Insights β β
- Schema v1:
profiles,cycle_days,cycles,workout_sessions. - Insights tab: symptoms per phase, sessions per phase, average felt score, recent sessions.
Phase 3 β Legal doc scaffolding β β
- Full
/docs/legal,/docs/privacy,/docs/security,/docs/evidence,/docs/producttree per Legal Rules Β§21.
Phase 4 β Compliance blockers B1βB4 β β
- B1 Delete all my data (Β§12.1).
- B2 Provenance tagging on sensitive rows (Β§9.3).
- B3 Uncertainty rendering β ovulation window, confidence chip, Β± days.
- B4 Algorithm-version + factor breakdown persisted per session (Β§9.7, Β§9.5).
Phase 5 β Compliance blockers B5βB10 β β
- B5 Versioned consent architecture (
consentstable, no bundling). - B6 18+ age gate with audit timestamp.
- B7 Recommender: phase becomes a weight, not a filter (Β§9.1).
- B8 Export ZIP β
UNDA-export-*.zipwith README, profile.json, cycle.csv, sessions.csv, consents.csv, integrations.json (Β§12.2). - B9 Privacy Center β Export / Manage consents / Delete account.
- B10 SQLCipher AES-256 encryption at rest with key in Keychain / EncryptedSharedPreferences.
All 10 Pre-Beta Gate blockers closed.
Phase 6 β Integrations β β
.icsand.fitexporters β structured workout steps render to spec-compliant Garmin FIT files and RFC 5545 calendar entries.- Apple Health / Health Connect β reads menstruation + workouts, writes completed sessions back (opt-in, separate WRITE permission).
- Strava OAuth β
--dart-defineclient credentials, HTTPS redirect via Cloudflare Pages, tokens in Keychain, activity fetch. - Intervals.icu β API-key auth, activity fetch, planned-workouts read for Today's suggestion override.
- Cross-provider dedup β same ride from Garmin β Strava β Intervals collapses to one row at read time (Β±5 min startedAt, Β±30 s duration, priority: intervals_icu > strava > apple_health).
- Sync service β 30-min throttle, refresh on app foreground, pull-to- refresh on Insights.
- In-app workout runner β full-screen countdown per step, up-next preview, pause / prev / skip, felt-score sheet on finish, auto-logs the session. Enabled only for indoor workouts (bodyweight / dumbbells / gym); outdoor endurance shows "Push to Garmin" as the primary action instead.
- Today's suggestion priority β already-trained today > Intervals-planned for today > UNDA recommender > no match.
In progress / next up β
π Phase 7 β Supabase sync + accounts β
- Cross-device sync for profile / cycle_days / workout_sessions / consents.
- Sign in with Apple + magic-link email via Supabase Auth.
- RLS policies keyed on
auth.uid()on every user-owned table. - Red-team CI test β assert user A can't read user B's rows.
- Delete-account propagates to remote + verified against backup rotation.
- Threat model updated for attackers A4 (MITM) and A5 (Supabase incident).
Blockers for starting Phase 7:
- User creates a Supabase project (EU region, free tier is fine).
- Signed DPA on file.
processors.mdentry filled in (Supabase + AWS as subprocessor).
π Garmin Connect integration β
- Requires Garmin developer partner approval β slow, needs a business entity + a written use case.
- Once approved: OAuth 2.0 flow similar to Strava, activity fetch, planned- workout push.
π Google Health Connect (Android) β
- Companion to Apple Health once we ship Android.
- Same read (menstruation + workouts) + write (completed sessions) pattern.
- Runtime permissions per category, incremental grants.
π Recommender v1.0.0 β
- Feed real signals into the recommender: today's subjective energy, recent felt-scores per phase, imported HRV / RHR / sleep from Health.
- "Recent felt-score in this phase" as a factor so historically-bad phases auto-downshift.
- Explainability panel: show per-factor contribution history over the last N recommendations so users understand how UNDA is learning.
π UX + content β
- More workouts in the library (currently 20+, aim for 60+).
- Rest-day interstitial explaining recovery is training.
- Copy pass across all screens β soften remaining "peak strength" language per the claims register.
- Notification scheduling (workout reminder, period countdown).
π Testing β
- Widget tests for onboarding + delete-all-my-data flows.
- Golden tests for Today / Calendar / Plan screens.
- Repository unit tests for schema migrations and dedup.
- CI (GitHub Actions): analyzer + tests on every push.
Pre-launch gates β
Pre-Beta Gate (Β§24) β
β All 10 engineering blockers closed. Still need before beta:
- Named security officer + real
security@mailbox. - Signed DPA with any cloud processor.
- DPIA completed (Data Protection Impact Assessment) or formal applicability decision documented.
- Incident-response tabletop exercise run once.
Pre-Public-Launch Gate (Β§25) β
Beyond the beta gate:
- Final Privacy Policy, Terms of Service, Spanish Legal Notice (LSSI).
- Cookie/tracker consent for the web app.
- Trademark clearance for "UNDA".
- App Store privacy declarations completed.
- Google Play Health Apps declaration completed.
- MDR medical-device boundary reviewed by counsel.
- CRA applicability + reporting process reviewed.
- AI Act assessment if any AI features have shipped.
- Retention automation active (rolling deletion jobs).
- End-to-end user export + deletion verified.
What we're deliberately NOT doing β
- βΈοΈ Fertility / pregnancy tracking β out of scope for v1. Different regulatory posture; would need a separate assessment before any code.
- βΈοΈ AI coach / LLM features β no in-app AI in v1. If added later, needs Β§11 review (no health data to third-party LLMs without approval).
- βΈοΈ Ads / analytics β no product analytics wired at all today. When we add any, the event allowlist is enforced by review.
- βΈοΈ Social / sharing β no follows, no cycle sharing between users. Not on the roadmap.
- βΈοΈ Wearable direct BLE β we integrate via HealthKit / Health Connect, not directly with device Bluetooth.
- βΈοΈ Under-18 version β UNDA v1 is 18+. A minors' product needs a separate legal, privacy, and safeguarding assessment first.
Non-negotiable engineering rules β
From /legal/UNDA_LEGAL_ENGINEERING_RULES:
- No sensitive health data in generic analytics.
- No sensitive health data in generic logs.
- No production health data in development.
- Explicit provenance on every data point.
- Predictions are not facts.
- Fitness guidance, not diagnosis.
- Every recommendation is versioned.
- Data must be deletable.
- Data must have a purpose.
- Third-party data sharing requires review.
- Least privilege.
- Consent is versioned.
Every PR touching personal-data handling runs through the Β§22 checklist.