Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message
Wireschedule

Wireschedule Laravel Package

edulazaro/wireschedule

Self-hosted Calendly alternative for Laravel: define availability per event in config, let visitors book free slots via a drop-in Livewire component, and keep bookings in your own database. Themeable, no third-party services.

View on GitHub
Deep Wiki
Context7

Easily schedule events on your calendar with Laravel and forget about Calendly.

Frequently asked questions about Wireschedule
How do I install Wireschedule in a Laravel application?
Run composer require edulazaro/wireschedule, then php artisan migrate so the package creates its own wireschedule_bookings table. Import vendor/edulazaro/wireschedule/resources/css/wireschedule.css into your CSS bundle so the Livewire component renders correctly. The package requires PHP 8.2+, Laravel 11+ and Livewire 3, so verify those before installing.
How do I configure availability and slot length for an event?
Publish the config with php artisan vendor:publish --tag=wireschedule-config and edit the events array in config/wireschedule.php. Each event defines a label, duration, buffer, days_ahead, min_notice and weekly availability ranges keyed 1 (Monday) through 7 (Sunday) in the organiser timezone. Free slots are generated from those rules automatically, so there is no separate slot table to seed.
How do I embed the booking calendar in a Blade template?
Drop the Livewire component anywhere in your views with <x-wireschedule event="demo" />, where demo matches a key in the config events array. Beyond the CSS import and a migrated database, no additional setup is required. You can render several events by placing multiple components with different event names.
Does Wireschedule send booking data to Calendly or any third-party service?
No. Wireschedule is fully self-hosted: available slots are computed locally from your config and bookings are stored in your own wireschedule_bookings table. Lead data never leaves your database and there are no external APIs or subscription fees. Syncing with Google Calendar or Microsoft Graph is not built in and would need to be added through your own listeners or jobs.
How does Wireschedule handle timezones for organisers and visitors?
Availability in config/wireschedule.php is declared in the organiser's timezone, set via the timezone key. The visitor's browser timezone is detected and used to display the available slots, while all times are persisted in UTC. That keeps the booking correct for both parties without manual conversion.
How does Wireschedule prevent double bookings under concurrent requests?
The bookings table carries a unique index on (event_type, starts_at), so a duplicate insert fails at the database level rather than silently overwriting. That constraint is re-checked at confirmation time to close the race window between slot display and booking. For very high traffic you should still benchmark slot generation and consider caching availability computation.
How do I query and display existing bookings?
Use the Booking model with the built-in scopes, for example Booking::ofType('demo')->confirmed()->upcoming()->orderBy('starts_at')->get(). Each booking exposes a polymorphic booker relation, which is the authenticated user who booked or null for guests. That makes it straightforward to build admin lists, dashboards or exports.
Can I customise the fields, emails and look of the scheduler?
Yes. The ask config toggles the optional phone and notes fields, and notify.to sets an organiser email that is notified on each booking (null disables the notice). Theming uses the shared data-wire-theme attribute on the html element, keeping the UI coherent with wiremodal, wiretoast and the rest of the wire family. For deeper changes you can override the published CSS or layer your own styles on top.
Which Laravel, PHP and Livewire versions does Wireschedule support?
It requires PHP 8.2 or newer, Laravel 11 or newer, and Livewire 3. Livewire 2 is not supported, so applications still on the older major version must upgrade before integrating. Because the package ships Livewire components, audit your existing component names for collisions first.
Is Wireschedule suitable for multi-tenant apps or custom authentication setups?
It assumes Laravel's built-in auth and a single organiser configuration, with no native tenant support, so multi-tenant projects need a manually added tenant_id column plus scoped queries. Custom guard setups such as Sanctum or Passport may require middleware or wrapper component adjustments. In those cases wrapping the booking logic in your own service layer or API resource is often simpler.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
socialdept/tenant-domains
tautvydasr/blade-class-names
socialdept/color-scales
maherelgamil/controller
coleus/widgets
coleus/table
coleus/users
coleus/music
coleus/health
coleus/calendar
coleus/notes
coleus/support
coleus/settings
coleus/apps
seampact/laravel
emmyconceptng/laravel-ng-postcode
jjsquady/round-robin
skyraptor/chatter
edlugz/sasapay
abbasudo/artisan-route