Flutter ⇄ Web feature parity
Tracking the migration of the web app’s full feature set into the Flutter
app. Backend (/v1 NestJS) + Supabase migrations are shared and already
deployed — this is a client-only effort. Auth (sign in / up / forgot) is
kept as-is. New screens use OSM (flutter_map) + liquid-glass
(cupertino_native) + Cupertino controls, styled to match the web TripViz
look (bg #0b1020, card #121a33, accents indigo/emerald/rose).
Already in Flutter (reuse)
Section titled “Already in Flutter (reuse)”| Area | Status |
|---|---|
| Auth (sign in/up/forgot/splash) | ✅ keep |
| Trips list + detail | ✅ |
| Trip map (OSM, day deck, animated markers, route, edge markers, media carousel, compare) | ✅ |
| Import wizard + review + drafts | ✅ |
| AI chat tab | ✅ |
| Members + roles + invites (repo + sheet + accept page) | ✅ partial |
| Notifications + FCM | ✅ partial |
| Discover / itineraries | ✅ |
Design system (tokens, cupertino_native shell, components) | ✅ |
Parity gap (this session’s web features → to build)
Section titled “Parity gap (this session’s web features → to build)”| Feature | Phase | Backend ready |
|---|---|---|
| Liquid-glass UI alignment to web palette/markers | FP1 | n/a |
| Plan a day (AI day + nearby rated places) | FP2 | ✅ /places/nearby, day-pinned commit |
| Plan together — board: suggest/vote/comment/accept/dismiss | FP3 | ✅ planner endpoints (0027) |
| Planner realtime + presence | FP4 | ✅ Supabase Realtime |
| ”Worth exploring” discovery markers + categories | FP4 | ✅ /places/nearby |
| Reel/screenshot → suggestions | FP4 | ✅ imports pipeline |
| Collaborators panel (roster + roles + invite link) | FP4 | ✅ members/invites |
| Unplanned section (date-less activities) | FP5 | ✅ unscheduled |
Planner notifications (suggestion_new/accepted) + clear | FP5 | ✅ (0029 cutoff) |
| In-app Guide | FP5 | n/a |
| Date-edit duration meaning + Fix pins parity | FP5 | ✅ (0028) |
Phases (each: build → dart analyze clean → Maestro smoke on sim → commit)
Section titled “Phases (each: build → dart analyze clean → Maestro smoke on sim → commit)”- FP0 harness — Maestro + Dart MCP, simulator boot, this audit
- FP1 liquid-glass UI alignment
- FP2 Plan a day
- FP3 Plan together (core board + voting + accept)
- FP4 realtime + discovery + collaborators + reel→suggest
- FP5 Unplanned + notifications + Guide + date UX
- FP6 final gate (Maestro flows + Dart MCP analyze/runtime + walkthrough)
Local run (simulator)
Section titled “Local run (simulator)”fvm flutter run -d <ios-sim-id> \ --dart-define=SUPABASE_URL=http://127.0.0.1:55321 \ --dart-define=SUPABASE_ANON_KEY=<local-anon> \ --dart-define=API_BASE_URL=http://127.0.0.1:3000/v1Test account: [email protected]. Maestro flows live in .maestro/.