For the tech stack and design decisions, see Architecture → Overview.
| Route | Purpose |
|---|
/ | Home (Hero + featured + recent searches) |
/properties | Property search with map + filters |
/properties/[listingId] | Property detail (gallery, specs, contact, tours) |
/agents | Public agent directory |
/agents/[agentId] | Agent profile + listings + curated lists |
/agents/[agentId]/lists/[slug] | Agent’s curated property list |
/agencies/[teamId] | Agency public page (team info + members + listings) |
/sitemap.xml | Dynamic sitemap |
| Route | Purpose |
|---|
/portal/profile | Customer profile management |
/portal/favorites | Favorited properties (SSR grid) |
/portal/inbox | Customer chat inbox |
/portal/my-listings | Homeowner listings + create/manage + filters |
/portal/recently-viewed | Recently viewed properties |
/portal/saved-searches | Saved search filters |
/portal/become-agent | Action-only — Dialog mounted at root layout |
| Route | Purpose |
|---|
/dashboard/profile | Agent profile management |
/dashboard/settings | Tour availability + notification preferences |
/dashboard/listings | Agent listings grid + create/manage/preview |
/dashboard/lists | Curated property lists |
/dashboard/leads | Inquiry pipeline (5 statuses) |
/dashboard/inbox | Agent chat inbox |
/dashboard/calendar | FullCalendar tour management |
/dashboard/teams | Team management (14 form actions) |
/dashboard/analytics | Analytics (placeholder — pending real cross-team aggregation) |
/dashboard/admin/failed-leads | Admin-only DLQ review / replay for failed lead ingestions |
| Route | Purpose |
|---|
/api/addresses | Address CRUD |
/api/avatar, /api/agent-avatar | Avatar upload/delete |
/api/chat/channels, /api/chat/token | GetStream channel + token |
/api/favorites | Favorite toggle |
/api/floor-plans | Floor plan PDF upload/delete |
/api/inventory | Unit inventory management |
/api/locations/* | Meilisearch search, enrich, reverse-geocode, zip-lookup |
/api/places/* | Google Places autocomplete + details proxy |
/api/properties/* | Property data + recommended |
/api/property-images | Property image upload/reorder/delete |
/api/property-videos | Property video URL add/reorder/delete |
/api/saved-searches | Saved search CRUD |
/api/stream-webhook | GetStream webhook handler |
/api/team-images | Team logo/banner upload |
/api/tours | Tour request CRUD |
/api/agents/search | Agent + team search (for owner assignment) |
/api/ai-jobs/[id] | AI job status polling (auth + ownership scoped) |
| Package | Purpose |
|---|
@repo/database | Kysely client (pg) + SQL migrations + generated types |
@repo/auth | Better Auth shared configuration |
@repo/api | Shared tRPC routers + service layer (detail) |
@repo/cache | Redis / Valkey client (ioredis wrapper) |
@repo/redis-search | Property search on Valkey with GEOSEARCH |
@repo/validation | Zod schemas, property rules engine |
@repo/notifications | Knock workflow translations (es / en) + HTML email layout + escapeHtml. Shared by svelte-web and worker. |
@repo/server-services | Cross-app server helpers (IP-trust gate, email transport, IP rate limiter). |
@repo/contract | Zod wire schemas → generated native Swift/Kotlin model DTOs |
@repo/eslint-config, @repo/typescript-config | Shared tooling |
Per-feature deep-dives live next to canonical code as *.FEATURE.md. The full manifest is in Features.
| Feature | Canonical FEATURE.md |
|---|
| Authentication | packages/auth/FEATURE.md |
| Property management | packages/api/src/services/listings.FEATURE.md |
| Property search | packages/api/src/services/properties.FEATURE.md |
| Property detail | packages/api/src/services/properties.FEATURE.md |
| Leads | packages/api/src/services/leads.FEATURE.md |
| Tours | packages/api/src/services/tours.FEATURE.md |
| Chat | packages/api/src/services/chat.FEATURE.md |
| Notifications | packages/notifications/FEATURE.md |
| Agents | packages/api/src/services/agents.FEATURE.md |
| Teams | packages/api/src/services/teams.FEATURE.md |
| Locations | packages/api/src/services/locations.FEATURE.md |
| Portal (favorites, profile, saved searches) | packages/api/src/services/portal.FEATURE.md |
| Images | apps/svelte-web/src/lib/server/images.FEATURE.md |
| Native contract codegen | packages/contract/FEATURE.md |
Local-only drafts and design intent live in /context/features/ (gitignored).