This repo is a starter template for new white-label apps.
Architecture:
apps/web: SvelteKit frontend (Cloudflare Pages)apps/worker: Hono API + Better Auth + D1 (Cloudflare Worker)
Follow this exact order for a new project:
- Install deps
pnpm install- Configure local env files
cp apps/worker/.dev.vars.example apps/worker/.dev.vars
cp apps/web/.env.example apps/web/.env.local- Create D1 DB and set
database_idinapps/worker/wrangler.jsonc
pnpm --filter worker exec wrangler d1 create <new-db-name>- Apply migrations (local + remote)
pnpm --filter worker run db:migrate
pnpm --filter worker run db:migrate:remote- Run local dev
pnpm --filter worker dev
pnpm --filter web devFor a fresh white-label project, update these values:
apps/worker/wrangler.jsonc:named1_databases[0].database_named1_databases[0].database_idvars.CORS_ORIGIN
- Cloudflare app names:
- Pages project name
- Worker name
PUBLIC_API_BASE_URLin Pages env vars
Set in Cloudflare dashboard for deployed environments.
Pages (apps/web):
PUBLIC_API_BASE_URL= deployed Worker URL (https://...workers.devor custom domain)
Worker (apps/worker):
BETTER_AUTH_URLBETTER_AUTH_SECRETRESEND_API_KEYRESEND_FROMCORS_ORIGIN= deployed Pages origin (no trailing slash)
This template assumes Cloudflare Git-connected deploys:
- Pages project root:
apps/web - Worker project root:
apps/worker
Push to configured production branch to deploy.
- Frontend calls
/undefined/api/...:PUBLIC_API_BASE_URLis missing in Pages env vars for that environment.
- Browser calls
localhost:8787in production:- old deployment artifact; redeploy Pages from latest commit.
- Worker error
Cannot read properties of undefined (reading 'prepare'):- D1 binding mismatch; code expects binding name
DB.
- D1 binding mismatch; code expects binding name