=== Schedopia – Appointment Booking & Scheduling Calendar ===
Contributors: thinkmatic
Donate link: https://thinkmatic.net
Tags: appointment booking, online scheduling, booking calendar, reservations, appointment scheduling
Requires at least: 6.5
Tested up to: 7.0
Requires PHP: 8.1
Stable tag: 1.0.1
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Schedopia is a free WordPress booking plugin. Let customers book appointments online 24/7 — self-hosted scheduling with no double-bookings.

== Description ==

**Schedopia is a complete appointment booking and scheduling plugin for WordPress.** Add an online booking form to your site in minutes and let customers reserve a service with the right staff member at a time that actually works — automatically, around the clock, without the back-and-forth of phone calls and emails.

Whether you run a salon, a clinic, a tutoring service, or a consulting practice, Schedopia turns your website into a booking engine. Every appointment is a real, dated record, and a built-in guard means two customers can never grab the same slot — so you stop worrying about double-bookings and no-shows.

Best of all, Schedopia is **fully self-hosted**. Your bookings, your customers, and your data stay on your own site. Nothing loads from third-party services, and there are no per-booking fees.

**Why choose Schedopia?**

* **Bookings while you sleep** — a mobile-friendly booking form takes reservations 24/7, so you never miss a customer.
* **Never double-book again** — every booking is validated against real staff availability, with a reliable guard against two people taking the same time slot.
* **Your data stays yours** — 100% self-hosted, no external services, no CDNs, no per-booking commission.
* **Set up in minutes** — a guided setup wizard walks you through services, staff, and hours.
* **Looks like your brand** — customize the booking form's colors, fonts, and buttons with a live preview.

**Key Features**

* **Online booking form** — a clean, mobile-first form that customers use to pick a service, choose a staff member, and book an available time in a few simple steps. Add it to any page with the `[schedopia_booking]` shortcode.
* **Service catalog** — organize services into categories with per-staff pricing.
* **Staff & availability management** — set each team member's weekly working hours, days off, buffer times, and capacity. Availability automatically drives which time slots customers can book.
* **Real dated appointments** — every booking carries its own date, time, and timezone, protected by a transactional double-booking guard.
* **Customer management** — keep a record of your customers and their booking history.
* **Form appearance customizer** — brand the booking form with global colors, fonts, shapes, and button styles, plus custom labels for each step, all with a live preview.
* **Powerful admin dashboard** — a fast single-page admin with a dashboard, filterable bookings list, team calendar, service catalog, scheduling, customers, staff, payments, and an activity log.
* **Manual & offline payments** — record cash, bank transfer, and mark-as-paid payments.
* **Automated email notifications** — booking confirmations, cancellations, new-booking alerts for your team, and appointment reminders.
* **Works with your page builder** — the `[schedopia_booking]` shortcode works everywhere, including the Gutenberg shortcode block and the Elementor Shortcode widget.

**Perfect for**

Salons and barbershops, spas and beauty studios, dentists and health clinics, therapists and coaches, tutors and instructors, consultants and freelancers, repair and home services — any business that runs on appointments.

**For developers**

Schedopia is built to extend without forking. It ships a full REST API for every entity with schema-driven validation, granular per-area capabilities, and rate limiting on the public API. Extensions build on documented lifecycle hooks, filters, and driver interfaces (`BookingSource`, `NotificationChannel`, `PaymentMethod`), and every booking flows through a single validated path — so an extension can never create a booking the core would reject. Data is stored in dedicated relational tables (`wp_schedopia_*`) rather than as custom post types.

== Installation ==

**Automatic installation**

1. Go to **Plugins → Add New** in your WordPress admin.
2. Search for "Schedopia".
3. Click **Install Now**, then **Activate**.

**Manual installation**

1. Upload the `schedopia` folder to the `/wp-content/plugins/` directory.
2. Activate the plugin through the **Plugins** screen in WordPress.

**After activation**

