Skip to content
Peenaka Wedamulla

All case studies

Personal / R&D

Real-Time Event Ticketing System

Full-stack real-time ticketing platform with WebSocket-based live availability, secure authentication, versioned schema, Swagger-documented REST APIs, and a responsive Angular UI, proving that the engineer who tests systems can also design and ship them.

Problem

Concurrent ticket sales are one of the honest tests of a distributed system: inventory truth has to survive multiple buyers competing for the same seat at the same millisecond. This project was my sandbox for engineering that truth end-to-end, not just testing someone else's implementation.

Architecture

  • Backend: Spring Boot service exposing RESTful APIs, documented with Swagger, backed by MySQL with Liquibase-managed schema migrations. Domain services model tickets, inventory, and booking transitions explicitly.
  • Realtime layer: WebSocket channels broadcasting availability updates as bookings commit, so every connected client sees the same truth without polling.
  • Frontend: Angular SPA with authentication, live availability, and a responsive UI that stays usable on slower connections.
  • Auth: Secure sign-in / session handling, request-scoped identity through to the domain layer.

What I built

  • Full-stack architecture and implementation covering backend, frontend, database, realtime sync, and API documentation.
  • WebSocket-based synchronisation for concurrent booking management.
  • Versioned schema migrations via Liquibase so database change is a first-class deploy artifact.
  • Swagger-documented REST endpoints so the contract is legible without reading code.

Why it's in this portfolio

An SDET who has only ever tested other people's systems is a limited SDET. This project is my evidence that when I say "the architecture should look like this", I've built and shipped an equivalent system myself, navigating the same tradeoffs around consistency, concurrency, and API design that I later hold production code to.

TODO: link the public repo and a short demo capture once ready.