WebPONG is a full-stack web app inspired by the iconic game of PONG.
Built with React (Vite + TypeScript) on the frontend, Fastify + Prisma/SQLite on the backend, and Docker + Nginx for deployment.
This was a collaborative project, but here I highlight my personal contributions — mainly backend systems, tournament/game logic, DevOps automation, and accessibility features.
- What Is WebPONG?
- My Contributions
- Visuals & Demos
- Core Features
- Component Deep-Dive
- Data Flow
- Contributors
- License
WebPONG is a full-stack PONG web application that showcases:
- Single matches for guests or authenticated users
- Tournament brackets with customizable rounds
- Single-player vs AI with adjustable difficulty
- Match customization (arenas, speeds, power-ups)
- Multi-language support (EN, SV, FI)
- Screen-reader accessibility
- Multi-factor authentication with OTP
It’s designed as a production-style learning project you can explore, extend, or deploy.
While this was a team project, my main work focused on:
-
🛠 Backend development:
- Main responsibility for designing and implementing backend APIs and Prisma schemas
- Connected backend APIs with the frontend (auth flows, game logic, tournaments, stats)
- JWT authentication with secure cookie handling
- MFA/OTP support with bcrypt hashing
- Rate limiting and security hardening of endpoints
-
🎮 Game logic:
- Tournament system (bracket generation, creation, and progression)
-
⚡ DevOps / Infrastructure:
- Docker Compose orchestration
- Nginx reverse proxy setup
- Makefile automation (SSL generation, JWT secret creation, stack management)
- 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
- 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
This project was built as part of the 42 core curriculum with:
- 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.





