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 |