Data
Data sources and publish gates
The public web build reads generated static files from `content/generated` and does not query the iOS app database at runtime.
Static data contract
MVP pages use `entities.json`, `categories.json`, `featured-comparisons.json`, `daily-feed.json`, `search-index.json`, article JSON, and comparison JSON. Export scripts should replace generated files after review instead of editing JSON by hand.
Publish gate rule
Daily article pages are generated only when `publish_gate.status` is `publishable` or a compatible exported `ready` status. `needs_review` and `blocked` content is excluded from public routes and feed output.
Public readiness
Generated comparison and article payloads also carry `public_readiness.status`: route validation, preview, or public SEO. Route validation means the static route can build but is not homepage or SEO material. Preview means the content is readable but still has source, field, or editorial warnings. Public SEO is a review label for source-count and comparable field coverage; it is not by itself a claim that every displayed field is verified for production indexing.
Source audit
Generated comparisons and articles include `source_audit`: audit status, audit date, required source coverage per entity, missing source entries, and notes. The audit checks source URLs already present in the exported DB metadata; it does not crawl the web, query a hosted backend, or modify the database.
The audit now separates route validity, preview readiness, source-count coverage, comparable field presence, and field-level indexing verification. Current generated content remains conservative: field-level indexing verification stays in review until source metadata, last-verified dates, and important field groups are checked more deeply.
Search payload
Home search reads a compact generated search index rather than deriving search props from full entity specs during the page render.
Fact policy
Current product facts, benchmarks, prices, and launch claims should be source-verified before public release. Missing fields should stay absent or explicit instead of becoming unsupported conclusions.
Open daily feed