Receives WhatsApp text and voice messages; voice is transcribed via ElevenLabs before entering the intent recognition flow
whatsapp-receptionist — Next.js SaaS Template
By Hiberius
An open-source AI receptionist SaaS starter built on Next.js that receives text and voice messages via WhatsApp, completes real bookings on Google Calendar, escalates to a human when necessary, and supports multi-tenancy and GDPR compliance.
Explore the design
Compare the page layouts and mobile experience. Open any screenshot for a closer look.
Preview provided in the project README.
One original preview is available. Open the full image to inspect the design.
Screenshots show visual appearance; interactive behavior may differ.
What stands out
A quick read of the recorded project description.
Queries real availability and completes bookings via Google Calendar OAuth, with duplicate booking prevention at the database level
Escalates to a human when safety guardrails are triggered or the customer requests it; the operator receives an email with context and a deep link, and the customer receives a confirmation
Multi-tenant architecture: each tenant connects their own WhatsApp number, credentials are stored encrypted, and row-level security is enabled on all 22 tables
GDPR-native: Article 15 data export and Article 17 deletion endpoints, audit logs, automatic PII redaction in logs, and daily retention jobs executed according to privacy policy thresholds
Integrates Stripe subscriptions and customer portal, and supports Italian B2B electronic invoicing (Fatture in Cloud)
Template Details
This is an AI receptionist SaaS starter for WhatsApp scenarios, built with the Next.js App Router, relying on Supabase Postgres and Anthropic Claude on the backend, using the 360dialog Business API for the messaging channel, ElevenLabs for voice transcription, and Google Calendar OAuth for calendar integration. The project is designed around multi-tenancy: each tenant can connect their own WhatsApp number and configure business hours, services, a knowledge base, and the assistant persona.
Functionally, the system can receive WhatsApp text and voice messages, understand intent, query real availability, and complete bookings while sending confirmations and reminders. When safety guardrails are triggered or the customer explicitly requests it, it switches the conversation state and hands off to a human, sends the operator an email with context and a deep link, and sends the customer a confirmation that the request has been received. The tenant dashboard includes modules for a conversation inbox, calendar, billing, WhatsApp settings, business hours, services, AI persona, and knowledge base, all reading live tenant data.
The README clearly distinguishes the completeness of each module: domain services, database, security primitives, self-service signup, tenant dashboard, multi-tenant WhatsApp, human handoff, background jobs, and data retention policies are implemented; alerting is partially implemented, with no Sentry exception aggregation yet; tenant-isolated RLS has not been verified in practice at runtime, and the cross-tenant admin panel is not wired up. These limitations are documented honestly rather than filling the interface with fabricated data.
Is it right for your project?
Use Cases
- Build a bookable WhatsApp automated reception entry point for local service businesses such as clinics, beauty salons, and repair services
- Use as a starting point for a multi-tenant SaaS product, continuing development on top of existing authentication, billing, and tenant isolation
- A conversational booking system for the European market with explicit compliance requirements for data export and deletion
- Run a WhatsApp receptionist in a self-hosted environment with replaceable AI model configuration, avoiding reliance on unofficial clients
Suitable For
- Teams familiar with Next.js, Supabase, and TypeScript who want to build on an existing multi-tenant skeleton
- Developers who need WhatsApp booking and human handoff capabilities and accept configuring external service credentials themselves
- Projects with explicit requirements for GDPR data export, deletion, and log redaction that prefer self-hosted deployment
- Users who want to use, modify, and distribute the code under the MIT license and bear the costs of external services themselves
Getting started & customization
Use these recorded setup notes alongside the repository instructions for your chosen version.
- 1
After cloning the repository, copy .env.example to .env.local, run npm ci and npm run dev to start; marketing and legal pages render without any credentials
- 2
Accessing the dashboard requires a Supabase project (the free tier is sufficient); other integrations are optional and controlled by feature flags: without an Anthropic key the AI does not reply, without Resend emails are only logged, and no errors are thrown due to missing keys
- 3
You can run ./scripts/setup.sh to fill in environment variables interactively; full variable descriptions are in the inline comments of .env.example
- 4
For production deployment, refer to docs/deployment.md; the screenshots in the README are generated from the running app via node scripts/capture-screenshots.mjs, not design mockups
- 5
The code is MIT-licensed and may be used, modified, commercialized, and distributed for free, but the copyright and license notice must be retained; third-party assets such as demo images, fonts, and icons require separate license verification, and external services such as domains, hosting, databases, payments, and AI may incur additional charges
License & source material
Usage conditions & limitations
Free to use · keep license noticeThis listing covers the free version in the public repository under the MIT license; the free scope is the code of this version and does not mean external services or third-party assets are free.
Must comply with when using
- You may use, modify, commercialize, and distribute the code of this version for free.
- When distributing copies or substantial portions of the code, retain the original author's copyright notice and the full MIT license notice.
- The code is provided as is; warranties and limitations of liability are governed by the original license and applicable law.
Additional costs & items to verify
- Demo images, fonts, icons, and other third-party assets must be checked against their respective licenses and cannot be judged solely by the code's MIT license.
- External services such as domains, hosting, databases, payments, or AI may incur additional charges.
- Accessing the dashboard requires a Supabase project (the free tier is sufficient); other integrations are controlled by feature flags: without an Anthropic key the AI does not reply, and without Resend emails are only logged and not sent.
- WhatsApp text and voice messages depend on the 360dialog Business API, and voice transcription depends on ElevenLabs; you must configure the corresponding external service credentials yourself.
- Booking and availability queries depend on Google Calendar OAuth authorization, and you must complete the calendar integration configuration yourself.
- Subscriptions and the customer portal depend on Stripe, and Italian B2B electronic invoicing depends on Fatture in Cloud; both require external service accounts.
- Not suitable for users who want an out-of-the-box experience and do not want to configure WhatsApp Business; the interface language is currently Italian only; the cross-tenant admin panel is not yet wired up.
- The interface language is Italian, and the English translation is not yet complete.
- The app still carries Ambrogio.ai branding (copy, logo, and Italian marketing pages), which you must replace with your own brand.
- Server-side modules use a service-role client that bypasses RLS; tenant isolation currently relies on hand-written tenant_id filtering, and RLS policies have not been verified in practice at runtime.
- The cross-tenant admin panel is not yet wired up; related reads bypass RLS and require dedicated services and isolation tests.
- Alerting is partially implemented: a watchdog sends an email only when the outbound queue stops consuming; there is no Sentry, and individual exceptions are only logged rather than aggregated.
View Original Text Basis
Permission is hereby granted, free of charge
Original License Text
To reach the dashboard you need a Supabase project (free tier is enough) — the rest of the integrations are optional and feature-gated: without an Anthropic key the AI simply does not reply, without Resend the mailer logs instead of sending, and so on.
Original README
Text and voice notes through the 360dialog Business API (an official Meta BSP) plus ElevenLabs speech-to-text.
Original README
Google Calendar OAuth, availability from real business hours and services, database-level protection against double-booking, confirmations and reminders.
Original README
Subscriptions and Customer Portal, plus electronic invoicing for Italian B2B through Fatture in Cloud.
Original README
**A poor fit if** you want something that works out of the box without configuring WhatsApp Business, if you need a language other than Italian today, or if you need cross-tenant administration — that panel is not wired.
Original README
The interface language is Italian. English translation is not done.
Original README
The application still ships with the **Ambrogio.ai** brand — copy, logo and Italian marketing pages — because that is the product it was extracted from.
Original README
server modules use the service-role client, which bypasses RLS. Isolation currently rests on hand-written `tenant_id` filters, now covered by regression tests that fail when a filter is removed — but the policies themselves are never exercised at runtime.
Original README
**Not wired.** Those reads bypass RLS and need a dedicated service with isolation tests.
Original README
https://github.com/Hiberius/whatsapp-receptionist/blob/main/LICENSEhttps://github.com/Hiberius/whatsapp-receptionist/blob/main/README.md**Partial.** A watchdog emails an alert when the outbound queue stops draining. No Sentry yet, so individual exceptions are logged but not aggregated.
Original README
Compiled by DeepSeek based on repository license and README ·2026-10-08. Results only cover the materials read; dependencies, images, fonts, and subsequent term changes are subject to their respective original texts.
Project checks & description sources
Template Information
- Source platforms
- GitHub
- Documentation and maintenance reference score
- More documented · 92 / 100
- Technologies
- Next.js · React
- Website type
- SaaS · Starter
How this score is calculated
Our heuristic uses license records (up to 30), a demo link (12), a preview (10), stars (15), recorded maintenance (15), description completeness (8), feature records (5) and classification data (5). It is not a code, security or performance test, or a Google score. A link does not establish tested functionality.
What to verify for this project
- Repository update recorded
- 2026-09-13
- Screenshot last checked
- 2026-10-08
A demo link is listed. Check it with your own content and viewport sizes; its presence does not confirm that forms, authentication or payments work.
The catalog identifies Next.js as the primary stack. Check the actual dependency manifest and lockfile for versions and hosting requirements. These notes use recorded metadata, not a code audit or a deployment test.
Use a selection guide →How this description was prepared
AI-assisted description based on catalog records and repository material. Repository authors are not automatically the reviewers of this description.
Review declaration: [email protected] · 2026-10-08
Inspect the recorded source material
SHA-256: 38861194318dffde7e457df06c2d603e712d6a35953a246e894f88c33fdc348a
2026-10-08T02:05:47.750Z
Source file / repository<div align="center"> <img src="docs/screenshots/hero-banner.svg" alt="WhatsApp Receptionist — open-source AI receptionist that books real appointments on WhatsApp" width="100%" /> # WhatsApp Receptionist ### The open-source AI receptionist that books real appointments on WhatsApp **Crafted in Italy 🇮🇹 · GDPR-first · Self-hostable · MIT** [](LICENSE) [](https://nextjs.org/) [](https://react.dev/) [](https://www.typescriptlang.org/) [](https://anthropic.com) [](#quality-gate) [](docs/SECURITY-AUDIT-NOTES.md) [](#gdpr--security) [](https://github.com/Hiberius/whatsapp-receptionist/stargazers) [Project status](docs/PROJECT-STATUS.md) · [Quickstart](#quickstart) · [Documentation](docs/) · [Roadmap](docs/ROADMAP.md) · [Italiano 🇮🇹](README.it.md) </div> --- ## What it does A customer sends a WhatsApp message — text or voice note — at 22:40 on a Sunday. The AI understands what they want, checks the real availability on your calendar, books the appointment, and confirms it. When the message needs a person instead, it escalates to you and tells the customer someone is coming. - **Receives WhatsApp messages and voice notes**, around the clock - **Understands intent and books real appointments** on Google Calendar, with confirmations and reminders - **Hands off to a human** when a guardrail fires or the customer asks — the conversation flips state, you get an email, the customer is told - **Multi-tenant**: each tenant connects its own WhatsApp number and configures its own hours, services, knowledge base and assistant persona <img src="docs/screenshots/landing-1280.png" alt="Landing page" width="100%" /> > The screenshots in this README are captured from the running application with > `node scripts/capture-screenshots.mjs`. They are not mockups. --- ## Honest state of play Most open-source READMEs describe the best version of the project. This one describes the actual one. The full breakdown, with the commands to reproduce every number, is in **[docs/PROJECT-STATUS.md](docs/PROJECT-STATUS.md)**. | Layer | State | |---|---| | Domain services (`src/server/`) | **Real.** Booking with availability and a GiST constraint against double-booking, Stripe subscription lifecycle, WhatsApp outbox with `FOR UPDATE SKIP LOCKED`, retry/backoff and dead-letter, webhook idempotency, Google Calendar OAuth, pgvector RAG, GDPR Art. 15/17. | | Database (`supabase/migrations/`) | **Real.** 22 tables, RLS on every one, `timestamptz` throughout, money as integer cents. | | Security primitives | **Real.** Stripe signature over the raw body, timing-safe secret comparison, HMAC-signed OAuth state bound to the tenant, AES-256-GCM for stored credentials, nonce-based CSP. | | Self-service signup | **Working.** Register → magic link → `/auth/callback` → onboarding → dashboard, with auth guards on every authenticated segment. | | Tenant dashboard | **Working.** Dashboard, conversations inbox with operator reply, calendar, billing, WhatsApp settings, business hours, services, AI persona, knowledge base — all reading live tenant data. | | Multi-tenant WhatsApp | **Working.** Each tenant connects its own number. The API key is encrypted at rest and resolved per tenant at send time; a number cannot be claimed by a second tenant. | | Human escalation | **Working.** Status change, operator email with context and a deep link, and an acknowledgement to the customer. | | Background jobs | **Working.** Seven cron jobs, with a regression test tying `vercel.json` to the exported route handlers. | | Data retention | **Working.** A daily job enforcing exactly the thresholds the privacy policy states, with a dry-run mode and a test that fails if code and policy diverge. | | Alerting | **Partial.** A watchdog emails an alert when the outbound queue stops draining. No Sentry yet, so individual exceptions are logged but not aggregated. | | Tenant isolation | **Partly proven.** Repository filters are covered by regression tests that fail when a `tenant_id` filter is deleted. RLS itself is still never exercised at runtime. **The most important open item.** | | Cross-tenant admin panel | **Not wired.** Those reads bypass RLS and need a dedicated service with isolation tests. The screens say so rather than showing invented data. | **41 frontend pages · 41 API routes · 22 tables · 544 unit and integration tests · 56 Playwright E2E tests · production build verified · zero vulnerabilities in production dependencies.** --- ## Quickstart ```bash git clone https://github.com/Hiberius/whatsapp-receptionist.git cd whatsapp-receptionist cp .env.example .env.local npm ci npm run dev ``` Open <http://localhost:3000>. The marketing site, pricing, verticals, blog, help centre and legal pages render immediately with no credentials at all. To reach the dashboard you need a Supabase project (free tier is enough) — the rest of the integrations are optional and feature-gated: without an Anthropic key the AI simply does not reply, without Resend the mailer logs instead of sending, and so on. Nothing throws because a key is missing. `./scripts/setup.sh` walks through the variables interactively. The full reference is in [`.env.example`](.env.example), documented inline. For production, see [`docs/deployment.md`](docs/deployment.md). --- ## Features | | | |-----|-----| | **WhatsApp + voice** | Text and voice notes through the 360dialog Business API (an official Meta BSP) plus ElevenLabs speech-to-text. No Baileys, no scraped clients. | | **Real bookings** | Google Calendar OAuth, availability from real business hours and services, database-level protection against double-booking, confirmations and reminders. | | **Human escalation** | Guardrails on sensitive topics, explicit handoff requests, operator notification, and an acknowledgement to the customer so silence is never the answer. | | **Editable AI persona** | Each tenant can rewrite the assistant's personality. Safety and output rules are composed around it and cannot be overridden. | | **Knowledge base with RAG** | pgvector semantic retrieval over documents the tenant uploads — prices, cancellation policy, directions, FAQs. | | **GDPR-native** | Art. 15 export and Art. 17 deletion endpoints, audit logging, automatic PII redaction in logs, EU hosting, and a retention job that enforces the published policy. | | **Stripe + Italian SDI** | Subscriptions and Customer Portal, plus electronic invoicing for Italian B2B through Fatture in Cloud. | | **Multi-tenant by construction** | Row Level Security on all 22 tables, per-tenant WhatsApp credentials, tenant-scoped everything. | --- ## Tech stack | Layer | Choice | Why | |---|---|---| | Framework | **Next.js 15.5** App Router | Server Components, Route Handlers, middleware | | Runtime | **React 19** + Node 22 | Async server components, concurrent rendering | | Language | **TypeScript 5.9 strict** | `exactOptionalPropertyTypes`, `noUncheckedIndexedAccess`, no `any` in `src/` | | Database | **Supabase Postgres (EU)** | Managed Postgres, RLS native, pgvector. Migrations are hand-written SQL — deliberately, so the policies are readable. | | Auth | **Supabase Auth** | httpOnly + secure + sameSite cookies, SSR-aware session | | AI | **Anthropic Claude** | Model IDs are configuration (`ANTHROPIC_MODEL_PRIMARY` / `_FAST`), not hardcoded | | Voice | **ElevenLabs** | Italian speech-to-text quality | | Messaging | **360dialog Business API** | Official Meta BSP (`waba-v2.360dialog.io`) | | Calendar | **Google Calendar OAuth** | Encrypted token storage, conflict detection | | Billing | **Stripe** + **Fatture in Cloud** | Subscriptions, Customer Portal, Italian SDI invoicing | | Rate limit | **Upstash Redis (EU)** | Named policies per endpoint | | Logging | **Pino** | Structured JSON with automatic PII redaction | | Testing | **Vitest 4** + **Playwright** | 544 unit/integration + 56 E2E | | Tooling | **ESLint 9 flat** + **Prettier 3** + **Husky** | Pre-commit lint-staged, gitleaks in CI | --- ## Architecture ``` src/ ├── app/ │ ├── (admin)/ super-admin cross-tenant panel │ ├── (auth)/ login, register │ ├── (dashboard)/ tenant dashboard — auth guard lives in the layout │ ├── auth/callback/ magic-link landing, with open-redirect validation │ ├── api/ 41 route handlers │ ├── legal/ privacy, terms, DPA, cookie, security │ ├── verticali/ marketing pages per vertical │ └── page.tsx landing ├── components/ │ ├── marketing/ Hero, Features, Verticals, Pricing, CTA │ ├── dashboard/ shell, operator reply, knowledge documents │ ├── settings/ WhatsApp connection, business hours, services, AI persona │ └── forms/ useApiForm + FormFeedback, shared by every form ├── lib/ │ ├── api/ jsonHandler, body parsing │ ├── auth/ session, guards, cookies, safe redirect │ ├── health/ dependency probes, shared by /status and /api/health/deep │ ├── http/ fetchWithTimeout │ ├── logging/ Pino with PII redaction │ ├── rate-limit/ Upstash policies │ ├── security/ CSP nonce, timing-safe comparisons, internal job auth │ └── supabase/ server + admin clients ├── server/ business logic — never imported by client components │ ├── ai/ adapter, intent router, booking extractor, prompt composition │ ├── appointments/ booking, reminders │ ├── billing/ Stripe + Fatture in Cloud │ ├── conversations/ inbox, operator messages, escalation │ ├── gdpr/ Art. 15 export, Art. 17 delete, retention │ ├── monitoring/ health watchdog │ ├── notifications/ mailer + templates │ └── whatsapp/ service, repository, outbox, provisioning, voice pipeline └── middleware.ts CSP nonce + COEP/COOP/CORP supabase/migrations/ 22 tables, RLS on every one tests/ 544 unit + integration tests e2e/ 56 Playwright tests ``` --- ## GDPR & security Built for the European market, and the defaults reflect it. - **Row Level Security on all 22 tables**, verified by `npm run db:lint`, which derives the table list from the migrations themselves rather than a hand-maintained allowlist - **Webhook signature verification** with timing-safe comparison (Stripe over the raw body, WhatsApp shared secret) - **Credentials encrypted at rest** with AES-256-GCM — OAuth tokens and per-tenant WhatsApp API keys - **CSP nonce per request**, HSTS, COEP, COOP, CORP, `X-Frame-Options: DENY` - **Automatic PII redaction** in logs: email, phone, fiscal code, VAT number, IBAN, tokens - **Rate limiting** with named policies per endpoint - **GDPR Art. 15 export and Art. 17 deletion** with audit logging - **Data retention** enforced daily against the thresholds the privacy policy publishes - **Zero vulnerabilities in production dependencies**, enforced by a CI gate. One dev-only advisory is knowingly accepted, with its reopening condition written down in [`docs/SECURITY-AUDIT-NOTES.md`](docs/SECURITY-AUDIT-NOTES.md) **Known limitation, stated plainly:** server modules use the service-role client, which bypasses RLS. Isolation currently rests on hand-written `tenant_id` filters, now covered by regression tests that fail when a filter is removed — but the policies themselves are never exercised at runtime. Proving isolation against a real Postgres in CI is the top priority for v0.3. --- ## Quality gate ```bash npm run verify # typecheck + lint + 544 tests + RLS coverage npm run build # production build npm run test:e2e # 56 Playwright tests, no credentials required ``` CI runs six jobs on every pull request: **verify**, **coverage**, **production build**, **E2E**, **secret scan (gitleaks)** and **production dependency audit**. The secret scan and the audit are blocking — a gate that cannot fail is not a gate. A note on the build: `npm run verify` does **not** include it, and `next build` catches things `tsc --noEmit` cannot, such as invalid exports from a `route.ts`. Run both. --- ## Screenshots | | | |---|---| | Pricing | <img src="docs/screenshots/pricing-1280.png" alt="Pricing page" width="100%" /> | | Vertical (dental) | <img src="docs/screenshots/dental-1280.png" alt="Dental vertical page" width="100%" /> | | Service status | <img src="docs/screenshots/status-1280.png" alt="Status page with live dependency probes" width="100%" /> | | Landing (mobile) | <img src="docs/screenshots/landing-mobile.png" alt="Landing page on mobile" width="45%" /> | The status page runs real probes against Supabase, Upstash, Stripe and Anthropic at request time. It deliberately publishes no historical uptime percentage, because nothing measures one yet. Authenticated screens are not shown here: capturing them would need a tenant with real conversations, and filling them with invented data is exactly what this project spent a release removing. --- ## A note on branding The repository is the generic **WhatsApp Receptionist**. The application still ships with the **Ambrogio.ai** brand — copy, logo and Italian marketing pages — because that is the product it was extracted from. Everything user-facing is yours to replace: strings live in the marketing components and `NEXT_PUBLIC_APP_NAME`, and the design tokens are in `src/styles/tokens.css`. The interface language is Italian. English translation is not done. --- ## Is this for you? **A good fit if** you want to self-host an AI receptionist, you are building a booking SaaS and want a multi-tenant foundation with RLS and Stripe already wired, or you are looking for a substantial real-world Next.js 15 + Supabase codebase to learn from. **A poor fit if** you want something that works out of the box without configuring WhatsApp Business, if you need a language other than Italian today, or if you need cross-tenant administration — that panel is not wired. --- ## Why this exists There are AI chatbots and there are booking systems. Nothing combined them with European GDPR rigour and Italian B2B fiscal compliance. This started as a real deployment for a clinic and became the thing that was missing. Version 0.2 was rebuilt with **Claude Opus 5 in ultracode mode** — Anthropic's multi-agent orchestration. An eight-dimension audit where every auditor was followed by an adversarial verifier instructed to refute its findings, then parallel implementation workflows. Roughly a third of the initial findings were refuted or downgraded once a second agent tried to disprove them by reading the actual files, which is precisely how single-pass AI review fails. The gravest findings were still verified by hand before anything changed. What that process found, and what it deliberately left alone, is published in full: [`docs/audit/2026-07-27-audit-prodotto.md`](docs/audit/2026-07-27-audit-prodotto.md). If you fork it commercially that is entirely fine — MIT means MIT. Just don't claim you wrote it from scratch. --- ## Roadmap Next up, in priority order: 1. **Tenant isolation proven against a real database** — seed two tenants in CI and assert A cannot read B through the RLS policies themselves 2. **Sentry** with source maps and release tracking 3. **Resource and team entities** — a practice with two chairs cannot be modelled today, and one tenant means one user forever 4. **AI generation moved out of the webhook** into a dedicated outbox job 5. **Prompt caching** and a per-tenant AI cost ceiling 6. **Cross-tenant admin panel** on a tested service 7. **Prompt injection defences** and a much larger AI evaluation set Full list, including longer-term bets: [`docs/ROADMAP.md`](docs/ROADMAP.md). --- ## The skill behind it The reasoning in this codebase is packaged as an Agent Skill, so you can apply it on any stack rather than adopting this one: **[whatsapp-receptionist-builder](https://github.com/Hiberius/whatsapp-receptionist-builder)** — the webhook signature over the raw body, the 24-hour customer service window, idempotency against Meta retries, and double-booking prevention at the database. Plus offline tools for the two things you cannot test without a phone number. ``` npx skills add Hiberius/whatsapp-receptionist-builder ``` It is one of [ten](https://github.com/Hiberius/hiberius-skills) built the same way. ## Contributing Pull requests welcome — see [`CONTRIBUTING.md`](CONTRIBUTING.md). The repository is primed for [Claude Code](https://claude.com/claude-code): `CLAUDE.md` and `AGENTS.md` carry the project's conventions, so an agent opening this repo starts with the right context. Two house rules worth knowing before you open a PR: 1. **Run `npm run verify` and `npm run build`.** Verify does not include the build. 2. **Don't add a claim the code cannot back.** If a number appears in the README or the UI, it must be reproducible. This project removed an entire layer of invented metrics in 0.2.0 and would rather not grow another. --- ## License MIT © [Christian Calabrò](https://github.com/Hiberius) — see [`LICENSE`](LICENSE). --- <div align="center"> Made in Italy by Christian Calabrò ([@Hiberius](https://github.com/Hiberius)) If it saved you time, [star the repo](https://github.com/Hiberius/whatsapp-receptionist). </div>
Explore similar templates
Compare previews and descriptions within the same stack and category.

