Web
Next.js on Vercel. 667 statically generated pages that read Supabase directly — the web tier never calls the Railway API.
Routes
| Route | Rendering | Source |
|---|---|---|
| / | Static | Landing page, SMS + ChatGPT CTAs |
| /search | SSG, ISR 24h | All ingredients + brands, client-filtered |
| /full-report/[name] | SSG — 514 pages | FULL_REPORT_INGREDIENTS.url_target |
| /brands | Client-side fetch | getAllBrands() |
| /brands/[brand-name] | SSG — 97 pages | Brand slug |
| /bars/[brand]/[flavor] | SSG, ISR 24h | whats_in_the_bar_reports |
| /privacy, /terms, /support | Static | Policy pages |
| /developer/* | Static | These docs |
| /sitemap.xml | Generated | 614 URLs |
The developer subdomain
developer.ingredientchecker.app is served by the same Vercel project. src/middleware.ts checks the Host header and rewrites onto the /developer prefix:
developer.ingredientchecker.app/ → /developer
developer.ingredientchecker.app/data → /developer/dataA rewrite, not a redirect, so the URL stays on the subdomain. The matcher skips _next/, api/ and any path with a file extension so assets are not rewritten.
These docs are not access-controlled
They carry noindex, nofollow and are not linked from the public site, but anyone who knows the URL can read them. Nothing here should be a secret — no keys, no tokens. If that changes, put auth in front of it rather than relying on obscurity.
Copied, not shared
Ingredient pages are duplicated from PBN-V1
The route components under /full-report, /brands and /bars were copied from proteinbarnerd.com's /ingredient-checker/* tree by design — both sites serve this content. They are not a shared package, so a fix in one does not reach the other.
key-info/[name] was deliberately not copied: it queries SHORT_REPORT_INGREDIENTS, which does not exist as a table or view, and its param source has zero rows. It 404s on PBN-V1 too.
Build behaviour
generateStaticParams queries Supabase at build time, so the build depends on the database being reachable and on the anon-key RLS policies granting read. A build with wrong credentials produces zero pages rather than an error — check the page count in build output.
✓ Generating static pages using 11 workers (667/667)