Skip to content

Data Model

SQLite is the system of record for the demo and local runs. The schema lives in src/casita/storage.py.

Key tables:

Table Purpose
listings One row per (source, source_id) listing, with normalized facts and enrichment
runs Search run history
listing_status Funnel status such as contacted, viewing scheduled, passed on
votes Up/down preference signal with reviewer reason
actions Append-only log for reversible local actions
llm_facts Cached structured fact extraction
llm_photo_reviews Cached Gemini photo review
walk_cache Cached walking/driving minutes by rounded coordinates

The committed demo fixture is fixtures/demo.sqlite. It keeps enriched listing facts, photo reviews, and cached route rows. It removes private conversations, attachments, pending URLs, contact fields, and the chosen home.

Ways This Could Go Further

The schema could be diagrammed, migrations could be formalized, or the fixture build could become a checked script. Today, the schema is intentionally close to the personal tool that produced it.