A full-stack implementation of the classic Rock Paper Scissors Spock Lizard game.
The project consists of:
- Frontend: React + Vite + Material UI
- Backend: ASP.NET Core 10 Web API
- Docker & Docker Compose for containerized execution
- frontend/
- backend/
- RpsslGameApi.Application/
- RpsslGameApi.Contracts/
- RpsslGameApi.Domain/
- RpsslGameApi.Infrastructure/
- docker-compose.yml
- React 19
- Vite
- Material UI (MUI)
- Vitest
- React Testing Library
- ASP.NET Core 10
- Clean Architecture
- Swagger
- Docker
- Docker Compose
- Nginx
To run the project locally without Docker:
- Node.js 20+
- npm
- .NET 10 SDK
To run with containers:
- Docker
- Docker Compose
From the project root:
docker compose up --buildThis command will:
- Build the frontend image
- Build the backend image
- Start both containers
- Connect them through Docker networking
| Service | URL |
|---|---|
| Frontend | http://localhost:3000 |
| Backend API | http://localhost:8080 |
| Swagger | http://localhost:8080/swagger/index.html |
To stop the containers:
docker compose downcd backend
dotnet restore RpsslGameApi.sln
dotnet run --project RpsslGameApi.Application/RpsslGameApi.Application.csprojAPI available at:
http://localhost:8080
Swagger:
http://localhost:8080/swagger/index.html
Open a second terminal:
cd frontend
npm install
npm run devApplication available at:
http://localhost:3000
cd frontend
npm run testnpx vitestnpx vitest --ui| Method | Endpoint | Description |
|---|---|---|
| GET | /choices | Returns all playable choices |
| GET | /choice | Returns a random computer choice |
| POST | /play | Plays a round against the computer |
| GET | /scoreboard | Returns game history |
| DELETE | /scoreboard | Deletes the last scoreboard entry |
Rock Paper Scissors Spock Lizard extends the traditional game by adding two additional choices.
| Choice | Beats |
|---|---|
| Scissors | Paper, Lizard |
| Rock | Scissors, Lizard |
| Paper | Rock, Spock |
| Lizard | Spock, Paper |
| Spock | Scissors, Rock |
Reference:
http://www.samkass.com/theories/RPSSL.html
During development, I used AI tools to help with repetitive parts of the code, validate wording in documentation, and review the implementation for possible bugs or edge cases.
The generated suggestions were not used blindly: I reviewed and adjusted them to fit the project structure, requirements, and expected behavior.
Tools used
- Claude Code
- Codex (OpenAI)