Progress Tracker
Single dashboard for “what’s done, what’s in flight, what’s next.”
Pairs with roadmap.md (sequencing) and the spec files
in features/ (what + why).
Maintained by hand. Update on every shipped slice.
Status legend: ✅ Shipped · 🟡 In progress · ⚪ Planned · ⛔ Blocked
Contents
Section titled “Contents”- Snapshot
- Spec 0001 — Trip Planner & Live Tracker
- Spec 0003 — Trip Imports
- Spec 0004 — Itinerary Finder
- Cross-cutting deliveries
- Infra & deploy
- Active threads
- Next decisions
- How this file stays honest
Snapshot
Section titled “Snapshot”%%{init: {'theme': 'base', 'themeVariables': {'primaryColor':'#C5E04A'}}}%%pie showData title v0 progress by pillar "P1 Planner (90%)" : 90 "P2 Tracker (100%)" : 100 "P3 AI ingest (55%)" : 55 "P4 People (15%)" : 15 "P5 Marketplace (0%)" : 0| Pillar (PRODUCT.md §3) | v0 status | Driving spec |
|---|---|---|
| P1 — Trip planner | 🟡 90% | 0001 M1–M9 |
| P2 — Trip tracker (live mode) | ✅ live | 0001 M9 |
| P3 — AI ingest | 🟡 ~55% | 0003, 0004 |
| P4 — People (communities) | 🟡 ~15% | travelers/invites shipped; communities to draft |
| P5 — Marketplace | ⚪ none | specs 0008/0009 not yet drafted |
Headline: Trip planner + tracker shipped. AI ingest pillar covers
PDF/image/blog (0003) and live web discovery (0004); the latter now
runs on free self-hosted SearXNG and exposes a recent-itineraries
endpoint. Mobile shell + design system completed a polish pass
(lucide icons, FAB-style +, Notifications tab, Profile route, trip
detail rework). Production stack live on Coolify — Supabase,
backend, workers, migrator, SearXNG all running, deploy on git push.
Mobile tagged at mobile-release-v1.0.1.
Spec 0001 — Trip Planner & Live Tracker
Section titled “Spec 0001 — Trip Planner & Live Tracker”Milestones M1–M11 · 9 of 11 shipped
| M | Slice | Status | Notes |
|---|---|---|---|
| M1 | Skeleton & Trip CRUD | ✅ | 0001_trips.sql, NestJS trips module, mobile UI |
| M2 | Multi-destination + day timeline + tz | ✅ | 0002_destinations.sql, destination editor sheet |
| M3 | Activities CRUD + drag reorder | ✅ | 0003_activities.sql, activity editor sheet |
| M4 | Cost rollup + traveller split | ✅ | 0004_currency.sql, cost summary card |
| M5 | Map view (per-day + per-trip) | ✅ | flutter_map + OSM (trip_map_page.dart) |
| M6 | Attachments (photos + URLs) | ✅ | 0005_attachments_links.sql, attachments sheet |
| M7 | Offline-first + sync engine | ✅ | local cache + SyncChip; last-write-wins |
| M8 | Privacy + share link | ✅ | 0006_share_links.sql, share link sheet |
| M9 | Live mode + mark done + drift | ✅ | _LiveModeToggle + activity status pills |
| M10 | Recap + duplicate/templates + search + ICS | ⚪ | not started |
| M11 | Hardening, hard-delete worker, beta cut | 🟡 | members/invites slice shipped early; rest pending |
Out of sequence (M11 sub-slice): travelers — members, invites, deep-link accept (
0008_travelers.sql+ invites/members modules
members_sheet.dart). Shipped early because spec 0003 needed share-with-collaborators.
Spec 0003 — Trip Imports
Section titled “Spec 0003 — Trip Imports”✅ Shipped end-to-end.
Where it lives (click to expand)
| Surface | Path |
|---|---|
| Workers — PDF / image / blog parsers | apps/workers/src/treeper_workers/ai/parsers/ |
| Workers — Realtime job subscriber | apps/workers/src/treeper_workers/ai/realtime.py |
| Backend — sign upload, create, commit | apps/backend/src/imports/ |
| DB — imports + sources tables | migrations 0007, 0009, 0010 |
| Mobile — picker / sheets / review / retry | apps/mobile/lib/features/trips/view/import_*.dart |
Polish backlog (not blocking GA):
- Reels / YouTube / TikTok variants → spec 0005 (to be drafted).
- Per-source quality scoring.
Spec 0004 — Itinerary Finder
Section titled “Spec 0004 — Itinerary Finder”Slices v0.1 – v1 · 6 of 7 shipped
| Slice | Status | What landed |
|---|---|---|
| v0.1 | ✅ | Migration 0011, worker pipeline (treeper_workers/itinerary/), |
| NestJS API surface, mobile Discover search page | ||
| v0.2 | ✅ | Mobile results list + ItineraryCard + deep-link to detail |
| v0.3 | ✅ | Job-status polling for streamed-in itineraries |
| v0.4 | ✅ | Migration 0012 + Supabase Realtime row updates replace polling |
| v0.5 | ✅ | SearXNG provider (SearXNGSearchProvider), default off Brave — |
| free self-hosted meta-search via Coolify service | ||
| v0.6 | ✅ | GET /itineraries/recent endpoint + mobile Discover integration |
(recent(limit) in ItinerariesRepository) | ||
| v0.7 | ✅ | Hero + activity image extraction + rehost |
(image_extract.py, images.py, migration 0013, richer schema) | ||
| v1 | ⚪ | Source allowlist toggle, quality scoring, auto-refresh, |
url_launcher on source pills |
Spec 0013 — Web frontend (apps/web)
Section titled “Spec 0013 — Web frontend (apps/web)”Milestones M1 – M7 · M1 in progress
| Slice | Status | What landed |
|---|---|---|
| M1 | 🟡 | apps/web (Vite+React+TS) + packages/contracts; Supabase auth gate; /v1 API client (bearer); trips/days/activities rendered on MapLibre (markers by kind, swipe day cards, per-day route, multi-trip switch + compare); backend CORS (CORS_ORIGINS). Auth-gate + build verified in-sandbox; live login→render pending treeper creds. |
| M2 | ⚪ | Import (reel/URL/PDF/image) via POST /v1/trips/:id/imports → poll → commit |
| M3 | ⚪ | Discovery via POST /v1/itineraries/search + clone-into-trip |
| M4 | ⚪ | Trip/day/activity CRUD (edit) |
| M5 | ⚪ | Attachment carousels + signed-URL uploads; links |
| M6 | ⚪ | Public share-link view (GET /v1/s/:slug) |
| M7 | ⚪ | Coolify deploy at app.itssatya.in |
Cross-cutting deliveries (no own spec)
Section titled “Cross-cutting deliveries (no own spec)”Mobile shell / design system
Section titled “Mobile shell / design system”| Item | Status | Lives in |
|---|---|---|
| Root shell — 4-tab PageView | ✅ | apps/mobile/lib/features/shell/ |
| Trip detail shell — 4-tab PageView | ✅ | apps/mobile/lib/features/trips/view/trip_detail_page.dart |
| Design system — base components | ✅ | apps/mobile/lib/design_system/components/ |
AppTransitCard component | ✅ | apps/mobile/lib/design_system/components/app_transit_card.dart |
| Lucide icons across nav + trip detail header | ✅ | lucide_icons in pubspec.yaml |
| Highlighted FAB-style center ”+” in bottom nav | ✅ | _HighlightedNavItem in app_bottom_nav.dart |
| Notifications tab (4th shell slot, placeholder) | ✅ | apps/mobile/lib/features/notifications/ |
| Profile as standalone route (was tab) | ✅ | apps/mobile/lib/features/profile/view/profile_page.dart |
| Home top-bar greeting + tall search pill | ✅ | apps/mobile/lib/features/home/view/home_page.dart |
| Trip detail header → AppCircleIconButton + safe back | ✅ | _onBack helper in trip_detail_page.dart |
| No-flash multi-step tab jumps (shell + trip detail) | ✅ | jumpToPage when ` |
/dev/showcase reachable via Profile (debug only) | ✅ |
Backend / workers
Section titled “Backend / workers”| Item | Status | Lives in |
|---|---|---|
| JWT auth dispatcher (HS256 + ES256/RS256 via JWKS) | ✅ | apps/backend/src/auth/supabase-jwt.strategy.ts |
GET /itineraries/recent endpoint | ✅ | apps/backend/src/itineraries/itineraries.controller.ts |
| LiteLLM self-hosted proxy replaces OpenRouter default | ✅ | LITELLM_BASE_URL, LITELLM_API_KEY in workers config.py |
| Vision: MIME detection from magic bytes | ✅ | apps/workers/src/treeper_workers/ai/llm.py |
| Itinerary hero + activity images (extract + rehost) | ✅ | image_extract.py, images.py, migration 0013 |
Infra & deploy
Section titled “Infra & deploy”✅ Production stack live on Coolify at *.itssatya.in.
flowchart LR push["git push main"] --> coolify["Coolify GitHub App"] coolify --> SB["Supabase service<br/>(supabase-treeper)"] coolify --> M["treeper-migrator<br/>(compose · joins SB net)"] coolify --> BE["Backend<br/>(api-treeper)"] coolify --> WK["Workers<br/>(workers-treeper)"] coolify --> SX["SearXNG<br/>(service)"] M -->|"plain psql + ledger"| SB BE -->|"HTTPS + JWT"| SB WK -->|"service-role"| SB WK -->|"search"| SX
classDef done fill:#C5E04A,stroke:#13251A; class SB,M,BE,WK,SX done| Surface | Where |
|---|---|
| End-to-end runbook | infra/coolify/DEPLOY.md |
| Self-host Supabase on Coolify | one-click service · DEPLOY §1 |
| Backend + workers + SearXNG apps | Dockerfile build pack, watch paths split by apps/** |
| Migrator container (joins Supabase net) | docker-compose.migrator.yml |
| Auto-deploy on push | Coolify GitHub App (no GH Actions cost) |
| Manual migration escape hatch | scripts/deploy/apply_migrations.sh |
Active threads (this week)
Section titled “Active threads (this week)”- Mobile release —
mobile-release-v1.0.1tagged with the polish batch (lucide nav, FAB-style +, Notifications tab, Profile route, trip detail rework, no-flash multi-step jumps). - Spec 0004 v1 — source allowlist toggle, quality scoring,
url_launcheron source pills. - Spec 0001 M10 — design notes + first slice scoping (recap + duplicate trip; search + ICS to follow).
- Spec 0005 reels ingest — scope draft pending; depends on Whisper + reel scraper choice.
Next decisions needed
Section titled “Next decisions needed”- Production scrape volume sizing — does SearXNG hold up at 100+ queries/day, or do we need a Brave-paid fallback when it 429s?
- Source allowlist policy for spec 0004 v1 — curated start vs community-flagged.
- ADR for LLM gateway choice — LiteLLM is now the default; we should record the trade-off vs OpenRouter explicitly.
- Move v0 trip cap from “unlimited” to “soft cap with usage hint” before beta — covered in M11.
How this file stays honest
Section titled “How this file stays honest”- Update on every spec slice you ship (commit message + this row).
- Don’t predict dates here — sequencing belongs in
roadmap.md, reality belongs here. - When a spec finishes, drop its detailed table and leave a one-line link to the spec file. Keep this dashboard at-a-glance.