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 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

Wireschedule

Wireschedule

Self-hosted meeting scheduler for Laravel, a lightweight on-brand alternative to Calendly. Availability is defined in config, bookings live in your own database, and the UI is a Livewire component you drop anywhere. Part of the wire* family: themeable through the shared data-wire-theme attribute, visually coherent with wiremodal, wiretoast, wirecookies and wirebug.

Requirements

  • PHP 8.2+
  • Laravel 11+
  • Livewire 3

Installation

composer require edulazaro/wireschedule
php artisan migrate

Import the CSS in your bundle:

@import '../../vendor/edulazaro/wireschedule/resources/css/wireschedule.css';

Usage

Drop the scheduler anywhere:

<x-wireschedule event="demo" />

Pick the theme once on <html> (shared with the rest of the family):

<html data-wire-theme="studio">

How it works

  • Availability is declared per event type in config/wireschedule.php: weekly recurring ranges (in the organiser's timezone), slot duration, buffer, how far ahead bookings are allowed and minimum notice.
  • Free slots are computed as that availability minus the bookings already in your wireschedule_bookings table. The visitor's browser timezone is detected and used to display and store times; everything is persisted in UTC.
  • No third party: lead data stays in your database. A unique (event_type, starts_at) index prevents double-booking, re-checked at confirm time to avoid races.

Config

php artisan vendor:publish --tag=wireschedule-config
'timezone' => 'Europe/Madrid',      // organiser timezone
'ask' => ['phone' => true, 'notes' => true],
'notify' => ['to' => null],         // organiser email notified on each booking (null = no notice)
'events' => [
    'demo' => [
        'label' => 'Demo',
        'duration' => 30, 'buffer' => 0, 'days_ahead' => 21, 'min_notice' => 120,
        'availability' => [
            1 => [['10:00','14:00'], ['16:00','18:00']],  // 1 = Monday ... 7 = Sunday
        ],
    ],
],

Reading bookings

use EduLazaro\WireSchedule\Models\Booking;

Booking::ofType('demo')->confirmed()->upcoming()->orderBy('starts_at')->get();
$booking->booker;   // polymorphic: who booked (User, ... or null for guests)

Events

  • wireschedule-booked is dispatched on the Livewire component after a successful booking (with the id), so the host app can toast or track it.

Sponsors

Wireschedule is supported by the following sponsors. Thank you for keeping it growing:

Author

Created by Edu Lazaro

License

Wireschedule is open-sourced software licensed under the MIT license.

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.
se7enxweb/flysystem
lampwick/laravel
jeslage/statamic-emojis
micahdshackelford/rmap-laravel
draftsmaninc/draftsman
square-bit/laravel-volition
himito/laravel-mailman
htinlynn/genius-helper
maco-studios/hephaestus
elmogy/larafast
xeviant/laravel-paystack
gorilladash/laravel-website-sdk
martialbe/flysystem-oss
chondal/3312client
jeroen-g/flickr
opscale-co/nova-genbi
itsjustvita/laravel-retention
tequilarapido/trackit
gregsphotography/site-builder-filament
cabaoctavio/laravel-query-log