Skip to content
← All Projects

Class
Agenda

A WordPress plugin for activity centers to manage classes, teachers, and client relationships.

Year2024
TeamMyself
Stack
PHP - WordPress - FullCalendar - WooCommerce
Problem

Client had no unified way to schedule classes and handle bookings.

Role

Freelancer Senior WordPress Developer

Outcome

A self-contained WordPress plugin combining an interactive class calendar, full client CRM, teacher availability management, and native WooCommerce booking integration.

Impact

Eliminated dependency on manual, unreliable methods for scheduling classes and managing client data across multiple centers.

The brief

The client ran an activity center juggling multiple teachers, rooms, and class types with no unified way to schedule sessions or track who showed up, who paid, and who was still pending. Bookings lived across spreadsheets and paper sign-in sheets, with no way to search a client's history without digging through binders.

I built this as a freelance WordPress plugin, owning the full scope: the interactive class calendar, the client CRM, teacher availability, and the WooCommerce integration that turns an online purchase into a filled seat. Everything runs inside the client's own WordPress install, with no third-party scheduling SaaS in the loop.

Class roster table showing enrolled clients with payment status, class type, class detail, session count, companions, attendance, and coupon columns

The per-class client list: payment status, class type, attendance, and a unique coupon code, all editable inline and synced back to the calendar.

Public self-service form titled Datos del Alumno with fields for name, ID, phone, email, address, referral source, and legal consent checkboxes

The public update form: clients edit their own record from a one-time link, no front-desk re-entry required.

Building it

Classes live in their own database table keyed uniquely by day and room, so two sessions can never collide in the same space, and each class carries a JSON list of enrolled clients with per-session data: payment status, class type, attendance, companions, and a coupon code the system checks for duplicates in real time. The calendar itself runs on FullCalendar with month, week, and day views, live filtering by teacher and room, and an unsaved-changes indicator on any event still pending a save. Teachers get their own role with a restricted view of the calendar: they can mark attendance but can't reassign a class or touch its roster, and a separate vacation and leave tracker automatically excludes unavailable teachers from the assignment list.

The hard part was keeping client data both centralized and self-service. Clients are stored as their own post type with full contact details, legal consents, and, for minors, two complete sets of guardian data, deduplicated automatically by ID document so the same person never gets a second record. A public form lets a client update their own information from a unique one-time link that disables itself after submission, and a CSV importer brings in hundreds of existing records in one pass, skipping anything that already matches. On the sales side, a WooCommerce purchase of a dated class variation creates the client record and enrolls them in that exact session automatically, turning a purchase into a filled seat with zero manual entry.

Want the long version, or something similar built?

Tech Stack
PHPWordPressJavaScriptFullCalendarSelectize.jsTailwind CSSWebpackMySQLWooCommerceWordPress REST APIPapaParse
Resume