Chess game analysis + puzzle trainer with Stockfish.
Import games from Lichess/Chess.com, analyze with Stockfish, extract blunders as SRS puzzles.
cd /home/ubuntu/chessRecall
# Copy example env
cp .env.example .env
# Edit .env with your passwords + Supabase keys
nano .env
# Start everything
docker compose up -d --build
# Done — access at https://chessrecall.qzz.io┌─────────────────────────┐
│ Next.js App (port 3000) │ ← Browser access
└──────────┬──────────────┘
│
┌──────┴───────┐
↓ ↓
┌─────────┐ ┌────────┐
│Postgres │ │ Redis │ ← Internal (private)
└─────────┘ └────────┘
↑ ↑
└──── Worker ──┘ ← Analyzes games
- Copy
.env.example→.env(not committed to git) - Set strong passwords (min 20 chars):
POSTGRES_PASSWORD=your_secure_passwordREDIS_PASSWORD=your_secure_password
- Add Supabase keys (from Supabase dashboard):
NEXT_PUBLIC_SUPABASE_URL=https://...NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJ...SUPABASE_SERVICE_ROLE_KEY=eyJ...
View logs:
docker compose logs -f app # Next.js app
docker compose logs -f worker # Game analysis
docker compose logs -f postgres # DatabaseAccess database from PC:
psql -U chessrecall -h <your-server-host> -d chessrecall
# Password: your_postgres_passwordStop everything:
docker compose downRestart:
docker compose restartRebuild (after code changes):
docker compose up -d --build- Auth: Supabase (user login, external)
- Database: Postgres (games, puzzles, internal)
- Queue: Redis + BullMQ (game analysis jobs)
- Worker: Stockfish (detects blunders, creates puzzles)
- App: Next.js + React (UI)
All containerized. Zero external services (except Supabase for auth).