Engineering
Kartuli uses pnpm workspaces and Turborepo. Workspace globs in pnpm-workspace.yaml include apps/*, packages/*, tools/* and docs. The docs workspace is source consumed by Web Docs, not a separate app.
| Boundary | Responsibility |
|---|---|
| Apps | App-specific routes, content and product behavior |
| Packages | Reusable code/style contracts consumed by workspace code |
| Tools | Development, validation, docs and inspection executables |
Shared packages should stay independent of app-specific domains. Apps may consume packages; Storybook intentionally consumes Game Client stories through workspace dependencies and aliases. That inspection dependency does not make product code a shared package.
Dependencies and build graph
Use pnpm only. .nvmrc pins Node 24.13.1; root package.json pins pnpm 10.30.2. Shared dependencies use catalog:, including TypeScript 7. The lockfile records resolved versions; catalog ranges are not exact installed versions.
turbo.json defines build tasks depending on upstream builds, uncached persistent dev/preview tasks, cached lint/test/typecheck and output paths. The Web Docs build includes docs/** as inputs. See Platform for CI and remote-cache credentials rather than duplicating them here.
Development
Install with pnpm install --frozen-lockfile. Root c:dev:*, c:build:* and c:preview:* scripts target individual workspaces. pnpm e2e <target> runs that surface's browser suite and can start its preview. validate:all is required for every change. Quality explains what that runs. Tests generally live beside source; E2E has a dedicated tool workspace.
See the Technology catalog and Library catalog. The Game Client architecture owns its routing, i18n and bundled learning content; Data & Privacy owns storage and identifier policy.
Maintenance references
Command Reference explains common workflows and script discovery. Dependency Inventory explains how to inspect manifests/catalogs and audit their documentation coverage.