templates/calendar/.agents/skills/availability-booking/SKILL.md
How the booking system works: checking availability, managing booking links, configuring availability settings, and the public booking URL pattern.
npx skillsauth add BuilderIO/agent-native availability-bookingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
The calendar app includes a booking system where users can share public URLs for others to book time. Availability is configured per-user, and bookings are stored in SQL via Drizzle ORM.
Availability is stored in the SQL settings table under the key calendar-availability. It defines which days and time windows the user is available.
{
"timezone": "America/Los_Angeles",
"schedule": {
"monday": [{ "start": "09:00", "end": "17:00" }],
"tuesday": [{ "start": "09:00", "end": "17:00" }],
"wednesday": [{ "start": "09:00", "end": "12:00" }, { "start": "13:00", "end": "17:00" }],
"thursday": [{ "start": "09:00", "end": "17:00" }],
"friday": [{ "start": "09:00", "end": "16:00" }],
"saturday": [],
"sunday": []
}
}
Read via: readSetting("calendar-availability")
Write via: writeSetting("calendar-availability", { ... })
The check-availability script finds open time slots for a given date by:
# Find 30-minute slots on a date
pnpm action check-availability --date 2026-04-05
# Find 60-minute slots
pnpm action check-availability --date 2026-04-05 --duration 60
Required: --date (YYYY-MM-DD format).
Optional: --duration (minimum slot length in minutes, default 30).
Booking links are stored in SQL via Drizzle ORM. Each link has a slug, duration, and associated availability.
The UI manages booking links at /booking-links. The public booking URL pattern is:
/meet/{username}/{slug}
For example: /meet/steve/30min
Bookings are the confirmed appointments. They are stored in SQL via Drizzle ORM and visible at /bookings in the UI.
| User says | What to do |
| -------------------------------------- | -------------------------------------------------------- |
| "Am I free Tuesday at 2pm?" | check-availability --date 2026-04-08 |
| "Find me a 1-hour slot this week" | Check availability for each day this week with --duration 60 |
| "Set my hours to 9-5 weekdays" | Update the calendar-availability setting |
| "Block off Friday afternoons" | Update the Friday schedule to end at 12:00 |
| "Show my bookings" | Navigate to /bookings |
| "Show my booking links" | Navigate to /booking-links |
tools
Public booking flow — the state machine, animations, and URL/app-state sync.
tools
Trigger-based automations — reminders, follow-ups, webhooks — across the booking lifecycle.
tools
Team event types, round-robin assignment, collective bookings, host weights, and no-show calibration.
development
The pure `computeAvailableSlots` function — inputs, outputs, invariants, and debugging guide.