Where AI is used, and where it is not
AI helped write the code, design the homepage and make its images, and it polishes some sentences on the page. It never calculates a score, a cost, a value or a return.
In short
- To build it: Claude Code, Anthropic's coding assistant. ChatGPT designed the homepage layout.
- Images: homepage images were made with ChatGPT's image generation. They show the region in general, not any real lot, and are not photographs.
- In the product: the Claude API (model
claude-sonnet-5) rewords plain-English sentences that the engine has already written from computed results. - Language: the site is in English only. A Spanish translation drafted with AI during the hackathon was removed before submission.
- Guardrail: a validator rejects any AI sentence containing a number that is not in the computed data. The page then shows the engine's own sentence.
AI used to build the project
| Tool | Model or version | Used for |
|---|---|---|
| Claude Code (Anthropic) | Claude Opus 5.5 and Claude Sonnet 5 | Pair programming, planning, code generation, review passes, and research notes. |
| oh-my-claudecode | Claude Code plugin | Coordinates several Claude Code agents working on separate tasks. |
| Claude Code (Anthropic) | Claude Opus 5.5 | Drafted a Spanish translation of the interface and summary during the hackathon. It was removed before submission: the site is English only. |
| ChatGPT (OpenAI) | — | Homepage design and layout (HTML/CSS), later ported into the app. |
| ChatGPT image generation (OpenAI) | — | Homepage images. They are AI-generated regional imagery: not photos of any lot or parcel, and not copyrighted photography. |
| ChatGPT image generation (OpenAI) + Claude | — | Logo concept generated with ChatGPT (image generation), then redrawn as vector geometry by Claude. |
Weights and cost defaults live in versioned config files, marked as drafts awaiting expert review. Zoning code sections used by the engine were checked against the official text. All source code is public, with its full history.
AI in the product
The parcel page has two places where AI may reword text:
- Four answers: Can you build here? Does it pencil? What's in the way? What next?
- Two-sentence summary: what the lot allows by right, and what might be possible with zoning relief.
How a sentence is made
- The engine computes the score, flags, approvals, budget, value and margin.
- The engine writes a template sentence for every answer from those results.
- The server sends Claude only the computed results and the template sentences, and asks for plainer wording at an 8th-grade reading level. The API key stays on the server.
- Each returned sentence is checked (see below). Sentences that pass are shown. Sentences that fail are replaced by the template.
If the AI service is slow (over 8 seconds), returns an error, or is not configured, the page shows the template sentences. The app works fully without AI.
The checks
- Numbers: every number in an AI sentence must match a number in the computed data. Rounding the way a person would is allowed. Anything else is rejected.
- Codes and districts: the summary may name only zoning districts and code sections that appear in the data.
- Banned words: the summary may not use words such as “guaranteed,” “definitely,” “impossible” or “risky,” or advise buying or not buying.
- Shape: the summary must be exactly two sentences. A failed summary gets one retry, then the template is used.
- Fixed wording for precedent: whether nearby Zoning Board requests were usually approved, mixed, or usually denied is set by the case counts, not by the model.
Where AI is never used
- The Ease Score, factor scores, red flags and review callouts
- The lot-fit test and the zoning rules
- The requirements checklist
- Costs, values, profit, margin, yield and every other number in the pro forma
- Months to a permit
- The numbers in the Feasibility Study PDF
- Views of a specific lot: the 3D views come from Google Photorealistic 3D Tiles and USGS lidar, not from an image generator
These are deterministic code: the same parcel and data always give the same result. See Data and methods for the rules and Limitations for the gaps.