- Eric Vegas
- 2026-06-01
- 2026-09-17
The problem
An enquiry that arrives when nobody is at a desk usually turns into a voicemail, and a voicemail turns into a lost booking. Most AI answering services make this slightly better by taking a message, which still leaves a human to do the actual work of checking a calendar and replying.
End the conversation with the appointment already on the calendar and both parties already told, without a person in the loop.
What I built
A conversational agent embedded on the Night Op page, wired to a booking endpoint on a separate application. The endpoint creates a Google Calendar event, sends the customer a confirmation email, sends the operator a details email, and pushes a notification to a phone so a human knows a booking just happened.
How It’s Built
How it works
The agent collects name, contact details, the kind of shoot and a preferred time, then calls a webhook. The webhook requires a shared secret, so the endpoint cannot be triggered by anyone who happens to find it. From there it talks to the Google Calendar and Gmail APIs and fires a push notification. Times are handled in a fixed timezone rather than the caller's, because a booking in the wrong timezone is worse than no booking.
My role
Eric designed the conversation, wrote the booking endpoint and every integration behind it, and wired the two properties together. The speech recognition, the voice and the conversational model are ElevenLabs. Google Calendar and Gmail are Google. What is his is the part that turns a finished conversation into a booking that exists.
The hard part
Not the conversation. The endpoint. A booking webhook is a URL that creates real calendar events and sends real email, so leaving it open means anyone who finds it can fill a calendar with garbage, and there is no user account to rate-limit against. It is gated on a shared secret checked before any work happens. Timezones were the other one: the agent talks to callers anywhere, and a booking resolved against the caller's clock instead of the studio's is worse than no booking at all, so times are pinned to one fixed zone.
Proof
Go and open it
Artifacts
- The agent, running on this site's Night Op page
- The booking endpoint, which creates the calendar event and sends both emails. Not public, but reachable evidence of the chain exists in the running system.
Claims, and what backs each one
A conversational AI agent runs on this site and is reachable by anyone who opens the Night Op page.
The agent widget is loaded on https://www.ericvegas.com/night-op and can be started by any visitor.
The booking webhook creates a calendar event, emails the customer, emails the operator and pushes a phone notification.
The endpoint's source performs all four actions in sequence. It is an authenticated route, so the behaviour is verifiable from the source rather than by an outside request.
The endpoint is protected by a shared secret and cannot be triggered by an arbitrary caller.
The route rejects requests without the expected secret before doing any work.
Results from client deployments are shared with permission on a call.
What I learned
An AI agent is only worth building if the conversation ends in a state change somewhere. Taking a message moves the work; it does not remove it. Every voice project since has been scoped backwards from the write, not forwards from the conversation.
Technologies
- ElevenLabs Conversational AI
- Next.js server routes
- Google Calendar API
- Gmail API
- Webhooks
- Shared-secret auth
Related work
If something here is close to a problem you have, the useful first message is what the thing has to do and what it has to talk to.
See Night Op — $1,500 setup + $497/month