StealThis .dev
Pages Medium

Museum — Ticket Booking

A refined, gallery-toned timed-entry booking flow for a fictional art museum. Visitors pick a date on a mini calendar that closes Mondays and dims past days, choose an entry time slot showing remaining capacity, then add adult, senior, student, child, free-child, and member tickets with quantity steppers. A live order summary tallies subtotal, per-ticket service fee, and total while guarding slot capacity and the per-order limit, with toasts confirming each step and a validated continue-to-checkout button.

Open in Lab
html css vanilla-js
Targets: JS HTML

Code

Ticket Booking

A self-contained timed-entry booking page for the fictional Meridian Museum of Art, framing admission to the permanent collection and the special exhibition Luminous Ground: Color Field Painting, 1958–1974. The layout favors generous wall space, a Cormorant Garamond and Inter pairing, and a quiet gold-and-charcoal palette so it reads like a cultural institution rather than a generic checkout. Three numbered steps sit beside a sticky order summary.

Step one is a mini month calendar that disables past days and closed Mondays, supports keyboard focus, and lets visitors page between months. Selecting a date reveals step two — five entry-time slots, each showing deterministic remaining capacity with low-availability and sold-out states. Step three lists six ticket types (adult, senior, student, child, free child, and member) with circular quantity steppers, badges, and per-ticket pricing.

Everything stays reactive: the summary rewrites its date, time, and guest count, lists each selected ticket line, and tallies subtotal, a per-paid-ticket service fee, and the running total. The flow validates as you go, capping paid tickets per order, never overselling the chosen slot’s remaining capacity, and only enabling checkout once a date, time, and at least one ticket are chosen — with a toast confirming each step. It is keyboard-usable with visible focus, meets AA contrast, and reflows cleanly down to 360px.

Illustrative UI only — demo data; not a real museum system.