Full-stack app that ingests email via a Cloudflare Worker, stores metadata in D1, and serves a React (Vite) UI for browsing and cleaning messages.
- Cloudflare Worker + Hono
- Cloudflare D1 + Assets binding for the SPA
- React 19, Vite, Tailwind v4
- pnpm workspaces (packages:
worker,web)
- Node 18+ and pnpm 9 (
corepack enablerecommended) - Cloudflare Wrangler CLI (
npm i -g wrangler) - A Cloudflare account with a D1 database (IDs already referenced in
worker/wrangler.toml)
pnpm install- Worker (miniflare + D1 preview):
pnpm --filter worker dev - Web client (Vite dev server):
pnpm --filter web dev - Build web assets:
pnpm --filter web build(outputs toweb/dist, served by the Worker)
- Production API base:
https://mailbox.styleofwong.com/api. The Go CLI defaults to this URL unless--baseorAPI_BASEoverrides are provided. - CLI commands support
--jsonto display any API response as pretty JSON (useful for scripting).
Build Linux binaries with CGO disabled:
cd cli
./build-linux.shArtifacts are written to cli/dist/.
- Format:
pnpm format - Lint:
pnpm lint - Typecheck:
pnpm typecheck - Tests (vitest):
pnpm test
- Build web assets:
pnpm --filter web build - Set secrets (example):
cd worker && wrangler secret put API_TOKEN - Deploy preview/prod:
pnpm --filter worker deploy(add--env productionfor prod)
- Local Cloudflare state is ignored via
.gitignore(.wrangler/), so preview DB files stay local. - Workspace entrypoint is the repo root; individual package scripts can also be run via
cd workerorcd webif preferred.