Commit Graph

39 Commits

Author SHA1 Message Date
2a242e97cc feat: cosmétiques V1 — 5 slots SVG, récompenses achievements + prestige
10 cosmétiques (2/slot), unlock auto sur achievements et prestige tiers.
TadpoleSprite composant SVG stack (base + overlays équipés).
CosmeticsPanel dans la sidebar — inventaire, équiper/retirer par slot.
GameState étendu (cosmeticInventory + cosmeticEquipped), backfill saves.
17 nouveaux tests cosmétiques (92 total, tous passent).
2026-03-28 12:09:26 +01:00
ae50908bc9 feat: arbre d'évolution 3 voies — ponte/marais/adaptation
18 nœuds (6/branche), nœuds exclusifs (pick one), reset gratuit.
Nouveaux effets : double_click, auto_click, crit, generator_boost,
cost_reduction, prestige_dna_bonus, offline_boost, threshold_reduction.
UI 3 colonnes colorées, seuil prestige dynamique, coût réduit.
75 tests (tous passent).
2026-03-28 11:52:51 +01:00
3ba10dad5f feat: offline gains — courbe inversée 2h, cap 25%, écran résumé
offlineEfficiency() : 100% (0-15min) → 25% (1h) → 0% (2h).
computeOfflineGains() intègre la courbe par tranches de 1min.
GameState.lastOnline ajouté, store hydrate avec offline report.
OfflineReport.tsx affiché au retour si absence > 60s.
13 nouveaux tests (66 total, tous passent).
2026-03-28 11:44:59 +01:00
b58d39e707 feat: migrate SCSS → Tailwind CSS + remove sass dependency
12 SCSS files (1167 lines) replaced by centralized index.css with
Tailwind v4 @theme tokens, @layer components, and utility classes.
Game panel design system (gp-*) preserved as CSS components.
Inline styles in Settings/Login/MilestoneBar converted to Tailwind utilities.
sass removed from dependencies. Build clean, 53 tests pass.
2026-03-28 11:19:45 +01:00
8cc9fdaa62 fix: 500ms delay on focus reload — wait for other tab's blur save
Some checks failed
CI/CD — Build & Deploy / Build & Deploy (push) Failing after 17s
2026-03-24 14:51:38 +01:00
3145758747 fix: guard ALL saves behind ready — never save DEFAULT_STATE to server
Some checks failed
CI/CD — Build & Deploy / Build & Deploy (push) Failing after 17s
Root cause: on refresh, store starts with DEFAULT_STATE (resources: 0).
Blur/interval/unload handlers saved this zero state before server load.
Fix: every save path checks useGameStore.getState().ready before writing.
2026-03-24 14:47:23 +01:00
79ac1b0659 feat: multi-tab sync — save on blur, reload from server on focus
Some checks failed
CI/CD — Build & Deploy / Build & Deploy (push) Failing after 19s
- On blur: immediate save to server (no 30s wait)
- On focus: fetch server save, load if newer than local
- Handles multi-browser scenario (laptop → desktop)
2026-03-24 14:43:58 +01:00
e175844d87 fix: move hooks before ready guard — React rules of hooks
Some checks failed
CI/CD — Build & Deploy / Build & Deploy (push) Failing after 17s
2026-03-24 14:40:32 +01:00
8ce54bfb03 feat: server-authoritative save — wait for server before game starts
Some checks failed
CI/CD — Build & Deploy / Build & Deploy (push) Failing after 18s
- Store starts in ready:false — no game actions until authority loaded
- useSaveSync signals serverLoaded (success, empty, or unreachable)
- GameSync orchestrates: logged in → wait server, guest → localStorage
- Home shows loading screen until ready
- localStorage = cache only, server = authority for logged-in users
2026-03-24 14:30:53 +01:00
3fc5e98069 feat: Settings page — profile + link/unlink providers via SuperOAuth API
Some checks failed
CI/CD — Build & Deploy / Build & Deploy (push) Failing after 18s
- Store SuperOAuth access_token in localStorage for profile API calls
- Settings page: profile info, linked providers, link/unlink buttons
- Navbar: settings icon replaces logout button
2026-03-24 14:00:44 +01:00
17a848bbb0 feat: 4 OAuth providers (Discord/GitHub/Google/Twitch) — standardized login
Some checks failed
CI/CD — Build & Deploy / Build & Deploy (push) Failing after 16s
2026-03-24 13:26:51 +01:00
b6d68374d3 fix: use localStorage for PKCE verifier — survives cross-site redirects
Some checks failed
CI/CD — Build & Deploy / Build & Deploy (push) Failing after 21s
2026-03-24 13:18:56 +01:00
91d1616dd7 feat: PKCE auth + CI/CD deploy
Some checks failed
CI/CD — Build & Deploy / Build & Deploy (push) Failing after 25s
- Frontend: PKCE flow (oauth.js, api.js centralized, cookie-based AuthContext)
- Backend: token introspection, cookies httpOnly, refresh endpoint
- Replaced localStorage JWT with httpOnly session cookies
- useSaveSync migrated to cookie auth
- cookie-parser added
- Gitea CI workflow (vps-runner pattern)
2026-03-24 13:01:15 +01:00
39f683a31e feat: système de zones visuelles — fondation layout 3 couches
- zones.scss : système data-zone avec biomes (swamp, landing, page)
- Home.jsx migré de .game-cover → zone[data-zone="swamp"]
- Landing.jsx migré → zone[data-zone="landing"]
- Background sorti de home.scss → zones.scss (un seul endroit)
- Prêt pour ajouter des biomes (cave, volcano, ocean) en une ligne
2026-03-20 16:33:47 +01:00
3839a1e6a2 feat: suppression HUD (redondant avec cockpit), compteur stylé, navbar nettoyée
- Suppression Hud.jsx + HUDON/HUDOFF.svg (cockpit header fait le même job)
- Retrait toggle HUD de la navbar + props isVisible
- Compteur click-zone : glow vert, plus gros, lisible sur fond sombre
- Tooltip sur le bouton bulles navbar
2026-03-20 16:28:47 +01:00
c673ae0da5 feat: tooltips explicatifs sur le cockpit, générateurs et prestige
Chaque stat du header, le titre Générateurs et Prestige ont un tooltip
natif (title) qui explique à quoi sert la valeur — aide le nouveau joueur
sans alourdir l'interface pour les habitués.
2026-03-20 16:24:41 +01:00
2db3c12fc6 fix: particule clic plus visible (plus grosse, glow, durée 1.2s) + label /clic explicite 2026-03-20 16:22:29 +01:00
b475fb8953 fix: particule clic affiche le vrai gain (clickMult × prestigeMult × treeMult)
Ajout getClickGain() dans economy.ts — utilisé par la particule de feedback
et le cockpit header "Ponte". Avant : affichait toujours +1.
2026-03-20 16:18:45 +01:00
4ad60c9423 fix: suppression resource-counter navbar — redondant avec cockpit header 2026-03-20 16:16:57 +01:00
de7f6c366e feat: nouveau background marais — remplace le paysage Noël
Image carrée 1024x1024, background-position center 70% pour garder
les nénuphars et l'eau visible en bas (zone du têtard cliquable).
2026-03-20 16:14:08 +01:00
ed0f7b614a fix: cockpit header — grille 5 colonnes compacte au lieu d'empilement vertical 2026-03-20 16:07:08 +01:00
9065b1c593 feat: cockpit sidebar — design tokens, panels harmonisés, header stats fixe
- Design tokens game dans root.scss (--gp-*) — un seul endroit pour thémiser
- game-panels.scss : classes partagées (gp, gp-row, gp-btn, gp-progress, etc.)
- CockpitHeader : dashboard résumé (prod/s, ponte, mult, ADN, génération)
- Tous les panels refactorisés sur le système gp-* (tailles, couleurs, spacing)
- Sidebar structurée en zones : header → progression → générateurs → prestige → évolution
2026-03-20 16:03:59 +01:00
03b41649ee feat: nouveaux assets design — tadpole pixel art V5, icônes bulles, aura swamp
- tadpole.svg : pixel art kawaii 32x32 avec système de slots cosmétiques
  (slot-hat, slot-eyes, slot-body, slot-tail, slot-accessory)
