Skip to content

Progress Tracker

As of Mobile release P1 Planner P2 Tracker P3 AI ingest P4 People P5 Marketplace Deploy

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



%%{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 statusDriving spec
P1 — Trip planner🟡 90%0001 M1–M9
P2 — Trip tracker (live mode)✅ live0001 M9
P3 — AI ingest🟡 ~55%0003, 0004
P4 — People (communities)🟡 ~15%travelers/invites shipped; communities to draft
P5 — Marketplace⚪ nonespecs 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.


Milestones M1–M11 · 9 of 11 shipped
MSliceStatusNotes
M1Skeleton & Trip CRUD0001_trips.sql, NestJS trips module, mobile UI
M2Multi-destination + day timeline + tz0002_destinations.sql, destination editor sheet
M3Activities CRUD + drag reorder0003_activities.sql, activity editor sheet
M4Cost rollup + traveller split0004_currency.sql, cost summary card
M5Map view (per-day + per-trip)flutter_map + OSM (trip_map_page.dart)
M6Attachments (photos + URLs)0005_attachments_links.sql, attachments sheet
M7Offline-first + sync enginelocal cache + SyncChip; last-write-wins
M8Privacy + share link0006_share_links.sql, share link sheet
M9Live mode + mark done + drift_LiveModeToggle + activity status pills
M10Recap + duplicate/templates + search + ICSnot started
M11Hardening, 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.

Shipped end-to-end.

Where it lives (click to expand)
SurfacePath
Workers — PDF / image / blog parsersapps/workers/src/treeper_workers/ai/parsers/
Workers — Realtime job subscriberapps/workers/src/treeper_workers/ai/realtime.py
Backend — sign upload, create, commitapps/backend/src/imports/
DB — imports + sources tablesmigrations 0007, 0009, 0010
Mobile — picker / sheets / review / retryapps/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.

Slices v0.1 – v1 · 6 of 7 shipped
SliceStatusWhat landed
v0.1Migration 0011, worker pipeline (treeper_workers/itinerary/),
NestJS API surface, mobile Discover search page
v0.2Mobile results list + ItineraryCard + deep-link to detail
v0.3Job-status polling for streamed-in itineraries
v0.4Migration 0012 + Supabase Realtime row updates replace polling
v0.5SearXNG provider (SearXNGSearchProvider), default off Brave —
free self-hosted meta-search via Coolify service
v0.6GET /itineraries/recent endpoint + mobile Discover integration
(recent(limit) in ItinerariesRepository)
v0.7Hero + activity image extraction + rehost
(image_extract.py, images.py, migration 0013, richer schema)
v1Source allowlist toggle, quality scoring, auto-refresh,
url_launcher on source pills

Milestones M1 – M7 · M1 in progress
SliceStatusWhat 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.
M2Import (reel/URL/PDF/image) via POST /v1/trips/:id/imports → poll → commit
M3Discovery via POST /v1/itineraries/search + clone-into-trip
M4Trip/day/activity CRUD (edit)
M5Attachment carousels + signed-URL uploads; links
M6Public share-link view (GET /v1/s/:slug)
M7Coolify deploy at app.itssatya.in

See features/0013-web-frontend.md, ADR-0009.


ItemStatusLives in
Root shell — 4-tab PageViewapps/mobile/lib/features/shell/
Trip detail shell — 4-tab PageViewapps/mobile/lib/features/trips/view/trip_detail_page.dart
Design system — base componentsapps/mobile/lib/design_system/components/
AppTransitCard componentapps/mobile/lib/design_system/components/app_transit_card.dart
Lucide icons across nav + trip detail headerlucide_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 pillapps/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)
ItemStatusLives in
JWT auth dispatcher (HS256 + ES256/RS256 via JWKS)apps/backend/src/auth/supabase-jwt.strategy.ts
GET /itineraries/recent endpointapps/backend/src/itineraries/itineraries.controller.ts
LiteLLM self-hosted proxy replaces OpenRouter defaultLITELLM_BASE_URL, LITELLM_API_KEY in workers config.py
Vision: MIME detection from magic bytesapps/workers/src/treeper_workers/ai/llm.py
Itinerary hero + activity images (extract + rehost)image_extract.py, images.py, migration 0013

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
SurfaceWhere
End-to-end runbookinfra/coolify/DEPLOY.md
Self-host Supabase on Coolifyone-click service · DEPLOY §1
Backend + workers + SearXNG appsDockerfile build pack, watch paths split by apps/**
Migrator container (joins Supabase net)docker-compose.migrator.yml
Auto-deploy on pushCoolify GitHub App (no GH Actions cost)
Manual migration escape hatchscripts/deploy/apply_migrations.sh

  • Mobile releasemobile-release-v1.0.1 tagged 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_launcher on 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.
  1. Production scrape volume sizing — does SearXNG hold up at 100+ queries/day, or do we need a Brave-paid fallback when it 429s?
  2. Source allowlist policy for spec 0004 v1 — curated start vs community-flagged.
  3. ADR for LLM gateway choice — LiteLLM is now the default; we should record the trade-off vs OpenRouter explicitly.
  4. Move v0 trip cap from “unlimited” to “soft cap with usage hint” before beta — covered in M11.

  • 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.