SMS Marketing CRM
Compliant SMS CRM and marketing dashboard with Vonage API integration for contacts, campaigns, and messaging workflows.
Contribution Snake
SEO Keywords
SMS CRM Vonage marketing dashboard compliant SMS
Architecture
See ARCHITECTURE.md for system diagram, roles, live delivery gates, and deploy URLs.
React dialer UI → Node API (PostgreSQL) → Provider router
├─ Twilio / Vonage / Mock (API lane)
└─ automation-worker (browser lane)
Go live (Twilio)
- Unpause your Twilio account and buy an SMS-capable number
- Set Vercel env on
signalmint-api:TWILIO_ACCOUNT_SID,TWILIO_AUTH_TOKEN,TWILIO_DEFAULT_FROMSMS_SANDBOX_MODE=false,VONAGE_MOCK_MODE=falsePUBLIC_BACKEND_URL=https://signalmint-api.vercel.appAUTO_LIVE_ORGS=true(promotes active orgs to live on boot)
- Configure Twilio webhooks:
- Inbound:
https://signalmint-api.vercel.app/webhooks/twilio/inbound - Status:
https://signalmint-api.vercel.app/webhooks/twilio/status
- Inbound:
- Redeploy API → Super Admin → Test connection / warm-up SMS
Security: Never commit Twilio tokens to git. Rotate the Auth Token if it was pasted into chat or tickets.
Public signup flow
- Create account — name, email, phone (E.164), password; optional org invite code
- Verify email — 6-digit OTP (in production: email; dev: server console when
OTP_LOG_TO_CONSOLE=true) - Verify phone — SMS OTP
- Pending approval — Admin or Super Admin approves in Team admin / Platform console
- Sign in — account becomes
active
Admins can also create users directly (skips OTP) from Team admin → Users.
Super Admin quick guide
- Log in as
super_admin@signalmint.local - Open Platform in the sidebar
- Pending approvals — approve new signups
- Create admin — provisions a new organization automatically
- Organizations — toggle per-org sandbox/live delivery
- Login as — impersonate any active user to see their inbox
Admin quick guide
- Log in as
admin@ftsolutions.local - Open Team admin
- Create user — adds a user to your org (you are their manager)
- Pending approvals — approve signups assigned to your org
- Branding — white-label name and colors for your org
Integration API
Authorization: Bearer smk_…
GET /api/v1/contacts
POST /api/v1/messages/send { "to", "from", "message" }
Create keys in Team admin → API keys.
Local development (optional)
If you have Docker and disk space:
docker compose up -d # Postgres :5434, Redis :6380, worker :5055
cd server
Copy-Item .env.example .env
npm install && npm run dev
cd client-app
npm install && npm run dev
Without Docker, use the live URLs above for testing.
Environment variables (API)
See server/.env.example. Key production vars:
| Variable | Purpose |
|---|---|
DATABASE_URL |
Neon / Postgres connection |
JWT_SECRET |
Auth tokens |
MASTER_ENCRYPTION_KEY |
Encrypt provider credentials |
AUTO_SEED=true |
Demo users on first boot |
OTP_LOG_TO_CONSOLE=true |
Log OTP codes to Vercel logs (for testing without email SMTP) |
REQUIRE_ADMIN_APPROVAL=true |
Signups need admin approval (default) |
SMS_SANDBOX_MODE=true |
Mock SMS delivery (safe for testing) |
PUBLIC_BACKEND_URL |
Webhook base URL |
Deploy to Vercel
API (server/)
cd server
vercel link
vercel deploy --prod
Set env vars in Vercel dashboard for signalmint-api. Migrations run automatically on boot.
Frontend (Vite)
cd client-app
npm install
npm run dev # http://localhost:3000
Set VITE_API_URL (production default: https://signalmint-api.vercel.app). Legacy REACT_APP_API_URL is still aliased in Vite config.
Stack: React 18, Vite, TypeScript/JSX, Tailwind, shadcn/ui, Framer Motion, GSAP. (client-app/)
cd client-app
vercel link
vercel deploy --prod
Set VITE_API_URL=https://signalmint-api.vercel.app
Verification
cd server
npm run test:all
npm run smoke
CI runs on push to main.
Roles
| Role | Can see providers? | Capabilities |
|---|---|---|
| User | No | Inbox, dialpad, contacts, assigned numbers |
| Admin | No | Manage org users, numbers, reports, branding |
| Super Admin | Yes | All providers, all orgs, impersonation, approvals |
Docs
- TESTING.md — manual + automated tests
- PRD.md — full product spec
- .planning/SECRETS-RUNBOOK.md — credential rotation
Discoverability
Author: Muhammad Afzal Kalwar (@mafzalkalwardev) — Full-Stack Developer & Python Automation Engineer (Islamabad, Pakistan · remote worldwide).
Hire / contact: GitHub @mafzalkalwardev · LinkedIn @mafzalkalwardev · WhatsApp +92 307 9670503 · Portfolio · Email
Who is this for?
Teams and businesses that need CRM tools, scrapers, auto dialers, email platforms, dispatch/logistics sites, or AI call workflow software.
FAQ
- Who built this? Muhammad Afzal Kalwar (
mafzalkalwardev). - Can I hire the author? Yes — remote freelance and contract. See contact links above.
- Related work? Browse all repositories and the live portfolio.
SEO / GEO / AEO keywords
Muhammad Afzal Kalwar, mafzalkalwardev, sms-marketing-crm, full-stack developer, Python automation engineer, Islamabad Pakistan, freelance remote developer, CRM scraping dialer email AI tools, messaging, ai, sms, marketing, vonage, automation, crm, lead-generation, javascript
Contact
| Channel | Handle / Number |
|---|---|
| GitHub | @mafzalkalwardev |
| @mafzalkalwardev | |
| +92 307 9670503 | |
| Portfolio | mafzalkalwardev.github.io |
| kalwarmuhammadafzal3@gmail.com |