← All projects
Full Stack2025Frontend & Backend Developer

ft_transcendence

A real-time multiplayer Pong platform exploring WebSocket communication, tournament management, and full-stack development with Django.

DjangoPythonVanilla JavaScriptHTMLCSSWebSocketsDockerPostgreSQL

01 · Problem

What made this hard

Building a real-time multiplayer experience means solving state synchronization across clients, managing WebSocket connections reliably, designing tournament workflows that handle creation and matchmaking, and maintaining a responsive UI under concurrent play.

02 · Approach

How I solved it

Designed and implemented the frontend for the Home page, Tournament pages, and Matchmaking interface using vanilla JavaScript. Built backend logic in Django for tournament management, creation, matchmaking, and local/remote tournament handling. Worked with WebSockets to synchronize multiplayer interactions and tournament state between clients. Developed and ran the project using Docker with a Django application architecture.

03 · Result

What came out of it

A functional multiplayer platform with real-time gameplay, tournament management, matchmaking, and responsive user interfaces — all Dockerized for reproducible deployment.

04 · Highlights

Key technical details

Responsive tournament management UI
Real-time WebSocket state synchronization
Matchmaking interface for local and remote play
Django backend with tournament logic
Dockerized full-stack deployment

 

Constraints

  • Real-time state synchronization across multiple clients
  • WebSocket reliability under concurrent connections
  • Tournament lifecycle management with matchmaking

05 · Architecture

How the pieces fit

Frontend

Vanilla JavaScript interfaces for the Home page, Tournament pages, Matchmaking, and game views — responsive across screen sizes.

Backend

Django application handling tournament management, creation, matchmaking, and persistence with PostgreSQL.

Real-time Layer

WebSocket connections synchronizing multiplayer interactions and tournament state between connected clients.

06 · Decisions

Choices worth naming

  1. 01

    Vanilla JavaScript

    Chose vanilla JS for the frontend to maintain direct control over DOM updates and WebSocket message handling without framework overhead.

  2. 02

    Django for backend

    Django's structured approach to application architecture fit the tournament management and matchmaking workflows.

07 · Trade-offs

What I gave up

choseWebSocket
overHTTP polling

Real-time multiplayer requires low-latency bidirectional communication that polling cannot provide reliably.

choseDocker
overManual deployment

Dockerized the entire stack for consistent environments across development and deployment.

08 · Reflection

Lessons and what's next

Lessons

  • ·WebSocket state management requires careful handling of connection drops and reconnections
  • ·Tournament lifecycle logic benefits from clear state machine design
  • ·Real-time UI updates need to be batched to avoid layout thrashing

Future

  • Add spectator mode for live tournament viewing
  • Implement tournament bracket visualization
  • Explore WebRTC for peer-to-peer gameplay

Team Project

My Contributions

Frontend

  • Designed and implemented the Home page
  • Built the Tournament pages and management forms
  • Developed the Matchmaking interface
  • Built Local and Remote Tournament experiences
  • Created responsive interfaces using vanilla JavaScript

Backend

  • Implemented backend logic for tournament management and creation
  • Built matchmaking logic for local and remote tournaments

Real-time Features

  • Worked with WebSockets to synchronize multiplayer interactions and tournament state
  • Integrated real-time communication between players and the backend

Infrastructure

  • Developed and ran the project using Docker
  • Worked with the Django application architecture and deployment environment

Next case study

AI Arena

A platform for evaluating and comparing large language models through a clean, developer-focused interface with real-time streaming and side-by-side analysis.