WhatsApp-first CRM and operations platform for service businesses — language schools, salons, clinics, gyms, anything with recurring customers and bookable services. Runs entirely on Vercel + Upstash Redis and stays on free tiers up to a few hundred customers per tenant.
| Module | What it does |
|---|---|
| Pipeline / CRM | Lead capture, drag-and-drop kanban, sales rep assignment, follow-up reminders |
| Two-way Inbox | Live WhatsApp inbox with 24h-window detection, agent assignment, template fallback |
| ETHERA AI Insights | In-thread conversation summaries, intent/sentiment classification, click-to-fill reply suggestions |
| Broadcast | Personalised CSV campaigns + segmented sends to opted-in customers; image + CTA buttons |
| Bot engine | Visual flow editor, multi-language scripts, intent phrases, business-hours routing |
| Billing | Customers / Payers / Contracts / monthly invoice grid, opt-in renewal alerts |
| Staff & Payroll | Employee CRUD with NIF, monthly hours ledger, auto-calc for teachers, month locking, configurable Recibos Verdes export |
| Costs & P&L | Monthly ledger, per-category breakdown, dedicated P&L tab with staff salary auto-row + visual bar chart |
| Bookings | Slot management with capacity + teacher assignment |
| Multi-number | Run one CRM behind several WhatsApp numbers (Care, Lead Gen, etc.) |
| Mobile-first | Full responsive UI; sidebar drawer + pin/unpin on desktop |
| i18n | EN + PT-PT out of the box, lightweight dictionary system for additional locales |
| White-label | Per-instance branding, configurable feature flags, custom domain |
Single-tenant — each customer deploys their own Vercel project + Upstash database. Full step-by-step in docs/DEPLOYMENT.md (about 60–90 minutes the first time).
If you've already deployed and want to point it at your own domain, see docs/MIGRATE_DOMAIN.md.
git clone https://github.com/your-org/stepup-wa.git
cd stepup-wa
cp .env.example .env # fill in WA + Upstash credentials
npm install
npm run dev # Vite on :5173, Vercel functions on :3000The webhook is exposed at http://localhost:3000/webhook — to test from Meta you'll need a tunnel, e.g.:
ngrok http 3000
# then put the https://*.ngrok.app/webhook URL into Meta's webhook config- Frontend: React + Vite + Tailwind CSS, lightweight i18n, lucide-react icons
- Backend: 12 Vercel serverless functions (Node 20), folded by
?resource=sub-routes to stay under Hobby-tier limits - Datastore: Upstash Redis (REST API)
- Email: Resend (optional)
- WhatsApp: Meta Cloud API v21.0
- Optional integrations: Facebook Ads, InvoiceXpress (Portuguese invoicing)
- No database server — everything is Redis: leads, customers, contracts, invoices, conversations, sessions
- Function-count discipline — every new endpoint folds into an existing function file via
?resource=query routing. New top-level files would push us past Vercel Hobby's 12-function cap. - Multi-WhatsApp-number routing — webhook reads
metadata.phone_number_idfrom inbound payloads and dispatches with per-number credentials carried viaAsyncLocalStorage. Falls back to env-var single-number when nothing is configured. - GDPR / Lei 41/2004 compliant by default — explicit marketing consent capture with versioning, opt-out keywords (STOP/PARAR/CANCELAR/SAIR), per-payer opt-out flags
| Doc | What's in it |
|---|---|
| DEPLOYMENT.md | Zero-to-live deployment for a new tenant |
| MIGRATE_DOMAIN.md | Custom domain (DNS + Vercel + Meta webhook update) |
| LEADGEN_PLAYBOOK.md | Ad → QR → WhatsApp → CRM pipeline setup, with worked example |
| FACEBOOK_INTEGRATION_SETUP.md | Optional Ads dashboard via Meta Marketing API |
| INVOICEXPRESS_INTEGRATION.md | Optional Portuguese invoicing |
| CHANGELOG.md | Themed log of merged PRs |
| ROADMAP.md | Forward-looking work, ordered by readiness |
Source-available for evaluation. Contact the maintainers for production licensing terms.
