VenueSync home page: event search and featured events
Status
Live
Platforms
Web, Android, API
Automated tests
60+ test classes
Commits
260+

The challenge

Ticketing fails in two moments: when a popular event goes on sale and everyone checks out at once, and when a queue forms at the door with bad signal. Overselling costs organizers refunds and trust. A scanner that needs perfect internet stops the line.

What was built

  • Spring Boot backend split into users, events, tickets, validation and staff modules
  • React web app with two complete visual experiences the user can switch between
  • Native Android app in Kotlin and Jetpack Compose, with an organizer dashboard and a staff scanner
  • Organizer tools: events, ticket types, sales per type, door-staff invites, event photos
  • CI that runs the test suite on every pull request

Engineering decisions

The parts that make it hold up in real use

No double-sold seats

Seat allocation takes a database lock (pessimistic locking on PostgreSQL), so two buyers can never get the same last seat. Purchases are idempotent: a retried request can't charge twice.

Edits that can't undo each other

Events carry a version number. If an organizer saves on the website and on the phone at the same time, the stale save is refused instead of silently overwriting the other.

Tickets that work offline

The Android app keeps tickets in an encrypted on-device store, so an attendee can show their QR code at a venue with no signal.

Auth that survives a server dying

The self-hosted Keycloak server went down in production, so sign-in was migrated to Auth0 with role-based access for attendees, organizers and staff.

Stack

Spring BootJava 21PostgreSQLReactTypeScriptKotlinJetpack ComposeAuth0DockerGitHub Actions

Need a product built this carefully?

Share a few details and you'll get a reply within 24 hours: honest advice, a rough range, and the next step.