Skip to content

Status

Last updated: 2026-08-03 — kept in sync with docs/STATUS.md.

Active apps:

  • apps/svelte-web — SvelteKit web (all major web features implemented)
  • apps/ios-user — Native iOS customer app (Swift/SwiftUI) — Phase 1 code-complete
  • apps/android/app-user — Native Android customer app (Kotlin/Compose) — Phase 1 code-complete
  • apps/ios-agent + apps/android/app-agent — Native agent apps (Swift/SwiftUI + Kotlin/Compose); Phase 1 increments (Dashboard, Leads) landing
  • apps/worker — Bun + BullMQ background worker (production)
  • apps/api — Standalone Hono server hosting tRPC + Better Auth (production)

The legacy Next.js web app was removed in March 2026. See Conventions → Mobile (Native) for the native-app rewrite.

FeatureStatus
Authentication & Security✅ 100% — Better Auth + CSRF + RLS
Property Search & Map✅ 100% — Valkey GEOSEARCH + Google Maps
Property Detail✅ 100% — Gallery, SEO, tours, similar
Property Management✅ 100% — 10-step wizard + BullMQ sync
Lead Management✅ 100% — Audit trail + SLA + DLQ + draft deals
Chat (GetStream)✅ 100% — Direct + property channels
Notifications (Knock)✅ 100% — 21 workflows wired
User Profiles✅ 100% — Customer + agent + settings
User Engagement✅ 100% — Compare, share, alerts
Landing Page✅ 100% — Hero + streaming + caching
Location Search✅ 100% — Meilisearch + geocoding
Image System✅ 100% — Cloudflare R2 + imgproxy
Calendar & Tours✅ 100% — FullCalendar + tour API
Agent Directory✅ 100% — Meilisearch + curated lists
Agency Pages✅ 100% — Public team pages
Teams✅ 100% — Analytics, SLA, permissions, member detail
i18n✅ 100% — 600+ keys (es / en)
Infrastructure✅ 100% — Docker + GitHub Actions + IaC
Security✅ 100% — Rate limiting + CSP + RLS
Native User App (iOS/Android)✅ Phase 1 code-complete — search, detail, favorites, tours, profile/settings, deep links
AI Features✅ 100% — Description generation + virtual staging live, plan-quota gated (M1)
Subscriptions & Billing100% — M1 + M2 + TEAM checkout + CFDI facturación (FacturAPI) live
Analytics40% — Team analytics live, agent analytics pending
Rental CompanionDeferred — code removed, RentalTerms UI preserved

/dashboard/analytics is a placeholder with mock data. Needs real data integration (property views, conversion rates, etc.) via packages/api/src/services/analytics.ts (currently a stub).

Implemented through Phases 1–3, then removed in April 2026 to keep the codebase clean (8 models, 5 enums, 40+ files, 8800+ lines).

Preserved: RentalTerms model + listing wizard Step 8.

Removed: 9 Knock rental workflows, the tRPC rentals router, the Better Auth Anonymous plugin, the DocuSeal integration, the Typst contract generator.

Future: re-implement as a multi-phase workstream (renter application, guarantor invitations, contract upload + DocuSeal signing, Typst PDF generation, room-by-room inventory).

/legal/cookies exists. Main legal page (terms, privacy) not yet implemented.

