# Stack matrix

Generated from package.json at build time for futhr:lab. Versions are exact pins; the site is a prerendered static artifact with no server runtime.

| Layer | Package | Version |
| --- | --- | --- |
| Runtime | Node.js | >=24 |
| Package manager | pnpm | 11.24.0 |
| Framework | `@sveltejs/kit` | 2.70.3 |
| Component model | `svelte` | 5.57.0 |
| Adapter | `@sveltejs/adapter-static` | 3.0.10 |
| Build | `vite` | 8.2.2 |
| Styling | `tailwindcss` | 4.3.3 |
| Language | `typescript` | 6.0.3 |
| Lint and format | `@biomejs/biome` | 2.5.12 |
| Unit and component tests | `vitest` | 4.1.11 |
| Browser tests | `@playwright/test` | 1.63.0 |
| Component workshop | `storybook` | 10.6.0 |
| Markdown | `marked` | 18.0.11 |
| Sanitising | `sanitize-html` | 2.17.7 |
| Frontmatter | `gray-matter` | 4.0.3 |
| Deployment | `wrangler` | 4.129.0 |

## Browser support

Evergreen browsers. Layout depends on CSS container queries and container units, `inert`, and the Web Animations API.

## Commands

```bash
pnpm install
pnpm dev            # SvelteKit dev server on :5173
pnpm storybook      # Storybook on :6006
pnpm quality        # Biome lint, format check, export constraints
pnpm check          # svelte-check and TypeScript
pnpm test:all       # unit, component, Storybook, end-to-end
pnpm build          # prerender to build/ and verify the artifact
```

The agent guide at https://futhr.io/agents.md explains conventions and the definition of done.
