### Install and publish migrations Source: https://github.com/roundly-consulting/appointments-for-laravel/blob/main/README.md Install the package via Composer, publish the required migrations, and run the migrations. The migrations are not loaded automatically, and companion package migrations are also needed. Set APPOINTMENTS_KEY_TYPE before migrating if participant models use UUID/ULID keys. ```bash composer require roundly-consulting/appointments-for-laravel php artisan vendor:publish --tag="appointments-migrations" php artisan vendor:publish --tag="approvals-migrations" --tag="contacts-migrations" --tag="reviews-migrations" --tag="media-migrations" php artisan migrate ``` -------------------------------- ### Schedule an appointment with participants Source: https://github.com/roundly-consulting/appointments-for-laravel/blob/main/README.md Use the Appointments facade to schedule an appointment with a title, start time, duration, and participants. The preventConflicts() method refuses double-bookings. The example shows chaining methods to configure the appointment. ```php use RoundlyConsulting\Appointments\Enums\ParticipantRole; use RoundlyConsulting\Appointments\Facades\Appointments; $appointment = Appointments::schedule('Project kickoff') ->startingAt('2026-07-01 17:30', timezone: 'Europe/Bratislava') ->lasting(90) // minutes; or ->until('2026-07-01 19:00') ->withParticipant($host, ParticipantRole::Organiser) ->withParticipant($guest) ->preventConflicts() // refuse a double-booking ->create(); ``` -------------------------------- ### Manage appointment lifecycle and export ICS Source: https://github.com/roundly-consulting/appointments-for-laravel/blob/main/README.md Use the Appointments facade to manage an existing appointment: confirm, reschedule, add participants, check availability, and export an ICS calendar. The reschedule method keeps the duration. The ics() method returns an RFC 5545 calendar. ```php use Carbon\CarbonImmutable; $booking = Appointments::for($appointment); $booking->confirm(); // pending → confirmed $booking->reschedule(CarbonImmutable::parse('2026-07-02 10:00')); // keeps the duration $booking->participants()->add($colleague); Appointments::isAvailable($guest, $appointment->starts_at, $appointment->ends_at); // false $booking->ics(); // an RFC 5545 calendar ```