Finding your next read
Practical craft for people building for the web.
Explore DevelopmentFinding your next read
THE FINDERPRESS TOOL DIRECTORY
Explore this tool and check the official listing for its latest features and requirements.
01 / SOURCE DETAILS
Robina is a free, open-source booking and appointment plugin for WordPress, built for service businesses that want a capable booking system without subscription fees. It is service- and resource-centric: the bookable unit is a service with its own availability, while staff, locations and resources are optional layers you add only if you need them. Highlights Front-end booking widget (Vue 3). A clean multi-step wizard — Service, Date & time, Details, Confirm — added to any page with the [robina_booking_form] shortcode, or as a popup button with [robina_booking_button] . Capacity-aware availability. Slots are computed from your business hours, slot step and buffers. Assign staff to a service and each one adds a parallel slot; a staff member booked anywhere counts as busy. With no staff, a service has a single capacity per location. Group classes. Give a service a capacity above 1 (say 20 or 40 — there is no upper limit) and several customers can book the same session until it fills up — ideal for classes, workshops and large group sessions. Front-end class schedule. Show a public timetable of upcoming classes with the [robina_schedule] shortcode — visitors switch between an Agenda list and a Month calendar grid, each session lists the seats left and links straight into booking. Give a service a weekly schedule (e.g. Monday 18:00), one-time sessions on specific dates (a workshop on 4 October at 10:00), or both, to put it on the timetable. Staff (optional). Tag the people who provide a service, pin them to one or more locations, and give them their own weekly hours. When a customer picks a location, only the staff who work there are offered. Locations (optional). Offices or branches with their own optional weekly hours; each service declares where it is available. Native WordPress admin. A branded Catalog (services, categories, resources), a Month/Week/Day Calendar with in-place booking creation, plus Bookings, Customers, Staff and Locations screens — all in plain WordPress UI. Editable email notifications to the owner and the customer — confirmation, awaiting confirmation, reminder and cancellation. Rewrite each one under Robina → Notifications with placeholders and a live preview, sign them with your business name and logo, and send yourself a test. Optional reminders go out a set number of hours before the appointment. Customer self-cancellation. The confirmation email carries a personal cancel link, so a customer can free their seat themselves — instantly bookable again by someone else. Set a cancellation window (e.g. up to 12 hours before) or switch it off. Days off and booking notice. Mark single dates a service does not run (holidays, a break) and close booking a set number of minutes before the start time. Optional online payments — Pay on site, WooCommerce, Stripe or PayPal (see “External services” below). Leave them all off for free bookings. Self-contained and private. No external CDNs and no trackers; the phone-input flags and every front-end asset ship inside the plugin. Uninstalling removes Robina’s tables and options. Service-centric by design Robina deliberately keeps availability on the service , not on a mandatory “employee”. Staff, locations and resources are optional capacity and scope layers, so Robina also suits non-staff models such as equipment rental or table booking. External services By default Robina works entirely on your own site and contacts no third party. It only talks to an external service when you, the admin, enable and configure a payment gateway , and only when a customer actually chooses to pay with it. No data is sent anywhere otherwise — Robina has no “home” server and sends no telemetry or analytics. Stripe — used only when you enable “Stripe” and enter your API keys. When a customer pays by card, Robina creates a Stripe Checkout Session and redirects the customer to Stripe’s hosted payment page, and it receives Stripe webhooks to confirm payment. Data sent to Stripe: the booking amount, currency, a short description and the customer’s email. Card details are entered on Stripe’s site, never on yours. Terms: https://stripe.com/legal — Privacy: https://stripe.com/privacy PayPal — used only when you enable “PayPal” and enter your client ID and secret. When a customer pays with PayPal, Robina creates a PayPal order, redirects the customer to PayPal to approve it, then captures it on return. Data sent to PayPal: the booking amount, currency and a reference id. Terms: https://www.paypal.com/legalhub/home — Privacy: https://www.paypal.com/legalhub/privacy-full WooCommerce (optional, local) — if you enable WooCommerce checkout and WooCommerce is installed, Robina creates a pending WooCommerce order and hands payment off to WooCommerce. Robina makes no external call itself; any outbound requests are made by WooCommerce and its own gateways under their policies. Map link — a location’s address is turned into a plain “view on map” link to Google Maps (https://www.google.com/maps/search/…). It is only a link: nothing is transmitted and no map is loaded unless a visitor clicks it. Source code Robina is fully open source (GPLv2+). The front-end widget is compiled with Vite from the Vue source that ships inside the plugin under /resources . The build files ( package.json , package-lock.json , vite.config.js ) are bundled too, so the compiled assets in /assets/dist can be regenerated from source with: npm install && npm run build Bundled third-party libraries (installed via npm, both MIT-licensed): Vue 3 (^3.4) — https://github.com/vuejs/core intl-tel-input (^29.0) — https://github.com/jackocnr/intl-tel-input
02 / SOURCE DETAILS
Install the ZIP via Plugins → Add New → Upload Plugin, or upload the robina folder to /wp-content/plugins/ . Activate Robina through the Plugins screen. Open Robina → Settings to set your business hours, timezone, currency, slot step and (optionally) payment methods. Add services under Robina → Catalog . Add Locations and Staff too if you need them. Put [robina_booking_form] on any page, or use [robina_booking_button] for a popup button. To show a public class timetable, add [robina_schedule] .
03 / SOURCE DETAILS
I activated Robina — why is nothing on my site? Because a booking form only appears where you put its shortcode. Open Robina → Dashboard : the Getting started panel walks through the four setup steps and lets you copy [robina_booking_form] (the full form), [robina_booking_button] (a popup button) or [robina_schedule] (a class timetable) straight onto a page. The same list is always in the Help tab at the top of any Robina screen. Can I translate the booking form into my language? Yes. Every string in the public widgets is registered in PHP, so a translation plugin such as Loco Translate sees them: go to Loco Translate → Plugins → Robina, add your language and translate. Month and weekday names need no translation at all — the calendar follows your WordPress site language automatically. The phone field also starts on your own country, derived from that same site language — and if your site is multilingual, set Phone country in Robina → Settings so the dial code stays yours on every translated page. Do I have to add staff or locations? No. A service works on its own with a single capacity and your global business hours. Staff, locations and resources are optional. How does availability with several staff work? Each staff member assigned to a service adds one parallel slot. A staff member booked on any service at that time is treated as busy. When a customer picks a location, only the staff who work at that location are offered. Is payment required? No. With no payment method enabled, bookings are free. You can turn on Pay on site, WooCommerce, Stripe and/or PayPal at any time. Does Robina send my data anywhere? No telemetry, ever. The only outbound calls are to the payment gateway you choose to enable, at checkout — see “External services”. Will it match my theme? Yes. The admin uses native WordPress UI, and the front-end widget inherits your theme font by default; colours and fonts are configurable. Can customers cancel by themselves? Yes, if you leave “Customer cancellation” enabled in Robina → Settings . Every confirmation email contains a personal cancellation link; opening it shows a confirmation page, and only pressing the button cancels. The seat is freed immediately and both you and the customer get an email. Set “Up to (hours before the start)” to stop late cancellations — with 0 it stays possible until the start time. How do reminder emails work? Set “Reminder email (hours before)” in Robina → Settings — for example 24. WordPress checks hourly and emails each customer once, that many hours before their confirmed booking. 0 turns reminders off. Someone who books inside the window (say, two hours before the class) is not sent a reminder minutes after booking. Reminders rely on WP-Cron, so a site with almost no traffic may want a real system cron. A class is cancelled for one day — how do I skip it? Open the service and add the date under Days off . The weekly schedule stays untouched; that date disappears from the timetable and the server refuses bookings for it. It works for on-request services too. Can visitors see a schedule of classes? Yes. Give a service a weekly Class schedule (e.g. Monday and Wednesday at 18:00) or One-time sessions in its editor, then add the [robina_schedule] shortcode to any page. Visitors see the upcoming sessions by day and time with the seats left, and can book straight from the timetable. Can a class run just once, on a specific date? Yes. Open the service and add the date and start time under One-time sessions . Use it on its own for a workshop or event that never repeats, or next to the weekly schedule for an extra session. Seats, days off and the public timetable work exactly as for weekly classes, and in the booking form the calendar offers only the dates the class runs. Once its last date has passed, the service is no longer offered for booking. Can one customer book several spots at once? Yes, for group services. Open the service and set People per booking (max) — for example 4 for families. The booking form then asks “Number of people”, each booking takes that many spots, and the price is multiplied accordingly. It never goes above the service’s capacity, and a customer only sees as many as are still free in the chosen session. Leave it at 1 and nothing changes: one person per booking, no extra question. Can I stop the same person from booking a class twice? Yes. Tick One booking per email for each session in the service. Someone who tries to book the same session again with the same email address is told it has already been used for that session; other sessions stay open to them, and a cancelled booking no longer counts. It works best together with “People per booking”, so someone booking for several people does it in one booking. Can I offer free sessions? Yes — set the service’s price to 0. Customers then see Free instead of a price in the booking form, the booking summary, the public timetable and the emails, and a free booking skips the payment step entirely: there is no payment choice, the booking is simply confirmed. Why do emails come from “WordPress”, and how do I change the sender? Open Robina → Notifications and use the Sender & logo panel. By default Robina’s emails are signed with your business name and replies go to your business email; you can change both there. The optional “From address” is best left empty unless your site sends mail for that address through an SMTP plugin — an address your server is not allowed to send for makes emails land in spam.
KEEP EXPLORING