AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Email API project for developers. Inspired by Resend
翻译准备中
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
Minimal email API for developers, built as a portfolio project for Resend
applications. See CLAUDE.md for engineering rules and
design/design-system/CLAUDE.md for design rules.
• Control plane / data plane split. Hono validates and queues,
Inngest sends. Never call SES synchronously from a route handler.
• Transport interface. ConsoleTransport for tests/dev,
SesTransport for production.
• Resend bridges auth email until the send pipeline exists. Supabase's
default SMTP is rate-limited and not for production. S查看完整 README ↗Dispatch is an email API for developers: you verify a domain, create a key, and send with one HTTP request, and delivery, bounces and complaints come back to you as signed webhooks. It is a working product, not a mockup, sending real mail through AWS SES, built as a passion project.
The second image is the proof that the pipeline is real: a send through the deployed API to Amazon's bounce simulator, the bounce coming back from SES over SNS, and Dispatch delivering it as a signed email.bounced webhook.
The API that accepts a send never sends anything. It is split into a control plane, which answers the caller, and a data plane, which does the slow and unreliable work afterwards.
Why it is built this way:
POST /v1/emails validates, rate limits per key, writes a queued row and returns 202. The send happens in an Inngest function with retries, so an SES hiccup is a retry, not a failed request.queued before sending, and a redelivered notification finds its own id already stored.queued < sent < delivery_delayed < delivered < bounced/complained), checked in the same SQL statement that writes it.ConsoleTransport in tests and local development, SesTransport in production, so the pipeline and its tests never touch AWS.| Layer | Choice | Why |
|---|---|---|
| API | Hono | Small, typed, and runs unchanged as a Vercel function |
| Web | Next.js 15, App Router | Server components read the database directly, so there is no client fetching library |
| Styling | Tailwind, Radix Primitives, Radix Colors | A dark-first token set in design/design-system, and accessible primitives underneath |
| Validation | Zod | Schemas are the source of truth for types, via z.infer |
| Database | Postgres + Drizzle | SQL that reads as SQL, including the conditional status updates |
| Auth | Supabase | The same project hosts the Postgres database, so deleting an account cascades through every row it owns |
| Rate limiting | Upstash Redis | A sliding window per API key, so one noisy integration cannot starve the others |
| Jobs | Inngest | Durable steps with retries, and step-level idempotency, for the whole data plane |
AWS SES, behind a Transport interface | Real DKIM, real bounces and a real event stream, which is what makes Domains, Metrics and Webhooks honest | |
| Webhooks | Hand-rolled, Standard Webhooks signing | Signatures match the Standard Webhooks reference implementation byte for byte, the scheme Svix and Resend use, with no vendor in the path |
| Flags | PostHog | Large features merge to main in small PRs, dark until finished |
| Infrastructure | Terraform | The SES configuration set and SNS topic, in infra/ |
| Hosting | Vercel, two projects | dispatch for the web app, dispatch-api for the api as one serverless function |
| Lint and format | Biome | One tool and one root config for the whole repo, in place of ESLint and Prettier |
| Logging | Winston | One shared logger writing timestamped JSON, so Vercel's log viewer can filter on any field; console.log is never used |
You need Node 22 (pinned in .nvmrc), pnpm, and a Postgres database. A Supabase project provides both the database and auth.
apps/web/.env.example to apps/web/.env.local and apps/api/.env.example to apps/api/.env.local, and fill them in. Each variable is commented with what breaks without it. For a first run you can leave EMAIL_TRANSPORT=console, which logs a send instead of making one, and skip SES entirely.pnpm install
pnpm --filter @dispatch/db db:migrate
pnpm dev
npx inngest-cli@latest dev -u http://localhost:3001/api/inngest
| Command | What it does |
|---|---|
pnpm dev | Run the web app and the api |
pnpm build | Build everything |
pnpm lint / pnpm format | Biome, checking or fixing |
pnpm typecheck | tsc --noEmit across the repo |
pnpm test | Unit tests |
pnpm e2e | The Playwright suite, against localhost:3000 by default |
CI runs lint, typecheck, unit tests and a build on every pull request. The Playwright suite runs separately against each web preview deploy, so a slow browser suite never holds up the fast checks.
Sixteen phases, each shipped as a series of small pull requests merged to main. This table records what each one delivered.
| Phase | What | Status |
|---|---|---|
00 | IDE, Repo, Turborepo, Biome, TS strict, CLAUDE.md, PR template, CI | |
01 | Design system in Claude Design, tokens, logo | |
02 | Landing page: header, hero, footer | |
03 | Supabase auth, signup and login pages, session middleware | |
04 | Dashboard shell: sidebar, routing, empty states | |
05 | API keys: generation, hashing, one-time reveal, Hono skeleton | |
06 | Domains: SES identity, DKIM records, on-demand verification check | |
07 | Send pipeline + Emails list and detail, domain verification polling, rate limiting | |
08 | Templates: CRUD, variable interpolation, live preview | |
09 | Compatibility checker, shipped behind a PostHog flag | |
10 | Webhooks: signing, retries, delivery log, SNS bounce ingestion | |
11 | Metrics and Logs | |
12 | Settings and Profile | |
13 | Deployment: both apps live, env verified, SNS on a permanent endpoint | |
14 | Polish, Playwright E2E, request log retention, README | |
15 | UI Polish: Landing page, Auth Pages, Dashboard, three.js mp4 |
Engineering rules live in CLAUDE.md, design rules in design/design-system/CLAUDE.md.
apps/
web/ Next.js: landing, auth, dashboard
api/ Hono: the public REST api, v1
packages/
db/ Drizzle schema, migrations, queries
core/ send pipeline, key hashing, webhook signing, SNS verification
compat/ email client compatibility checker, framework-free
ui/ Radix + Tailwind components
e2e/ Playwright suite, run against preview deploys
config/ currently unused
design/ the design system: tokens, foundations, logo
infra/ Terraform for the SES configuration set and SNS topic
| Tests | Vitest, Playwright | Unit tests for the pipeline and signing, and an end-to-end suite against every preview deploy |