A small full-stack app to track retro games: pending, playing, completed, and abandoned.
- Frontend: React (Vite) + Tailwind CSS
- Backend: Node.js + Express (JWT auth)
- Database: PostgreSQL (Docker)
- API: OpenAPI (
openapi.yaml)
cp .env.example .env
cp backend/.env.example backend/.env
# Edit backend/.env and set a strong JWT_SECRETRegistration is disabled. Set these env vars in .env (copy from .env.example) and the API will create the admin user on startup if it doesn't exist:
ADMIN_EMAILADMIN_PASSWORDADMIN_DISPLAY_NAME(optional)
On first run, PostgreSQL loads backend/database/schema.sql and seed.sql.
| Service | Port | URL |
|---|---|---|
| Frontend | 5175 | http://localhost:5175/ |
| API | 3030 | http://localhost:3030/api |
| API health | 3030 | http://localhost:3030/api/health |
| Swagger UI | 3035 | http://localhost:3035/ |
| pgAdmin | 5055 | http://localhost:5055/ (dev only) |
On the LAN, replace localhost with your server IP (e.g. http://192.168.1.50:5175/).
curl -sS http://localhost:3030/api/healthdocker compose up --buildBuilt images on a private home server. Set VITE_API_URL / VITE_FILES_URL in .env to http://<server-lan-ip>:3030/... before --build. Details: Run on a private Ubuntu server.
docker compose -f docker-compose.prod.yml up --build -d







