Every Agency Has the Same Problem
Digital agencies are built to serve clients during business hours. Outside of those hours, websites become static brochures. Contact forms sit at the bottom of pages, passive and forgettable. Phone calls go to voicemail. Visitors with real intent arrive, look around, and leave without engaging.
The cost of this is invisible but significant. Every unanswered enquiry is a lost relationship. Every form submission that sits in an inbox overnight loses urgency. Every visitor who bounces without context is a missed opportunity to qualify, route, and respond.
Passive by Default
Sant's own website operated the same way. A contact form existed. An email address was listed. But outside of direct outreach, there was no mechanism for a visitor to have a conversation. to ask a question, describe a problem, or understand whether Sant was the right fit. The website communicated clearly but did not listen.
Intelligent by Default
The brief was specific: build an AI-powered intake system that could hold a natural conversation with any visitor, understand their intent, capture their details, and route the enquiry to the right place. All without a single form field, and all within a single working day.
It does not simulate intelligence. It qualifies, captures, and routes. Then gets out of the way.
Intake, Not a Chatbot.
The distinction matters. A chatbot answers questions. An intake system manages a conversation. understanding what the visitor needs, gathering the right information, and ensuring nothing falls through the cracks. Every architectural decision was made with that distinction in mind.
Conversational AI Trained on the Business
The AI behind the widget is not a generic language model responding to keywords. It is trained on Sant's knowledge base. Services, pricing structure, delivery process, and positioning. When a visitor asks what Build in a Day includes, the AI does not guess. It knows.
The conversation flows naturally. The AI asks clarifying questions when intent is ambiguous, gathers contact details through dialogue rather than form fields, and identifies the type of enquiry. New project, support request, or general question. Structured data is extracted from natural language in real time and parsed into the intake system automatically.
There is no "please fill out this form" moment. The visitor simply talks, and the system understands.
Voice Integration. Talk, Do Not Type
Not every visitor wants to type. Some are on mobile. Some are driving. Some simply prefer to speak. The widget supports full voice calling alongside text chat, powered by Vapi's real-time voice infrastructure.
When a visitor clicks the microphone, the voice SDK loads on demand. Not before. There is zero performance cost until the moment it is needed. The AI speaks, listens, and responds with the same conversational intelligence as the text interface. Visitors can switch between text and voice mid-conversation without losing context.
The voice experience is not utilitarian. A real-time Canvas 2D visualiser renders five layered organic forms that react to both the visitor's voice and the AI's speech. Violet tones pulse gently while listening. Warm coral tones bloom when the AI responds. The animation is subtle, composed, and runs at 30 frames per second with negligible CPU overhead. It communicates presence without distraction.
Design That Disappears
The widget runs inside a Shadow DOM. A fully encapsulated environment that cannot be affected by the host website's styles, and cannot affect them in return. This means it works on any website without modification. No CSS overrides. No z-index wars. No framework dependencies.
The visual design follows Sant's brand language. The panel slides in from the right with a subtle angular clip-path that echoes the geometry used across Sant's digital presence. AI responses appear with a word-by-word blur reveal animation. User messages enter with directional momentum.
On mobile, the panel takes over the full screen. On desktop, it occupies half the viewport. The trigger tab sits flush against the right edge of the page, splitting into text and voice options on hover. Every interaction feels native to the page it lives on, regardless of what that page is built with.
Lead Capture Without Friction
Traditional lead capture asks visitors to fill out forms. This system captures the same information. name, email, phone, project description. Through conversation. The AI identifies when it has gathered enough context and structures that data automatically.
The intake engine behind the widget is not a standalone system. It is the same omnichannel processing layer that handles all of Sant's inbound communication. Email, SMS, phone calls, booking webhooks, portal submissions, and manual admin entries. Eight channels, one processing pipeline. A visitor who chats on the website and later calls by phone is recognised as the same enquiry.
Text conversations persist across page navigations. A visitor who starts chatting on the homepage and then clicks through to the services page picks up exactly where they left off.
Fail-Proofing at Every Layer
Reliability is not a feature. It is a prerequisite. The widget handles failure gracefully at every level.
Sessions that expire are detected automatically. The visitor sees no error. The system silently starts a fresh session and the conversation continues. Rate limiting operates per IP address and per device fingerprint, preventing abuse without affecting legitimate visitors.
If a visitor denies microphone access, voice mode is unavailable but text chat continues without interruption. If the voice SDK fails to load, the error is caught and the visitor is informed cleanly. API keys are encrypted at rest using AES-256-GCM. Every external integration is wrapped with error boundaries that prevent a third-party failure from cascading into the visitor's experience.
One Script Tag. Any Website.
The entire integration is a single line of HTML:
<script src="https://os.sant.co.nz/embed/chat.js"></script>There is no build step, no package installation, no framework requirement. The widget works on Next.js, WordPress, Webflow, Squarespace, static HTML, and anything else that can load a script tag. It auto-detects its API base URL from the script source. It initialises itself. It manages its own lifecycle.
The bundle is under eight kilobytes. The voice SDK, the only significant dependency, is loaded from a CDN on demand. Only when a visitor activates voice mode. The cost of having the widget on every page of a website is effectively zero until a visitor chooses to engage.
Built on Next.js and TypeScript with tRPC for type-safe API communication and PostgreSQL for persistent storage. AI responses are generated via Claude with full token-level usage tracking, cost estimation per call, and administrative dashboards for monitoring spend across providers and modules.
Voice infrastructure runs on Vapi with webhook-driven call logging, assistant synchronisation, and configurable spend caps. The system settings layer reads from the database first with environment variable fallback. Every configuration is manageable through the admin panel without redeployment.
The widget source lives alongside the main application in a dedicated build pipeline. A single command compiles TypeScript to a self-contained IIFE bundle with all styles inlined. No external CSS. No runtime dependencies. No framework coupling.
Intelligent by Default.
The widget launched on sant.co.nz on the same day it was built. Every visitor to the website now has access to a conversational AI that can understand their needs, capture their details, and route their enquiry. Through text or voice, on desktop or mobile, at any hour of any day.
The system has replaced the static contact form as the primary inbound channel. Enquiries arrive pre-qualified with structured data. The team spends less time on intake administration and more time on delivery. The AI handles the conversation. The humans handle the work.
"Intake should not require a login. It should not require a framework. It should not require a page refresh. It should be a single line of code that makes every page of your website intelligent."
See What We Can Build for Your Business in a Single Day.
Every Build in a Day starts with a conversation. This one started with ours.