# PersonalBlog (EPPP) A modular personal blogging platform. This is the **workspace bootstrap** (E00-S01): a pnpm monorepo skeleton with strict TypeScript, a committed frozen lockfile, and an enforced dependency boundary between core packages and concrete extensions. ## Toolchain (pinned) | Tool | Version | Where pinned | | ------------ | ------------ | --------------------------------------------- | | pnpm | 11.23.0 | `packageManager` in root `package.json` | | Node.js | 24.x line | `engines.node` in root `package.json` | | TypeScript | 6.0.3 (exact)| root `devDependencies` | | Vitest | 4.1.10 (exact)| root `devDependencies` | Direct toolchain dependencies are exact-pinned; the lockfile is committed and installs always use `--frozen-lockfile`. ## Workspace layout ``` apps/ application shells (e.g. server, admin) packages/ core / shared packages (contracts, core, extension-sdk, ...) extensions/ concrete extensions (themes, features, integrations) tests/ root-level architecture guard tests ``` Each group is a separate workspace glob in `pnpm-workspace.yaml`, so packages cannot accidentally collapse into one another. ## Dependency boundary (FIT-001) Core packages (`packages/*`) must **never** import a concrete extension (`extensions/*`) — neither by package name nor by relative path. The rule is enforced by `tests/architecture.test.ts`, which discovers extension packages from the filesystem, so new extensions are guarded automatically. It runs as part of `pnpm test` and CI. ## Local (non-container) developer path No Docker required for workspace work; containers arrive in E00-S02. 1. Install Node.js 24.x (e.g. via nvm: `nvm install 24`). 2. Enable the pinned package manager: `corepack enable` (reads `packageManager: pnpm@11.23.0`), or `npm install -g pnpm@11.23.0`. 3. Install dependencies (frozen lockfile): `pnpm install --frozen-lockfile` 4. Verify the workspace: | Command | Runs | | --------------- | --------------------------------------------------- | | `pnpm build` | compiles every workspace package | | `pnpm test` | runs the test suite (Vitest, incl. FIT-001) | | `pnpm typecheck`| typechecks root tests and every workspace package | ## Out of scope for this story - Docker Compose baseline and container smoke tests — E00-S02 - PostgreSQL adapter and migration runner — E00-S03 - CI pipeline stages beyond the root scripts — E00-S05