Projects

Template

A TypeScript monorepo starter with pnpm workspaces, Turborepo, oxlint, oxfmt, tsdown, Vitest, Changesets, CI, and a shared config for AI coding agents.

#typescript #monorepo #tooling #turbo #pnpm #vitest #changeset #github-actions #oxlint #claude

What it is

A drop-in TypeScript monorepo starter. Fork it, rename a few fields, and you have a repository with build, test, lint, format, release, and CI already wired together, plus a shared setup for AI coding agents.

Why I built it

I kept copying the same config between repos: the linter, the formatter, the test runner, the release flow, the CI workflow. The template collapses that into one fork and keeps the setup consistent across everything I build.

Tooling

pnpm workspaces and Turborepo run the monorepo. oxlint and oxfmt handle linting and formatting, tsdown builds the packages, and Vitest runs the tests with coverage reported to Codecov. A GitHub Actions workflow runs lint, type-check, and test on every push.

Releases go through Changesets: add a changeset, and when it lands on main a release workflow opens a Version Packages PR that publishes the affected packages to npm with provenance. Dependency upgrades run through taze with a three-day maturity period, so new releases soak before they land.

Set up for AI agents

The template builds on two open formats, AGENTS.md and Agent Skills, with symlinks so every tool reads from one source instead of drifting copies. AGENTS.md is the canonical instruction file. Claude Code, Codex, Copilot, Cursor, Gemini, and other AGENTS.md runtimes all read from it.

The shared toolset lives in tools/claude/ and doubles as an installable Claude Code plugin: always-on convention rules (code style, JSDoc, markdown, security, testing, USA English), on-demand skills, slash commands like /changeset and /spec, a code-reviewer subagent, output styles, and hooks that install dependencies and format on edit. For larger features, plans/ holds a spec-driven workflow of spec, research, plan, slices, and verification.

Use the Claude Code plugin

You don't need to adopt the whole template to get the agent setup. The tools/claude/ folder ships as a Claude Code plugin, so you can install the same rules, skills, commands, and code-reviewer subagent in any existing project. Run these in Claude Code:

/plugin marketplace add stijnvanhulle/template
/plugin install plugin@stijnvanhulle/template

The hooks (session-start install, format-on-edit, edit guards) stay in the template's own .claude/ and don't ship with the plugin, so installing it won't run scripts in your repo.

Start a new project

gh repo create my-project --template stijnvanhulle/template

Fork it, rename the package fields, and start writing code.

Portrait of Stijn Van Hulle

Stijn Van Hulle

Front-end engineer