Property Development Feasibility Platform
One of the prompts behind a real Cornerstone Devs build. Client details removed.
Why publish a prompt
A screenshot shows what a product looks like. The prompt shows how the decisions were made before a line of code existed—where the LLM is allowed to operate and where it is forbidden, what has to be reproducible, what happens when a data source is missing, and how the system is verified against reality before anything reaches a client. This is the level at which we scope work.
The build in one line
Replace a manual, spreadsheet-and-instinct site appraisal process with a repeatable one that produces a client-ready report per property.
Shape of the system
What the prompt pins down
Narrative prose only. It never touches a score, a yield, a valuation or a dollar figure. Every number is reproducible from inputs by readable code a test can pin down.
One run(context) interface, one registry, each adapter environment-gated. It activates when configured and skips cleanly when it isn't. Every run is audited.
Ten equally weighted signals normalised to 100, behind knock-out checks and a margin threshold. Dispatch on version, so historic reports render with the logic they were scored under.
The report card, the scoring signal and the dollar feasibility all read the same yield module. They cannot disagree with each other, because there is nothing to disagree with.
A "critical information" block states what is still missing, plus an acquisition gap showing the price at which the deal starts to work. If a source is missing, the report says so rather than estimating.
Vector layers so labels are placed by our code and stay inside the parcel they describe. Only hazard overlays that actually tell sites apart—no blanket layers that flag everything and inform nothing.
Logic lives in dependency-free leaf modules with unit tests. I/O modules compose those leaves. Tests import the pure module directly—no server runtime, no build alias.
A tool that checks a generated report against live source records before it is sent, and a golden-address suite that breaks the day an authority reissues a valuation—rather than going quietly stale.
The prompt, verbatim
Reproduced as written, with client-identifying details removed.
Build a property development assessment platform for a land development business. The job is to replace a manual, spreadsheet-and-instinct site appraisal process with a repeatable one that produces a client-ready report per property.
Stack
Next.js (App Router, server components, server actions), Postgres with row-level security, Tailwind + shadcn/ui, Leaflet for mapping. Deploy on a push-to-deploy host with preview builds per pull request.
Non-negotiable
The numbers are deterministic. An LLM may write narrative prose in the report. It must never touch a score, a yield, a valuation or a dollar figure. Every number must be reproducible from inputs by code a human can read and a test can pin down. If a source is missing, the report says so rather than estimating.
Data ingestion — pluggable adapters
Model each external data source as an adapter with a single run(context) interface, registered in one place. Each adapter is environment-gated: it activates when its API key or endpoint is configured and skips cleanly when it isn't, so the platform degrades instead of breaking. Log every adapter run — source, outcome, timing — to an audit table. Sources to support: authoritative parcel and title boundaries, public assessed property valuations across multiple jurisdictions, business-registry lookups for entity-owned land, geocoding with a rooftop-accuracy primary and an open fallback, and public GIS hazard and infrastructure layers.
Scoring engine
Ten equally weighted signals scored 1–10 and normalised to 100, gated behind a pre-assessment screen of hard knock-out checks and a minimum margin threshold. Output a banded grade plus a "critical information" block naming what is still unknown, and an acquisition gap showing the price at which the deal starts to work. Version the engine and dispatch on version, so historic reports keep rendering with the logic they were scored under.
Yield and feasibility
One module owns developable yield — per-jurisdiction, per-zone planning rules (minimum lot size, site coverage, net developable factor, height and setback constraints). The report card, the scoring signal and the dollar feasibility must all read that same module, so they can never disagree with each other. Feasibility works on a bare-land basis: gross development value net of tax and selling costs, acquisition against land value, unit count from the yield module. Allow per-property overrides that beat profile defaults, and a single documented fallback when no zone rule matches.
Mapping
Render zoning and utility infrastructure as vector layers so labels are placed by our own code, not baked into raster tiles — a label must stay inside the parcel it describes. Only wire hazard overlays that actually discriminate between sites and represent present risk; skip blanket, inverse and future-scenario layers that flag everything and inform nothing.
Architecture convention
Pure logic lives in dependency-free leaf modules with unit tests. Modules that do I/O compose those leaves. Tests import the pure module directly and never need a server runtime or a build alias.
Verification
Ship a tool that checks a generated client report against the live source records before it is sent, and a golden-address test suite asserting our stored valuations still match the authority's published figures — designed to fail loudly the day a valuation is reissued, rather than quietly going stale.
Definition of done
Tests, typecheck and production build all clean before any pull request opens.
Client anonymized due to NDA; identifying details removed. The prompt is reproduced as written, minus client-specific references. Jurisdictions, data providers and commercial thresholds are described generically. More technical depth available under NDA on request.
Want your build scoped like this?
Book a discovery call and we will write the spec before we write the code.
Book Discovery Call