- SnowOn/SnowOff.svg : icônes bulles (remplace flocons de neige)
- aura-swamp.svg : premier overlay cosmétique (algues, ripple, bulles)
2026-03-20 15:55:37 +01:00
b38bb4b4c7 feat: UX game — stats live, production détaillée, prestige visible, badge achievements
- Click-zone : production/s, puissance ponte, multiplicateur toujours visibles
- GeneratorShop : production totale en header, prod individuelle par générateur
- PrestigePanel : toujours affiché (hint "Atteins 1M" si pas encore dispo)
- Badge achievements X/27 dans la sidebar avec lien vers /achievements
- Landing : tadpole sprite animé en accroche visuelle
2026-03-20 15:26:55 +01:00
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
924e919a65 fix: effet ambiance tildes → bulles (° au lieu de ~) 2026-03-20 14:54:33 +01:00
8c9c4bfdc5 chore: purge assets legacy — 12 SVG/webp, bretzel logo, CardContact dead code
- Suppression 11 SVG non référencés (Beer, Bonhome, Bonnet, Canne, Cookie,
  Courone, Hand, PainDep, Tasse, bg-homepage, logo bretzel)
- Suppression share-cover.webp non référencé
- Favicon bretzel → tadpole.svg
- Footer : CardContact inliné, suppression composant + scss
- Suppression .gitkeep inutile (pages/ a des fichiers)
2026-03-20 14:42:44 +01:00
0c9170af65 feat: suppression boutique legacy + refonte achievements milestones Clickerz
- Suppression route /boutique + Boutique.jsx, BoutiqueCard.jsx, shop.json, scss associés
  (le GeneratorShop sidebar fait déjà le job)
- Refonte complète achievements : 27 milestones basés sur le GameState réel
  (paliers ressources, générateurs, prestige, évolution, easter eggs humour)
