-
-
Landing: Film a walkthrough. Goldilocks finds the hazards, cites the health risks and the law, and gets a notice to your landlord.
-
3D model: Each hazard placed in its room, numbered to match the list, severity by color.
-
Hazard sheet: You confirm what you see. Then health notes load, cited to CDC and EPA, with the landlord’s legal duty and the statute.
-
Dashboard: Your case at a glance: the next action, a five-step timeline, and every problem found.
-
Next steps: The landlord replied, so the next step changed: a drafted reply that cites the law, sent from your own Gmail.
-
Tracking: Your notice and the landlord’s replies, read from Gmail, in one thread.
-
Architecture (if added): Five Claude agents, one SpacetimeDB database, Apify for public records, a Python API and a React app.
Inspiration
Too many renters are forced into spaces that are freezing or burning up with bad ventilation, or crumbling under hazards that landlords ignore.
Two of us have lived it. Rabah rents in an older Oakland building that has had repeated water leaks over five years, each one patched cheaply. After noticing stains and wondering about mold, he bought test kits that came back positive in a few spots. The landlord's reply pushed it to later, and he was left not knowing what the law required, what the city could do, or what to send next. Divit paid about $2,000 of his own money fixing problems his landlord ignored, while worrying about what the dampness was doing to his health. Neither of us knew what the city already had on file about the building, or what to write to be taken seriously.
We built Goldilocks for that renter: someone in Oakland, in an older building, with a problem the landlord keeps ignoring. It bridges the gap between everyday renters and institutional accountability, using computer vision and cited public sources so that a tenant's right to a habitable home has evidence behind it.
Safety by design
A tool like this can hurt the person it is meant to help if it overreaches, so four rules are enforced in code, not just in prompts. Goldilocks never diagnoses a health condition or links your symptoms to a hazard; health guidance is quoted from CDC, EPA and California Department of Public Health pages with the source attached. It never gives legal advice or predicts an outcome; the legal agent can only cite statutes and city procedures from packs a person verified, and anywhere outside California it says "not verified for your area." A complaint on file is not a finding, and a building's record is never presented as the landlord's record. And nothing leaves the app without the tenant reading it and approving it.
What it does
Interactive 3D Hazard Mapping: Goldilocks builds a 3D model of your unit, from the building's published floor plan or listed size when it can find them and a simple schematic otherwise, and places each hazard from your walkthrough video on it, with a clickable marker showing the hazard type, severity level, cited public health guidance, and a list of nearby clinics. You confirm each hazard before anything else runs.
Deep Record and Legal Matching: The platform checks your address against the building's history of code complaints and permits, and cross-references verified California and Oakland law to surface the options available to you.
End-to-End Action and Correspondence Tracking: Goldilocks drafts a formal repair notice and sends it from your own Gmail once you approve it, or opens it in your mail app. It reads the landlord's reply in the same thread and updates your next step, and if the landlord refuses, it points you to local legal aid and the right city filing. A case dashboard shows a five-step timeline, from walkthrough to legal aid, and the one action to take now.
Goldilocks is not a lawyer. It gives you a cited starting point and points you to legal aid.
How we built it

