Skip to main content
Harmanpreet Singh
All work

Independent project: Real-time web and mobile app

Ringside: a watch-party app for live sports

A watch-party app for people who follow sports together: spoiler-safe chat, live reaction counts, polls, pick'ems and a data desk with live tables and fixtures for UFC, F1, football, college football and cricket. A web app, a Node server and an Android app share one API. Around 200 users have used it.

The Ringside Discover page: a dark sidebar with Discover, Watch rooms, Upcoming, Pick'ems and Standings, a hero reading Every game your people care about, in one place, and a card saying five sources are online.
The Discover page, with the live data status in the corner. Captured from the running app on my own machine, October 2026.

What it is

Watching a game with friends who are not in the room is awkward when everyone is a different distance behind the stream: someone's goal alert ruins it for someone else. Ringside is a small product built around that problem, with a lot of sports data around it.

Each person sets how far behind the stream they are, and the server holds their friends' messages until that moment. The rest of the app is what a watch party needs: reactions, polls, pick'ems, and tables and schedules for five sports.

My part

I built the web app, the real-time server, the sports-data layer and the Android app.

Independent project. It is a prototype: rooms, chat, household presence and profiles are seeded demo content, and the live part is the sports data.

Stack

  • React 19
  • Vite
  • Express 5
  • Socket.IO
  • MongoDB (optional)
  • Expo / React Native

What is inside

A React client and an Express and Socket.IO server, with one normalized sports API shared by the web and Android apps.

  1. 01

    Real-time rooms

    Socket.IO rooms carry chat, polls and reactions. Chat is scheduled per recipient using their offset, capped at 15 minutes.

  2. 02

    Reaction batching

    Reactions are counted in a 650 ms bucket per room, then sent as one aggregate count.

  3. 03

    Sports data layer

    One endpoint merges UFC.com, Jolpica (F1), ESPN (football, college football, MMA events) and ESPNcricinfo into a single response. The server caches it for five minutes, times out slow sources, and keeps the last good result for a sport when its source fails.

  4. 04

    Clients

    The web app and the Expo Android app read the same API and rooms, so a provider can be swapped without touching the screens.

A Ringside watch room for a UFC fight: a stage with both fighters, reaction counters, a live poll, and a chat panel with a spoiler-safe delivery switch and a stream offset slider set to 2:14 behind.
A watch room. The slider is each person's offset behind the stream, so chat arrives when they get there. The chat messages here are demo content. Captured from the running app on my own machine, October 2026.
The Ringside Standings page showing the UFC lightweight rankings table with the champion first, a list of weight classes on the left and a table-leader card on the right.
UFC rankings pulled live from UFC.com, one of five providers. Captured from the running app on my own machine, October 2026.