DEV Community

Volodymyr Fursov
Volodymyr Fursov

Posted on

How I Built an AI Booking Chat for Salons with Next.js, Supabase and Groq

Most booking systems for salons look the same: pick a date, pick a time, pick a service, fill in your name, confirm. Five steps minimum.
I wanted to build something different. What if customers could just type "Tomorrow 3pm haircut" and the system would understand it?
The Problem
I'm building term-in — a booking system for hair salons, beauty studios and barbershops in Germany. The DACH market (Germany, Austria, Switzerland) has around 80,000 salons, and the majority still rely on phone calls and paper calendars.
The biggest pain points:

Most booking attempts happen outside business hours — evenings, weekends, holidays
No-show rates of 10-20% are common, costing salons thousands per month
Salon owners want simple tools, not complex enterprise software

The Stack

Next.js with App Router and TypeScript
Supabase (PostgreSQL) on EU servers for GDPR compliance
Groq AI with Llama 3.3 70B for natural language understanding
Twilio for SMS reminders
Stripe for subscriptions
Hetzner VPS + Cloudflare + PM2 + Nginx

How the AI Booking Works
The key insight: the AI only handles understanding, not flow control.
javascriptconst userMessage = "Morgen 15 Uhr Haare schneiden bei Anna"

const parsed = await groq.parse(userMessage)
// { service: "Haarschnitt", date: "2026-04-11", time: "15:00", staff: "Anna" }

if (parsed.service && parsed.date && parsed.time) {
const slot = await checkAvailability(parsed)
if (slot.available) {
await createBooking(slot)
await sendConfirmation(customer)
}
}
The AI never decides what happens next — it just extracts structured data from natural language. A state machine handles all business logic. This makes it reliable and predictable.
Why separate AI from flow control? Because AI hallucinations in a booking context mean double-bookings, wrong times, or lost customers. The state machine catches anything the AI gets wrong before it reaches the database.

Why Groq + Llama?

Speed: Groq returns responses in 200-400ms. For a chat interface, this feels instant.
Cost: Significantly cheaper than GPT-4 for structured extraction tasks
German language: Llama 3.3 70B handles German surprisingly well — including abbreviations like "Do 14h Schnitt" (Thursday 2pm haircut)
No vendor lock-in: The extraction prompt is model-agnostic. I can swap to any model that handles German without changing business logic.

SMS Reminders: The Highest ROI Feature

The biggest ROI feature isn't the AI booking — it's automatic SMS reminders 24 hours before each appointment.
A simple text: "Hallo Frau Müller, Ihr Termin morgen um 14 Uhr bei Anna. Wir freuen uns auf Sie!"
Industry data suggests SMS reminders can significantly reduce no-shows. At an average appointment value of €40-50, even preventing a few no-shows per week covers the entire cost of the software.
The implementation is simple: a cron job runs every hour, queries upcoming appointments for the next 24 hours, and sends a Twilio SMS to each customer who hasn't been reminded yet. Total code: about 40 lines.

GDPR: Not Optional in Germany
Building for the German market means GDPR compliance from day one:

EU servers only: Supabase project in Frankfurt. No data leaves the EU.
Cookie Consent Mode v2: Google Analytics loads but doesn't collect data until the user consents.
Local fonts: No Google Fonts CDN. The Landgericht München ruled in 2022 (Az. 3 O 17493/20) that loading Google Fonts externally without consent is a GDPR violation.
Data processing agreement: AV-Vertrag included out of the box.
Right to deletion: One click deletes all customer data.

In Germany, "DSGVO-konform" on your landing page is a real selling point.

Architecture: Standalone Deployment

Next.js standalone output is great for VPS deployment:
javascript// next.config.ts
export default {
output: 'standalone',
}
This produces a self-contained server that runs with just node server.js. Combined with PM2 for process management and Nginx as a reverse proxy, it's a solid production setup.
The deployment flow:

Build locally: npm run build
SCP the standalone folder + static assets to the VPS
PM2 restarts the process

Total deployment time: under 60 seconds.

Free Tools as Lead Magnets

Instead of cold outreach, I built free tools that salon owners discover through search:

Salon Digital Check — scores your salon's online presence in 60 seconds
DSGVO Check — scans any website for GDPR violations
No-Show Calculator — estimates how much no-shows cost your salon
Booking Benchmark — compares your booking setup with other salons

Each tool provides immediate value without requiring signup. An optional email wall after the results feeds into a nurture sequence.
Current Status

Pre-revenue, recently launched
1,500+ SEO pages across 4 domains
Building backlink profile through content and directory listings
Pricing: €29/month (Pro), €79/month (Business), €499/month (Enterprise)

What I Learned

AI for understanding, not for flow control. Use it for NLU, use state machines for logic.
SMS beats email for local businesses. Salon owners check their phone between clients.
GDPR is a feature, not a burden. Build it in from day one and use it as a differentiator.
Free tools beat cold outreach. A salon owner who discovers a problem through your tool is far more receptive than one who gets a cold email.
Standalone Next.js + VPS is underrated. A €10/month Hetzner VPS handles everything for early-stage SaaS.

Would love feedback from anyone building B2B SaaS for traditional industries. How did you get your first customers?
term-in.app

Top comments (0)