# Claude Code orientation You've been handed a funeral-provider discovery pipeline. Before doing anything: 1. Read `README.md` for the repo layout. 2. Read `n8n/PROCESS.md` for the end-to-end flow and how data conforms to the DB schema. **This is the authoritative doc.** 3. Read `crawlers/PIPELINE.md` for Python module internals. ## Project shape - `crawlers/` — Python modules, one per data source. Invoked either by `run_overnight.sh` (manual) or by n8n workflows via `executeCommand`. - `n8n/workflows/*.json` — four scheduled workflows that drive the pipeline end-to-end. - `database/providers.db` — live SQLite snapshot (~1,463 providers, 121 with pricing). Safe to inspect; re-creatable from `schema_sqlite.sql`. ## Key constraints - **Never write to `funeral_brand.verified` or `funeral_brand.hidden`** — those are admin-only. The pipeline keeps providers hidden and unverified until a human reviews them. - **Do not use Gathered Here data as a source of truth.** It's a competitor. `crawl_gathered_here.py` exists as historical tooling but isn't part of the active pipeline — all enrichment comes from providers' own websites or regulatory disclosure PDFs. - **Listing tier is computed, not stored as the source of truth.** `compute_tiers.py` derives it from package/inclusion data. Don't set it manually. ## Running locally You'll need a Serper API key (free 2,500/mo at serper.dev) to do website discovery. Everything else can run without keys, though AI pricing extraction in Workflow 3 needs an Anthropic key. ``` cp crawlers/config.example.json crawlers/config.json # add keys to config.json cd crawlers && ./run_overnight.sh ``` ## Things that aren't here - No live secrets / API keys — `crawlers/config.json` is gitignored, use `config.example.json` as a template. - No admin review UI — that's a separate frontend project. - No Postgres migration tooling — `database/schema.sql` is the target, but the repo uses SQLite for dev.