← Zurück zu Selected Work

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.

konzerte.st-godehard-hildesheim.de
NavisSedes overview

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

konzerte.st-godehard-hildesheim.de
NavisSedes screen
konzerte.st-godehard-hildesheim.de
NavisSedes screen
konzerte.st-godehard-hildesheim.de
NavisSedes screen

Stack

Next.jsPrismaNeonStripePlaywrightVitest