Next.js SaaS Starter
The official Next.js SaaS starter template, integrating email/password authentication, Stripe Checkout subscriptions, a dashboard with user/team CRUD, basic Owner/Member RBAC, and activity logging.
Next.js · SaaS

Next.js Commerce
Vercel's officially maintained Next.js App Router ecommerce starter with deep Shopify integration, offering a complete product catalog, cart, and checkout flow. Core logic is modular for swapping backends, and community provider versions exist for BigCommerce, Medusa, and Saleor.
Next.js · E-commerce

Next-js-Boilerplate
A developer-first Next.js 16 starter with Tailwind CSS 4 and TypeScript, supporting both App Router and Page Router.
Next.js · Starter

tailwind-nextjs-starter-blog
A Next.js and Tailwind CSS blog starter template using Contentlayer for Markdown/MDX, with built-in SEO, code highlighting, and tags. It targets personal technical blogs and migration from Jekyll/Hugo to React, and supports one-click Vercel deployment.
Next.js · Blog

next-forge
next-forge is a Turborepo-based Next.js template maintained by Vercel, positioned as a starting point for SaaS products.
Next.js · Starter

SaaS-Boilerplate
SaaS-Boilerplate is an open-source SaaS starter template built with Next.js App Router, React 19, TypeScript, Tailwind CSS, and Shadcn UI.
Next.js · SaaS
