v1.0 Dashboard Public Profile GitHub
⏳ ~85% Complete Phase 3

Phase 3 — Scheduling

Full appointment scheduling system — calendar, staff management, service catalog, available slot API, holiday blackouts, multi-location support, and one-way Google Calendar sync.

What It Does

Tenants manage their complete appointment workflow: add services with durations and prices, add staff with working hours, set holidays and emergency closures, and view all bookings on a monthly calendar. The AI uses this data in real time to check available slots and book appointments during calls. Google Calendar sync keeps the owner's Google Calendar up to date automatically.

Key Routes

URLDescription
GET /appointmentsCalendar view (monthly)
GET /appointments/createCreate appointment form
POST /appointmentsStore new appointment (fires automation + Google Calendar sync)
GET /appointments/{id}/editEdit appointment
PUT /appointments/{id}Update appointment
POST /appointments/{id}/cancelCancel appointment (fires automation + deletes Google Calendar event)
POST /appointments/{id}/completeMark as completed
GET /appointments/slotsAvailable slots API (used by AI during calls)
GET /staffStaff list
GET /servicesServices catalog
GET /locationsBusiness locations
GET /settings/holidaysHoliday blackout dates
GET /settings/google-calendar/connectStart Google Calendar OAuth

Key Files

TypePath
Controllerapp/Http/Controllers/AppointmentsController.php
Controllerapp/Http/Controllers/StaffController.php
Controllerapp/Http/Controllers/ServicesController.php
Controllerapp/Http/Controllers/LocationsController.php
Serviceapp/Services/GoogleCalendarService.php
Modelapp/Models/Appointment.php
Modelapp/Models/Staff.php
Modelapp/Models/Service.php
Modelapp/Models/Location.php
Modelapp/Models/WorkingHour.php
Tableappointments — customer_id, staff_id, service_id, date, time, status, source, notes
Tablestaff — name, specialty, is_active, google_calendar_id
Tableservices — name, duration_minutes, price, sort_order, is_active
Tableworking_hours — staff_id, day_of_week, start_time, end_time
Tableholidays — tenant_id, date, name, type (holiday/closure)
Tablelocations — name, address, phone, is_primary

What's Complete

  • Appointment CRUD: create, edit, update status, cancel, complete, show
  • Calendar view (monthly) with today's agenda panel
  • Available slots API: checks working hours, existing appointments, holiday blackouts
  • Staff management: CRUD, profile photo, specialty, active/inactive toggle
  • Working hours per staff (per day, start/end time)
  • Holiday blackout dates (full-day closures)
  • Emergency closures (ad-hoc same-day closures)
  • Services catalog: name, duration, price, sort order, active toggle
  • Multi-location support: add branches, mark primary location
  • Google Calendar one-way sync (KaiVox → Google) via pure Guzzle REST
  • OAuth2 connect/disconnect UI in Settings → Integrations tab
  • Auto-sync on appointment create, update, cancel
  • Token refresh logic with expiry detection
  • Event delete on appointment cancellation

What's Deferred

  • Google Calendar two-way sync (Google → KaiVox via push notifications)
  • Outlook / Microsoft Calendar integration
  • Waitlists + deposits (when slot is full, hold booking)
  • Queue management / walk-in token system (built in Phase 12 Front Desk instead)
  • Smart slot optimization (AI suggests best available times)