App.tsx from state-switch to IonRouterOutlet. Small, mechanical, unblocks every new screen.Sponsored marketplace and letter-template engine are features layered onto Property Report / Move-In / Guidance respectively — not screens. Voice/STT, Stitch reconciliation, and now Guidance content sourcing + deduction-calculator methodology are cross-cutting decisions to resolve before their dependent screens.
Architecture splits thirteen screens across three planes plus a cross-cutting Comms surface, cross-cutting voice/STT modes, a programmatically-queried Guidance Library, and an inline sponsored Marketplace.
Combined sign-in / sign-up. Cookie-based auth; opaque bearer support for native clients later.
Stitch: no coverage — fresh design needed.
SignInPage.tsx, RegisterPage.tsx, useCurrentAccountStatus summary + unified unread digest (notifications + comms). "See all" routes into Timeline (events) or Comms (messages). Status-aware: renders different content by tenancy lifecycle stage — pre-tenancy (search + recent reports), live (rent due, maintenance, unread comms, inspections), post-tenancy (deposit return, references in flight). Multi-tenancy: scopes to active tenancy from profile-popover switcher; archived tenancies reachable but demoted. Currently shipped as HomePage.tsx = search + recent reports (pre-tenancy variant only).
Stitch: Tenant Dashboard (desktop), Tenant Dashboard - Mobile, plus 3 Tenant Hub variants (Grid / Summary / Updated Summary). Closest to our intent: Tenant Dashboard - Mobile.
Pre-tenancy due diligence. Five sources live (Postcodes.io, Police.uk, EPC, Flood, VOA). Cached-data banner on network failure. Sponsored marketplace section (movers, broadband, contents insurance, deposit-replacement products) appears inline — revenue surface, labelled, separated from impartial guidance.
Stitch: Due Diligence (desktop). Useful as a layout reference; ours is shipped on mobile-first Ionic and rendered live data.
ReportPage.tsx, PropertyReportAggregatorSet the baseline for the tenancy: keys received, prescribed information confirmed received, photo inventory of every room, meter readings, working-condition checklist (boiler, smoke alarms, locks). One-day event; low-stress; the goal is "every dispute reference 6 months from now points back here". Counterparty: landlord or agent.
Stitch: Move-In & Docs. Lift checklist + inventory affordances; the docs panel within is split out into our Documents screen.
move_inStructured state for the live tenancy: rent ledger, maintenance ticket status, inspections. Conversation lives in Comms; cards deep-link into thread positions.
Stitch: Living & Maintenance (desktop). Lift its rent-status, ticket-board, and inspection affordances; route the conversational triage out to Comms (Stitch keeps it inline).
occupancyExit settlement: notice given, exit photo inventory, comparison against the Move-In baseline (side-by-side per room), final meter readings, key return, forwarding address. Different mental model from Move-In — adversarial review is in scope. Stretches over weeks; feeds directly into Deposit. Counterparty: landlord, agent, deposit scheme.
Stitch: Move-Out & Deposit. Lift the exit-checklist + comparison affordances; the deposit ledger within is split out into our Deposit screen.
move_outScheme registration + prescribed information at entry; deduction line items with landlord rationale + evidence at exit; per-line accept/reject/counter; ADR escalation status. Best-practice deduction calculator (e.g. light bulb £15–25; sourced from published industry data, refreshed quarterly, labelled "indicative") helps tenants benchmark each line item against fair-wear-vs-betterment frames. Methodology needs solicitor review before launch — wrong numbers worsen adjudication outcomes.
Stitch: Move-Out & Deposit contributes the deposit-ledger half (deduction lines, totals, accept/reject affordances). Lift those into this screen; the move-out half belongs in Transition.
depositLifecycle tail — runs after Deposit settles. Outbound: tenant requests landlord reference for next tenancy; tracks consent, who-it-was-sent-to, response status. Inbound: a future landlord queries us for a reference on a prior tenant; tenant approves/declines per request; we serve a structured response (or a redacted refusal). Consent + retention is GDPR-load-bearing.
Stitch: no coverage — fresh design needed.
referencesVault across all stages, filterable. Cross-cutting reference target for every other screen — the cleanest first vertical slice because it has no inbound dependencies on screens not yet built.
Stitch: docs panel inside Move-In & Docs is the closest reference (filename + tag + status). Pull that into a standalone vault screen; no Stitch screen for the cross-stage filter view.
documentsChronological projection across all planes. Absorbs the notifications inbox. Same data source as Comms; different read-model.
Stitch: no coverage — fresh design needed.
Audited trail on Account + PropertyReportOne thread per tenancy with every party as a participant (tenant, landlord, agent, contractor, scheme, council). Bubbles tagged by sender + medium. Compose for in-app only; email/SMS as read-only summaries.
Stitch: no coverage — fresh design needed. Stitch's workflow screens embed conversation inline; we pulled it out as a cross-cutting surface.
commsPer-tenancy register of the parties on the landlord side: name, UK service address (statutory under Landlord and Tenant Act 1987 s48), telephone, registration number where applicable (Rent Smart Wales mandatory; England's letting-agent client-money-protection scheme; Scotland's landlord register). Extends to agent / management company / freeholder where present. Source of truth for letter generation, deposit prescribed-information cross-check, and reference targets.
Stitch: no coverage — fresh design needed.
tenancy pack with the tenancy model itself, or be its own parties packThree things in one surface: (1) editorial guidance on UK tenancy topics (deposit dispute, repair obligations, eviction notice response, rent-increase challenge, etc.); (2) support signposting directory (Citizens Advice, Shelter, Generation Rent, council homelessness team, ombudsman, deposit schemes); (3) letter templates with tenancy context auto-filled (landlord name + s48 address + tenancy ref). Same architectural role as Comms: destination screen and programmatically queried — every workflow screen can ask "give me the right guidance + signposts + letters for THIS context".
Stitch: no coverage — fresh design needed.
guidanceCards above carry an S line where a Stitch screen contributes design references. Stitch's workflow screens are compounds (Move-In + Docs, Move-Out + Deposit) — we de-bundle them.
No Stitch coverage: Auth, Documents-as-vault, Timeline, Comms — all need fresh design (Figma or new Stitch generation).
| # | Screen | Plane | Status | First milestone |
|---|---|---|---|---|
| 1 | Auth | Information | Shipped | — |
| 2 | Dashboard | Events | Partial | Pre-tenancy variant shipped; add live + post variants once tenancy lifecycle data exists; multi-tenancy switcher |
| 3 | Property Report | Workflow | Shipped | Ofcom + RoFRS sources (#264, #263); sponsored marketplace inline panel |
| 4 | Move-In (was Transition) | Workflow | Not started | Checklist + photo inventory + meter readings; voice walkthrough |
| 5 | Occupancy | Workflow | Not started | Maintenance ticket entry (with STT) + status board |
| 6 | Move-Out (split from Transition) | Workflow | Not started | Exit inventory with side-by-side comparison vs Move-In baseline |
| 7 | Deposit | Workflow | Not started | Scheme registration + prescribed information at entry; deduction calculator after solicitor sign-off |
| 8 | References (new) | Workflow | Not started | Outbound landlord-reference request with consent flow |
| 9 | Documents | Information | Not started | Upload + filterable list + preview + soft-delete |
| 10 | Timeline | Events | Not started | Chronological event log over existing Audited trail |
| 11 | Comms | Cross-cutting | Not started | Single tenancy thread; in-app messages only; voice notes (private + sent) |
| 12 | Landlord Details (new) | Information | Not started | Per-tenancy landlord record (s48 fields) + agent extension |
| 13 | Guidance Library (new) | Information / Cross-cutting | Not started | Editorial shell + signposting directory + first 3 letter templates |
With multi-tenancy now foundational, the path of least resistance has shifted: Tenancy data model + Landlord Details first (small, statutory, exercises the model), then Documents.
Three viable approaches: repo-tracked Markdown (versioned, simple, slow to update), headless CMS (Sanity/Contentful — collaboration with legal counsel, monthly cost), AI-augmented (LLM drafts, human-in-loop edits — fast but accuracy-load-bearing).
Marketplace generates revenue; Guidance must remain impartial. Risk: tenant confusion if both surface in the same context (e.g. on Property Report).
Adjudication frames "betterment vs fair wear" precisely. Wrong numbers undermine tenants. Solicitor input needed before launch.
App.tsx is currently a state-switch (no router). Build spec calls for IonRouterOutlet. Doing this before any new screen avoids retrofitting.
Stitch outputs exist for some screens. Figma is canonical per memory. Auth/Documents/Timeline/Comms have no Stitch coverage.
Stitch's "Move-In & Docs" and "Move-Out & Deposit" don't map to our split (Transition + separate Documents + separate Deposit).
Cross-cuts Comms + Transition + Occupancy. On-device first; biometric-adjacent under GDPR; tenancy chat is evidential. Memory flags solicitor input needed.
| Concern | Status | Affected screens | Resolve before |
|---|---|---|---|
| Routing (IonRouterOutlet) | Not started | All | Any new screen |
| Multi-tenancy data model + archive | Not started | All workflow + Dashboard + Comms + Documents + Timeline | Dashboard context-awareness |
| Active Storage + R2 | Not started | Documents, Move-In, Move-Out, Occupancy, Deposit, Comms, References | Documents |
| RHF + zod conventions | Not started | Every form-bearing screen | Documents |
| On-device STT plugin | Not chosen | Move-In, Move-Out, Occupancy, Comms | Move-In |
| Audio storage + offline capture | Not started | Comms, Move-In, Move-Out | Move-In |
| GDPR retention (voice) | Flagged for solicitor | Comms, Move-In, Move-Out, Occupancy | Comms |
| Move-In ↔ Move-Out comparison engine | Not started | Move-Out, Deposit | Move-Out |
| GDPR consent (references) | Flagged for solicitor | References | References |
| Sponsored marketplace data model | Not started | Property Report, Move-In | First sponsored panel |
| Move-In photo inventory as baseline (immutable after sign-off) | Not started | Move-In, Move-Out, Deposit | Move-In sign-off step |
| Guidance content sourcing (Markdown / CMS / AI) | Open question | Guidance Library, every workflow screen (programmatic queries) | Guidance MVP |
| Letter template engine | Not started | Guidance Library, surfaces from Deposit + References + Occupancy | First letter generated |
| Deduction calculator methodology | Flagged for solicitor | Deposit | Deposit calculator launch |
| Account-scoped Dexie partitioning | Shipped | All | — |
| Tailwind v4 + design tokens | Tailwind v4 in; tokens not yet adopted | All | Revisit when 2nd or 3rd screen lands |