Portfolio demo

You are looking at a working app, not a mockup

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.

Two ways in

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.

The attendee

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.

Email
demo@example.com
Password
demo1234

The administrator

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.

Email
demo.admin@example.com
Password
demo1234

Worth trying

The interesting parts of a registration system are the awkward cases, so those are the ones the demo data sets up for you.

Enroll in something

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.

Join a full session's waitlist

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.

Cancel, and watch the queue move

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.

Ask for approval

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.

Take attendance

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.

Read the mail

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.

About the sample data

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.

Courses in the catalog
14
Sessions scheduled
64

31 upcoming, 33 already run

Invented attendees
24

filling seats and waitlists

Window
6 months

3 behind, 3 ahead of today

Everything resets overnight

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.

Under the hood

Laravel 12 for the application, Filament 5 for the admin panel, Tailwind for the public views, and Pest for the tests.

One seat, one person

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.

Check-in codes that expire

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.

Gates that hold

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.

Want this for your own organization?

One price for the whole organization, billed monthly or annually, with your headcount deciding the plan rather than the invoice.