No description
  • TypeScript 90.1%
  • CSS 9.8%
  • HTML 0.1%
Find a file
stefan b7cc657990 chore(config): URLs pilotées par .env (fin du hardcode) pour la prod
Client : URL de l'API/Socket.io centralisée dans src/config.ts (plus de
duplication localhost dans api.ts et mpSocket.ts) et fournie par les fichiers
.env Vite — .env.development (localhost) et .env.production (domaine public),
+ .env.example. Build prod vérifié : VITE_API_URL bien injectée.

Serveur : ajout de .env.example documentant toutes les variables (CLIENT_ORIGIN,
DISCORD_REDIRECT_URI, NODE_ENV, JWT_SECRET…) ; log de démarrage sans localhost
en dur. La config lisait déjà tout depuis .env.

README : section déploiement (domaines séparés front/api) + tableau des variables.

114 tests au vert, typecheck serveur + client OK, build client OK.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 20:13:38 +02:00
.claude docs: spec de conception du casino virtuel nyx 2026-07-18 16:12:01 +02:00
client chore(config): URLs pilotées par .env (fin du hardcode) pour la prod 2026-07-19 20:13:38 +02:00
docs/superpowers/specs feat(client): refonte visuelle « NYX » (thème casino mystique) 2026-07-19 14:31:53 +02:00
server chore(config): URLs pilotées par .env (fin du hardcode) pour la prod 2026-07-19 20:13:38 +02:00
.gitignore docs: spec de conception du casino virtuel nyx 2026-07-18 16:12:01 +02:00
README.md chore(config): URLs pilotées par .env (fin du hardcode) pour la prod 2026-07-19 20:13:38 +02:00

Nyx 🎰

Casino virtuel communautaire : connexion via Discord, jetons purement virtuels (aucun argent réel), jeu de blackjack avec logique 100 % côté serveur.

Architecture

nyx/
├── server/   API Node + Express + TypeScript, SQLite via Prisma
│              (couches routes → services → repositories → Prisma)
└── client/   SPA React + Vite + TypeScript
  • server : source de vérité unique (soldes, cartes, résultats). Voir la spec de conception dans docs/superpowers/specs/.
  • client : affichage et actions ; ne calcule jamais un résultat de jeu.

Prérequis

  • Node.js ≥ 20
  • Une application Discord (pour l'OAuth2) : https://discord.com/developers/applications
    • Onglet OAuth2 → ajouter le Redirect : http://localhost:4000/api/auth/discord/callback
    • Récupérer Client ID et Client Secret.

Configuration

Aucune URL n'est codée en dur : tout passe par des fichiers .env.

Serveur — copier server/.env.example en server/.env et remplir (DISCORD_CLIENT_ID/SECRET, JWT_SECRET, ADMIN_DISCORD_IDS, CLIENT_ORIGIN, DISCORD_REDIRECT_URI…).

Client — l'URL de l'API est injectée au build par Vite :

  • client/.env.development → utilisé par vite (dev), pointe sur http://localhost:4000.
  • client/.env.production → utilisé par vite build (prod), pointe sur le domaine public de l'API (ex. https://api.nyx.envoys.fr).

En production (domaines séparés)

Front sur https://nyx.envoys.fr, API sur https://api.nyx.envoys.fr :

Fichier Variable Valeur
server/.env NODE_ENV production
server/.env CLIENT_ORIGIN https://nyx.envoys.fr
server/.env DISCORD_REDIRECT_URI https://api.nyx.envoys.fr/api/auth/discord/callback
client/.env.production VITE_API_URL https://api.nyx.envoys.fr

La Redirect doit aussi être enregistrée à l'identique dans l'app Discord. Build : cd server && npm run build (→ dist/, lancer avec npm start) et cd client && npm run build (→ dist/ statique à servir).

Démarrage (développement)

Terminal 1 — API :

cd server
npm install
npm run prisma:push      # crée la base SQLite (server/dev.db)
npm run dev              # http://localhost:4000

Terminal 2 — client :

cd client
npm install
npm run dev              # http://localhost:5173

Ouvre http://localhost:5173 puis « Se connecter avec Discord ».

Tests

cd server
npm test                 # domaine, services, repositories, routes (Vitest)

Passer à PostgreSQL plus tard

Grâce à la couche repositories, seul Prisma change :

  1. Dans server/prisma/schema.prisma, mettre provider = "postgresql".
  2. Adapter DATABASE_URL.
  3. npm run prisma:migrate.

Aucun service ni aucune route à modifier.

Périmètre v1

Blackjack, connexion Discord, solde de départ, gestion admin des jetons. Hors périmètre (v2) : bot Discord, autres jeux, achat de jetons.