TypeScript template for building tool and service projects with modern tooling, strict type-checking, and automated releases.
pnpm installThis installs dependencies and configures git hooks automatically via the prepare script.
| Command | Description |
|---|---|
pnpm build |
Build with tsup (ESM + declarations) |
pnpm lint |
Check code with Biome |
pnpm lint:fix |
Auto-fix lint/format issues |
pnpm types |
Type-check with tsc --noEmit |
pnpm test |
Run tests with Vitest |
pnpm test:watch |
Run tests in watch mode |
pnpm unused |
Detect unused code with Knip |
pnpm update |
Interactive dependency updates with Taze |
This template includes Claude Code skills that guide you through a structured workflow — from idea to implementation. See HOWTO.md for a full guide on using the skills.
Quick overview:
/grill-me— Pressure-test your idea/write-a-prd— Define requirements as a GitHub issue/prd-to-plan— Break the PRD into vertical slices/prd-to-issues— Create GitHub issues from the plan/tdd— Implement using test-driven development/environment-variables— Add validated env vars
When you're done implementing (e.g. after a /tdd cycle), just ask Claude Code to commit:
commit this
Claude Code will stage the relevant files, write a conventional commit message based on the changes, and run the pre-commit hook (lint + tests) automatically. If the hook fails, it will fix the issues and retry.
You can also use the built-in shortcut:
/commit
- Write tests co-located with source files (
*.test.ts) - Use TDD: write a failing test, make it pass, refactor
- Commit using Conventional Commits (
feat:,fix:, etc.) - Pre-commit hooks automatically run linting and tests
- Push to
maintriggers CI checks and semantic-release
Environment configuration uses @t3-oss/env-core with Zod validation:
.env— Development defaults (committed).env.local— Secrets and overrides (gitignored)
Define schemas in src/lib/env.ts.
GitHub Actions runs on push to main:
- Lint, type-check, test, and unused code detection
- If all checks pass, semantic-release creates a GitHub Release with tag
- Create a feature branch
- Make changes following the existing patterns
- Ensure
pnpm lint && pnpm types && pnpm test && pnpm unusedall pass - Open a PR against
main