Track A — Custom app
Custom operations platform for a UK property finance company
Most of our published work involves Shopify Plus stores. This one doesn’t. It’s an end-to-end operations platform we built for a UK property finance company — Next.js 16, Sanity CMS, Vercel hosting, plus a custom Claude agent doing the day-to-day operational work that used to be a manual job for a small team.The reason it’s worth a case study isn’t the property angle. It’s that the engineering pattern — embedded build, custom agent, owned by the client at the end — works the same way it does for ecommerce. Different domain, same model.The client
A UK property finance and management company running a portfolio of multi-unit residential buildings. We’ve kept the client name private at their preference. Specific numbers below are within ranges to keep individual properties non-identifiable.The relevant context: small operating team, larger operational surface area than the headcount could comfortably handle, and a real need for documentation and compliance that was being done by hand. Like a lot of property businesses, the work was tractable but unglamorous, and the “we should automate this” tickets had been on the backlog for a while.The brief
Three things, agreed in writing at the end of the scoping period:One — a public-facing website that does the marketing job properly. Marketing pages, location coverage, services explanation, lead capture. Standard but needs to be done well, on a stack that’s fast and easy for a non-technical team to update content on without breaking anything.Two — internal operations tooling for the work the team does every week. Document creation (liaison packs, fire and safety logs, evacuation plans, incident reports), property records, tenant communications, compliance tracking. Currently being done in a mix of Word, Google Docs, email, and spreadsheets that nobody quite trusts.Three — automation for the recurring workflows that don’t need a human. Specifically: generating standard documents from templates, tracking finance and remittance flows, surfacing compliance items that needed attention. Not replacing judgement — replacing the typing.The third one is where the AI engineering came in.What we built
The web platform
A Next.js 16 application hosted on Vercel, with Sanity as the CMS. The public-facing marketing pages get content edited in Sanity by the client’s team; the internal pages are role-gated and serve different surfaces depending on who’s logged in.We used Next.js 16 specifically for the App Router patterns and the server components model — clean separation between the public marketing surface (heavily cached, fast) and the authenticated operational surface (dynamic, frequently updated). Sanity handles the structured content and gives the client’s team a proper authoring experience without needing to touch code.The custom Claude agent
The interesting half of the build. A custom agent running on the Anthropic API, exposed to the client’s team through the platform’s UI, that handles the recurring operational work. It’s not a chatbot. It’s a workflow automation that uses Claude where Claude is genuinely useful (structured document generation, classifying incoming items, summarising) and ordinary code where ordinary code is better.The agent has access to the platform’s data model through an internal API layer — not direct database access, but a controlled set of operations it can perform. Read property data, read finance records, generate documents from templates, classify incoming communications, write back structured outputs.Document creation workflows
The biggest single time saver. The team used to assemble standard documents (liaison packs, compliance summaries, evacuation plans, fire and safety logs, incident reports) by hand from Word templates. It was the kind of work where every document was 80% the same as the last one, with 20% specific detail that varied per property and per period.The agent now generates first-pass versions of all of these from structured inputs. Fed the property record, the period, and any relevant flags, it produces a populated document in the client’s required format. The team reviews, edits where needed, and ships. What used to take a few hours per document is now a few minutes.Finance and remittance tracking
The agent ingests finance flows — payments in, remittances out, fees and adjustments — and produces structured records that update the platform’s finance state. It surfaces anomalies (a payment that doesn’t match an expected pattern, a remittance that’s late, an adjustment that requires sign-off) so a human looks at them rather than rubber-stamping every line.The platform shows the running state to the team in a dashboard. The agent is doing the bookkeeping-flavoured work; the human is doing the judgement-flavoured work.Compliance and safety logs
Recurring obligations — fire safety checks, alarm tests, emergency lighting, certifications — get tracked centrally. The platform reminds the team when items are due. The agent prepares the supporting documentation when items are completed (logs, photographs, sign-off forms) and files them against the right property and period.The compliance surface for a multi-property portfolio is harder than it looks because the obligations are different per property type, per local authority, per insurance arrangement. The platform encodes the rules; the agent does the document work.The technical stack
For prospects evaluating whether the same pattern would work for them, the stack details:- Frontend: Next.js 16 (App Router), React 19, TypeScript end-to-end, Tailwind for styling
- CMS: Sanity for structured content, with custom schema modelling for the property and operations data
- Hosting: Vercel for the application, Sanity Content Lake for structured data
- AI layer: Anthropic Claude (Sonnet for most work, occasionally Opus for the longest-form document generation) accessed through the official Anthropic SDK
- Auth: standard auth provider with role-based access for the different platform surfaces
- Document generation: server-rendered HTML to PDF for static documents, structured Markdown to formatted Word documents for the editable ones