MonthMilestone
Aug 2026TEAM checkout — per-seat Premium ($549 MXN/seat/month, min 3 seats) / Enterprise ($449 MXN/seat/month, min 10 seats) team subscriptions from a LEAD-only plan card on the teams billing tab: teams.stripeCustomerId (migration 0017), subjectType: 'team' metadata contract, seats synced from the Stripe item quantity (portal seat changes follow), member entitlement lift/drop through the existing team blend, billing notifications to the team LEAD.
Aug 2026Subscriptions M2 — Stripe self-serve — hosted Checkout form actions on both billing pages (cards-only MXN, prices resolved by lookup_key with a blocking amount check), signature-verified webhook with convergent re-fetch sync (receipts idempotency, supersede-on-checkout, dunning PAST_DUE stays entitled), payment-failed / subscription-canceled Knock workflows off sync status transitions, billing-anchor usage windows (monthly anniversaries — yearly plans still reset monthly), a daily stripe-reconcile worker job, and native planGate upgrade sheets in both agent apps. Canonical doc: packages/api/src/services/subscriptions.FEATURE.md.
Aug 2026Subscriptions M1subscriptions + append-only audit tables, plan catalog + MXN pricing (@repo/validation plan-rules), best-of(own, team) entitlements behind a short Valkey cache, six server-enforced plan gates with a planGate error envelope for native clients, 14-day agent trial + worker trial-scan + Knock warning/expiry, admin grant/revoke UI, billing/plan pages with usage meters. Self-serve Stripe checkout is M2. Canonical doc: packages/api/src/services/subscriptions.FEATURE.md.
Jul 2026AI room staging v2 hardening — switched exclusively to Replicate’s official openai/gpt-image-2 wrapper with a durable PostgreSQL dispatch outbox, dedicated queue, persisted/capped provider attempts, retry/resume/cancel races, signed webhooks, validated downloads, private review/approval, durable deletion, canonical shared contracts, native/web parity, and staged-cover/public-visibility database guards. See Operations → AI room staging rollout.
Jun 2026Native model codegen (@repo/contract) — all four native apps (ios-user, android-user, ios-agent, android-agent) generate their response models from one Zod wire-schema source instead of hand-written DTOs; the CI tests job regenerates + git diffs for drift. See Conventions → Mobile (Native).
Jun 2026Native user-app rewrite (Phase 1 code-complete)apps/ios-user + apps/android/app-user reach the core journey: browsable tabs + Home, list + map search, property detail + tour request, favorites, My Tours + reschedule, profile/settings + avatar + become-agent, live theme/language, and expo-user:// deep links. Builds + unit suites green both platforms. Next: device QA + TestFlight/Play internal. See Conventions → Mobile (Native).
Jun 2026Native user-app rewrite (Phase 0)apps/ios-user (Swift/SwiftUI) + apps/android/app-user (Kotlin/Compose) scaffolded with a hand-written tRPC-over-HTTP client, cookie-based Better Auth (email OTP + native Google idToken), generated design tokens, and synced i18n. See Conventions → Mobile (Native).
May 2026Public staged-variants viewer redesignproperties/detail/staged-variants-dialog.svelte resized + reflowed (max-w-[1267px], inset card, ring-2 ring-primary active state).
May 2026Virtual staging UX rework — agent variants dialog matched to the bulk dialog sticky-chrome pattern; “No Furniture” mode removed from clients + server validation.
May 2026AI description hardening — anti-hallucination prompt (forbidden adjectives, 30-word cap, exhaustive feature list, self-check); typed WorkerError codes drive friendly toasts; client disclaimer added.
May 2026Silent-logout fix (IPv6 IP-hijack)normalizeIp in hooks.server.ts now mirrors Better Auth’s /64 IPv6 subnet logic. Inlined to avoid @better-auth/core direct-dep build break.
May 2026Email-OTP signup fix + auth error i18nfirstName / lastName relaxed to required: false at the auth layer; authClient.updateUser writes them after signIn.emailOtp succeeds. New translateAuthError helper + 7 auth_error_* keys.
May 2026Mobile dark mode — light / dark palettes derived from web’s OKLCH; carried forward into the native apps’ generated token files with live appearance switching (System / Light / Dark).
May 2026Mobile profile parityusers.updateProfile accepts firstName / lastName / phone; Edit Profile sheet matches web /portal/profile/.
Apr 2026AI virtual staging (Replicate via apps/worker/src/ai-room-staging.ts) — 6 stylize variants via adirik/interior-design. BullMQ concurrency: 1 + limiter to stay under Replicate’s 6/min cap.
Apr 2026AI description generator (Gemini 2.5 Flash via @google/genai) — bilingual sectioned output, structured responseSchema, from-scratch + enhance modes.
Apr 2026Leads overhaul — event-driven audit trail (LeadEvent), per-team SLA engine (BullMQ repeatable), reliable BullMQ ingestion with DLQ + admin replay UI, terminal-state hygiene (dispositionReason + DraftDeal).
Apr 2026Rental Companion deferred — Phases 1–3.5 code removed; RentalTerms model + listing wizard UI preserved.
Apr 2026DB reset workflowbun run db:reset script drops + recreated the schema with PostGIS, applied the pre-SQL ID-generator functions, pushed the schema, then the post-SQL triggers + stats aggregators. (This pre/post-SQL flow was later superseded by the Kysely migration chain.)
Apr 2026Team analytics & leaderboard — KPIs + per-member stats with time filter, customizable SLA (30 / 60 / 120 / 240 / 480 min) with 3-tier escalation.
Apr 2026Property comparison (side-by-side, 2–4 properties), share collections (link / WhatsApp / email), notification alerts (price-drop, listing-status-change, saved-search-match via BullMQ alerts queue + Knock workflows).
Apr 2026Neighborhood price insights — multi-level visual funnel (city → municipality → neighborhood) from Redis indexes; new IDX_MUNICIPALITY in @repo/redis-search.

For the full historical milestone list, see docs/STATUS.md.