Synaplan
Open-source AI platform for companies: self-hosted AI agents, GDPR-compliant chatbot widget, RAG knowledge base, WhatsApp and Outlook AI, MCP, multi-model routing. Docker, Kubernetes or hosted in Germ
ReplyBooker is an AI receptionist for WhatsApp: it answers your customers 24/7 in their own language and books appointments automatically. 14-day free trial.
BusinessTypeScript · PLpgSQLGitHub @liibaan1257-delOnlineOwner 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 ↗AI customer support and booking agent for WhatsApp. Business owners describe their business (services, prices, hours, FAQs, booking policy); the agent answers customers on WhatsApp with Claude, detects what they want, and captures bookings that the owner confirms from a dashboard.
Stack: Next.js 16 (App Router) · TypeScript · Tailwind CSS 4 · shadcn/ui ·
Supabase (Postgres, Auth, Realtime, RLS) · Claude (claude-opus-5-5) ·
WhatsApp Cloud API (Meta) · Vercel.
| Where | What |
|---|---|
/signup, /login | Email + password accounts. Each owner gets their own business (multi-tenant). |
/dashboard | Setup checklist, active conversations, leads, upcoming/pending bookings, recent chats. Updates live. |
/dashboard/knowledge | Business details, services & prices, opening hours, FAQs, booking policy, WhatsApp connection, preview of what the AI knows. |
/dashboard/chat-test | Chat as a customer against the real engine (separate "test" channel). |
/dashboard/bookings | Upcoming / pending / past bookings; confirm, cancel, complete (the customer gets a WhatsApp message); add bookings by hand. |
/dashboard/conversations/[id] | Full chat history with intents. |
/api/whatsapp/webhook | Meta webhook: verification (GET) and incoming messages (POST). |
/api/whatsapp/webhook. The X-Hub-Signature-256 HMAC is
checked on the raw body; the route answers 200 immediately and continues
in after().{ reply, intent, customer_name, booking }.lang).
Links like /fr/dashboard switch the language. Text lives in
lib/i18n/messages/*.ts; TypeScript fails the build if a language misses a key./privacy policy page (6 languages; set the optional
NEXT_PUBLIC_CONTACT_EMAIL to show your contact address). In Settings
owners download all their data (JSON) and can delete their account
permanently. A customer's conversation (messages + bookings) can be erased
from its page. Only necessary cookies (session, language): no cookie banner needed.NEXT_PUBLIC_CONTACT_WHATSAPP).
The customer pays you (Mobile Money, Waafi, bank…), and you press +1 month,
+1 year, Pause or change the plan on the Admin page.vercel.json) confirmed
bookings in the next day get a WhatsApp reminder: free text in the customer's
language inside WhatsApp's 24-hour window, otherwise the business's approved
Meta template (appointment_reminder by default, body
"Hi {{1}}, a reminder of your {{2}} appointment at {{3}} on {{4}}…").supabase/migrations/20261010100000_schema.sql, then
supabase/migrations/20261011100000_global.sql (currency, 12h/24h time,
customer language, sign-up time zone), then
supabase/migrations/20261012100000_twilio.sql (Twilio number, provider), then
supabase/migrations/20261013100000_billing.sql (plans, access, admin flag), then
supabase/migrations/20261014100000_reminders.sql (appointment reminders).
Optional checks: supabase/tests/schema_test.sql, global_test.sql,
twilio_test.sql and billing_test.sql → "Success. No rows returned".
Make yourself the operator:
update public.profiles set is_platform_admin = true where email = '[email protected]';https://<your-app>/auth/confirm to Redirect URLs.See .env.example. Mark every secret as Sensitive:
| Variable | Secret? |
|---|---|
NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY | public |
SUPABASE_SERVICE_ROLE_KEY | secret (server-only) |
ANTHROPIC_API_KEY | secret |
WHATSAPP_VERIFY_TOKEN, WHATSAPP_APP_SECRET, WHATSAPP_ACCESS_TOKEN | secret (Meta) |
TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN | secret (Twilio, optional) |
CRON_SECRET | secret (daily reminder job; any long random string) |
RESEND_API_KEY | secret, optional (emails you when someone signs up; Resend key with sending access) |
NOTIFY_EMAIL | optional (where signup emails go; defaults to NEXT_PUBLIC_CONTACT_EMAIL) |
NEXT_PUBLIC_CONTACT_EMAIL, NEXT_PUBLIC_CONTACT_WHATSAPP | public, optional (contact links on home + privacy page) |
Redeploy after changing them.
https://<your-app>/api/whatsapp/webhook, Verify token = your
WHATSAPP_VERIFY_TOKEN. Subscribe to messages.TWILIO_ACCOUNT_SID and TWILIO_AUTH_TOKEN (Twilio Console → Account
Info) in Vercel and redeploy.https://<your-app>/api/whatsapp/twilio
(HTTP POST). Requests are verified with X-Twilio-Signature.+14155238886) in Knowledge
base → WhatsApp connection. Replies and booking confirmations go back
through the provider the customer wrote in on.npm install
cp .env.example .env.local # fill in
npm run dev
| Command | What |
|---|---|
npm run dev | Development server |
npm run build | Production build |
npm run lint / npm run typecheck | ESLint / TypeScript |
npm test | Unit tests (time zones, booking rules) |
lib/supabase/admin.ts imports server-only).lib/security/headers.ts.