TRIP is a training registration system: it publishes a schedule of courses, lets people enroll themselves, handles approvals and waitlists, and takes attendance on the day. Everything on this site is live — enroll in something and a seat is really taken, a confirmation is really generated, and the waitlist behind it really moves.
The organization, the courses and the people are invented. Sign in with either sample account below and change whatever you like; the whole dataset is rebuilt every night.
The app has two audiences, so the demo has two accounts. Both are pre-filled on their own login screen — you only have to press Sign in.
Somebody signing up for training. Browses the schedule, takes a seat, joins a waitlist when a session is full, and checks their history in My Training. No administrative rights — this account cannot reach the panel or change the catalog.
The person running the program. Gets an admin panel for the catalog, plus the day-to-day screens: taking attendance, working the waitlist, importing a roster, and previewing every email the system sends.
The interesting parts of a registration system are the awkward cases, so those are the ones the demo data sets up for you.
Pick any session with seats left. The seat is taken immediately and a
confirmation email is generated with an .ics
calendar attachment. It then appears under
My Training.
Some sessions are seeded full, marked Full in the list. Enrolling in one puts you on the waitlist instead and tells you your position in the queue.
Cancelling an enrollment frees the seat and immediately promotes whoever is first in line — creating their enrollment, closing the gap behind them, and emailing them that a seat opened up. Sign in as the administrator and open Manage Waitlist to see the queue before and after.
A few courses are flagged as needing a manager's sign-off. Enrolling in one creates a pending enrollment and sends an approval request instead of handing over the seat. The seat is held while the request is open.
As the administrator, open a session's Take Attendance screen for the roster, per-person check-in, no-show handling, and a QR code meant to be projected in the room. Each session's code is its own — one photographed at one session will not check anybody in to another.
Nothing is actually delivered here. Instead, the panel's Email Previews screen renders all six messages from real records, so you can see exactly what an attendee would have received.
The schedule is built as a rolling window around today, so the demo never looks stale — there is always recent history behind you and a full calendar ahead.
31 upcoming, 33 already run
filling seats and waitlists
3 behind, 3 ahead of today
A scheduled job clears the training data every night at 3:00 AM and rebuilds the window around the new date — next run Tuesday, Oct 13 at 3:00 AM. Break anything you want; it will be tidy again by morning. Real accounts are never touched, only the two sample logins and the invented attendees.
Laravel 12 for the application, Filament 5 for the admin panel, Tailwind for the public views, and Pest for the tests.
Waitlist promotion runs inside a transaction with the session row locked, so two cancellations landing at the same moment cannot hand the same seat to two people.
A session's QR code only works from an hour before it starts until an hour after it ends, and only for somebody signed in and actually enrolled.
Being promoted off a waitlist into an approval-gated course produces a pending enrollment and an approval request, rather than quietly skipping the sign-off.
One price for the whole organization, billed monthly or annually, with your headcount deciding the plan rather than the invoice.