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
1---2name: project-scaffold3description: Scaffold new software projects with best practices. This skill should be used when the user wants to create a new project, initialize a codebase, scaffold an application, start a new repo, set up a project from scratch, or generate a boilerplate/starter template. Supports frontend (React, Vue, vanilla), CLI tools, REST APIs, and monorepos in TypeScript/JavaScript or Python.4---56# Project Scaffolder78Scaffold production-ready projects with modern tooling and configurable features.910## Interactive Workflow1112Follow these steps in order. Use the AskUserQuestion tool for each step.1314### Step 1: Project Name1516Ask for the project name. Validate that it:17- Uses lowercase letters, numbers, and hyphens only (kebab-case)18- Starts with a letter19- Is between 2-50 characters20- Does not start with a number2122Example prompt:23```24What would you like to name your project?25(Use lowercase with hyphens, e.g., my-awesome-app)26```2728### Step 2: Project Type2930Ask which type of project to create:3132| Type | Description |33|------|-------------|34| **Frontend** | Static site or single-page application |35| **CLI** | Command-line tool |36| **API** | REST API server |37| **Monorepo** | Multi-package workspace |3839### Step 3: Language/Framework4041Based on project type, present these options:4243**Frontend:**441. React with TypeScript (Recommended)452. React with JavaScript463. Vue with TypeScript474. Vue with JavaScript485. Vanilla (no framework)4950**CLI:**511. TypeScript/Node.js with Commander (Recommended)522. JavaScript/Node.js with Commander533. Python with Click5455**API:**561. TypeScript/Express (Recommended)572. JavaScript/Express583. Python/FastAPI5960**Monorepo:**611. Node.js with pnpm + Turborepo (Recommended)622. Python with uv workspaces6364### Step 4: Features6566Ask which features to include (allow multiple selections):6768| Feature | Node.js | Python |69|---------|---------|--------|70| Testing | Vitest / Jest | Pytest |71| Linting | ESLint + Prettier | Ruff |72| CI/CD | GitHub Actions | GitHub Actions |73| Docker | Dockerfile + compose | Dockerfile + compose |74| Documentation | README, CONTRIBUTING, LICENSE | README, CONTRIBUTING, LICENSE |7576### Step 5: Confirmation7778Summarize all selections and ask for confirmation:7980```81I'll create a [LANGUAGE] [TYPE] project named '[NAME]' with:82- [Feature 1]83- [Feature 2]84- ...8586Proceed? (yes to confirm, or specify changes)87```8889## Generation Process9091After confirmation, generate the project:92931. **Create project directory** at the specified path (default: current directory)94952. **Copy base templates** from the appropriate `templates/[type]/[language]/` directory96973. **Process template variables** - Replace these placeholders in all `.tmpl` files:98 - `{{PROJECT_NAME}}` - kebab-case name (e.g., `my-app`)99 - `{{PROJECT_NAME_PASCAL}}` - PascalCase (e.g., `MyApp`)100 - `{{PROJECT_NAME_SNAKE}}` - snake_case (e.g., `my_app`)101 - `{{AUTHOR}}` - From `git config user.name` or "Your Name"102 - `{{YEAR}}` - Current year1031044. **Add feature files** from `templates/features/[feature]/` for each selected feature1051065. **Create .gitignore** appropriate for the language1071086. **Initialize git** with `git init`1091107. **Display next steps**:111 ```112 Project created successfully!113114 Next steps:115 cd [project-name]116 [install command] # npm install / pip install -e .117 [dev command] # npm run dev / python -m [name]118 ```119120## Template Locations121122Base project templates:123- `templates/frontend/react-ts/` - React + TypeScript + Vite124- `templates/frontend/react-js/` - React + JavaScript + Vite125- `templates/frontend/vue-ts/` - Vue + TypeScript + Vite126- `templates/frontend/vue-js/` - Vue + JavaScript + Vite127- `templates/frontend/vanilla/` - Vanilla JS + Vite128- `templates/cli/node-ts/` - Node.js + TypeScript + Commander129- `templates/cli/node-js/` - Node.js + JavaScript + Commander130- `templates/cli/python/` - Python + Click131- `templates/api/node-ts/` - Express + TypeScript132- `templates/api/node-js/` - Express + JavaScript133- `templates/api/python/` - FastAPI + Uvicorn134- `templates/monorepo/node/` - pnpm + Turborepo135- `templates/monorepo/python/` - uv workspaces136137Feature templates:138- `templates/features/testing/` - Test configs (vitest, jest, pytest)139- `templates/features/linting/` - Lint configs (eslint, prettier, ruff)140- `templates/features/ci-cd/` - GitHub Actions workflows141- `templates/features/docker/` - Dockerfile and docker-compose142- `templates/features/docs/` - README, CONTRIBUTING, LICENSE143144## File Naming145146Template files use `.tmpl` extension. When copying:147- Remove `.tmpl` extension (e.g., `package.json.tmpl` → `package.json`)148- Process variable substitutions149- Preserve directory structure150151## Best Practices Applied152153All generated projects include:154- **Modern tooling**: Vite for frontend, tsx for Node, uv for Python155- **Type safety**: TypeScript by default, type hints for Python156- **Sensible defaults**: Works out of the box with minimal config157- **Clean structure**: Organized src/ directory, clear separation of concerns158- **Git-ready**: Appropriate .gitignore, ready for version control