Web

Next.js on Vercel. 667 statically generated pages that read Supabase directly — the web tier never calls the Railway API.

Routes

RouteRenderingSource
/StaticLanding page, SMS + ChatGPT CTAs
/searchSSG, ISR 24hAll ingredients + brands, client-filtered
/full-report/[name]SSG — 514 pagesFULL_REPORT_INGREDIENTS.url_target
/brandsClient-side fetchgetAllBrands()
/brands/[brand-name]SSG — 97 pagesBrand slug
/bars/[brand]/[flavor]SSG, ISR 24hwhats_in_the_bar_reports
/privacy, /terms, /supportStaticPolicy pages
/developer/*StaticThese docs
/sitemap.xmlGenerated614 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/data

A 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)