← back to Homesonspec
README.md
58 lines
# HomesOnSpec.com
**Every new home. Every builder. One search. Verified from the source.**
Nationwide search + comparison platform for newly constructed homes: move-in-ready and
under-construction inventory, communities, floor plans, and incentives — permission-aware,
evidence-backed, and verification-labeled.
## Status
Stage 1–2 complete: working marketplace over synthetic demonstration inventory
(3 markets, 4 fictional builders, ~113 homes, all labeled DEMONSTRATION) plus a fully
proven ingestion pipeline (fixture adapter → snapshots → staged → validated → review →
published). Top-10 national builder acquisition in progress (source registry + recon).
## Run it
```sh
pnpm install
createdb homesonspec && psql -d homesonspec -c 'CREATE EXTENSION pg_trgm'
cp .env.example .env
pnpm db:migrate && pnpm db:seed
pnpm pipeline -- --adapter=meridian-homes-fixtures # fixture pipeline e2e
pnpm dev:web # consumer app → http://localhost:3100
pnpm dev:admin # admin app → http://localhost:3101 (Basic Auth, BASIC_AUTH env)
```
Tests: `pnpm -r test` (unit) ·
`pnpm --filter @homesonspec/workers test:integration` (pipeline vs homesonspec_test) ·
`pnpm e2e` (Playwright, boots both apps).
## Architecture
pnpm monorepo — see `docs/architecture/ADRS.md` for the nine decision records.
```
apps/web consumer Next.js app (:3100) apps/admin protected admin (:3101)
apps/workers pipeline stages + CLI + pg-boss daemon
packages/ database (Prisma) · schemas (zod) · validation (rule engine) ·
search · publisher (ONLY writer of published tables) · shared · shared-ui
collectors/ common adapter contract + per-builder adapters
fixtures/ raw HTML pages + hand-authored expected extraction records
docs/ product · data-rights (READ FIRST) · architecture · source-runbooks
```
**The invariant that matters:** crawlers never write published tables. Data flows
source → RawSnapshot → StagedRecord (+ per-field SourceEvidence) → deterministic
validators (ValidationEvent, verdict) → human review when flagged →
`@homesonspec/publisher` — the single bridge to consumer-facing inventory. Missing values
are null, never guessed; every published fact traces to evidence.
## Data rights
`docs/data-rights/POLICY.md` is binding: facts only by default, no media without
registry-recorded rights, no access-control circumvention, honest User-Agent, robots
respected, removal requests honored. Verification labels derive from how data was
collected and can never overstate it.