Case Study von Charles Heller
NavisSedes
Live-System für kostenpflichtige und kostenlose Events mit interaktivem Seating, 10-Minuten-Holds, Stripe Checkout, QR-Tickets und rollenbasiertem Admin-Check-in.

Proof Points
- Atomare Sitzplatz-Holds (10 Minuten)
- Checkout-Pfade für kostenpflichtig und kostenlos
- Versionierte Sitzpläne (Draft → Published)
- Abdeckung mit Vitest + Playwright
Problem
Eine Kirchenkonzertreihe brauchte zuverlässige Sitzplatzreservierung, Zahlungen, Rechnungen und Tür-Check-in — kein generisches Ticketing-SaaS.
Ansatz
Next.js 16 + Prisma/Neon-Domänenmodell (Venue → Plan → Seat), atomare Sitzplatz-Holds, Stripe-Webhooks mit Mock-Fallback, QR-Tokens, Admin-Scanner, Vitest + Playwright.
Herausforderung
Gleichzeitige Sitzplatzwahl und Hold-Ablauf mussten unter Checkout-Race Conditions konsistent bleiben — ohne Überverkauf.
Trade-off
Optimistisches Locking + kurze Holds statt WebSockets — schlankerer Betrieb, klarere Fehlermodi, einfacher unter Last zu testen.
Architektur-Entscheidungen
- Venue → SeatingPlan → Section → Bench → Seat
- Lebenszyklus AVAILABLE → HELD → verkauft/freigegeben
- Stripe Checkout + Webhook (Mock-Fallback für lokal/dev)
- QR-Tokens ohne PII + Scanner-Rollen fürs Personal
So habe ich getestet
Vitest deckt Domäne/Services ab; Playwright die Booking- und Admin-Flows — Qualität ist Teil der Delivery-Pipeline, kein Nachgedanke.
Was ich verantwortet habe
End-to-End-Produktverantwortung: Sitzpläne, Checkout, Zahlungen, Tickets/Rechnungen, rollenbasierte Admin-Oberfläche und automatisierte Regressionstests.
Was ich anders machen würde
Als Nächstes würde ich Observability rund um Hold-Ablauf und Webhook-Retries stärken sowie einen Staging-Seed, der die Produktionsdichte der Sitzplätze abbildet.
Product Walkthrough


