A full-stack web project built around the iconic game of PONG with:
- Fastify + Prisma/SQLite on the backend
- React (via Vite) + TypeScript on the frontend
- Nginx as a reverse HTTPS proxy
- Docker Compose orchestration
Note: full installation involves sensitive env vars (mailing creds, etc.), so see the provided
.env.examplefiles for details.
- What Is Transcendence?
- Component Deep-Dive
- Data Flow
- Core Features
- Visuals & Demos
- Contributors
- License
Transcendence is a full-stack ping-pong web application template showcasing:
- Single matches (head-to-head) for guests or authenticated users
- Tournament brackets with customizable rounds
- Single-player vs AI opponent with adjustable difficulty
- Match customization—multiple arenas/levels, variable ball speed, power-ups
- Multi-language support (English, Swedish, Finnish)
- Full screen-reader accessibility
- Multi-factor authentication (MFA) via one-time passwords (OTP)
It’s designed as a learning-friendly, production-style codebase you can explore, modify, or extend.
- Fastify for high-performance HTTP endpoints
- Prisma ORM with SQLite for zero-config persistence
- User management: registration, login, profiles, secure JWT auth + MFA via OTP
- Game logic:
- Single matches & scorekeeping
- Tournament bracket generation and progression
- AI opponent routines with adjustable difficulty
- Notifications via
nodemailer(configure SMTP inbackend/.env)
- Vite for lightning-fast dev reloads
- React + TypeScript for a strongly-typed SPA
- Tailwind CSS & Forms plugin for UI
- i18next for localization (EN, SV, FI)
- Accessibility: ARIA roles, keyboard navigation, screen-reader support
- Game UI:
- Match setup screen (mode, arena, speed, power-ups)
- Tournament bracket view
- Single-player vs AI arena
- Reverse HTTPS Proxy
- Terminates SSL (self-signed by default via
make ssl) - Serves built React assets
- Proxies API requests (
/api/...) to Fastify
- Terminates SSL (self-signed by default via
- Services:
frontend,backend(embedded SQLite) - Makefile helpers:
make ssl→ generate self-signed certmake jwt-secret→ addJWT_SECRETtobackend/.envmake up/make down→ control the stack
- Browser → Nginx (HTTPS)
- Nginx serves React shell or proxies to Fastify API
- React uses axios to call REST endpoints only
- Fastify authenticates (incl. MFA), processes game actions, updates Prisma
- Prisma persists users, matches, tournaments, stats in SQLite
- Single Matches (guest or logged-in)
- Tournament Mode with bracket generation
- Single-Player vs AI with difficulty levels
- Match Customization: arenas/levels, ball speed, power-ups
- User Registration & Login (JWT + secure cookies)
- Multi-Factor Authentication via OTP
- Multi-Language Interface (English, Swedish, Finnish)
- Full Screen-Reader Accessibility
- File Upload & image processing (e.g., avatars)
- Seed Script (
run_extended_seed.sh) for demo data - Environment-driven Config via provided
.env.examplefiles
▶️ Video Showcase
🎬 YouTube Demo:
https://youtu.be/6TZGFZVT26I
- Casimir Lundberg (Welhox)
- Emmi Järvinen (ejarvinen)
- Ryan Boudwin (KrolPolski)
- Sahra Taskinen (staskine)
- Armin Kuburas (ArminKuburas)
Released under the MIT License. See LICENSE for details.





