Skip to main content

Case Study — SaaS · Payments

DameTicket — Production SaaS ticketing platform

Designed and shipped a production SaaS ticketing platform with real Stripe payment workflows, authentication, and SQL-backed data integrity. Built end-to-end as a solo engineer: schema, API, payment flow, and UI.

  • Next.js
  • TypeScript
  • Prisma
  • MySQL
  • Stripe
  • React
  • NextAuth
StripePayment provider
Next.js + Prisma + MySQLArchitecture
Production SaaSDeployment model

Overview

DameTicket is a SaaS ticketing product I designed and shipped end-to-end. The goal was to let event organizers create paid events, sell tickets online, and manage attendees without depending on a third-party marketplace that takes 8-10% per transaction.

The platform runs in production with real Stripe payment flows, persistent order history, and a relational data model that survives concurrent purchase pressure on popular events.

What I built

  • Stripe Checkout integration with server-side payment intents, webhook verification, and idempotent order processing — no duplicate charges if the webhook fires twice.
  • Prisma + MySQL schema designed for ticket inventory under concurrent purchases (transaction-wrapped seat allocation, no overselling on hot events).
  • Authentication and authorization flows for event organizers and buyers, including session-aware order history and email-based ticket delivery.
  • Multi-step event creation UI with image upload, ticket tier configuration, and capacity limits.
  • Production deployment with environment isolation, automated migrations, and a Stripe test/live mode switch tied to the deployment environment.

Why this mattered

DameTicket was a real-money product, not a portfolio toy. Building the payment path correctly meant getting Stripe's signed webhook verification right, handling failed payment retries cleanly, reconciling charge IDs to order rows in the database, and never letting a race condition double-sell a seat.

The interesting engineering was less about UI and more about ordering of side effects: when a buyer hits Pay, the system has to confirm Stripe, reserve the seat, persist the order, send the email, and update inventory — and recover cleanly if any one of those steps fails or is retried.

Outcome

DameTicket shipped to production and processed real ticket sales with Stripe. The platform validated that the full stack — Next.js + Prisma + MySQL + Stripe — could be wired together by a single engineer into something organizers would trust with their event revenue.

Start with the right context

I am open to Staff / Senior Staff product roles and long-term contracting engagements. The useful first message is different for each.

Hiring team

Send the role, level, location constraints, interview process, and compensation range if available.

Client engagement

Send the product context, current system, timeline, team shape, and where ownership is missing.