BuildingStarted 2026

Bootstrapper

A reusable development platform for bootstrapping modern TypeScript projects.

TypeScriptpnpmTurborepoBiomeESLintVitestChangesetsGitHub Actions

Overview

Bootstrapper began as a response to a recurring problem: every new project started with the same hours of configuring tooling, establishing repository structure, writing documentation, and creating development workflows. While each repository solved a different problem, the engineering foundation was almost always identical.

Instead of repeating that work, I started extracting proven patterns into reusable packages and conventions. Over time, Bootstrapper evolved from a collection of configuration files into a reusable development platform that captures engineering practices rather than simply generating projects.

Today it serves as the engineering foundation for nearly every project I build, allowing me to focus on solving domain problems instead of rebuilding infrastructure.

Problem

  • Every new repository required repetitive setup before meaningful development could begin.

  • Tooling and project structures gradually diverged across projects.

  • Engineering standards had to be maintained independently in every repository.

  • Developer onboarding lacked consistency between projects.

Goals

  • Provide a consistent developer experience across repositories.

  • Create repositories that are easy for both developers and AI assistants to understand and navigate.

  • Centralize engineering standards and tooling.

  • Automate repetitive development tasks.

  • Reduce project setup from hours to minutes.

Features

  • Shared TypeScript configuration.

  • Shared Biome and ESLint configuration.

  • Shared architectural conventions.

  • Reusable project templates.

  • Project generators.

  • Development tooling and scripts.

  • GitHub Actions automation.

  • Documentation standards.

  • Monorepo-friendly architecture.

Architecture

  • TypeScript-first monorepo architecture built with Turborepo.

  • Composable packages encapsulate shared tooling, configuration, and development workflows.

  • Convention-driven project structures reduce cognitive overhead and improve consistency.

  • Projects consume shared capabilities instead of duplicating configuration.

  • Each repository remains independent while benefiting from a common engineering foundation.

Engineering Decisions

  • Convention over configuration.

  • Automate repetitive work before documenting it.

  • Treat documentation as part of the engineering system.

  • Extract abstractions only after they have proven useful.

  • Optimize the platform before optimizing individual projects.

  • Optimize for long-term maintainability rather than short-term convenience.

Challenges

  • Balancing opinionated defaults with enough flexibility for different projects.

  • Avoiding premature abstractions while still promoting reuse.

  • Designing tooling that remains simple despite supporting multiple repository types.

Lessons Learned

  • The best tooling fades into the background and lets developers focus on solving problems.

  • Small investments in engineering infrastructure compound over time.

  • Consistency reduces cognitive overhead more than additional features increase productivity.

  • Strong abstractions emerge from repeated experience, not speculation.

Technologies

TypeScriptPrimary language for applications and shared packages.
pnpmWorkspace and dependency management.
TurborepoTask orchestration and monorepo builds.
BiomeCode formatting and linting.
ESLintStatic analysis and code quality.
VitestUnit testing.
ChangesetsVersioning and release management.
GitHub ActionsContinuous integration and automation.

Roadmap

  • Develop an interactive CLI for project creation.

  • Expand the library of project generators.

  • Extract additional reusable packages.

  • Support additional project archetypes and platform templates.

  • Improve automation throughout the development lifecycle.

Links