A custom booking platform built to manage religious service (puja) bookings with real-time slot availability, dynamic scheduling, and structured admin controls. The system pairs a fully custom WordPress plugin for backend management with a reactive Vue.js frontend — replacing a manual, error-prone booking process with a scalable, mobile-friendly experience.


The problem

Traditional booking methods — manual coordination or basic contact forms — created recurring operational issues:

  • No real-time slot availability meant double-bookings and scheduling conflicts
  • Poor mobile experience discouraged users from completing bookings
  • No structured tracking of bookings, priests, or history made admin management slow and error-prone

The goal was a system that handled availability, conflict prevention, pricing, and admin oversight — all without custom development overhead every time a new puja type or schedule was added.


Architecture

Backend — custom WordPress plugin

Rather than forcing bookings into WordPress’s native post types and post meta (which degrades at scale), a fully custom plugin was developed from scratch with dedicated database tables optimised for booking operations.

The plugin manages:

  • Puja types via a taxonomy-driven structure — new service types can be added through the admin without code changes
  • Booking slots and schedules with conflict detection at the server level
  • Priest allocation linked to specific slots and puja types
  • User bookings and history stored in custom MySQL tables with proper indexing for query performance

Custom REST API endpoints expose all booking data to the frontend with nonce/token validation on every request.

Frontend — Vue.js (Composition API)

A decoupled Vue.js frontend consumes the WordPress REST API. The Composition API was chosen specifically for its ability to extract and reuse logic across the booking flow — slot selection, availability checks, and validation are each encapsulated as composables rather than scattered across components.

Key interface elements:

  • Step-by-step booking flow with instant confirmation feedback
  • Dynamic date and time slot picker with real-time availability state
  • Puja selection and customisation with dynamic pricing updates
  • Live booking summary that updates as the user progresses

Real-time availability

The most technically sensitive part of the system is preventing double-bookings when multiple users attempt to reserve the same slot concurrently. This was solved with server-side validation as the source of truth, combined with frontend polling to keep slot availability state fresh without requiring a page reload. Race conditions are caught and rejected at the API level before any booking is confirmed.


Performance

  • Custom MySQL tables with indexing on booking date, slot, and puja type — queries stay fast as data volume grows
  • Selective field responses from the API reduce payload size on every request
  • Server-side caching for repeated queries (slot availability, puja listings)
  • Lazy loading for Vue components — only the active booking step loads in the initial render

Admin capabilities

The WordPress admin panel provides full operational control without developer involvement:

  • Create and manage puja types and pricing
  • Control slot availability per date and service type
  • View, search, and manage all bookings
  • Export booking reports

Challenges

Real-time slot conflicts — server-side validation enforces booking integrity, with frontend polling keeping the UI in sync. The server is always the authority; the frontend reflects its state.

WordPress scalability — native post meta would have become a performance bottleneck at booking volume. Custom tables with purpose-built schema and indexing solve this cleanly.

Complex frontend state — the multi-step booking flow manages availability data, user selections, pricing, and validation simultaneously. Vue’s Composition API made this manageable by keeping each concern in its own composable rather than a single sprawling component.


Stack

WordPress Custom Plugin REST API MySQL Vue.js Composition API AJAX


Planned enhancements

  • Payment gateway integration
  • SMS and WhatsApp booking notifications
  • Multi-language support