Ugrás a fő tartalomhoz

Monorepo felépítés

A repó pnpm + Turborepo (nem npm-workspaces). A napi fejlesztői workflow: cd apps/desktop && npm start (build:renderer + build:main + electron).

craftingtable/
├─ apps/
│ ├─ desktop/ # Electron: main + preload + csomagolás
│ │ ├─ src/main/ # sidecar indítás, ablakok, menü, updater
│ │ ├─ src/preload/ # contextBridge (port, token, MCP-token, OS-hívások)
│ │ ├─ electron-builder.yml
│ │ └─ resources/bin/ # ide kerül a Go bináris build-időben
│ └─ web/ # ugyanaz a React app, RemoteEngineClient-tel
├─ packages/
│ ├─ engine-client/ # EngineClient interfész + Local/Remote impl.
│ └─ …
├─ engine/ # Go modul — lásd Architektúra → Rétegek
│ ├─ cmd/craftingtable-engine/
│ ├─ internal/
│ └─ schemas/ # JSON Schema fájlok — az IGAZSÁGFORRÁS
├─ turbo.json
└─ pnpm-workspace.yaml

A típus-szerződés​

A JSON sémák egyetlen forrása az engine/schemas/*.json (JSON Schema 2020-12). Ebből generálódik a Go struct (go generate) és a TypeScript típus. A CI újragenerál és git diff --exit-code-dal ellenőrzi — ha eltér, piros build. Így soha nem csúszhat el a Go és a TS típus.

Kódkonvenciók (kivonat)​

  • Go: rétegszabály transport → domain → store; hiba-wrapping (%w); szentinel hibák a domainben; minden I/O context.Context-tel; atomi fájlírás (temp + rename).
  • TS/React: strict: true, any tilos; a UI-ban tilos közvetlen fs/child_process/ path — minden az EngineClient-en megy. Nincs külön state-management-könyvtár, sima React Context + useState/useReducer + saját use-entity hook.
  • Commit: Conventional Commits (feat(structure): …). Egy PR = egy user story vagy annak egy AC-je.