=== Vollstart Appointment Desk ===
Contributors: sasonikolov
Tags: appointment booking, booking system, scheduling, queue management, walk-in queue
Requires at least: 6.2
Tested up to: 6.9
Stable tag: 1.0.7
Requires PHP: 7.4
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Appointment booking plugin with walk-in queue, reception cockpit, and double-booking prevention.

== Description ==
Vollstart Appointment Desk combines online appointment scheduling with a walk-in queue system in a single plugin. Customers book online or grab a queue number at the door. Your front desk sees everything in a live reception cockpit — no WordPress login required for staff.
https://youtu.be/qBe6n6e66BQ
[Video](https://youtu.be/qBe6n6e66BQ)

**No double bookings.** Slot holds reserve the time slot while the customer fills out the form. Other booking plugins let two customers book the same slot simultaneously — Appointment Desk prevents this.

**No per-extension upsells.** One plugin, one price. No surprise add-on costs for basic features like email notifications or calendar views.

**GDPR-friendly by design.** All customer data stays in your WordPress database. No external tracking, no third-party data sharing. Your data, your server.

= Perfect for =

* **Hair salons & barbershops** — online booking + walk-in queue for busy days
* **Medical & dental practices** — patient scheduling with check-in kiosk
* **Consulting firms** — client appointment booking with calendar sync
* **Government offices & citizen services** — queue numbers + TV display for waiting rooms
* **Fitness studios & yoga** — class booking with capacity management
* **Repair shops & workshops** — appointment slots with custom fields
* **Coworking spaces** — room and desk booking
* **Any service business** that handles both scheduled and walk-in customers

= Free Features =

* 1 calendar, 1 service, 1 team with 1 staff member — up to 100 customers and 50 appointments per month
* Mobile-friendly online booking form (Shortcode + dedicated booking page)
* Multi-column booking layout — services, calendar, and form side by side
* Inline month calendar in multi-column view
* Live price display in booking form (updates on service/extras selection)
* Email confirmations for new, cancelled, rescheduled, and declined bookings
* ICS calendar file attached to confirmation emails
* Day and week view in admin
* 2 custom fields per booking
* Auto-confirm or manual approval workflow
* Double Opt-In — email confirmation before booking is active
* Customer self-service: cancellation and reschedule via email links
* Slot holds — prevents double bookings while customer fills out the form
* Walk-in queue system: queue numbers, kiosk page, live TV display
* QR code check-in and check-out
* Customer CRM with full appointment history
* Appointment change history — audit log of status changes, reschedules, and file uploads/deletes
* GDPR customer management — export data as JSON, import from CSV/JSON, delete all data with double confirmation
* Rating system — customers rate their experience after the visit
* Blocked times for breaks, holidays, and closures
* Reception cockpit — live front desk overview, no WordPress login needed

https://www.youtube.com/watch?v=eXM1meN4CnA

= Pro Features =

Everything in Free, plus:

* Unlimited calendars, services, and staff members
* Unlimited custom fields
* Team management — assign staff to calendars and services
* Service Extras — optional add-ons per service with price and duration
* Special Days — override business hours for specific dates
* Buffer times for preparation and cleanup between appointments
* Min. advance time / Max. booking window per calendar
* File Upload in booking form — customers attach files with secure storage
* Double Opt-In per-calendar override (global/enabled/disabled)
* WooCommerce integration for paid appointments
* ICS feed — subscribe with Google Calendar, Outlook, or Apple Calendar
* Unlimited cockpit auth tokens for staff access
* Custom email attachments per email type
* Queue themes: Light, Dark, and custom CSS upload
* Staff service desk page for multi-desk setups
* Remove branding

= Business Features =

Everything in Pro, plus:

* Customer Self-Service Page — customers view, cancel, and manage their appointment via a secure token link
* Per-calendar override for self-service permissions (cancel, file edit)
* Custom HTML email templates — full control over email content
* Rating email — automatic feedback request after appointments
* Google Calendar Sync — two-way sync (push bookings, read busy times to prevent double bookings), OAuth2 flow, per-calendar assignment
* Customer File Management — files attached directly to customer records (allergies, medical records, contracts). Persists across all appointments.

= Why Appointment Desk? =

Most booking plugins only handle online appointments. But real businesses also have walk-in customers, a reception desk, and a waiting room. Appointment Desk handles all of it:

1. **Book** — Customers self-book online. Slot holds prevent double bookings.
2. **Queue** — Walk-ins pull a number. TV display shows who is next.
3. **Done** — Staff manage everything from one cockpit. No spreadsheets, no chaos.

Built by the team behind [Event Tickets with Ticket Scanner](https://wordpress.org/plugins/event-tickets-with-ticket-scanner/).

= Languages =

Vollstart Appointment Desk is translated into 20 languages:

* English (default), German (DE/AT/CH), French, Spanish, Italian, Dutch, Portuguese (PT/BR), Hungarian, Polish, Czech, Swedish, Danish, Finnish, Greek, Romanian, Bulgarian, Chinese (Simplified), Japanese

All translations are included in the plugin. Community contributions welcome via the WordPress.org translation platform.

= Links =

* [Premium](https://vollstart.com/shop/appointment-desk-pro-business/)
* [Support](mailto:support@vollstart.com)

= Third-Party Libraries =

This plugin includes the following third-party libraries:

* **FullCalendar** v6.1.15 — [fullcalendar.io](https://fullcalendar.io/) — MIT License — [Source](https://github.com/fullcalendar/fullcalendar)
* **DataTables** v2.3.7 — [datatables.net](https://datatables.net/) — MIT License — [Source](https://github.com/DataTables/DataTablesSrc)
* **html5-qrcode** v2.3.8 — QR code scanning — MIT License — [Source](https://github.com/mebjas/html5-qrcode)
* **chillerlan/php-qrcode** v4.4.2 — QR code generation — MIT License — [Source](https://github.com/chillerlan/php-qrcode)

All libraries are included locally within the plugin. No external CDN calls are made.

== External Services ==

This plugin does not connect to any third-party or external services. All data is stored locally in your WordPress database. No customer data leaves your server.

The optional Pro add-on plugin (sold separately at [vollstart.com](https://vollstart.com/)) connects to vollstart.com for license validation and update checks. The free plugin hosted on WordPress.org does not make any external connections.

The Business tier of the Pro add-on offers optional Google Calendar Sync. When enabled by the site administrator, appointment data (customer name, email, service, date/time, location) is sent to the Google Calendar API ([https://developers.google.com/calendar](https://developers.google.com/calendar)) to create, update, and delete calendar events. Busy times are read from Google Calendar to prevent double bookings. This requires the administrator to create OAuth 2.0 credentials in the Google Cloud Console and authorize the connection. Google's privacy policy: [https://policies.google.com/privacy](https://policies.google.com/privacy).

== Installation ==

1. Upload the plugin folder to `/wp-content/plugins/` or install directly via the WordPress plugin search.
2. Activate through the "Plugins" menu in WordPress.
3. Go to "Appointment Desk" in the admin menu.
4. Create a team and add staff members (Teams tab).
5. Create a calendar and assign your team (Calendars tab).
6. Add a service to the calendar.
7. Add the `[vollstart-appointment-desk]` shortcode to any page — or use the auto-generated booking page.

== Frequently Asked Questions ==

= How many bookings can I have in the free version? =

The free version includes 1 calendar, 1 service, 1 team with 1 staff member, up to 100 customers and 50 appointments per month. Upgrade to Pro for unlimited everything.

= Is the booking form mobile-friendly? =

Yes. The booking form is fully responsive and works on all devices and screen sizes. Add it to any page via shortcode or use the auto-generated booking page.

= Do customers need an account to book? =

No. Customers book without registering. They receive an email confirmation with links to cancel or reschedule on their own.

= Can I use this for walk-in customers without an appointment? =

Yes. The queue system lets walk-in customers take a number via a kiosk page. A separate TV display shows the current queue status in real time. Staff call the next customer from the cockpit.

= How does the plugin prevent double bookings? =

Slot holds reserve a time slot the moment a customer starts filling out the booking form. If another customer tries to book the same slot, it shows as unavailable. This prevents the overbooking issues common with other booking plugins.

= Can my receptionist use the cockpit without a WordPress account? =

Yes. The reception cockpit is a standalone page protected by an auth token. Share the URL with staff — no WordPress login needed. The free version includes 1 auth token. Pro includes unlimited tokens.

= Can I accept payments for appointments? =

Yes, with the Pro plan. WooCommerce integration lets you charge for appointments through the standard WooCommerce checkout. The free version handles free bookings only.

= Does the plugin require WooCommerce? =

No. Appointment Desk works fully standalone. WooCommerce integration is available in the Pro plan for paid appointments.

= Does it work with Elementor, Gutenberg, and other page builders? =

Yes. The booking form is added via shortcode `[vollstart-appointment-desk]`, which works in any page builder, theme, the block editor, or the classic editor.

= Does the plugin send appointment reminders? =

Automatic reminders are coming in the Business plan. Currently, customers receive confirmation, cancellation, and reschedule emails.

= Is all customer data stored on my own server? =

Yes. All data is stored in your WordPress database. No external services are used for core functionality. The plugin is GDPR-friendly by design — no customer data leaves your server.

= Can my staff subscribe to their schedule in Google Calendar? =

Yes. The Pro plan includes an ICS feed that staff can subscribe to from Google Calendar, Outlook, or Apple Calendar. Appointments sync automatically.

= How is this different from Bookly or Amelia? =

Vollstart Appointment Desk combines online booking with a walk-in queue system and a reception cockpit. Most booking plugins focus only on online scheduling. Also: one price, no per-extension upsells — every Pro feature is included in the Pro plan.

= Can I export bookings? =

Yes. The admin interface includes CSV export for appointments and customer data.

= How do I get support? =

Email us at support@vollstart.com. We respond within 1 business day.

== Screenshots ==

1. Reception cockpit — live overview of today's appointments, check-ins, and queue
2. Booking form — mobile-friendly frontend for customers to pick service, date, and time
3. Queue kiosk — walk-in customers pull a queue number
4. Queue TV display — live screen for waiting rooms
5. Calendar week view — admin overview of all bookings
6. Customer CRM — appointment history and customer details
7. Settings — email templates, custom fields, and general options

== Changelog ==

= 1.0.7 - 2026-04-27 =
* Fix: "Update available" badge stayed visible after auto-upgrade of the Pro plugin — the `update_plugins` site transient was not cleared after the upgrade, so WordPress kept showing the stale notice until the next WP-Cron run (12h). Transient is now cleared + re-checked after upgrade completes.
* New: "First Activated" date in Support Info — shows when the plugin was first activated, included in the copyable support text. Marked as "(estimate)" for installs predating this version.
* Internal: First-activation timestamp is sent to the license server with the next license check (Pro plugin) for free-to-paid analytics.
* New: SMS notification infrastructure — hooks for SMS sending on appointment create, cancel, reschedule, decline
* New: SMS log table for tracking sent messages
* New: Options filter hook (vollstart_adesk_options) for Pro plugin to register additional settings
* Internal: makeOption() now public for extensibility

= 1.0.6 - 2026-04-20 =
* New: vollstart.com branding footer in admin
* New: Pro onboarding banner with license key focus when Pro installed but not licensed
* New: Pro JS dynamic loading — adeskButton, adeskModal buttons array, beforeRender/afterRender hooks, getHelpers API

= 1.0.5 - 2026-04-16 =
* New: Auto-upgrade Pro plugin after valid license key is saved — no more manual "Update" click needed
* New: CAPTCHA / Anti-Spam for booking form (Pro) — Honeypot field, minimum form time, and Google reCAPTCHA v3. User can enable any combination. All checks run server-side with generic error messages that do not reveal which check failed.
* New: Honeypot anti-spam — hidden field that bots fill in but humans cannot see. No external service, GDPR-compliant, zero configuration.
* New: Minimum form time — reject bookings submitted faster than a configurable threshold. Bots submit instantly, humans need a few seconds.
* New: Google reCAPTCHA v3 — invisible score-based CAPTCHA. Configurable threshold (default 0.5). Requires free Google API keys. Note in options: sends visitor IP to Google.
* Improvement: Option descriptions now shown below the input field (was below the label). Matches POS Desk layout.
* Improvement: Option key shown on its own line below the label (was inline next to label).
* Improvement: Pro badge on CAPTCHA section heading and all CAPTCHA option labels
* Fix: Options sections after File Upload (CAPTCHA, Google Calendar, Advanced) rendered outside the card — caused by Purge button breaking the div nesting
* New: Phasen-Tracking feature planned for POS Desk Gastronomie tier (roadmap)
* New: "More Plugins by Vollstart" submenu page — discover other free plugins from the same team
* New: Queue TV display — option to show ticket number on the left and service desk name on the right (reversed layout for portrait orientation)
* New: Print button for queue tickets — backend queue table, plus optional print button and auto-print on kiosk after ticket pull (two new global options)
* Fix: Queue auto-skip timezone bug — cutoff was calculated with wrong timezone offset, either never firing or firing immediately. Now uses MySQL DATE_SUB for timezone-safe comparison.
* Fix: Queue number restart bug — numbers restarted from 001 after ticket deletions because COUNT(*) was used instead of MAX(queue_number)
* Fix: Queue table status column — when a staff is serving a ticket, the table now shows the correct status from the staff card as source of truth

= 1.0.4 - 2026-04-11 =
* Fix: German translations not loading — loadTextDomain() was empty, load_plugin_textdomain() now called correctly
* Fix: 262 untranslated strings in de_DE, de_AT, de_CH now translated
* Fix: POT file regenerated from current source (1241 strings)
* Fix: de_CH uses "ss" instead of "ß" throughout (Swiss German standard)

= 1.0.3 - 2026-04-11 =
* New: Google Calendar Sync (Business tier) — push bookings to Google Calendar, read busy times to prevent double bookings
* New: Per-calendar Google Calendar assignment in calendar settings
* New: OAuth2 connect/disconnect/test UI in Options
* New: Appointment::updateMeta() for extensible appointment metadata
* New: Admin AJAX extension filter for Pro/Business plugin actions
* New: Pro/Business tier badges on options — shows which license tier each feature requires
* New: Customer Files section in customer detail view with upgrade teaser — actual implementation in Pro plugin (Business tier)
* New: Customer Files section in Files admin tab with upgrade teaser — lists all customer files across the site (Business tier, Pro plugin)
* New: vollstart_adesk_customer_delete_all_data action hook for Pro/Business cleanup during GDPR delete
* New: vollstart_adesk_customer_pdf_after_notes filter hook — Pro/Business can inject content (e.g. customer files) into customer PDF
* New: Appointment change history — audit log of status changes, reschedules, and file uploads/deletes. Shown in appointment detail view.
* New: Delete button per file in appointment detail view
* New: Bulk customer export — download all customers as JSON (basic fields, compatible with import)
* New: Customer PDF / profile print — printable customer profile with contact, overview stats, appointment history, and notes
* New: Professional PDF header with business info (name, address, phone, email) and WordPress custom logo fallback
* New: QR code embedded in appointment PDF header (check-in code, replaces previous inline version)
* New: Client-side file validation before upload — checks allowed extensions and max size from global settings
* New: CSV export for customer change history — download button inside the change history box
* New: Appointment ID shown in customer appointment history table and in customer PDF
* New: Central fmtDateTime() / fmtDate() helpers on Main class — single source of truth for WP-aware datetime formatting
* Improvement: Customer detail view redesigned — Contact + Overview cards side by side (50/50), appointment history full width below
* Improvement: Contact fields (email, phone, notes) shown even when empty
* Improvement: All DataTables action columns right-aligned consistently
* Improvement: PDF layout uses HTML table header, full-width body (no max-width), left-aligned table headers
* Improvement: Notes row always visible in customer PDF (— when empty)
* DB: new table appointment_history
* Rename: "File Manager" card is now "Appointment Files" (to distinguish from new Customer Files section)
* New: DEBUG badge in admin header when WP_DEBUG is active
* Fix: PDF download crashed due to undefined constant (VOLLSTART_ADESK_VERSION → VOLLSTART_ADESK_PLUGIN_VERSION)
* Fix: Same undefined constant bug on rating page stylesheet
* Fix: PDF generation crashed on appointments with array-valued custom fields (multi-select/checkbox)
* Fix: Auto-repair also catches "table doesn't exist" errors (not only "unknown column") so new tables are created automatically
* External Services: documented Google Calendar API usage in readme

= 1.0.2 - 2026-04-07 =
* Fix: Booking page button now uses current slug from options (not stale cached value)
* Fix: Rewrite rules registered correctly (direct call instead of nested init hook)
* Fix: Options loaded fresh on every tab switch — changes take effect immediately
* Fix: Queue badge polling skipped when not in cockpit or queue tab
* New: JS options framework (option_getVal, option_isActive) for reliable option access
* New: 20 language translations (DE/AT/CH, FR, ES, IT, NL, PT, PT-BR, HU, PL, CZ, SV, DA, FI, EL, RO, BG, ZH-CN, JA)
* New: Languages section in readme
* Fix: Free team limit corrected in documentation (1 member, not 2)
* Fix: Queue kiosk auto-resets to pull screen after timeout (was stuck on called notification)
* Fix: Customer rating click now works (was failing because empty name was sent with rating-only update)
* Fix: Customer name now shows in cockpit week view and next up box
* Fix: Serial shown in full in support info (no masking)
* Improvement: Appointment rating shown in cockpit detail view
* Improvement: Cockpit week view shows customer name + service name
* Improvement: Customer view button in cockpit appointment detail
* Improvement: Customer tables wrapped in card layout (consistent with Files tab)
* Improvement: Action buttons right-aligned in all tables
* Improvement: Search placeholder style in customer table
* Refactor: Single enrichAppointment() method replaces duplicate enrich blocks
* Refactor: Single card() function for consistent card layout (SRP)

= 1.0.1 - 2026-04-07 =
* Show Pro version in admin header and support info
* Minor fixes and improvements

= 1.0.0 - 2026-04-06 =
* Initial release
* Online appointment booking with calendar, services, and time slots
* Walk-in queue system with kiosk page, live TV display, and staff service desk PWA
* Reception cockpit — standalone front desk, no WordPress login needed
* Slot holds to prevent double bookings
* QR code check-in and check-out
* Email notifications: confirmation, cancellation, reschedule, declined
* ICS calendar file in confirmation emails
* ICS feed for Google Calendar / Outlook sync
* Customer CRM with appointment history and ratings
* Custom fields per booking (2 in free, unlimited in Pro)
* Blocked times for holidays, breaks, and closures
* Team management with virtual members (no WP account needed)
* Multi-desk queue with auto-assign and no-show timeout
* TV display: portrait (rows) and landscape (grid) orientation
* Multi-column booking layout — services, calendar, and form side by side
* Inline month calendar in multi-column view
* Admin: day view, week view, month view with CSV export and print
* WooCommerce integration for paid appointments (Pro)
* Buffer times for preparation and cleanup (Pro)
* Custom queue themes with CSS upload (Pro)
* "Delete data on uninstall" option (default off)
* GDPR-friendly: all data stored locally, no external tracking
