Skip to content

Ideony — Roadmap

Explanation — forward-looking phases and milestones


MVP 0 — v0 Launch. Core marketplace (booking + SOS) is feature-complete and test-covered; active sprint is UX/UI Realignment to reach Italian Sole quality bar before first external demo. See status.md for exact in-flight tasks.


Active Initiative — UX/UI Realignment (2026-04-21+)

Section titled “Active Initiative — UX/UI Realignment (2026-04-21+)”
Sub-phaseStatusScope
M0 — Design tokens + fontsDoneItalian Sole palette, Gambarino + Switzer, Gluestack tokens
Phase A — Auth screensSpec lockedWelcome tour, Sign-in, Sign-up, OTP polish
Phase C — Consumer flowIn progressSole token sweep done (A4–A7); Home hero map + real-time presence done (B18+B26); chat attach (B22); GPS+Mapbox autocomplete (B30); image upload web fix (B29); HARDEN revert done. Remaining: Search, Results, Pro Profile polish
Phase B — Pro flowQueuedPro Dashboard, Availability, Earnings, SOS Accept
Phase D — Navigation chromeDone (PR #17)Tab bars, headers, bottom sheets

Locked decisions (2026-04-21)

  • Typography: Gambarino (display/serif) + Switzer (body/sans) — replaces Plus Jakarta Sans
  • Color palette: Italian Sole — Terracotta #B35F3B primary, Olive #6E7F3C trust, Cream #FAF6EE bg, Sun amber #E89059 accent, Dark ink #2B1E10 text
  • Map provider: @rnmapbox/maps + Mapbox APIs (Day 1, 2026-04-19) — replaces react-native-maps + Google Maps
  • Auth flow: Clerk identifier-first unified sign-in/sign-up
  • Live tracking: Tier 2 (post-MVP 0) — Socket.IO foundation built, full polish deferred
  • Pro nav: OS deep-link via Expo Router, no custom bottom-sheet nav

MilestoneStatusNotes
FoundationDoneMonorepo (Turborepo + pnpm), DB schema, Clerk auth, core NestJS modules
API CoreDoneBooking, SOS, Chat, Reviews, Payments, Notifications, AI, Credentials
InfrastructureDoneDocker, Hetzner CAX11, Dokploy, CI/CD (GH Actions), Sentry, Cloudflare R2
Test SuiteDone195 unit + 45 E2E + 122 Playwright — green on CI; demo seed (pnpm seed:demo) added for cofounder walkthrough
External IntegrationsPartialClerk + Stripe verified; Novu multi-channel pending full smoke test
Mobile AppDoneExpo SDK 55 + React Native — all core screens built
Production PolishDonei18n (IT+EN), BullMQ notifications, security headers, design system M0

  • Turborepo monorepo, pnpm workspaces, Biome lint, Husky pre-commit
  • NestJS 11 + Fastify + SWC + Prisma 7 + PostgreSQL 18 + PostGIS
  • Clerk JWT verification, svix webhook, RBAC (CONSUMER / PROFESSIONAL / ADMIN)
  • packages/types, packages/validators (Zod), packages/api-client shared packages
  • Docker Compose local stack (Postgres, Redis, MinIO, Mailpit)
  • BookingModule: create, confirm, cancel, lifecycle state machine
  • SOSModule: request, candidate matching (PostGIS radius), accept/decline
  • ChatModule: Socket.IO real-time messaging, message history
  • ReviewsModule: create, display, rating aggregate
  • ProfessionalModule: profile, availability slots, search (text + category)
  • AvailabilityModule: weekly schedule, slot generation, conflict checks
  • Stripe Connect Express: onboarding, PaymentIntent, escrow, payout, refund
  • Stripe webhooks: signature verification via raw body
  • Novu Cloud EU: 6 workflow templates (booking confirmed/cancelled/reminder, review request, SOS matched, chat message)
  • Novu → Resend (email) + Twilio (SMS) + Expo Push channels
  • BullMQ queues: notification-worker, reminder-worker, webhook-worker
  • Hetzner CAX11 ARM64, Dokploy container management, Docker blue-green deploy
  • GH Actions: lint → typecheck → build → unit tests → SAST → deploy → Trivy → smoke
  • Sentry: @sentry/nestjs (BE) + @sentry/react-native (FE)
  • Cloudflare R2 storage (S3-compatible), MinIO for local dev
  • Cloudflare Quick Tunnels (interim); named tunnel ideony-prod on ideony.is-a.dev (pending)
  • Expo Router 5 file-based routing, tab groups (consumer)/ + (professional)/
  • All core screens: Home, Search, Results, Pro Profile, Book, Booking Detail, Chat, Review, SOS, Pro Dashboard, Availability, Earnings, Settings
  • @clerk/clerk-expo auth — welcome tour + social login (Google/Apple/Facebook) + email OTP
  • @stripe/stripe-react-native payment sheet
  • react-native-reanimated 60fps animations + Lottie illustrations
  • TanStack Query (server state) + Zustand (client state) + Context (auth)
  • Gluestack UI v3 (NativeWind, copy-paste) + Phosphor Icons (duotone)
  • Italian Sole design tokens: palette, typography scale, spacing, border-radius
  • Gambarino + Switzer font loading via lib/fonts.ts
  • packages/design-tokens shared token package
  • 195 unit tests: services, repositories, controllers, guards
  • 45 E2E tests: booking lifecycle, SOS flow, auth, payments
  • 122 Playwright tests: mobile web smoke tests
  • Turborepo remote cache (Vercel) for CI speed
  • E2E JWT via Clerk BAPI session creation (no FAPI rate limits)
  • @fastify/helmet security headers
  • Zod global validation pipe (createZodValidationPipe)
  • Input sanitization, SQL injection prevention
  • Rate limiting: Redis-backed per-user limits (credential upload 10/day)
  • LangGraph.js agentic workflow: job estimation, smart scheduling
  • GPT-5.4 Mini primary + Gemini 2.5 Flash fallback
  • LangSmith EU tracing + experiment tracking
  • apps/api/src/modules/ai/ — LangGraph state machine, tool nodes
  • CredentialsModule: upload flow (presigned R2 URL, 600s), admin review queue
  • Credential types: P_IVA, INSURANCE, ALBO, F_GAS, ID_DOCUMENT, TRAINING_DIPLOMA, MANUFACTURER_CERT, OTHER
  • Trust engine: weighted score → BASIC / VERIFIED / ELITE tier
  • trustScore + trustTier on ProfessionalProfile
  • nestjs-i18n (BE) + i18next + react-i18next + expo-localization (FE)
  • IT (default) + EN — all user-facing strings via t() calls
  • BE: Accept-Language / x-lang header; FE: auto-detect locale
  • @nestjs/swagger auto-generates OpenAPI spec
  • @hey-api/openapi-ts generates typed SDK from spec
  • packages/api-client/: types.gen.ts, sdk.gen.ts, schemas.gen.ts
  • pnpm -w run generate:sdk pipeline
  • Auto-scaling, backups, disaster recovery, monitoring dashboards
  • Named tunnel migration: Quick Tunnel → cloudflared named tunnel ideony-prod
  • Secret rotation (post-v0 stable): Clerk, Stripe, Novu, Dokploy, R2
  • Pulumi IaC TypeScript for Hetzner + Dokploy provisioning
  • 100% SLA target for production

Phase 8.5 — Post-MVP 0 Codebase SOTA Audit

Section titled “Phase 8.5 — Post-MVP 0 Codebase SOTA Audit”

First work stream once MVP 0 is out the door, before any new feature sprint. Big brainstorm pass over the entire codebase against industry SOTA per stack layer — Nest 11 patterns, Expo SDK 55 / React Native best practices, native iOS+Android binary tuning, the Expo web bundle, Prisma 7 + PostGIS query scan, Redis cache taxonomy, BullMQ retry/DLQ shape, LangGraph AI pipeline hygiene, Clerk auth surface, Novu/Resend/Twilio notification coverage, Stripe Connect escrow, R2 storage policy, Sentry observability, testing pyramid, OWASP ASVS security sweep, Pulumi IaC drift, Turbo CI cache effectiveness. For each layer: run the matching specialized agent / skill / MCP, fetch latest docs via Context7 + cross-check Exa, use ast-grep for idiomatic-pattern audit. Bump all deps to latest stable/LTS (no canary). KISS/DRY refactor pass + dead-code removal. Produces a single codebase-wide audit spec in docs/specs/ before code changes; layer-specific subagents dispatched in parallel once the spec is locked.

  • Consumer: saved pros, repeat booking, favourite lists
  • Professional: advanced analytics, team accounts, multi-location
  • Payments: subscription plans, promotional credits, invoice generation
  • AI: predictive pricing, demand forecasting, smart availability suggestions
  • Live tracking Tier 2: full real-time GPS + ETA + route display
  • Multi-city expansion beyond initial Italian market

FeatureCategoryStatusPlatformsNotes
Sign InAuthstableiOS, Android, WebClerk identifier-first unified flow
Sign UpAuthstableiOS, Android, WebSocial (Google/Apple/Facebook) + email OTP
2FA / MFAAuthalphaiOS, Android, WebClerk TOTP — task #140
RBACAuthstableAPICONSUMER / PROFESSIONAL / ADMIN roles
JWT VerifyAuthstableAPI@clerk/backend verifyToken + @CurrentUser()
Clerk WebhooksAuthstableAPIsvix signature, raw body
Category SearchDiscoverystableiOS, Android, WebTrade categories + PostGIS proximity
Text SearchDiscoverystableiOS, Android, WebFull-text search, Redis cache 30s
Results ScreenDiscoverystableiOS, Android, WebFilter + sort, map overlay
Pro ProfileDiscoverystableiOS, Android, WebTrust tier badge, credentials display
Mapbox MapsDiscoverybetaiOS, Android, Web@rnmapbox/maps, custom Sole style
Create BookingBookingstableiOS, Android, WebZod validation, slot conflict check
Booking LifecycleBookingstableiOS, Android, APIPENDING→CONFIRMED→IN_PROGRESS→COMPLETED
Change OrdersBookingstableiOS, Android, APIExtra work approval flow
Booking HistoryBookingstableiOS, AndroidConsumer + professional views
Cancel BookingBookingstableiOS, AndroidCTA + useCancelBooking hook
SOS RequestSOSstableiOS, AndroidEmergency dispatch trigger
Candidate MatchingSOSstableAPIPostGIS radius, availability check
SOS PricingSOSstableiOS, Android, APISurge multiplier, transparent estimate
Accept / DeclineSOSstableiOS, AndroidPro accept/decline flow
Live TrackingSOSbetaiOS, AndroidSocket.IO foundation; full GPS Tier 2
Real-time ChatChatbetaiOS, AndroidSocket.IO, message history
Create ReviewReviewsstableiOS, AndroidPost-booking unlock, duplicate guard
Display ReviewsReviewsstableiOS, Android, WebRating aggregate, sorted list
Stripe ConnectPaymentsbetaiOS, Android, APIConnect Express onboarding
EscrowPaymentsstableAPIHold on booking create, release on complete
RefundsPaymentsstableAPIStripe refund + webhook reconcile
Stripe WebhooksPaymentsstableAPIRaw body signature verify
Multi-channel NotificationsNotificationsstableAPINovu → email + SMS + push
Push NotificationsNotificationsbetaiOS, AndroidExpo Push Token, Novu channel
Pro DashboardPro ToolsstableiOS, AndroidEarnings summary, upcoming bookings
AvailabilityPro ToolsstableiOS, Android, APIWeekly schedule, slot management
EarningsPro ToolsstableiOS, AndroidPayout history, pending balance
CalendarPro ToolsstubiOS, AndroidBlocked slots UI — planned Phase 1
Credential UploadCredentialsstableiOS, Android, APIPresigned R2 URL, Redis rate limit
Credential ReviewCredentialsstableAPIAdmin approve/reject queue
Trust ScoreCredentialsstableAPIWeighted engine → BASIC/VERIFIED/ELITE
AI Job EstimationAIalphaAPILangGraph.js + GPT-5.4 Mini
AI Smart SchedulingAIalphaAPILangGraph state machine, tool nodes
Health EndpointInfrastableAPI/health liveness + readiness
i18n IT+ENInfrastableiOS, Android, APInestjs-i18n + expo-localization
Security HeadersInfrastableAPI@fastify/helmet

Phase 0 — Demo ready (shipped 2026-04-21)

Section titled “Phase 0 — Demo ready (shipped 2026-04-21)”
  • #140 — Clerk 2FA sweep (all users audited, per-user MFA wiped, app-level dashboard-only) 80edaa1
  • #150 — CC1: Theme store + dark palette foundation 2f9c140
  • #151 — CC4: Offline banner 6bbcccd
  • #171 — R5: Icon voice cleanup (chrome Phosphor, inline lucide) 8aa44fb
  • #175 — R9: E2E selector refresh after Home route promotion 1e24f43
  • #176 — R10: PromptCard chat-UX parity (focus-expand, suggestions, history, placeholder cycle, typing indicator) 2f9c140
  • #174 — R8: ui-visual-validator run + screenshot diff vs design spec (in-flight)
  • #180 — CC2.x: Dark mode codemod — chrome + ui primitives via useThemedColors() c62c5be

Phase 1 — Post-demo (deferred to post-cofounder review)

Section titled “Phase 1 — Post-demo (deferred to post-cofounder review)”
  • E2E M1 — track C demo walkthroughs (3 Playwright specs, cofounder/investor paths) — e2e/web/demo/*.spec.ts. Spec: specs/2026-04-21-e2e-strategy.md.
  • E2E M2 — track A deploy smoke — 3 unauthenticated Playwright flows wired into scripts/deploy.sh post-CD via e2e/playwright.prod-smoke.config.ts. Authed expansion (5 flows) deferred to M3+ pending prod test-user seeding.
  • E2E M3 — gap closure (audit): webhook + i18n API-integ already covered. Carve-outs: M3b, M3c.
  • E2E M3b — Browser i18n smoke — e2e/web/i18n/language-switch.spec.ts + testID instrumentation on LanguagePicker + profile menu row.
  • E2E M3c — Rate-limit E2E (blocked on @nestjs/throttler impl, deferred post-MVP0).
  • [~] E2E M4 — track B multi-role harness (carries Phase E M-E1–M-E7: TestModule + test_tenant + 6 canonical scenarios on Playwright web). Harness landede2e/multi-role/ orchestrator + tenant/state/clock/seed helpers + S1 scenario + playwright.multi-role.config.ts + test:multi-role / test:s1 scripts. BE TestModule + remaining 5 scenarios (S2–S6) still pending.
  • E2E M5 — Maestro mobile flows — DEFERRED post-MVP0 (per user 2026-04-21: web-only MVP 0 scope).
  • E2E M6 — Nightly Hetzner cron runner + Slack report emitter (web suite only in MVP0).
  • E2E M7 — free-tier device cloud — DEFERRED post-MVP0 (alongside M5, mobile-specific).
  • Rate-limit impl — @nestjs/throttler 4-tier integration (plan: plans/2026-04-21-rate-limit-throttler-audit.md).
  • Named tunnel migration (blocked — pending is-a.dev PR merge)
  • #176 — R10: Secret rotation (Clerk, Stripe, Novu, Dokploy, R2) — post-v0 stable

  • New milestone completed → update the Milestone Overview table row status
  • New locked decision → add row to Active Initiative decisions table with date
  • Phase promoted / feature shipped → update Feature Matrix status column
  • New planned work → add to Phased Execution Plan under correct phase
  • Do NOT add in-flight task details here — those belong in status.md
  • Re-read both ROADMAP.md and FEATURES.md before editing to stay in sync