- Suppression ancien système JSON statique + AchievementsCard legacy
- Page achievements : unlocked/locked state-aware, compteur progression
2026-03-20 14:34:48 +01:00
0374602047 chore: rebrand navbar + footer — tadpole logo, retrait Boutique nav, copyright Tetardtek
- Logo bretzel → tadpole.svg (navbar + footer)
- Retrait lien Boutique de la navigation (page conservée, masquée)
- Footer : texte Clickerz, GitHub Kevin T seul, © 2026 Tetardtek · Powered by Brain
2026-03-20 14:24:26 +01:00
5323ad056e chore: suppression artefacts Xmass — portraits PNG, WildCoin, entries formation
- Suppression dossier png/ (13 fichiers portraits formation + w-coin + bg-cover legacy)
- Suppression entries Achievements 48-58 (portraits promo Wild Code School)
- Remplacement icône monnaie w-coin.png → tadpole.svg dans boutiquecard
2026-03-20 14:07:59 +01:00
8bb0fa4a8e chore: suppression artefacts Xmass — SVG SantaClause, WildCoin, Mouffle, Bretzel
Plus aucun code ne référence ces assets. Le seul SVG legacy
encore utilisé (SantaClause-bag) a déjà été copié en tadpole.svg.
2026-03-20 14:03:35 +01:00
95dca420a5 feat(sprint1-step6): polish, landing page, responsive, deploy config
- Landing.jsx : écran d'accueil "Entrer dans le Marais" sur /
- Home.jsx : jeu sur /jeu, click animation float-up, sidebar responsive
- formatNumber.ts : util partagé k/M/B/T (remplace 4 copies locales)
- home.scss : rewrite classes (game-cover, click-zone, tadpole-sprite, game-sidebar)
- Responsive : sidebar fixe desktop, drawer bottom mobile (<768px)
- navbar : wildCoin → resource-counter, auth-nav stylé, dead code supprimé
- GameSync.tsx : bridge useSaveSync ↔ Zustand (câblé dans App)
- tadpole.svg : asset renommé (SantaClause-bag → tadpole)
- deploy/ : Apache vhost SPA+proxy, deploy.sh, ecosystem.config.cjs PM2
- NavBarData : Jeu → /jeu
- Cleanup : dead imports, commentaires legacy
2026-03-20 13:41:09 +01:00
307feb711f feat(sprint1-step5): migration Tailwind v4 + Zustand — suppression WildCoinContext
- Install tailwindcss @tailwindcss/vite zustand
- useGameStore.ts : Zustand store wrappant economy.ts (tick, click, buy, prestige, buyNode, loadFromServer)
- GameTick.tsx : composant timer 1s
- GeneratorShop.tsx : boutique générateurs Tailwind (remplace Amelioration.jsx)
- EvolutionTree, PrestigePanel, MilestoneBar : rewrite Zustand + Tailwind
- Hud.jsx : rewrite Zustand + Tailwind (suppression Hud.scss)
- BoutiqueCard, Achievements : migrés vers Zustand
- Supprimé : WildCoin/ (4 fichiers), timer/Timer.jsx, useEconomy.ts, Hud.scss
- WildCoinProvider retiré de main.jsx
2026-03-20 13:40:51 +01:00
d215e9a33e feat(sprint1-step4): SuperOAuth login frontend
- AuthContext : fix exports, x-auth-token header, loginWithOAuth(), suppression axios/jwt-decode
- Login.jsx : redirect SuperOAuth Discord avec tenantId=clickerz
- AuthCallback.jsx : extraction token query param, flow OAuth complet
- .env.sample : ajout VITE_SUPEROAUTH_URL
- Mode invité préservé (pas de route guard)
2026-03-20 13:40:33 +01:00
a52746ed0c feat(sprint1-step3b): backend save system + anti-cheat + données rattrapées
- game_saves table + migration 002 (JSON state, anti-cheat metadata)
- saveControllers.js : load/save avec validation delta ressources (750k/s × 1.1)
- GameSaveManager : upsert MySQL ON DUPLICATE KEY UPDATE
- useSaveSync hook : auto-save 30s + keepalive beforeunload + guest fallback
- save-validation.test.ts : 8 tests anti-cheat
- economy.ts : arbre d'évolution 5 nœuds + prestige ADN (rattrapage step 2)
- economy.test.ts : +40 tests (évolution tree, multipliers, start bonus)
- GDD + SPRINT1.md : docs sprint complètes
- Rethème data : shop.json, Achievements.json, Cookie, Legal (rattrapage step 1)
2026-03-20 13:40:16 +01:00
9f0ccda99b feat(sprint1-step3): PrestigePanel + MilestoneBar + équilibrage générateurs fixes 2026-03-17 07:09:14 +01:00
c69da320cc feat(sprint1-step2): core economy TS + useEconomy hook (lazy calc) + 13 tests vitest 2026-03-17 06:36:51 +01:00
e0bd6a2c4b fix: hardcoded localhost → VITE_BACKEND_URL 2026-03-15 17:43:20 +01:00
4e93753250 feat: initial import — ClickerZ formation project (Express + React/Vite) 2026-03-15 14:29:33 +01:00