Vitrina — Museum timed-slot tickets
Key features
Timed-slot transactional cycle: 15-min hold (server expiresAt) → confirm → QR; 30s sweeper; double-sale mutex (409)
Exhibition catalogue + artwork sheets with curatorial notes and slot picker (today→+30 days)
Checkout with tariffs (general/reduced/child/member), add-ons and countdown resync on visibilitychange/focus
My visits: list↔detail total consistency, cancel ≥24h and dynamic statuses
Membership points derived: 10 pts × confirmed|used seat (seed and real purchases)
Admin: occupancy and revenue with real SVG charts (X/Y axes + tooltips)
Description
Vitrina is the full digital experience of an art & science museum for end visitors. Explore permanent and temporary exhibitions, open curatorial artwork sheets, pick a day and time slot with live free seats, add options (audioguide, guided tour) and confirm payment. The ticket includes a downloadable QR and a simulated email. In My visits you track statuses (pending, confirmed, used, cancelled, expired), cancel with a 24h policy and earn membership points derived from real visits (10 pts × seat). The truth layer is the timed-entry transactional cycle: each slot is a finite resource with pending hold and server-side expiresAt, a 30s sweeper freeing stale holds, double-sale mutex (409) and list↔detail consistency on totals and free seats. Curators publish exhibitions and inspect occupancy/revenue with real charts (axes, dates, tooltips).
Technologies used
Angular
TypeScript
SQLite