Claude agents, one shared database, and a tenant app in front.
Agents. Vision, health, legal, property and plan each run on Claude Sonnet 5.5 with a strict output schema that code validates before anything is saved. Each has its own tests or evals (6 vision evals, 9 health evals) that replay from cache so a rerun never spends credits by accident.
SpacetimeDB. It is the shared state for every case, hazard and agent run. One TypeScript module on Maincloud holds the core tables (case_file, hazard, agent_run), the health corpus (15 CDC, EPA and CDPH sources, 110 chunks) and the legal sources. Agents write only through reducers, which reject unknown hazard tags, non-https sources and malformed payloads, and every run lands in agent_run with its status and payload. That contract is what let four of us build in parallel.
Orchestrator. It watches the hazard table. When a tenant confirms a hazard, it calls start_run, launches health and legal in a bounded worker pool, and records finish_run or fail_run with the payload. Failed runs retry twice, then stop. End to end check: 6 of 6 on Maincloud. In the deployed app, the API runs the same agents in-process when you confirm a hazard, so there is one runner, not two.
Apify. The property agent pulls an address's Oakland records at runtime through Apify, one address per tenant action. The health corpus was crawled once with Website Content Crawler and loaded into SpacetimeDB.
Tenant app. React and Vite with a three.js 3D model of the unit, set up for Capacitor so it can ship as an iPhone app, talking to a Python API that runs the agents and writes every run to SpacetimeDB through the same reducers. Google sign-in verifies the ID token server side. It's live at goldilocks.casa on Railway.
Law as data. The California statewide pack and the Oakland city pack are hand-verified JSON, not model output. The legal agent uses the city pack where one exists, else the state pack.
From prototype to production
The customer is a renter with a real bill, not a demo persona. The useful unit of output is one cited case packet, and we can measure it: every health line has a source, every legal line has a statute, and a 5-minute walkthrough costs about $0.15 to analyze. The pieces that make it production-minded are already in: schema contracts, output validators, evals per agent, bounded workers with retries, server-side token verification, and a jurisdiction pack format that scales one verified place at a time.
Challenges we ran into
Data collection. Health guidance had to come from sources we could cite, so we validated the CDC, EPA and CDPH pages by hand, crawled them with Apify, and chunked them into SpacetimeDB. Oakland's records portal allows searches but not bulk scraping, so property lookup is one address per tenant action with the official link alongside. The law packs took longest: every statute and city procedure was checked by a person before the legal agent could cite it.
Keeping a vision model honest. Early runs forced every observation into the nearest hazard tag. We added an "unlabeled observations" bucket and a validator so the model never invents a tag, and capped shower-grout dampness at low severity because surfaces meant to get wet aren't a mold hazard.
Agent optimization. One video segment that writes 1.4k tokens sets the time for the whole walkthrough. Trimming the output schema cut per-call time by about half with every eval still passing. The legal agent took 24 to 173 seconds with live web research; pack-only mode brought it to about 12 seconds.
Scope. We wanted nationwide coverage. One thing done well beats a broad demo, so we shipped California statewide plus Oakland city procedures, both checked by a person, and made the system say so everywhere else.
Accomplishments that we're proud of
- 9/9 health evals, 6/6 vision evals, 69 tenant API tests, 59 legal, 40 property and 79 vision tests, and 6/6 end to end on the shared database.
- Every health claim has a CDC, EPA or CDPH source. Every legal line has a statute or city procedure behind it.
- A 5-minute walkthrough analyzed in 26 seconds for about $0.15.
- Four people, one shared schema, no merge disasters, and a live site by Sunday morning.
What we learned
- Contracts first. Writing the table schema and the agent output contracts before any agent code is what let four people build in parallel for a day.
- Safety rules have to live in code, not prompts. Validators, reducers and caps caught things the prompt alone did not.
- Saying exactly what the system can and can't see is part of the product.
Team
- Rabah: data layer and SpacetimeDB module, health agent, orchestrator, Google sign-in.
- Divit: vision agent, tenant app and 3D model.
- Ansh: legal agent, property agent, law packs.
- Dieu: design, pitch, Devpost.
What's next for Goldilocks
- More verified jurisdiction packs, each checked by a person before it goes live.
- Legal aid handoff for Oakland tenants.
- Evidence packet export for housing inspectors and tenant unions.
- Frame extraction on the phone so a tenant uploads 5 MB of frames, not 500 MB of video.
Logos in the diagram belong to their owners.
Built With
- apify
- capacitor
- claude
- google-oauth
- pillow
- playwright
- python
- react
- spacetimedb
- three.js
- typescript
- vite

Log in or sign up for Devpost to join the conversation.