Project Scaffolder
Scaffold production-ready projects with modern tooling and configurable features.
Interactive Workflow
Follow these steps in order. Use the AskUserQuestion tool for each step.
Step 1: Project Name
Ask for the project name. Validate that it:
-
Uses lowercase letters, numbers, and hyphens only (kebab-case)
-
Starts with a letter
-
Is between 2-50 characters
-
Does not start with a number
Example prompt:
What would you like to name your project? (Use lowercase with hyphens, e.g., my-awesome-app)
Step 2: Project Type
Ask which type of project to create:
Type Description
Frontend Static site or single-page application
CLI Command-line tool
API REST API server
Monorepo Multi-package workspace
Step 3: Language/Framework
Based on project type, present these options:
Frontend:
-
React with TypeScript (Recommended)
-
React with JavaScript
-
Vue with TypeScript
-
Vue with JavaScript
-
Vanilla (no framework)
CLI:
-
TypeScript/Node.js with Commander (Recommended)
-
JavaScript/Node.js with Commander
-
Python with Click
API:
-
TypeScript/Express (Recommended)
-
JavaScript/Express
-
Python/FastAPI
Monorepo:
-
Node.js with pnpm + Turborepo (Recommended)
-
Python with uv workspaces
Step 4: Features
Ask which features to include (allow multiple selections):
Feature Node.js Python
Testing Vitest / Jest Pytest
Linting ESLint + Prettier Ruff
CI/CD GitHub Actions GitHub Actions
Docker Dockerfile + compose Dockerfile + compose
Documentation README, CONTRIBUTING, LICENSE README, CONTRIBUTING, LICENSE
Step 5: Confirmation
Summarize all selections and ask for confirmation:
I'll create a [LANGUAGE] [TYPE] project named '[NAME]' with:
- [Feature 1]
- [Feature 2]
- ...
Proceed? (yes to confirm, or specify changes)
Generation Process
After confirmation, generate the project:
Create project directory at the specified path (default: current directory)
Copy base templates from the appropriate templates/[type]/[language]/ directory
Process template variables - Replace these placeholders in all .tmpl files:
-
{{PROJECT_NAME}}
-
kebab-case name (e.g., my-app )
-
{{PROJECT_NAME_PASCAL}}
-
PascalCase (e.g., MyApp )
-
{{PROJECT_NAME_SNAKE}}
-
snake_case (e.g., my_app )
-
{{AUTHOR}}
-
From git config user.name or "Your Name"
-
{{YEAR}}
-
Current year
Add feature files from templates/features/[feature]/ for each selected feature
Create .gitignore appropriate for the language
Initialize git with git init
Display next steps:
Project created successfully!
Next steps: cd [project-name] [install command] # npm install / pip install -e . [dev command] # npm run dev / python -m [name]
Template Locations
Base project templates:
-
templates/frontend/react-ts/
-
React + TypeScript + Vite
-
templates/frontend/react-js/
-
React + JavaScript + Vite
-
templates/frontend/vue-ts/
-
Vue + TypeScript + Vite
-
templates/frontend/vue-js/
-
Vue + JavaScript + Vite
-
templates/frontend/vanilla/
-
Vanilla JS + Vite
-
templates/cli/node-ts/
-
Node.js + TypeScript + Commander
-
templates/cli/node-js/
-
Node.js + JavaScript + Commander
-
templates/cli/python/
-
Python + Click
-
templates/api/node-ts/
-
Express + TypeScript
-
templates/api/node-js/
-
Express + JavaScript
-
templates/api/python/
-
FastAPI + Uvicorn
-
templates/monorepo/node/
-
pnpm + Turborepo
-
templates/monorepo/python/
-
uv workspaces
Feature templates:
-
templates/features/testing/
-
Test configs (vitest, jest, pytest)
-
templates/features/linting/
-
Lint configs (eslint, prettier, ruff)
-
templates/features/ci-cd/
-
GitHub Actions workflows
-
templates/features/docker/
-
Dockerfile and docker-compose
-
templates/features/docs/
-
README, CONTRIBUTING, LICENSE
File Naming
Template files use .tmpl extension. When copying:
-
Remove .tmpl extension (e.g., package.json.tmpl → package.json )
-
Process variable substitutions
-
Preserve directory structure
Best Practices Applied
All generated projects include:
-
Modern tooling: Vite for frontend, tsx for Node, uv for Python
-
Type safety: TypeScript by default, type hints for Python
-
Sensible defaults: Works out of the box with minimal config
-
Clean structure: Organized src/ directory, clear separation of concerns
-
Git-ready: Appropriate .gitignore, ready for version control