Game_Reviewer+ is a platform where you can write, read, and share video game reviews. It is not a site for professional critic scores, but rather a real opinion from real players. You can rate games you've played, comment on other people's reviews, react with likes and dislikes, and follow people with tastes similar to yours.
Project documentation is split into two major parts:
- Markdown documentation (
.mdfiles), including this README and area/module docs. - A PDF document in the repository root.
The .md documentation focuses on information developers need frequently while coding, or information that should always be easy to access (for example naming conventions, stack choices, etc...).
The PDF focuses more on product vision and process history, including weekly Scrum retrospectives/reviews. It documents both the direction of the project and the progress made during development.
The documentation is split into several files inside /docs:
report.pdf- product vision and development processsetup.md- how to install and run the project (Docker and local)testing.md- how to run the backend testsserver.md- backend architecture, layers, middlewares, and environment variablesclient.md- frontend conventions, folder structure, and component rulesobservability.md- logging pipeline, metrics, Grafana dashboards, and alerts/diagrams/- architecture diagrams
For API route reference, Swagger documentation is available at /api/docs.
There also may be smaller .md files inside specific parts of the codebase (for example repository info files) with focused notes for that module.
- Frontend: React 19 + TypeScript + Vite, Axios
- Backend: Node.js + Express 5 + TypeScript
- Database: PostgreSQL
- ORM: Prisma
- Authentication: JWT
- Documentation: OpenAPI (Swagger)
- Testing: Jest, Supertest
- DevOps: Docker, GitHub Actions
- Observability: Prometheus, Grafana, Loki, Alloy
- Security/Analysis: CodeQL, OWASP ZAP, Trivy
- External Data: IGDB API, Cloudinary
GR-<task-id>/<kebab-case-description>- branches (e.g. GR-32/auth-jwt)camelCase- local variables, function parameters, standalone functions, class methods, object properties, CSS module class namesPascalCase- classes, types, interfaces, type aliases, file names, React component functions (the only functions in PascalCase)SCREAMING_SNAKE_CASE- module-level constants, environment variable names
Format: KEYWORD: description; KEYWORD2: description2
Allowed keywords:
ADD- new featureFIX- bug fixDOC- documentationSETUP- configs and dependenciesCLEANUP- refactor without changing behaviorOPTIMIZE- performance improvementsTEST- testsSTYLE- style
Example: ADD: Report feature, Like feature; FIX: Multiple dislikes by same user.
main- most recent stable functional versiondev- code from multiple branches with new features and run workflowstests- run workflows and tests
This project intentionally uses multiple environment files because each one serves a different runtime context:
- Root
.env-> Docker Compose only (container and Postgres wiring) server/.env-> backend runtime values (JWT, IGDB credentials, etc.)server/.env.test-> testing context only
The separation prevents accidental cross-use of variables between local runtime, containers, and tests.
For testing, server/.env.test points to test_db (not gr_db) so integration tests never touch development data. Before each test, all tables are truncated to guarantee independent and repeatable runs.
Environment variables of the server are set in /server/.env
- Logs are written to
/observability/logs/app.log - Disables
/api/docsand/api/docs.jsonroutes - Non-
AppErrorerrors are sanitized to avoid exposing internal details - Email validation is disabled to allow testing the Web App without SMTP
- Email validation is disabled
- Email validation is enabled
- Used for unit and integration tests (see
docs/testing.md) - Logs are not printed to stdout
| Level | Description |
|---|---|
trace |
Most detailed logs |
debug |
Debug information for development and troubleshooting. |
info |
General application events (server start, requests, jobs, etc.). |
warn |
Non-critical issues or unexpected situations that should be reviewed. |
error |
Errors that affect a specific operation or request. |
fatal |
Critical errors that cause the application to stop or crash. |
Scripts are located in the /scripts directory and must be executed from that directory
You can this scripts using ./<script-name>.sh or for the Init ones bash <script-name>.sh
Restarts the Docker environment by rebuilding and launching all containers.
If you pass an argument, it will be passed to
docker compose down, for e.g.restart.sh -vwill remove persistent volumes
Stops and removes all running Docker containers for the project.
If you pass an argument, it will be passed to
docker compose down, for e.g.stop.sh -vwill remove persistent volumes
Run this script to initiate the project right after cloning. - This scripts takes a bit longer to start up the project because of the seeder Initializes the project environment in NODE_ENV=production, creates configuration files, starts Docker containers, seeds the database, and displays startup information.
Sets up the testing environment, applies database migrations, and runs the automated test suite.
If you pass an argument, it will be passed to
docker compose down, for e.g.runTests.sh -vwill remove persistent volumes
Removes /server/src/IGDB/token.log - used when the IGDB token expires, or changing tokens manually in server/.env