Organizing tournaments, for real.
RacketHub started from a real need: managing ping-pong tournaments between coworkers, with a reliable ranking and real-time updates. The prototype was built as a Next.js monolith, then migrated to a Go + Expo + Astro architecture targeting native mobile and better performance.
A Go backend, an Expo app, a landing page.
The Go backend exposes 54 REST endpoints via Chi router, with type-safe queries generated by sqlc, PostgreSQL transactions with optimistic locking, and a real-time SSE system propagated via NATS for multi-instance support.
The Expo mobile app covers 19 screens: bracket tournaments, Solo 1v1 challenges, Team 2v2 matches, multi-player Tournante mode, per-mode ELO rankings, player profiles with evolution charts, and 33 unlockable badges. JWT authentication with refresh token rotation, offline mode via MMKV, and push notifications.
From first match to final ranking, all in one app.
Sign-up, tournament creation, live matches, real-time ELO rankings, unlocked badges: everything works end to end on mobile. What remains is the landing page and production deployment.