PackPass: class packs, bookings and waitlists for a yoga and Pilates studio

PackPass: class packs, bookings and waitlists for a yoga and Pilates studio

00 Markdown

Class packs and memberships by card, a weekly schedule with spots left, waitlists that book the next member, and live rosters.

Agent specs

Agent
Claude Code, Opus 5.5 Medium
Time
21 min
Cost
$9.70*

Agents work faster and more accurately on Elements.

* Cost at API rates, September 2026.

Run it yourself

Paste this prompt into your AI agent. You get the finished app on your own machine, ready to change however you like.

Agent Chat
Install elements:
curl -fsSL 'https://install.elements.dev?os=darwin' | sh && export PATH=~/elements/bin:$PATH

Create an Elements app from the elementscode/demo-packpass scaffold:
cd ~/elements/projects
elements create packpass -scaffold=elementscode/demo-packpass
cd packpass

Start the app.

Need an AI agent?

In AI desktop apps, paste into the Code tab, not the general chat.

How it's built

PackPass needed class credits and a monthly membership paid by card, a schedule that counts spots as members book, waitlists that fill themselves, reminder emails and live rosters for the front desk. Each of those is a part of Elements, so the agent spent its 21 minutes on the studio itself.

What Elements gave the app

  • Live schedule and rosters. The schedule, each member's bookings, the class rosters and the member list are LiveTables. Spots left, the front desk's roster with its check-in boxes and each member's credits update the moment anyone books or cancels.
  • Waitlists that book the next member. Booking locks the class first, so the last spot goes to exactly one member and a full class puts the next one on the waitlist. When someone cancels, the first member on the waitlist who can still pay gets the place and an email saying so.
  • Packs and memberships by card. Members buy a class pack or a monthly unlimited membership through Stripe. Credits are granted when the member returns and again when Stripe's webhook arrives, once either way. Until a Stripe key is set, the pay buttons open a test checkout inside the app that records the purchase the same way, and in production the app registers its own webhook on the first checkout.
  • Server calls as function calls. Booking, cancelling, check-in and buying a pack call server functions straight from the page with @rpc.
  • Background work. A one-line cron schedule checks every five minutes for classes two hours out and queues a reminder email job for each booked member, and a member who comes off the waitlist gets an email the same way.
  • Data and roles from SQL. Migrations define the studio and seed a staff login, three instructors, a week of classes, eight members and a full Reformer class with a waitlist. Sessions and one staff guard keep the studio pages with the staff.

What the project server gave the agent

The project server runs alongside the agent and answers as soon as a file is saved: it type-checks the templates, TypeScript and SQL, applies migrations and reruns the tests, so every question came back right away and the agent kept building.

What shipped

The app type-checks with zero errors and all 46 tests pass. Every page works on desktop and phone. A real sandbox payment went through Stripe end to end.

The code

Build it from scratch

To watch your agent build this app from an empty project, use the prompt we used instead. It takes longer than starting from the finished app above.

Agent Chat
Install elements:
curl -fsSL 'https://install.elements.dev?os=darwin' | sh && export PATH=~/elements/bin:$PATH

Create an Elements app:
cd ~/elements/projects
elements create packpass
cd packpass

Start the app, then build this:

Build a class booking app named packpass for a yoga and pilates studio.

MEMBER
- Sign up, buy a class pack (5 or 10 classes) or a monthly unlimited membership
  by card.
- Weekly schedule of classes with instructor, time, spots left.
- Book a class, which uses a credit. Cancel up to 12 hours before for the
  credit back.
- Join the waitlist when a class is full. When someone cancels, the first
  person on the waitlist is booked and emailed.
- A reminder email two hours before class.

STAFF (admin account)
- Classes and instructors, the weekly schedule, capacity.
- Each class's roster, and check members in.
- Members, their credits and membership status.

Payments by Stripe.

Seed the admin, three instructors, a week of classes, eight members with packs
and memberships, bookings, and a full class with a waitlist. Show the seeded
logins on the sign-in page.

Spots left, waitlists and rosters update in real time.

The weekly digest

New lessons, demos and posts from elements.dev, in one email a week.

Comments· 0