Case study - Registration system integration into the website
Bon Odori is a two-day Japanese culture festival in Vilnius with ten bookable workshops, some capped, some requiring payment. Instead of an open checkbox spreadsheet, we built an automated registration system that enforces capacity limits, manages a waitlist, and sends email notifications, with live seat availability shown on the website.
- Client
- Bon Odori Japanese Culture Festival, Vilnius
- Service
- Registration systems, Backend automation, Google Workspace integration, Website development
The challenge
Bon Odori is a two-day Japanese culture festival in Vilnius, built around a full program of hands-on workshops — calligraphy, sumi-e painting, sashiko stitching, ikebana, bookbinding, and more. Each workshop is led by an independent facilitator with a dedicated page on the festival website.
The previous registration process was a single Google Sheet: anyone could mark themselves down for any workshop, with no cap on numbers, no distinction between time slots, and no way to handle paid workshops. Payment for paid workshops wasn't managed effectively. There was no automated way to reserve a seat while a payment was pending, release it if the payment never came, or notify the next person in line.
As the festival grew from a handful of open workshops to ten distinct bookable sessions across two days — some capped, some paid — the checkbox sheet stopped being a viable system.
The solution
We designed and built a self-contained registration system, running on Google Workspace and integrated directly into the festival's existing Next.js website — so the client doesn't need to learn any new software day-to-day, just a spreadsheet they already know.
- Structured registration, one form per session. Each of the ten bookable sessions — including workshops run by the same facilitator at different times — got its own form. A master "Workshops" tab holds each session's capacity, schedule, and price in one place, so the client manages the whole program from a single source rather than ten separate sheets.
- Automatic capacity and waitlist management. The system we built watches every incoming form submission in real time. It checks the session's remaining capacity and, if space is available, confirms the registration immediately — if not, it automatically adds the registrant to a waitlist. When a confirmed spot frees up — through a cancellation or an expired payment hold — the system automatically promotes the next person in line and emails them, with no one on the team touching the sheet.
- A payment hold built for bank transfer. We built a hold model: a paid registration reserves the seat immediately, generates a unique bank transfer reference code, and gives the registrant a two-day window to pay. A daily automated check reviews every pending registration against that deadline, cancels unpaid ones, frees the seat, and promotes the next person on the waitlist — all without any manual reconciliation.
- Automatic, branded emails at every step. Every registration outcome — confirmed, waitlisted, payment reminder, promoted from the waitlist — automatically triggers a transactional email sent from the festival's verified domain rather than a generic "no-reply" address. For paid sessions, bank details and the payment code are included automatically, so the client never has to write these emails by hand.
- Live seat counts on the website itself. The registration system also provides real-time seat availability for every session. The festival website reads the seat count client-side, so each workshop page shows a live, up-to-date seat count and automatically switches its button text to "join the waitlist" once a session fills — without any site rebuild or redeploy.
- Registration placed where the decision happens. Instead of one generic "register here" button attached to every page, each bookable session got its own registration card, placed right after the paragraph describing that specific workshop. On pages covering multiple sessions from the same facilitator, visitors see separate cards, each with its own schedule, price, and live seat count, placed exactly where the relevant description ends.
How it fits together
- Registration intake. Google Forms — one per bookable session, feeding a shared internal sheet.
- A single source of truth. A master "Workshops" tab: capacity, schedule, price, per-session status.
- System logic. Capacity checks, waitlist promotion, payment-hold expiry, a daily automated check.
- Email. A transactional email API, sent from the festival's verified domain.
- Public data. A simple web app function that reports, in real time, how many seats are taken and how many remain.
- Website. A client-side component pulls live seat data and renders registration cards inline with each workshop's description on the website.
The outcome
The client now runs a ten-session festival program — mixing free and paid workshops, single and multi-session facilitators — from one spreadsheet and with zero manual capacity tracking. Every registrant gets an immediate email; every paid seat is protected by an automatic hold-and-release cycle; and every workshop page on the website reflects real seat availability without any manual editing. What started as an unlimited checkbox list is now a system that grows with the festival's program instead of working against it.
Work done
- Registration backend
- 10 Google Forms unified into one shared response sheet with a "Workshops" source-of-truth tab
- Automatic real-time capacity and waitlist management
- A bank-transfer payment-hold model with unique codes and a daily automated check
- Brevo transactional emails sent from the festival's domain
- A web app function with live seat data
- Website integration — registration cards inline with each session's description
- bookable sessions
- 10
- unified registration channels
- 10
- manual steps for the client after setup
- 0
Looking for something similar for your event or business?
The Bon Odori registration system is an example of what an event looks like without manual seat tracking and lost bank transfers. Every event or business has its own specifics, so we can adapt a similar system personally — integrations with other payment methods, extra notification channels, or custom registration logic.