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,即可验证所有权并自行管理介绍。
一分钟完成验证a simple email service
翻译准备中
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
Send email from your app with one HTTP request, through your own Amazon SES account.
atlair-mail is an open-source alternative to services like Resend or Plunk. You get a simple email
API, a web panel, templates, and webhooks, but the emails go out through your AWS account. Your
sending reputation stays yours, and you pay AWS directly instead of a markup: $0.10 per 1,000 emails
on SES's pay-as-you-go pricing, or $0.16 on the Essentials plan new SES accounts start on
(SES pricing). You can use the hosted version or run the whole
thing yourself.查看完整 README ↗Send email from your app with one HTTP request, through your own Amazon SES account.
atlair-mail is an open-source alternative to services like Resend or Plunk. You get a simple email API, a web panel, templates, and webhooks, but the emails go out through your AWS account. Your sending reputation stays yours, and you pay AWS directly instead of a markup: $0.10 per 1,000 emails on SES's pay-as-you-go pricing, or $0.16 on the Essentials plan new SES accounts start on (SES pricing). You can use the hosted version or run the whole thing yourself.
curl -X POST https://api.atlair.cloud/mail/service/web/emails \
-H "Authorization: Bearer $ATLAIR_MAIL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"from": "Acme <[email protected]>",
"to": ["[email protected]"],
"subject": "It works",
"text": "Sent with Atlair Mail."
}'
Idempotency-Key) and scheduled sending.The API docs walk through each step, including setting up SES from scratch, and let you try every request in the browser.
You need Node 24+, pnpm, and Docker (for Postgres).
pnpm install
docker compose up -d --wait # starts Postgres on localhost:5432
cp apps/api/.env.example apps/api/.env
cp apps/worker/.env.example apps/worker/.env
Fill in the secrets in both .env files:
CREDENTIALS_ENCRYPTION_KEYS: 1: followed by the output of openssl rand -base64 32. Use the
same value in the API and the worker, since it encrypts your SES credentials.BETTER_AUTH_SECRET (API only): any long random string, for example openssl rand -base64 32.Then create the database tables and start everything, each in its own terminal:
export DATABASE_URL=postgres://atlair:atlair@localhost:5432/atlair_mail
pnpm --filter @atlair-mail/db migrate
pnpm --filter @atlair-mail/api dev # the API, on http://localhost:8080
pnpm --filter @atlair-mail/worker dev # sends queued emails in the background
pnpm --filter @atlair-mail/web dev # the panel, on http://localhost:5173
Open the panel at http://localhost:5173, sign up, connect SES, and create an API key. The API reference for your instance is at http://localhost:8080/docs/.
For production, compose.prod.yaml builds and runs the API and the worker as containers. Point them at
any Postgres database with a root .env file.
your app ──► API ──► Postgres (queue) ──► worker ──► Amazon SES ──► inbox
▲ │
└──── delivery, bounce, open ◄────┘
events ──► your webhooks
The API saves each email to Postgres and answers right away. A separate worker process picks emails off the queue, checks them (domain verified, recipient not suppressed), and hands them to SES. SES reports back what happened, and atlair-mail records it and forwards it to your webhooks. Postgres is the only thing you need to run besides the two processes: there is no Redis or separate queue.
apps/
api/ the HTTP API (Fastify)
worker/ sends queued emails and delivers webhooks
web/ the panel (Vue)
docs/ the API docs site (Scalar)
site/ the marketing page
packages/
db/ database schema and migrations (Drizzle)
providers/ the Amazon SES integration
templates/ turns templates into HTML and plain-text email (MJML)
core/ encryption for stored credentials
Run pnpm typecheck and pnpm test before opening a pull request. Tests that need a database
are skipped unless DATABASE_URL is set; see AGENTS.md for how to run them, plus the
code conventions this project follows.