1. The plugin's custom tables (`wp_schedopia_*`) are created automatically on activation.
2. Follow the setup wizard to add your services, staff, and working hours.
3. Create or edit a page and insert the `[schedopia_booking]` shortcode to display your booking form (it also works inside the Gutenberg shortcode block and the Elementor Shortcode widget).
4. Manage everything from the Schedopia admin screens, or via the REST API under `/wp-json/schedopia/v1/`.

== Frequently Asked Questions ==

= Is Schedopia free? =

Yes. Schedopia is a complete, self-hosted appointment booking plugin with no per-booking fees.

= What types of businesses is Schedopia for? =

Any service business that runs on appointments — salons, barbershops, spas, clinics, dentists, therapists, coaches, tutors, consultants, and home or repair services.

= Can customers book appointments online themselves? =

Yes. Add the `[schedopia_booking]` form to any page and customers can pick a service, choose a staff member, and book an available time on their own, 24/7.

= Will it prevent double-bookings? =

Yes. Every booking is validated against real staff availability with a transactional double-booking guard, so two customers can never take the same time slot.

= Can I take payments? =

Schedopia records manual and offline payments — cash, bank transfer, and mark-as-paid.

= Does Schedopia work with Elementor and Gutenberg? =

Yes. The `[schedopia_booking]` shortcode works in any editor, including the Gutenberg shortcode block and the Elementor Shortcode widget. Only one booking form can appear per page.

= Does Schedopia rely on any third-party services? =

No. Schedopia is fully self-hosted and loads nothing from third-party CDNs. Your business data stays on your own site.

= Does Schedopia use custom database tables or custom post types? =

Custom tables (`wp_schedopia_*`). Bookings, services, staff, customers, and payments are stored relationally rather than as posts.

= How do developers extend Schedopia? =

Through documented lifecycle hooks, filters, and driver interfaces (`BookingSource`, `NotificationChannel`, `PaymentMethod`). Every booking flows through one validated path, so an extension can never create a booking the core would reject. A full REST API is available under `/wp-json/schedopia/v1/`.

= What happens to my data if I uninstall? =

Uninstall preserves your business data by default. Deletion only happens if you explicitly opt in.

== Screenshots ==

1. The customer booking form — customers choose a service, filtered by category, with duration, staff count, and price shown up front.
2. Picking a date and time — customers select a day, then a morning or afternoon slot, with a running appointment summary and total.
3. The final step — customers enter their details, add notes, and confirm. Pay-on-arrival keeps booking friction low.
4. The admin dashboard — bookings, revenue, completion rate, and new customers at a glance, plus a bookings trend chart and the day's schedule.
5. The bookings management screen — filter by status, staff, or service, and search across every appointment with payment status and amounts.
6. The Form Appearance customizer — brand the booking form's colors, fonts, and shapes with a live desktop and mobile preview.

== Changelog ==

= 1.0.1 - 2026-07-14 =
* Fix: bookings submitted without a timezone now default to the site's WordPress timezone instead of UTC, so wall-clock times are stored against the correct zone.

= 1.0.0 - 2026-07-10 =
* First stable release: a complete appointments booking system — a service catalog with categories and per-staff pricing; staff with weekly working hours, days off, buffers, and capacity; real dated bookings with a transactional double-booking guard; manual / offline payment recording; email notifications (confirmation, cancellation, operator alert, reminders); a setup wizard; a single-page admin dashboard; and the customer-facing `[schedopia_booking]` form with the Form Appearance customizer.
* Single validated booking path (admin, form, and future sources) with serial/reference generation and a confirmation email on every booking.
* REST API for every entity with schema-driven validation; granular per-area capabilities and rate limiting on the public API.
* Self-hosted fonts and assets — loads nothing from third-party CDNs. Uninstall preserves business data unless you opt in to deletion.

== Upgrade Notice ==

= 1.0.1 =
Fixes bookings that were saved without a timezone — they now use your site's WordPress timezone instead of UTC.

= 1.0.0 =
First stable release: a complete appointment booking system — services, staff, availability, the booking form, payments, and email notifications.