Live traffic, not a demo
10,000,000users a month run on this exact setup.
So the question isn’t whether it holds. It’s what you want to build on top of it — with the boring decisions already made, and made under load.
10M
users a month
Not a starter someone hopes scales. This architecture, these conventions and this CI gate are the ones carrying the traffic.
1
public origin
Two Workers answer on one hostname, so a session cookie never has to cross a domain to reach the API.
0
public hops on SSR
The frontend reaches the API over a service binding. Render-time data never leaves Cloudflare's network.
Every choice here has a bill attached. It shipped, it took traffic, it held.
The load path
- browser
One origin, one TLS handshake, one place for cookies to belong. Nothing to configure per environment.
- web worker
React Router v8 renders SSR at the edge, near whoever asked. There is no origin server left to fall over.
- service binding
/api/* is forwarded Worker to Worker. No DNS, no TLS, no public network on the render path.
- api worker
Hono, with better-auth validating the session in middleware before a single handler body runs.
- neon postgres
drizzle-orm/neon-http over HTTP, a fresh client per request. No pool to exhaust and no connection to leak.
What’s inside
- 01
Rules your agent reads
AGENTS.md at the root, plus a frontend and a backend skill file loaded on demand. The golden path, the data-fetching rules and the restraint rules are stated before the first line is written — which is the only reason a codebase this size still reads like one person wrote it.
- 02
Typed end to end
One chain from the Drizzle schema through the Zod boundary and Hono RPC into the React loader. Rename a column and the frontend stops compiling. At volume, the bugs you cannot afford are the silent ones.
- 03
Auth already wired
better-auth with email and Google, sessions validated in middleware, and loaders that redirect before an unauthenticated page is ever sent. The part everyone rewrites badly is already done.
- 04
Enforced, not suggested
oxlint and oxfmt on every commit through Lefthook, types and tests on every push, one CI job gating the merge. Conventions that can’t rot, however many hands land in the repo.
- 05
Edge-native by default
Two Cloudflare Workers talking over a service binding, Neon Postgres over HTTP, and a single deploy command to put it live. Ten million a month is a boring number when there is no server to size.
- 06
Tests that gate merges
API routes exercised in the real Workers runtime, components through Testing Library. Every test names the regression it catches, so the suite stays worth its runtime.
See it running
The stack
- React Router v8
- Hono RPC
- Drizzle
- Neon
- better-auth
- Cloudflare Workers
- Tailwind v4
- TanStack Query
- oxlint
- Turborepo
- Storybook
- Vitest