Open-Source Cold Email & Warmup Platform
Warmbly 是开源的冷邮件平台:温暖您的邮箱、发送活动、并对每条回复进行分流。可在我们的云端运行,也可自行托管整套系统。
AI 翻译
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证AI-powered B2B lead generation: search 1,200+ decision makers, build lists, launch personalized outreach, validate every contact. Next.js + NestJS + Postgres + Redis + BullMQ.
翻译准备中
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
A B2B lead generation platform. Search a database of companies and decision makers, save the good ones into lists, and launch AI-personalized outreach over email and LinkedIn. Email and phone validation is built in, so bad data never reaches a campaign.
Live demo: saasquatch-signal.vercel.app
Demo sign-in: [email protected] / demo1234 (or the one-click demo button on the login page)
The first request after a quiet spell can take up to a minute while the free-tier API wakes up. Everything after that is instant.查看完整 README ↗A B2B lead generation platform. Search a database of companies and decision makers, save the good ones into lists, and launch AI-personalized outreach over email and LinkedIn. Email and phone validation is built in, so bad data never reaches a campaign.
Live demo: saasquatch-signal.vercel.app
Demo sign-in: [email protected] / demo1234 (or the one-click demo button on the login page)
The first request after a quiet spell can take up to a minute while the free-tier API wakes up. Everything after that is instant.
| Layer | Tool | Where and why |
|---|---|---|
| Frontend | Next.js 15 | The web app in apps/web; server components fetch from the API so nothing loads client side unauthenticated |
| Frontend | React 19 + TypeScript | UI and type safety across the whole monorepo |
| Frontend | Tailwind CSS v4 | All styling, through design tokens for colors, spacing, and dark mode |
| Frontend | shadcn/ui + Radix | Accessible component kit: dialogs, dropdowns, tables, tabs, selects |
| Frontend | Auth.js v5 | Login sessions; the API's JWT rides inside the session cookie and never reaches the browser |
| Frontend | Zod | Validates login and signup forms before they hit the server |
| Backend | NestJS 11 | The API in apps/api: modular controllers and services with guards and dependency injection |
| Backend | PostgreSQL | System of record for companies, contacts, lists, campaigns, and messages |
| Backend | Prisma 6 | ORM, schema migrations, and the seed script (400 companies, 1,206 contacts) |
| Backend | Redis | Caches search results and facets, and backs the job queues |
| Backend | BullMQ | Queues for AI draft generation, sending, and day-delayed follow-up steps |
| Backend | Passport JWT + bcryptjs | Token auth and password hashing |
| Backend | class-validator + Throttler | Request validation and per-route rate limits |
| Backend | Swagger | Self-documenting API at /docs |
| Backend | libphonenumber-js | Offline phone validation: E.164, country, line type |
| AI and data | Google Gemini (Groq fallback) | Plain-English search parsing, sequence design, and per-lead personalized emails |
| AI and data | Apollo.io | Live company enrichment by domain ("Import from web") |
| AI and data | Hunter.io, Brevo, ZeroBounce | Wired slots for people by domain, real email sending, and deep email verification; the app runs in demo mode without keys |
| Infra | Docker + Compose | One-command production-shaped stack: postgres, redis, api, worker, web |
docker compose up --build
docker compose --profile seed run seed # one time: migrate and load demo data
Web on http://localhost:3000, API and Swagger docs on http://localhost:4000/docs.
# 1. infra: boots an embedded PostgreSQL (:5432) and Redis (:6379)
cd apps/api && npm i && node scripts/dev-infra.mjs &
# 2. api
cp .env.example .env # set JWT_SECRET, add provider keys if you have them
npx prisma migrate dev && npm run seed
npm run start:dev # :4000, queues run in-process
# 3. web
cd ../web && npm i && npm run dev # :3000
Tip: set DAY_MS=60000 in the API env to watch a multi-day sequence play out in minutes.
The repo carries a render.yaml blueprint that stands up the API (Docker, health-checked, queues in-process) and a Redis instance on Render's free tier. Postgres lives on Neon, and the web app deploys to Vercel with API_URL pointing at the Render service. All keys are entered in each dashboard and never committed.
Note for free tiers: the API spins down after about 15 idle minutes, so the first request after a quiet spell takes half a minute to wake.
| Path | What's there |
|---|---|
apps/api/src/search | Filtered search and facets (Redis-cached), Apollo and Hunter enrichment |
apps/api/src/ai | LLM client with Gemini-to-Groq fallback, the writer, the NL parser, the sequence designer |
apps/api/src/campaigns | Brief to campaign, step editing, contact management, launch |
apps/api/src/queues | The generate and send processors, plus the standalone worker entrypoint |
apps/api/src/validation | Email and phone validators, bulk mode, history |
apps/web/app/(app) | Dashboard, find, lists, campaigns, validate, settings |
apps/web/lib/api.ts | The one HTTP client every server component and action goes through |
| Infra | embedded-postgres + redis-memory-server | Real Postgres and Redis for local dev with zero installs, no Docker needed |
| Infra | Render, Neon, Vercel | Hosting: the API with Redis, the database, and the web app |