Welcome to the documentation for the ArtisanPack UI Bookings package. Bookings is an appointment scheduling and booking management system for Laravel — services, providers, availability, one-off and recurring bookings, calendar sync, outbound webhooks, notifications, GDPR tooling, and a public booking widget that works with or without JavaScript.
The package runs standalone in any Laravel application and uses the rest of the ArtisanPack UI ecosystem when it is installed, degrading cleanly when it is not.
Table of Contents
-
Getting Started
-
Installation
-
Usage
-
Notifications & Webhooks
-
Integrations
-
Frontend (React & Vue)
-
API Reference
-
Advanced
-
Help
Features
- Services, providers & availability: Model what you offer, who offers it, and when — with per-provider schedules, overrides, and blackout dates.
- One-off & recurring bookings: Book a single appointment or an RFC 5545 recurrence, with per-occurrence and whole-series edits.
- Race-safe slot allocation: An advisory lock on the provider's local day plus a partial unique index means two customers never take the same slot.
- Public booking widget: A Livewire widget that works with and without JavaScript — every step is a real form, deep-linkable through the query string.
- Manage tokens: Account-free self-serve management through a hashed, single-credential link.
- Calendar sync: Pluggable Google / Microsoft / Apple drivers, plus subscribable iCal feeds that need no connected account.
- Notifications: Email, database, SMS, and webhook channels with configurable reminders.
- Outbound webhooks: Signed, retried, SSRF-guarded deliveries of the booking lifecycle.
- GDPR tooling: Retention pruning and request-driven erasure commands.
- React & Vue components: The same flow, prebuilt for apps that own their frontend, on one framework-agnostic core client.
- Multi-site aware: Every owned table is site-scoped through
artisanpack-ui/core.
Quick Example
{{-- Drop the public booking widget on any page --}}
<livewire:artisanpack-booking-widget service="discovery-call" />
use ArtisanPackUI\Bookings\Services\BookingService;
$booking = app( BookingService::class )->create( [
'service' => $service,
'start_time' => $start,
'customer_name' => 'Sam Rivera',
'customer_email' => 'sam@example.test',
] );
Support
For support, please open an issue on the GitHub repository.
License
This package is open-source software licensed under the MIT license.

