Skip to main content
Saggar Studio Send an enquiry

Case study · Live site

Magixis

A UK AI phone receptionist. A static marketing site, and a small booking API that the voice agent calls mid-conversation.

What it is
AI phone receptionist
Built by
Arun Paul, Saggar Studio
Relationship
Our own product. Magixis Limited owns Magixis, and Saggar Studio is its trading name.
Year
Core stack
Hand-written HTML, Vapi, Vercel, Cal.com, Vercel KV, Twilio
magixis.aiScreenshot
Magixis home page. Headline: The AI receptionist that answers every call. And fills in the CRM. Beside it, a call console plays a transcript between agent and caller, tags the call with fields such as vertical, urgency and intent, and ends on a booked boiler call-out.
The home page. The call console replays a ring turning into a booked job.
Magixis live dashboard for an example practice: calls handled, calls handled without staff, after-hours value and new-client enquiries, above a chart of fee value captured per day and a ranked list of next actions.
The live dashboard, shown with example data for a professional practice.

Summary

In short.

Magixis (magixis.ai) answers the phone for UK businesses. The agent, Elsie, runs on Vapi and books callers into a Cal.com diary while they are still on the line.

Magixis is our own product: Saggar Studio is a trading name of Magixis Limited. This is not client work, and we label it that way.

One repository holds two things: a static marketing site of 27 hand-written pages, and a six-endpoint booking API on Vercel that the agent calls mid-conversation.

The brief

The job.

Vapi could call Cal.com directly, but Cal.com API keys are account-wide: handing one to a third party means it can read and cancel the entire diary. The key had to stay on our side.

A booking also spans several turns of a call: find a slot, hold it, take details, book. Something had to carry that state so the model never holds an ID it could drop or invent.

How a call flows

From ring to booking.

The Cal.com key stays in Vercel. Vapi holds only a shared secret whose one power is asking this API to book.

The secret travels as x-magixis-secret. It was x-vapi-secret until every call returned 401: Vapi reserves that name for its own webhooks and strips it from outbound requests, while still showing it as configured.

CallerRings the number
Vapi assistantElsieTelephony, speech-to-text, LLM and text-to-speech. The LLM decides which tool to call.
Booking bridge/api/*Vercel serverless functions, London region
Cal.comThe diary
Vercel KVCall state
TwilioSMS
Browser
site/Static HTML, no build step
Two paths in one repository: the voice agent's booking calls, and the website.

What was built

Six parts that do the work.

  1. A site with no build step

    27 hand-authored HTML pages, served exactly as written. One script injects the nav, drawer, announcement bar and footer into any page that asks for them. One shared stylesheet runs on CSS custom properties. Hand-maintained llms.txt files summarise the site for AI search engines, which don't run JavaScript.

  2. A voice agent versioned in git

    The agent runs on Vapi. Its system prompt lives in the repository as Markdown and is pushed over the Vapi API, so the repo is the master copy. A main line and a personal line share one API and book into different Cal.com accounts.

  3. Replies written to be spoken

    Every response carries a spoken field, such as "Monday the twenty-fourth at half past nine in the morning", which the agent reads verbatim. Numbers are spelled out because text-to-speech mis-reads them: "28th" came out as "two eighth". Left to itself, the model got the date wrong on five of five recorded calls.

  4. The right diary, every time

    The line a call belongs to arrives as a fixed Vapi value, never from the model, and is stored once per request. Every downstream call reads it from there, so no endpoint can book a personal caller into the company diary. Anything not exactly "personal" falls back to the main line.

  5. Time as callers say it

    A parser turns "Tuesday afternoon", "after five", "before half ten", "first thing" or "tonight" into a search window. A bare "five" means 5pm, the way a business caller means it. If nothing fits, it widens to a fortnight and offers the nearest slots instead of saying no.

  6. Degrades on a live call

    KV missing: holds stop protecting, calls still work. Twilio unconfigured: no text, the booking still lands. Cal.com unreachable: the agent gets a spoken line offering to take a message, instead of dead air.

Booking bridge

Six endpoints.

Node serverless functions on Vercel, sharing three helpers.
availability"Anything Tuesday afternoon?" Returns up to three slots, already phrased for speech.
holdReserves a slot in Cal.com for three minutes while details are collected.
bookCreates the booking, then texts the confirmation.
bookingFinds a caller's existing booking by phone or email.
rescheduleMoves an existing booking.
smsRe-sends the confirmation or a booking link.

By the numbers

The build.

Hand-written pages
27
API endpoints
6
Voice assistants on one API
2
Minutes a slot is held
3
CSS custom-property references
~1,900
Raw hex values
23

Figures from the repository's stack notes. These describe the build, not call volumes or revenue.

Stack

What it runs on.

Magixis technology stack, layer by layer.
HostingVercel, London region (lhr1). Static site and serverless functions in one deploy; only the site folder is published, so internal docs can never ship.
Frontend27 hand-written HTML pages, one shared stylesheet built on CSS custom properties, deferred plain-JavaScript IIFEs. No framework, no bundler, no build step.
AI searchHand-maintained llms.txt and llms-full.txt
VoiceVapi for telephony, speech-to-text, LLM and text-to-speech. System prompts versioned in git as Markdown and pushed over the Vapi API.
Booking APINode serverless functions: six endpoints, three shared helpers, AsyncLocalStorage for the per-request line
CalendarCal.com API v2 with pinned api-versions, so changes break loudly rather than silently
Call stateVercel KV over the Upstash REST API. Two three-minute keys per call, no SDK.
SMSTwilio REST, called directly, no SDK
AuthShared secret in an x-magixis-secret header. CORS is answered only so Vapi's test panel works.
Testingnode and assert, with fetch stubbed so Cal.com, KV and Twilio are faked. Zero dependencies; runs offline in about a second.

Questions

Straight answers.

What is Magixis?

Magixis is a UK AI phone receptionist at magixis.ai. Its voice agent answers calls and books appointments into a Cal.com diary while the caller is on the line.

How does the Magixis agent book an appointment?

The Vapi assistant calls a small booking API on Vercel. The API checks availability, holds a slot for three minutes while details are collected, books it, and texts a confirmation through Twilio.

Why not connect Vapi straight to Cal.com?

Cal.com API keys are account-wide, so a key held by a third party could read and cancel the whole diary. The key stays in Vercel. Vapi holds only a shared secret that can ask the API to book.

What is Magixis built with?

Hand-written HTML, CSS and JavaScript with no build step, Vapi for the voice agent, Node serverless functions on Vercel in London, Cal.com API v2, Vercel KV and Twilio.

Who built Magixis?

Arun Paul, founder of Saggar Studio, a web studio based in Manchester and Stoke-on-Trent. Magixis is Saggar Studio's own product: both are run by Magixis Limited.

Open

Your business, next.

We are taking on our first client sites. Two get the build free, in exchange for a published case study here. You pay the usual £85 a month.