TURNO · Booking and appointment agent
A conversation can become an organized appointment
A custom-code prototype for an appointment agent: service rules, available times and local booking confirmation. Explore how the automation works and how it could connect to Google Calendar.
Own prototype · Custom code · Guided demo
What problem would it solve?
Booking requires more than finding a free calendar cell: service duration, business hours, buffers and existing appointments must agree. The proposed agent would guide that process through conversation.
Availability with rules
30- and 60-minute services, business hours, occupied blocks and 15-minute buffers are implemented in TypeScript.
Explicit confirmation
The selected time is checked again before recording the sample booking. Occupied times stop being available in this view.
An external calendar adapter
The code includes separate Google Calendar availability and event-creation adapters with server-side authorization.
01 / User experience
Explore the prototype
The interface executes local business rules with sample data. Its responses are guided; AI inference and external services are not active.
TURNO/ Appointments
Custom software · Interactive prototype
Sample week · November 2026
Available times
America/Mexico_City · UTC−06:00
No personal information is requested. Bookings stay in this view until reset or reload.
TURNO · Booking summary
Choose a time. I will check the service rules before recording the sample appointment.
Execution trace
Service rules loaded
30 min · 15 min buffer
Sample agenda checked
Opening hours and occupied blocks are applied.
Available slots calculated
The slot is checked again before confirmation.
Google Calendar API v3Adapter only
Guided scenarios with sample data. Rules run in your browser; no AI model or external account is connected. Reset clears this demo.
The automation, step by step
- 01
Service and date
- 02
Business rules
- 03
Availability
- 04
User confirmation
- 05
Booking record
02 / Behind the interface
Real code, with each connection explained
These excerpts are extracted from this project's source files at build time. Each tab identifies whether the code runs in the demo or belongs to an adapter awaiting connection.
Runs in the demo
Business hours, occupied intervals, service duration and buffers determine which times are offered.
export function availableSlots(date: string, duration: number, bookings: DemoBooking[]) {
if (!demoDates.some(day => day === date) || ![30, 60].includes(duration)) return []
const busy = [{ start: 10 * 60, end: 11 * 60 }, ...bookings.filter(b => b.date === date)]
return Array.from({ length: (close - open) / 30 }, (_, index) => {
const start = open + index * 30
const end = start + duration
const available = end + buffer <= close && !busy.some(event =>
overlaps({ start, end: end + buffer }, { start: event.start, end: event.end + buffer }))
return { start, end, available }
})
}
Read the complete file on GitHubConnections and implementation status
| Component | Responsibility | Current status |
|---|---|---|
| Booking engine | Intervals, buffers and validation | Implemented in the demo |
| Booking record | In-memory state in the current view | Implemented; cleared on reload |
| Google Calendar API v3 | freeBusy and events adapters | Prepared; no account connected |
| AI model | JSON Schema tool contracts | Designed; no model connected |
API references reviewed on 21 October 2026: Google Calendar · freeBusy · Google Calendar · events.insert
