App.tsx from state-switch to IonRouterOutlet.App.tsx now uses React Router v7 (not IonRouterOutlet — that is deferred to Ionic v9; see docs/03-decide/pwa-routing.md).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 fifteen 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.
guidanceOfficial in-app feedback surface — the single place tenants reach when something is broken, confusing, or missing. Captures free-text + optional screenshot + auto-attached context (build SHA, route, signed-in user id, active tenancy id) so support can triage without a second round of clarifying questions. Distinct from Comms (which is tenancy-counterparty conversation) and from Guidance (which is editorial content).
Stitch: no coverage — fresh design needed.
feedback (BE) — TBCAccount-level self-serve surface: change password, change login email (with verification), and close account. Scoped to the signed-in Account, not to a tenancy — orthogonal to the multi-tenancy switcher above. The destination behind the profile menu / avatar popover. Distinct from Key Contacts (which is the landlord-side register per tenancy) and Feedback (which is product feedback capture).
Stitch: no coverage — fresh design shipped.
SettingsPage.tsx, ChangePasswordPage.tsx, ChangeLoginPage.tsx, CloseAccountPage.tsxRodauthControllerAccount state machineCards 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 | Key Contacts (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 |
| 14 | Feedback (new) | Information | Not started | Free-text + optional screenshot capture with auto-attached build/route/user/tenancy context; routes to triage destination (TBC) |
| 15 | Profile & Account Settings (new) | Information | Shipped | Change password / change email / close account over Rodauth (#532, #538) |
With multi-tenancy now foundational, the path of least resistance has shifted: Tenancy data model + Key Contacts 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.
RESOLVED: App.tsx now uses React Router v7 (single router). The original build-spec call for IonRouterOutlet is superseded — @ionic/react-router is RR-v5-only, so IonRouterOutlet is deferred to Ionic v9. See docs/03-decide/pwa-routing.md + ionic-navigation-strategy-review.md.
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 (React Router v7; | Done | All | — |
| 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 |