QrGate v3.1
Ticket lifecycle, live door ops and polish on top of the reserved-seating release (v3.0).
✨ New features
- Self-service cancellation — every confirmation email now carries a personal cancel link (per-ticket HMAC token, no login). Guests can cancel up to 24 h before the event; a Stripe-paid ticket is auto-refunded, the seat/capacity is released and stats are reversed. New animated, interactive cancel page (
cancel.php) with a die-cut ticket-stub design. - Live door check-in monitor — new "Live Einlass" widget on the admin dashboard: per-date sold / checked-in / pending counts and a rolling feed of the latest scans, polled every 8 s.
- Double-scan alarm — the handheld scanner now raises a loud visual + haptic alarm when an already-redeemed ticket is re-scanned, showing when it was first scanned.
🎟️ Ticket improvements
- Reserved seat number now printed on the PDF ticket and shown in the confirmation email (only for seated dates).
- Email + PDF are localized to the language the site was set to during purchase (DE/EN).
- New booking-success modal (ticket-stub style), screen-centered and fully i18n.
- Redesigned general-admission ticket-count stepper.
⚙️ Admin
- Configurable App-Domain in the dashboard — used to build the links (e.g. the cancel link) in emails.
🐛 Fixes
- Fixed seated-date availability showing "100/100 free" while seats were sold, and wrong capacity — seated capacity/availability now derives from the seat map + sold seats instead of the stale counter.
- Fixed seat columns never being persisted on ticket save.
Full changelog: v3.0...v3.1