Full scheduling system for contractors — from dashboard overview to customer self-booking, dispatch routing, and availability management.
AppointmentsDashboard with tab-filtered lists and quick-action chips
useQuery(api.appointments.listByDate) · useAppointmentActions()
CalendarView with month grid, color-coded dot indicators, and day detail drawer
useQuery(api.appointments.getMonthSummary) · onDayPress callback
AppointmentDetail with customer card, map preview, scope, and actions
useQuery(api.appointments.getById) · useMutation(api.appointments.cancel)
BookAppointment wizard with customer search, date/time picker, and toggle options
useMutation(api.appointments.create) · useAvailableSlots(date)
CustomerSelfBooking public page with calendar, intake form, and photo upload
httpAction(api.public.appointments.book) · useContractorAvailability()
DispatchBoard with map pins, route optimization, and drive-time connectors
useQuery(api.appointments.getTodayRoute) · useRouteOptimizer()
AvailabilitySettings with weekly grid, buffer slider, and blocked dates manager
useMutation(api.appointments.updateAvailability) · useContractorSchedule()
AppointmentHistory with conversion stats, outcome badges, and date filtering
useQuery(api.appointments.getHistory) · useConversionStats()
appointments // Core appointment records
appointmentSlots // Available time slots
appointmentAvailability // Weekly schedule config
appointmentBlockedDates // Vacation, off days
appointmentReminders // SMS/email notifications
appointmentHistory // Outcome + conversion log
listByDate // Today/week/month filter
getById // Full detail with customer
getMonthSummary // Dot counts per day
getTodayRoute // Ordered stops + drive time
getAvailability // Weekly hours + breaks
getAvailableSlots // For date + duration
getHistory // Past with outcomes
getConversionStats // Rate, total, no-show %
create
args: customerId, propertyId, date, time,
type, duration, notes, sendConfirmation
reschedule
args: appointmentId, newDate, newTime
cancel
args: appointmentId, reason
updateStatus
args: appointmentId, status
updateAvailability
args: schedule, breaks, buffer, maxPerDay
addBlockedDate
args: startDate, endDate, reason
AppointmentCard // Dashboard list item
CalendarView // Month grid + dot indicators
DayDrawer // Bottom sheet for day detail
TimeSlotPicker // Grid of available times
DispatchMap // Map + route pins
RouteCard // Stop card w/ drive time
AvailabilityGrid // Weekly schedule editor
BufferSlider // 15-60 min range input
pending // Awaiting confirmation
confirmed // Customer confirmed
in_progress // Contractor on-site
completed // Finished successfully
cancelled // Cancelled by either party
no_show // Customer didn't show
rescheduled // Moved to new time
// Types
estimate → Free, 30-90 min
consultation → Paid, 60 min
service → Scheduled work, variable
follow_up → Post-job check, 30-60 min
// Integrations
SendGrid → Email confirmations
Twilio → SMS reminders (24h, 1h)
Google Maps → Route optimization