ELO Darts logo
Co-Founder & Lead Engineer2024 - presentLive

ELO Darts

ELO Darts is a real-time platform for serious webcam and club darts, with verified players, automated tournaments and rich performance stats for players, teams and associations.

TypeScriptNext.jsExpress.jsWebSocketsWebRTCTrigger.devPrismaPostgreSQLRedisStripeTurborepoDocker

Key Features

Real-time webcam matches
Cross-device scoring app
Automated tournaments & brackets
Player verification & anti-cheat
Advanced stats & ELO ratings
Streaming views with chat
Club & association tools

ELO Darts – Scalable Real-Time Darts Platform

Building ELO Darts started with a simple idea: make online darts feel as responsive as playing at the board. The hard part wasn’t the UI – it was delivering consistent, real-time performance at scale for matches, tournaments and stats across many concurrent players.

This project is my full-stack take on that challenge – and the main story is how we solved performance and scaling for live data.

The Problem & Vision

Real-time apps are easy when you have a few users. They get hard the moment you add:

  • Parallel matches and tournaments
  • Live scoring, video, and chat
  • Constant updates to stats and rankings

The vision: a platform where every score, camera frame and state change feels instant, even when many matches and events run in parallel.


Key Product Features

  • Real-time webcam matches with synchronized scoring
  • Match lobbies and tournaments with automated brackets
  • Player statistics and rankings updated from live data
  • Club & association spaces with events and results
  • All games are live-streamed on the platform

The product side is important – but the technically interesting part is what’s under the hood.


Architecture & Real-Time Scaling

The stack is built around modern web tooling and a real-time core:

  • Frontend: Next.js, React, Tailwind, shadcn/ui
  • Backend: Node.js, Express, Prisma
  • Real-time: Socket.IO with Redis for horizontal scaling
  • Database: PostgreSQL, Redis
  • Background Jobs: Trigger.dev
  • Infrastructure: Infrastructure: Dockerized services on Hetzner servers with load balancing

The biggest challenge was keeping real-time traffic fast and predictable as usage grew.

Solved it by:

  • Using Socket.IO + Redis so multiple Node instances can handle WebSocket traffic while staying in sync.
  • Designing room-based channels (per match, per tournament, per club) to avoid broadcasting unnecessary data.
  • Offloading heavy work (statistics recomputation, rating updates, integrity checks) to background workers via queues, so the request/response path stays lean.
  • Optimizing PostgreSQL queries and indexes around the read patterns of live dashboards and match views.
  • Adding metrics and tracing to spot hot paths and tighten bottlenecks before they become visible to users.

The result is a setup where we can spin up more backend instances and Redis continues to fan out events reliably, keeping latency low even under load.


What I Learned

This project was a deep dive into real-time systems at scale:

  • How to design WebSocket APIs and room structures that stay manageable as features grow.
  • How to separate “must be real-time” work from “can be async” tasks to keep the UX snappy.
  • How monitoring, tracing and good database design are just as important as clever code when you deal with live data.

ELO Darts is more than just a darts app in my portfolio – it's my reference project for scalable, real-time architecture. The stack spans a Next.js frontend, a Node.js/Express backend with Prisma, horizontally scaled WebSockets via Socket.IO + Redis, and background job processing with Trigger.dev – all tied together with a data model and infrastructure built to handle serious load.

Interested in this project?

Check out the live demo or get in touch to learn more.