rps-royale/CLAUDE.md
Ubuntu 64e8fb6c49 Initial commit: monorepo structure, smart contract, server, and Phaser frontend
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>
2026-05-24 02:14:42 +00:00

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 (contrat RPSArena.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 sur jeu.cosmolan.fr
  • rps-server:3001 → exposé via NPM sur api.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 any implicite.
  • 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 import avec ssr: 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 depuis jeu.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), RPC http://127.0.0.1:3054
  • Production/Testnet : CHAIN_ID=11155111 (Sepolia)