The assistant prepares, the user confirms
A booking assistant that acts on a wrong guess is worse than none. Its tools return proposals that appear as a confirmation card, and only the user's click runs them. Tool output sent from the browser is discarded, so nobody can forge a proposal.
Trade-off: one extra click and slower than a fully autonomous agent, in exchange for an assistant that can't double-book or cancel the wrong appointment. A live suite of about 120 checks (prompt injection, data leaks, scope, ambiguity, Arabic, multi-turn) gates every prompt change.
A knowledge base the admin controls
Admins add, edit, upload, and hide documents in the app, file them under their own sections, and choose which roles can read each one. Retrieval filters on that in SQL, so the assistant never cites something the asking role can't see.
The booking rules are part of it: change the cancellation cutoff in Settings and the assistant quotes the new value straight away, as in the video.
Trade-off: every edit is chunked and embedded, and switching the embedding model means re-indexing everything.
A business is configuration, not code
The code never names its domain. What clients, providers, and appointments are called, the field labels, the landing copy, the assistant's scope, the demo personas, the knowledge base, and the sample data all come from one domain profile. Two ship side by side, a business-setup consultancy and a university, and a unit test fails if a profile's words leak into code. The engine grew out of my AI Appointment Scheduler.
Trade-off: generic names in the code (client, provider, admin) and some up-front abstraction, paid back by switching business without touching code.
Sharing an admin login with strangers
The guest admin's password is on the landing page, so I treat it as anyone on the internet. It can't lift the abuse limits or close registration, its knowledge changes expire after 24 hours, and settings and document saves carry the version they loaded, so a stale form gets a conflict instead of overwriting a newer change.
Trade-off: visitors share the guest accounts and their daily limits, and a visitor can still make a mess until the weekly reset. A real deployment has none of this, because the demo accounts are switched off.