Files
ClickerZ/docs/SPRINT1.md
Tetardtek 3d69899dbf fix: backend dead code + bug destroy + nettoyage legacy
- Suppression forgottenPassword/resetPassword (dead code, routes jamais câblées)
- Suppression nodemailer (plus utilisé)
- Fix destroy() : getById() → read() (bug — méthode inexistante)
- Ajout getByNickname() dans UserManager (appelé mais manquant)
- README rebrandé Clickerz/Tetardtek
- Commentaire legacy WildCoinContext supprimé
- SPRINT1.md : ref Xmass nettoyée
2026-03-20 15:11:26 +01:00

168 lines
6.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# SPRINT1.md — Fondations Tetard Universe
> Brief technique — Sprint 1
> Date : 2026-03-20
> Réf GDD : docs/GDD.md
> Agents : game-designer (design) → build (implémentation)
---
## Objectif
Transformer le prototype legacy en Clickerz Tetard Universe avec :
- Rethème complet (noms, visuels, textes)
- Arbre d'Évolution (permanent, jamais reset)
- Save serveur (anti-triche, fin du localStorage)
- SuperOAuth login
- Core loop jouable de bout en bout : Ponte → Générateurs → Prestige → Arbre → Nouvelle run
---
## Existant à conserver
| Composant | Fichier | État |
|-----------|---------|------|
| Core economy | `Frontend/src/core/economy.ts` | ✅ Solide — lazy calc, 5 generators, prestige |
| Tests economy | `Frontend/src/__tests__/economy.test.ts` | ✅ 13 tests |
| Backend auth | `Backend/src/controllers/authControllers.js` | ✅ JWT + SuperOAuth ID |
| DB schema | `Backend/database/schema.sql` | ✅ users + super_oauth_id |
| Prestige UI | Commit 9f0ccda | ✅ PrestigePanel + MilestoneBar |
---
## Steps
### Step 1 — Rethème Tetard Universe
**Scope :** Renommage complet, zéro changement mécanique.
- [ ] `economy.ts` : renommer generators (Manic → Nid, Tasse à café → Mare, Sucre → Marécage, Usine → Étang Ancien, Portail → Lac Mystique)
- [ ] `shop.json` : réécrire avec noms/descriptions Tetard Universe (ou supprimer si redondant avec economy.ts)
- [ ] `Achievements.json` : adapter les textes au thème marais
- [ ] UI : remplacer "cookies" / "Xmass" par "têtards" / "Clickerz" partout
- [ ] Pages : Cookie.jsx (page légale) → adapter mentions "Xmass Clicker" → "Clickerz"
- [ ] Titre / meta : "Clickerz — Tetard Universe"
**Critère done :** aucune référence à "cookie", "Xmass", "Noël" dans le code.
---
### Step 2 — Arbre d'Évolution
**Scope :** Nouveau système permanent, intégré au prestige.
- [ ] Nouveau type `EvolutionNode` dans economy.ts :
```ts
interface EvolutionNode {
id: string;
name: string;
cost: number; // en ADN Ancestral
effect: EffectType; // multiplicateur, flat bonus, unlock
value: number;
unlocked: boolean;
requires?: string; // id du nœud prérequis (linéaire Sprint 1)
}
```
- [ ] Étendre `GameState` : ajouter `ancestralDna: number`, `evolutionTree: EvolutionNode[]`
- [ ] Modifier `applyPrestige()` : calculer ADN gagné via `floor(150 × sqrt(lifetime / 1e9))`, ajouter à `ancestralDna`
- [ ] 5 nœuds linéaires (GDD : Ponte Améliorée → Instinct Grégaire → Mémoire Génétique → Mutation Alpha → Symbiose)
- [ ] `buyEvolutionNode(state, nodeId)` : acheter si ADN suffisant + prérequis débloqué
- [ ] Appliquer les effets dans `totalProductionPerSecond()` et `applyClick()`
- [ ] UI : `EvolutionTree.tsx` — panel visible après premier prestige
- [ ] Tests : couvrir achat nœud, prérequis, effets sur production
**Critère done :** un joueur peut prestige, gagner de l'ADN, acheter des nœuds, et constater l'effet sur sa prochaine run.
---
### Step 3 — Save serveur + anti-triche
**Scope :** Migrer la persistence de localStorage vers API backend.
- [ ] Backend : nouvelle table `game_saves`
```sql
CREATE TABLE game_saves (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL UNIQUE,
game_state JSON NOT NULL,
last_save TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
lifetime_tadpoles BIGINT DEFAULT 0,
prestige_count INT DEFAULT 0,
FOREIGN KEY (user_id) REFERENCES users(id)
);
```
- [ ] Backend routes : `POST /api/save` (write), `GET /api/save` (load) — JWT required
- [ ] Validation snapshot sur `POST /api/save` :
- Vérifier `elapsed_time × max_possible_production × 1.1 >= claimed_resources`
- Si invalide → rejeter le save, logger l'anomalie
- [ ] Frontend : `useSaveSync` hook — auto-save toutes les 30s via API
- [ ] Frontend : load state depuis API au login (pas de localStorage game data)
- [ ] Supprimer la persistence localStorage pour les données de jeu
**Critère done :** fermer l'onglet, rouvrir, login → retrouver exactement son état. F12 → modifier localStorage → aucun impact sur la save serveur.
---
### Step 4 — SuperOAuth login
**Scope :** Câbler le login via SuperOAuth existant.
- [ ] Vérifier le flow SuperOAuth backend (verifyOAuth.js existe)
- [ ] Frontend : page Login avec bouton "Se connecter avec SuperOAuth"
- [ ] Redirect vers SuperOAuth → callback → JWT → session
- [ ] Protéger les routes /api/save derrière JWT
- [ ] Fallback : mode "invité" sans save serveur (localStorage temporaire) — optionnel
**Critère done :** login SuperOAuth → jeu avec save serveur. Pas de register custom (SuperOAuth gère).
---
### Step 5 — Migration SCSS → Tailwind + Zustand
**Scope :** Moderniser le frontend pour la suite.
- [ ] Installer Tailwind CSS + config Vite
- [ ] Migrer les composants clés (game view, shop, prestige panel) vers Tailwind
- [ ] Installer Zustand, créer `useGameStore` — remplacer le state lifting actuel
- [ ] Intégrer le game loop tick dans Zustand (requestAnimationFrame ou setInterval 1s)
- [ ] Supprimer les fichiers SCSS migrés
**Critère done :** game loop tourne via Zustand, UI en Tailwind, SCSS supprimé sur les composants migrés.
---
### Step 6 — Polish & deploy
**Scope :** Rendre jouable et déployer.
- [ ] UI : écran d'accueil Clickerz (logo, "Entrer dans le Marais")
- [ ] UI : feedback visuel Ponte (animation click)
- [ ] UI : affichage formaté des grands nombres (1M, 1B, 1T...)
- [ ] UI : responsive basique (jouable desktop, pas cassé mobile)
- [ ] Deploy : clickerz.tetardtek.com (Apache vhost + pm2 backend)
- [ ] Tests e2e : flow complet login → jeu → prestige → arbre → save → reload
**Critère done :** un joueur peut aller sur clickerz.tetardtek.com, login SuperOAuth, jouer, prestige, acheter dans l'arbre, fermer, revenir, retrouver sa progression.
---
## Résumé séquentiel
```
Step 1 (rethème) → Step 2 (arbre évolution) → Step 3 (save serveur)
→ Step 4 (SuperOAuth) → Step 5 (Tailwind+Zustand) → Step 6 (polish+deploy)
```
Steps 1-2 = game design. Steps 3-4 = infra/auth. Step 5 = DX. Step 6 = ship.
---
## Risques identifiés
| Risque | Mitigation |
|--------|------------|
| Équilibrage ADN trop généreux/avare | Playtest après step 2, ajuster la formule |
| SuperOAuth SDK pas à jour | verifyOAuth.js existe déjà — vérifier compat |
| Migration SCSS → Tailwind longue | Migrer uniquement les composants touchés, pas tout |
| Validation anti-triche trop stricte (faux positifs) | Marge ×1.1, logs avant rejet, soft-block d'abord |