A copyable specimen, with a declared host contract
This is an application integration specimen, not an installed booking connector or a customer result. No optional Bookings package is needed when the host application already books. Copy the example directory into app/AppointmentExample, add AppointmentExample\ to the application Composer PSR-4 map, and register AppointmentExample\AppointmentServiceProvider in bootstrap/providers.php. The files below are the complete source of this adapter; the host booking engine remains a prerequisite.
The host contract uses appointment_services and appointment_locations with id, site_id, slug, name and active columns; appointment_location_service has service_id, location_id and active. Enforce unique site/slug and location/service pairs in the host database. Adapt this one query to the existing application schema. These table names are specimen application code, not Capell APIs.
Set APPOINTMENT_DOMAIN to the served host and APPOINTMENT_SITE and APPOINTMENT_LANGUAGE to that host’s enabled Capell Site and Language, with an enabled root-host SiteDomain for the same language. This example rejects path-prefixed language domains; those need the host application’s context and URL adapter. Register an enabled, accessible Page blueprint with key appointment-guide, using the ordinary Page editor. Give its published, translated Pages canonical URLs /appointment-guides/harbour/assessment and /appointment-guides/hill/assessment. The route family /services/{location}/{service} belongs to the application, not to the CMS catch-all. The provider reserves that prefix through ReservedFrontendPathRegistry.
Create a site-owned Layout keyed appointment-guide whose metadata names the guide view appointment-example::guide and the shell view appointment-example::shell. Assign it directly to a Page or let this adapter select it through appointments.default_layout. Give the Site a Theme. The separate independent Layout uses the guide view appointment-example::independent. The example provider loads these explicit application views; theme inheritance does not silently select another master in this route.
The existing named route appointments.book must accept the location and service slugs and recheck identity, eligibility, price, availability and capacity. It must not trust the guidance response as a reservation. The specimen reads active public offerings only; any private or restricted offering needs the host’s policy checks before projection. No personal appointment state is loaded here.