Project 06 · Property
Property Inventory CRM: a lettings inventory lifecycle system.
The operational tool behind House of Lettings' public site: staff run check-ins, inspections and check-outs; tenants and landlords get share links; nothing in the record can be quietly changed.

01 ▸ Overview
Internal CRM for House of Lettings.
A property's condition is a chronological chain of records — check-in, inspection, inspection, check-out. This CRM models exactly that for the House of Lettings team, alongside the agency's public site on the same Next.js codebase.
Staff — admins, agents and clerks — work from a console of properties, inspections and clients. Whoever is standing in the property runs the inventory area by area on their phone. Landlords and tenants never need accounts: each gets a tokenised share link to a finished report, or to a guided virtual inspection they complete themselves.
Integrity is enforced in the database, not the UI. Postgres triggers make the audit trail immutable, row-level security scopes agents to their own assignments, and every console and share route is noindex — a tenant's home has no business in a search index.
02 ▸ What we built
The parts that do the work.
Full inventory lifecycle
Check-in, periodic inspection and check-out as linked records, so change over a tenancy is visible and attributable.
Tenant-facing virtual inspections
Guided, photo-by-photo inspections completed through a share link — no app, no account.
Immutable audit trail
Database triggers enforce append-only history; captured evidence and signatures are attributed to the link that acted.
Browser-rendered PDF reports
Finished inventories export as clean PDFs, generated client-side, one link per landlord or tenant.
Role- and assignment-scoped access
Admins see everything; agents see only their portfolio, enforced by Postgres RLS.
03 ▸ Stack
What it runs on.
04 ▸ Related services
The operations services behind the build.
05 ▸ Related projects
Optimal Offshore