Architecture
Stack technique, couches applicatives et décisions structurantes.
Architecture
Stack
Nuxt 4 · Vue 3 · Vue Flow · Pinia · Dexie · Tailwind v4 · Nuxt Content · PWA · Firebase Auth (phase 0) · Vitest (281 tests, 49 fichiers) · pnpm · ESLint (imports UI)
Dev : pnpm dev (port 9087). Jeu : /play. Déploiement : push main → Docker sur VPS (.github/workflows/deploy.yml).
P2 : Auth UI → cloud save → FCM. Persistance locale (Dexie) jusqu’au cloud save. Voir Firebase Auth.
Couches
Vue → Pinia (game + schemaUi + auth) → SimulationEngine → GameState → Dexie
↘ Firebase Auth (phase 0) → (P2 cloud save) → Firestore
↘ (P2) FCM après Auth UI
Dossiers
app/pages/ / (site), /play, /docs, /legal
app/lib/firebase/ config, client lazy, types, userSnapshot
app/stores/auth.ts session Firebase (orthogonal au game save)
app/components/game/ Canvas, HUD (pocket / settings), shop, craft, research, objectives, PWA
app/composables/ useSchema* · useSiteSeo
app/stores/game/ session · economy · graph · research (façade Pinia)
app/utils/seo.ts constantes site (nom, description, URL)
app/components/nodes/ deposit, extractor, storage, storage_tap, furnace, lab, market, splitter, merger
game/models/nodes/ types + familles par machine
game/definitions/ machines, tech, objectives, handCraft, shopUnlocks, deposits
game/selectors/ helpers lecture seule pour l’UI et le store
game/engine/ production · logistics · economy · research · debug
game/persistence/ Dexie + migrations + normalize/{nodes,fields} + validate
server/routes/ sitemap.xml (docs dynamiques)
public/ robots.txt · og/default.png · icônes PWA
Imports UI ↔ domaine
- Mutations →
useGameStoreuniquement - Catalogues →
@game/definitions - Helpers lecture →
@game/selectors @game/engine(apply*) → slices store seulement ; ESLint bloque tout import direct ailleurs dansapp/- Firebase →
app/uniquement ;@game/*reste sans Firebase
SEO (état)
| Élément | État |
|---|---|
useSiteSeo + canonical / OG / Twitter | Fait |
Image OG public/og/default.png | Fait |
JSON-LD landing / + WebApplication /play | Fait |
sitemap.xml (docs Nuxt Content) · robots.txt dynamique | Fait |
Prerender /, /docs/*, /legal/* · perf landing | Fait |
| Search Console (ops prod) | P1 — env prêt, soumission manuelle |
État clé
| Champ | Rôle |
|---|---|
saveSchemaVersion | Révision schéma save (migrations au load) |
handCraftQueue | File crafts |
researchPoints / activeResearchId / techProgress | Recherche |
unlockedTechs | Effets tech |
score / completedObjectiveIds | Objectifs |
enabled (machines) | Interrupteur ON/OFF (tech Interrupteurs) |
viewport | Pan/zoom persisté |
Décisions
Tick unique · stocks entiers · lab = drag + câble · gisement / coffre dockés · marché 200 (tech 50) · offline ≤ 8 h · PWA · local-first jusqu’à cloud save (P2) · FCM après Auth UI