Phase 0 foundation: - Docker Compose with PostgreSQL, Redis, Hardhat node - RPSArena.sol commit-reveal smart contract with tests - Node.js + Socket.io server with matchmaking and match state machine - Next.js + Phaser 3 frontend with Boot, Lobby, Arena, Result scenes - Nginx Proxy Manager integration planned for jeu.cosmolan.fr Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2.1 KiB
2.1 KiB
Contexte technique — The Arena RPS Royale
Ce fichier est lu automatiquement par Claude Code à chaque session.
Architecture
Monorepo pnpm avec trois applications et un package partagé.
apps/web: Next.js 15 App Router avec Phaser 3 en client-side only (ssr: false).apps/server: Node.js + Express + Socket.io standalone sur le port 3001.apps/contracts: Hardhat + Solidity (contratRPSArena.sol).packages/shared: Types TypeScript et constantes partagées.
Réseau Docker
Tous les services sont sur le réseau npm_default (créé par Nginx Proxy Manager).
rps-web:3000→ exposé via NPM surjeu.cosmolan.frrps-server:3001→ exposé via NPM surapi.jeu.cosmolan.fr(WebSocket support ON)rps-db:5432(PostgreSQL interne)rps-redis:6379(Redis interne)hardhat-node:8545(Hardhat local, port hôte 3054)
Conventions de code
- TypeScript strict partout.
- Pas de
anyimplicite. - Les imports du package partagé utilisent
@rps-royale/shared. - Les assets (sprites, audio) sont dans
apps/web/public/assets/. - Les fichiers Docker doivent rester minimaux et multi-stage.
Points de vigilance
- Phaser + Next.js : Phaser est chargé uniquement côté client via
dynamic importavecssr: false. Ne jamais importer Phaser dans un fichier SSR. - WebSocket : Le client Socket.io se connecte à
wss://api.jeu.cosmolan.fr. Le serveur autorise le CORS depuisjeu.cosmolan.fr. - Blockchain : Le contrat utilise le pattern commit-reveal. Les ABIs sont générées par Hardhat et importées dans le frontend via
packages/shared. - DB : Prisma schema est la source de vérité. Toujours regénérer le client Prisma après un changement de schema.
Commandes utiles
# Lancer tout le stack local
docker-compose up --build
# Migrer la DB
pnpm db:migrate
# Compiler et tester les contrats
pnpm contract:compile
pnpm contract:test
# Lancer uniquement le frontend et le serveur (DB/Redis doivent tourner)
pnpm dev
Environnements
- Local :
CHAIN_ID=31337(Hardhat local), RPChttp://127.0.0.1:3054 - Production/Testnet :
CHAIN_ID=11155111(Sepolia)