booknslot v1.2 Update: Page Templates, Org Domain Restriction, and Role-Based Maintainers
A walk through what landed in the v1.2 release line — seven pre-built page templates with dynamic placeholders, opt-in organization email-domain restriction, WordPress user-based maintainer roles, plus a string of validation and admin-UX refinements.
This is the roll-up of everything that shipped in the v1.2 line of the booknslot plugin — v1.2.0 through v1.2.4. The headline is “less configuration, more clicks”: a page template picker that gets a working booking page live in under a minute, and a couple of features that quietly unlock real-world use cases (org-email restrictions, WordPress-user-based maintainers).
If you’ve already installed the plugin, WordPress will surface the update on the standard Plugins page. Existing pages migrate cleanly; nothing in v1.2 is breaking.
What’s new in v1.2
Page template picker
When you create a new booking page in the Builder, you now pick from seven pre-built templates instead of starting from a blank slate every time:
- Meeting Room — slot-based, auto-approve by default, capacity field
- Lab / Equipment — slot-based with maintainer approval, project-code field, safety-prerequisite checkbox stub
- Consultation — appointment-style, longer slots, notes field
- Sports Facility — slot-based with peak-vs-off-peak label fields
- Service Appointment — appointment-style with service-type select
- Vehicle Booking — slot-based with driver-info fields, multi-day stub (no backend yet — see roadmap)
- Blank / Generic — start from scratch when none of the above fit
Each template ships with a sensible default set of form fields, calendar settings, approval mode, and a starter page description. You can edit anything; the template is just a faster starting point.
Dynamic placeholders per template
Every template comes with pre-filled descriptive copy in the Builder — example field labels, hint text, sample resource names — that you replace with your actual content. Speeds up the “make this real for our use case” step without forcing you to invent the wording from scratch. The placeholders are template-aware: the Vehicle template suggests License plate and Driver name, the Lab template suggests Project code and Equipment number, etc.
Sample resources are seeded too, with generic names you swap out (Vehicle 1, Vehicle 2, Vehicle 3 rather than something we’d presume to fit your fleet).
Opt-in organization email-domain restriction
A new toggle in the page settings: Restrict to specific email domains. When on, bookers whose email doesn’t match the allowlist see a polite “this booking page is restricted to organization members” message before the form opens. Defaults to a permissive allowlist (gmail.com — adjust to your actual member domains) so you don’t accidentally lock everyone out the first time you flip the toggle.
The list takes one domain per line. @yourschool.edu and @partner.org together is a common pattern for institutions with affiliated organizations.
WordPress user-based maintainers with role-based access
Maintainers are now linked to actual WordPress user accounts instead of being a free-text field. Two custom capabilities ship with the plugin:
booknslot_manage— full access; create/edit pages, manage maintainers, change site-wide settings.booknslot_approve— sees only the bookings on pages they’re assigned to; can approve or reject, can’t modify configuration.
You pick from existing WordPress users when assigning a maintainer; they log into the same wp-admin they use for everything else and see a scoped view of booknslot. No separate accounts, no separate passwords.
License-gated admin banner
A sticky banner appears in the admin (visible only to users with booknslot_manage) when a license is missing, expired, or unrecognized. Tells you exactly what to do — paste a key from your LemonSqueezy purchase email — and dismisses cleanly the moment activation succeeds.
What got better
Validation that doesn’t crash
Validation errors in the booking API previously returned 500 Internal Server Error responses with stack traces — confusing to debug, surprising to users. v1.2.2 fixes the API to return clean 400 Bad Request responses with structured error bodies. The front-end now surfaces specific field errors (“Email is required,” “Slot is no longer available”) instead of generic failure messages.
Builder Step 1 inline validation
When you’re creating a new booking page, the Name and Slug fields now have inline validation as you type:
- 3-character minimum on both
- Slug must match the URL-safe regex
- Publish and Save buttons stay disabled until both pass
Catches typos at the source instead of letting you click through and discover the problem on save.
Missing-maintainer warning
If you enable “Require approval” in Builder Step 4 but haven’t assigned any maintainers, a warning card now appears in the Step 4 review — “Bookings will queue indefinitely until you add a maintainer to this page.” Stops the most common new-user pitfall in this release line: configuring approval-required without anyone to approve.
Cleaner maintainer-to-page assignment
Maintainer assignments used to be configurable from both the Maintainers tab and the page Builder, which created a confusing two-source-of-truth pattern. As of v1.2.4, page assignments live exclusively in Builder → Step 4; the Maintainers tab is just for managing the maintainer list itself. Existing assignments are preserved during the migration.
What’s coming next
The v1.3 line is already in active development. Two big items queued up:
- Per-service approval workflows. Today, approval rules are page-level (one set of maintainers for all resources on a page). v1.3 adds per-resource maintainer assignment — Vehicle 1 routes to Maintainer A, Vehicle 2 routes to Maintainer B, the conference room auto-approves. Useful when one page hosts a fleet of similar things with different owners.
- Database table rename. The plugin currently uses the
wp_bm_*prefix for its tables. v1.3 will rename them towp_booknslot_*with an atomic, idempotent migration on first admin load. Collision-safety with other plugins that might also usebm_short prefixes.
Beyond v1.3, the bigger items in scope:
- Bookings calendar view — week and month grid with filter bar; replaces the long scrolling list as the default Bookings tab.
- Per-service form fields — fields that show only when a specific resource is selected, so the Vehicle 1 form can ask for a license plate while the Conference Room form asks for an attendee count.
- Email delivery simplification — dropping the Resend HTTP-API dependency in favor of WordPress’s native
wp_mail(), so SMTP setup happens through any plugin you already use.
Where to go from here
Updating from an earlier release is the standard WordPress Plugins → Update action. The migration runs automatically on first admin load. No config gets reset; existing maintainers, pages, and bookings carry over.
If you’re evaluating, the live demo walks through a booking end-to-end on mock data — about 90 seconds, no signup, OTP code 123456 for the verification step.
For the broader case for a real booking plugin instead of email and spreadsheets, see Why your WordPress site probably needs a booking plugin.