The challenge
A two-person senior studio wants to be reachable for potential clients at any hour, in English, Dutch and Hungarian, without spending its days in introductory emails. Visitors should get real answers, a sense of fit and price, and an easy way to book a call. And because privacy is part of what we sell, conversations must not go to a third-party AI provider.
What we built
A chat-first website. The first thing you see is a question, not a brochure: describe what you're building, and an assistant takes it from there.
- Answers from our own knowledge base, read by the agent when it needs it, instead of a vector database to maintain.
- Quick questions with tappable answers when you describe a project: the assistant writes them, you pick, type or skip.
- An indicative price range from a deterministic estimator, explained by the assistant.
- Booking with a confirmation step: the agent proposes, you confirm, and both sides receive a calendar invitation.
- An admin view with every lead's brief, fit indication, estimate and transcript.
Architecture
- Open-source LLM on our own hardware in the Netherlands
- LangGraph agent in a FastAPI service, with conversation memory in PostgreSQL
- Human-in-the-loop steps (booking confirmation, quick questions) as interrupts in the agent
- Next.js front end with a streaming chat interface (assistant-ui over AG-UI)
- PostgreSQL for everything else too: sessions, leads, bookings and the job queue for reminders and retention
- Magic-link sign-in, rate limits and an invisible bot check against abuse
Outcome
The site qualifies and books conversations around the clock in three languages, keeps every conversation on infrastructure we control, and hands us a structured brief before each call. It is also our showcase: the patterns behind it (a private model, tools that keep the model honest, people in the loop) are the ones we use for clients.
Stack
Python · FastAPI · LangGraph · PostgreSQL · Next.js · TypeScript · assistant-ui · Docker