Series

Three series: lists, operations, marketplace. One pipeline; one spine per grain.

Series

One product loop, born from a failed lookup screen: signals → grain → lists. That loop is a spine — one per grain. The pipeline is shared, so a later product does not get a second scrape. Three reading paths so a post is not asked to be vision + map + ops at once. Each post stands alone; use this page for order.

Full sequence (author SoT): BACKLOG.md. Terms: Glossary.

Lists from public records

Spine: signals → grain → lists (signal layering). The map names the four shared layers. Read in order when you can; any single post should still make sense alone.

# Post Job
1 Signals on a grain Bet — combine signals on the property grain; match before an event joins the mix
2 Four layers (draft) Map — shared pipeline; who owns land, match, lists
3 Why gather and augment are separate (draft) Decision — land raw vs extract/match
4 Why gold stays denormalized (draft) Decision — wide property row (OBT) for one list query
5 When Postgres is not enough for search (draft) Decision — search as derived read model
… See BACKLOG Deep-dives after the map

How we run it

Where boxes live, how jobs run, how the repo is cut. After the map. Does not change the three moves.

# Post Job
7 Crontab over a scheduler (draft) Batch orchestration
8 Many containers, one compose file (draft) Service layout
9 Compose profiles for a small cluster (draft) Host roles
10 One repo for a data platform (draft) Monorepo boundary
18 Scale sources, not requests One polite job per source; not faster crawls
19 Queue grain, not raw HTML Queue parcel-matched signals; not raw HTML

Serving the buyer

Auth, one list query path, observability. The Serve side of the same grain contract.

# Post Job
11 OIDC for a B2B marketplace (draft) Auth
16 One query path for lists (draft) Search, preview, export, masking