Open-source WhatsApp Web interface
Self-hostable, multi-tenant, and AI-agent ready. Built for OpenBSP API.
demo.mp4
- Live updates via Supabase Realtime
- Responsive, mobile-first design
- Dark mode
- Spanish, English, and Portuguese
- Built with Vite, React, Tailwind CSS, Zustand, TanStack Query + Router
- Conversations — Real-time WhatsApp-style chat with media support (images, audio, documents), message status indicators, and inline template sending
- Contacts — Address book with phone validation
- AI Agents — Create and configure agents with any provider, set tools, and instructions
- Templates — WhatsApp message template builder with variable pills, formatting preview, and category management
- Integrations — WhatsApp Business account connection via Embedded Signup
- Settings — Organization management, team members with roles (owner/admin/member), API keys, webhooks
- Stats — Usage charts and billing quota dashboards
- Multi-org — Switch between organizations; invite and onboard team members
![]() |
![]() |
![]() |
![]() |
Note
Deploy in under 5 minutes — no local environment required. This is an SPA that can be hosted on any static site hosting service.
- Fork this repository (
mainbranch) - Go to the Cloudflare Dashboard > Workers & Pages > Create application > Pages > Connect to Git
- Select your fork and use these build settings:
- Production branch:
main - Framework preset:
React (Vite) - Build command:
npm run build - Build output directory:
dist
- Production branch:
- Set environment variables:
- VITE_SUPABASE_URL
- VITE_SUPABASE_ANON_KEY
- VITE_META_APP_ID — Optional. Needed for WhatsApp Embedded Signup.
- VITE_FB_LOGIN_CONFIG_ID — Optional. Needed for Tech Provider flow.
- Save and deploy
You are live! 🚀
You need a running OpenBSP API — either locally via npx supabase start or a hosted Supabase project.
npm installCreate a .env file:
VITE_SUPABASE_URL=http://localhost:54321 # or your Supabase project URL
VITE_SUPABASE_ANON_KEY=your-anon-key
# VITE_META_APP_ID= # optional, for WhatsApp Embedded Signup
# VITE_FB_LOGIN_CONFIG_ID= # optional, for Tech Provider flowStart the dev server:
npm run devOpen http://localhost:5173.
The UI is written in Spanish (the default language) and supports English and Portuguese translations. All user-facing strings use the t() function from src/hooks/useTranslation.tsx, which returns the Spanish key as-is or looks up a translation from public/locales/{lang}.json.
Adding new strings: wrap any user-facing text with t("Texto en español"). The Spanish key is the source of truth — no entry in en.json/pt.json means the Spanish text is shown.
Adding translations: add the corresponding entries to public/locales/en.json and public/locales/pt.json.
Checking for drift: run the sync script to detect missing or stale keys:
./scripts/sync-translations.shQuestions, ideas, or feedback? Join our WhatsApp Community or open an issue. We'd love to hear from you.



