A modern 8-ball pool game web application built with Angular, NestJS framework and Matter.JS library.
Hosted version available at https://cue-frenzy.cristea.dev/.
This project implements a fully functional 8-ball pool game with user authentication, multiplayer capabilities, customization options, and player statistics. The application uses a microservices architecture with separate frontend and backend services, all orchestrated with Docker Compose.
- Realistic Pool Physics: Implemented using Matter.js physics engine
- User Authentication: Discord integration for easy sign-in
- Multiplayer Gameplay: Real-time matches via WebSockets
- Customization Options: Unlock different cues with points earned from matches
- Player Statistics: Track wins, losses, and other game statistics
- Framework: Angular 19
- UI Components: PrimeNG, Tailwind CSS
- Socket Communication: ngx-socket-io
- Icons: Font Awesome
- Framework: NestJS 11
- Database: PostgreSQL 17
- Authentication: JWT, Passport
- WebSockets: Socket.io
- ORM: TypeORM
/frontend
: Angular application/backend
: NestJS server/shared
: Common TypeScript types shared between frontend and backend/docs
: Documentation generation scripts/proxy
: Nginx configuration for the reverse proxy (used by Docker)/postgres-data
: Database persistence volume
- Docker and Docker Compose
- Node.js (for local development)
Create a .env
file in the root directory. An example environment configuration can be found in .env.example
-
Start all services:
docker-compose up -d
-
Access the application: http://localhost
cd frontend
npm install
ng serve
cd backend
npm install
npm run start