Open-Source Cold Email & Warmup Platform
Warmbly is the open-source platform for cold email: warm your mailboxes, send campaigns, and triage every reply. Run it on our cloud or self-host the whole thing.
Send campaigns, manage leads, automate replies on WhatsApp
Translation pending
MarketingTypeScript · JavaScriptGitHub @sachidanand9565OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗A production-ready WhatsApp Business management platform built with Next.js 14, MySQL, and Meta WhatsApp Cloud API — similar to AiSensy.
| Feature | Description |
|---|---|
| Multi-tenant | Each user gets their own workspace with separate API credentials |
| Chat Inbox | WhatsApp Web-style chat UI with real-time polling |
| Bulk Campaigns | Send template messages to thousands of contacts |
| CRM Contacts | Manage leads with tags, status, and CSV import |
| Templates | Create & submit templates for Meta approval |
| Chatbot | Rule-based auto-reply by keyword/pattern |
| Analytics | Delivery rates, read rates, conversion charts |
| Webhook | Receive messages & status updates from Meta in real-time |
whatsapp-saas/
├── app/
│ ├── api/
│ │ ├── auth/ login, signup, logout
│ │ ├── webhook/ Meta webhook handler
│ │ ├── contacts/ CRUD + CSV import
│ │ ├── messages/ conversation history
│ │ ├── templates/ CRUD + Meta submission
│ │ ├── campaigns/ CRUD + launch (bulk send)
│ │ ├── chatbot/ CRUD rules
│ │ ├── analytics/ summary + chart data
│ │ └── workspace/ settings
│ ├── dashboard/ Analytics overview
│ ├── inbox/ Chat UI
│ ├── contacts/ CRM
│ ├── campaigns/ Bulk campaigns
│ ├── templates/ Template manager
│ ├── chatbot/ Chatbot rules
│ ├── analytics/ Full analytics
│ ├── settings/ Workspace config
│ ├── login/
│ └── signup/
├── lib/
│ ├── db.ts MySQL connection pool
│ ├── auth.ts JWT + bcrypt helpers
│ ├── whatsapp.ts Meta API wrapper
│ └── utils.ts Shared utilities
├── types/index.ts TypeScript interfaces
├── middleware.ts Auth route protection
├── schema.sql MySQL schema
└── .env.local.example Environment template
cd whatsapp
npm install
mysql -u root -p < schema.sql
cp .env.local.example .env.local
# Edit .env.local with your MySQL credentials and Meta API keys
https://your-domain.com/api/webhook
messages, message_deliveries, message_readsnpm run dev
# Open http://localhost:3000
http://localhost:3000/signupPOST /api/auth/signup { name, email, password, workspaceName }
POST /api/auth/login { email, password }
POST /api/auth/logout
POST /api/send-message { contactId, type, text } OR { contactId, type:'template', templateName, language, components }
GET /api/messages?contactId=X&limit=50
GET /api/contacts?page=1&limit=20&search=X&status=new
POST /api/contacts { name, phone, email, city, source, tags, status }
PUT /api/contacts/:id
DEL /api/contacts/:id
POST /api/contacts/import (multipart/form-data, file=CSV)
GET /api/templates
POST /api/templates { name, language, category, body_text, ... }
GET /api/campaigns
POST /api/campaigns { name, template_id, contact_ids, scheduled_at }
POST /api/campaigns/:id/launch
GET /api/chatbot
POST /api/chatbot { trigger_type, trigger_value, response_type, response_text, priority }
PUT /api/chatbot/:id
DEL /api/chatbot/:id
GET /api/analytics
GET /api/webhook?hub.mode=subscribe&hub.verify_token=X&hub.challenge=Y
POST /api/webhook (receives messages and status updates)
# Signup
curl -X POST http://localhost:3000/api/auth/signup \
-H "Content-Type: application/json" \
-d '{"name":"Test User","email":"[email protected]","password":"password123","workspaceName":"My Business"}'
# Send message (use token from signup response)
curl -X POST http://localhost:3000/api/send-message \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_TOKEN" \
-d '{"contactId":1,"type":"text","text":"Hello from API!"}'
# Import contacts CSV
curl -X POST http://localhost:3000/api/contacts/import \
-H "Authorization: Bearer YOUR_TOKEN" \
-F "[email protected]"
name,phone,email,city,source
John Doe,919876543210,[email protected],Mumbai,website
Jane Smith,919123456789,[email protected],Delhi,manual
npm i -g vercel
vercel --prod
Set environment variables in Vercel dashboard.
npm run build
npm start
# Or use PM2:
pm2 start npm --name "wa-saas" -- start
Use PlanetScale, Railway, or AWS RDS for MySQL in production.
Built with ❤️ using Next.js + Meta WhatsApp Cloud API