skills/scaffold/SKILL.md
Project scaffolding - generate boilerplate for common project types with best-practice defaults. Use for: scaffold, boilerplate, template, new project, init, create project, starter, setup, project structure, directory structure, monorepo, microservice, API template, web app template, CLI tool template, library template.
npx skillsauth add 0xDarkMatter/claude-mods scaffoldInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Project scaffolding templates and boilerplate generation for common project types with best-practice defaults.
What are you building?
│
├─ API / Backend Service
│ ├─ REST API
│ │ ├─ Python → FastAPI (async, OpenAPI auto-docs)
│ │ ├─ Node.js → Express or Fastify (Fastify for performance)
│ │ ├─ Go → Gin (ergonomic) or Echo (middleware-rich)
│ │ └─ Rust → Axum (tower ecosystem, async-first)
│ ├─ GraphQL API
│ │ ├─ Python → Strawberry + FastAPI
│ │ ├─ Node.js → Apollo Server or Pothos + Yoga
│ │ ├─ Go → gqlgen (code-first)
│ │ └─ Rust → async-graphql + Axum
│ └─ gRPC Service
│ ├─ Python → grpcio + protobuf
│ ├─ Go → google.golang.org/grpc
│ └─ Rust → tonic
│
├─ Web Application
│ ├─ Full-stack with SSR
│ │ ├─ React ecosystem → Next.js 14+ (App Router)
│ │ ├─ Vue ecosystem → Nuxt 3
│ │ ├─ Svelte ecosystem → SvelteKit
│ │ └─ Content-heavy / multi-framework → Astro
│ ├─ SPA (client-only)
│ │ ├─ React → Vite + React + React Router
│ │ ├─ Vue → Vite + Vue + Vue Router
│ │ └─ Svelte → Vite + Svelte + svelte-routing
│ └─ Static Site
│ ├─ Blog / docs → Astro or VitePress
│ └─ Marketing / landing → Astro or Next.js (static export)
│
├─ CLI Tool
│ ├─ Python → Typer (simple) or Click (complex)
│ ├─ Node.js → Commander + Inquirer
│ ├─ Go → Cobra + Viper
│ └─ Rust → Clap (derive API)
│
├─ Library / Package
│ ├─ npm package → TypeScript + tsup + Vitest
│ ├─ PyPI package → uv + pyproject.toml + pytest
│ ├─ Go module → go mod init + go test
│ └─ Rust crate → cargo init --lib + cargo test
│
└─ Monorepo
├─ JavaScript/TypeScript → Turborepo + pnpm workspaces
├─ Full-stack JS → Nx
├─ Go → Go workspaces (go.work)
├─ Rust → Cargo workspaces
└─ Python → uv workspaces or hatch
| Project Type | Language | Framework | Database | ORM/Query | Deploy Target | |-------------|----------|-----------|----------|-----------|---------------| | REST API | Python | FastAPI | PostgreSQL | SQLAlchemy + Alembic | Docker / AWS ECS | | REST API | Node.js | Fastify | PostgreSQL | Prisma or Drizzle | Docker / Vercel | | REST API | Go | Gin | PostgreSQL | sqlx (raw) or GORM | Docker / Fly.io | | REST API | Rust | Axum | PostgreSQL | sqlx | Docker / Fly.io | | Web App | TypeScript | Next.js 14+ | PostgreSQL | Prisma or Drizzle | Vercel / Docker | | Web App | TypeScript | Nuxt 3 | PostgreSQL | Prisma | Vercel / Netlify | | Web App | TypeScript | Astro | SQLite / none | Drizzle | Cloudflare / Netlify | | CLI Tool | Python | Typer | SQLite | sqlite3 stdlib | PyPI | | CLI Tool | Go | Cobra | SQLite / BoltDB | sqlx | GitHub Releases | | CLI Tool | Rust | Clap | SQLite | rusqlite | crates.io | | Library | TypeScript | tsup | n/a | n/a | npm | | Library | Python | hatch/uv | n/a | n/a | PyPI |
# FastAPI with uv
mkdir my-api && cd my-api
uv init --python 3.12
uv add fastapi uvicorn sqlalchemy alembic psycopg2-binary pydantic-settings
uv add --dev pytest pytest-asyncio httpx ruff mypy
# Next.js 14+
npx create-next-app@latest my-app --typescript --tailwind --eslint --app --src-dir --import-alias "@/*"
# Vite + React
npm create vite@latest my-app -- --template react-ts
mkdir my-api && cd my-api
go mod init github.com/user/my-api
go get github.com/gin-gonic/gin
go get github.com/jmoiron/sqlx
go get github.com/lib/pq
cargo init my-cli
cd my-cli
cargo add clap --features derive
cargo add serde --features derive
cargo add anyhow tokio --features tokio/full
npx create-turbo@latest my-monorepo
# Or manual:
mkdir my-monorepo && cd my-monorepo
npm init -y
npm install turbo --save-dev
mkdir -p apps/web apps/api packages/shared
my-api/
├── src/
│ └── my_api/
│ ├── __init__.py
│ ├── main.py # FastAPI app, lifespan, middleware
│ ├── config.py # pydantic-settings configuration
│ ├── database.py # SQLAlchemy engine, session
│ ├── dependencies.py # Shared FastAPI dependencies
│ ├── routers/
│ │ ├── __init__.py
│ │ ├── health.py # Health check endpoint
│ │ └── users.py # User CRUD endpoints
│ ├── models/
│ │ ├── __init__.py
│ │ └── user.py # SQLAlchemy models
│ ├── schemas/
│ │ ├── __init__.py
│ │ └── user.py # Pydantic request/response schemas
│ └── services/
│ ├── __init__.py
│ └── user.py # Business logic
├── alembic/
│ ├── alembic.ini
│ ├── env.py
│ └── versions/
├── tests/
│ ├── conftest.py # Fixtures: test DB, client, factories
│ ├── test_health.py
│ └── test_users.py
├── pyproject.toml
├── Dockerfile
├── docker-compose.yml
├── .env.example
├── .gitignore
└── .dockerignore
my-api/
├── src/
│ ├── index.ts # Entry point, server startup
│ ├── app.ts # Express/Fastify app setup
│ ├── config.ts # Environment config with zod validation
│ ├── database.ts # Prisma client or Drizzle config
│ ├── middleware/
│ │ ├── auth.ts
│ │ ├── error-handler.ts
│ │ └── request-logger.ts
│ ├── routes/
│ │ ├── health.ts
│ │ └── users.ts
│ ├── services/
│ │ └── user.service.ts
│ └── types/
│ └── index.ts
├── prisma/
│ └── schema.prisma
├── tests/
│ ├── setup.ts
│ └── routes/
│ └── users.test.ts
├── package.json
├── tsconfig.json
├── Dockerfile
├── docker-compose.yml
├── .env.example
└── .gitignore
my-app/
├── src/
│ ├── app/
│ │ ├── layout.tsx # Root layout
│ │ ├── page.tsx # Home page
│ │ ├── loading.tsx # Global loading UI
│ │ ├── error.tsx # Global error boundary
│ │ ├── not-found.tsx # 404 page
│ │ ├── globals.css # Global styles + Tailwind
│ │ ├── (auth)/
│ │ │ ├── login/page.tsx
│ │ │ └── register/page.tsx
│ │ ├── dashboard/
│ │ │ ├── layout.tsx
│ │ │ └── page.tsx
│ │ └── api/
│ │ └── health/route.ts
│ ├── components/
│ │ ├── ui/ # Reusable primitives
│ │ └── features/ # Feature-specific components
│ ├── lib/
│ │ ├── db.ts # Database client
│ │ ├── auth.ts # Auth helpers
│ │ └── utils.ts # Shared utilities
│ └── types/
│ └── index.ts
├── public/
│ └── favicon.ico
├── tests/
│ ├── setup.ts
│ └── components/
├── next.config.ts
├── tailwind.config.ts
├── tsconfig.json
├── package.json
├── .env.local.example
└── .gitignore
my-cli/
├── src/
│ └── my_cli/
│ ├── __init__.py
│ ├── __main__.py # python -m my_cli entry
│ ├── cli.py # Typer app, command groups
│ ├── commands/
│ │ ├── __init__.py
│ │ ├── init.py # my-cli init
│ │ └── run.py # my-cli run
│ ├── config.py # Config file loading (TOML/YAML)
│ └── utils.py
├── tests/
│ ├── conftest.py
│ └── test_commands.py
├── pyproject.toml # [project.scripts] entry point
├── .gitignore
└── README.md
my-cli/
├── cmd/
│ ├── root.go # Root command, global flags
│ ├── init.go # my-cli init
│ └── run.go # my-cli run
├── internal/
│ ├── config/
│ │ └── config.go # Viper config loading
│ └── runner/
│ └── runner.go # Core logic
├── main.go # Entry point, calls cmd.Execute()
├── go.mod
├── go.sum
├── Makefile
└── .gitignore
my-lib/
├── src/
│ ├── index.ts # Public API exports
│ ├── core.ts # Core implementation
│ └── types.ts # Public type definitions
├── tests/
│ └── core.test.ts
├── package.json # "type": "module", exports map
├── tsconfig.json # declaration: true, declarationMap: true
├── tsup.config.ts # Build config: cjs + esm
├── vitest.config.ts
├── .npmignore
├── .gitignore
├── CHANGELOG.md
└── LICENSE
my-lib/
├── src/
│ └── my_lib/
│ ├── __init__.py # Public API, __version__
│ ├── core.py
│ └── py.typed # PEP 561 marker
├── tests/
│ ├── conftest.py
│ └── test_core.py
├── pyproject.toml # Build system, metadata, tool config
├── .gitignore
├── CHANGELOG.md
└── LICENSE
my-monorepo/
├── apps/
│ ├── web/ # Next.js frontend
│ │ ├── src/
│ │ ├── package.json # depends on @repo/shared
│ │ └── tsconfig.json # extends ../../tsconfig.base.json
│ └── api/ # Fastify backend
│ ├── src/
│ ├── package.json
│ └── tsconfig.json
├── packages/
│ ├── shared/ # Shared types, utils, validators
│ │ ├── src/
│ │ ├── package.json # "name": "@repo/shared"
│ │ └── tsconfig.json
│ ├── ui/ # Shared React components
│ │ ├── src/
│ │ └── package.json # "name": "@repo/ui"
│ └── config/ # Shared configs
│ ├── eslint/
│ ├── typescript/
│ └── package.json
├── turbo.json # Pipeline: build, test, lint
├── pnpm-workspace.yaml # packages: ["apps/*", "packages/*"]
├── package.json # Root devDeps: turbo
├── tsconfig.base.json # Shared TypeScript config
├── .gitignore
└── .npmrc
my-workspace/
├── crates/
│ ├── my-core/ # Core library
│ │ ├── src/lib.rs
│ │ └── Cargo.toml
│ ├── my-cli/ # CLI binary
│ │ ├── src/main.rs
│ │ └── Cargo.toml # depends on my-core
│ └── my-server/ # API binary
│ ├── src/main.rs
│ └── Cargo.toml
├── Cargo.toml # [workspace] members = ["crates/*"]
├── Cargo.lock
├── .gitignore
└── rust-toolchain.toml
Project setup complete? Add these:
│
├─ Version Control
│ ├─ [ ] .gitignore (language-specific)
│ ├─ [ ] .gitattributes (line endings, binary files)
│ └─ [ ] Branch protection rules
│
├─ CI/CD
│ ├─ [ ] GitHub Actions workflow (test on PR, deploy on merge)
│ ├─ [ ] Matrix testing (OS, runtime versions)
│ └─ [ ] Release automation
│
├─ Docker
│ ├─ [ ] Multi-stage Dockerfile
│ ├─ [ ] docker-compose.yml (app + database + cache)
│ ├─ [ ] .dockerignore
│ └─ [ ] Health check endpoint
│
├─ Code Quality
│ ├─ [ ] Linter (ESLint, Ruff, golangci-lint, Clippy)
│ ├─ [ ] Formatter (Prettier, Black/Ruff, gofmt, rustfmt)
│ ├─ [ ] Pre-commit hooks (Husky, pre-commit)
│ └─ [ ] Type checking (TypeScript strict, mypy, go vet)
│
├─ Testing
│ ├─ [ ] Test framework configured (Vitest, pytest, go test)
│ ├─ [ ] Coverage reporting
│ ├─ [ ] Test database setup
│ └─ [ ] CI test pipeline
│
├─ Editor
│ ├─ [ ] .editorconfig
│ ├─ [ ] .vscode/settings.json
│ └─ [ ] .vscode/extensions.json
│
└─ Documentation
├─ [ ] README.md (project description, setup, usage)
├─ [ ] CONTRIBUTING.md
└─ [ ] API documentation (OpenAPI, godoc, rustdoc)
root = true
[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.{py,rs}]
indent_size = 4
[*.go]
indent_style = tab
[*.md]
trim_trailing_whitespace = false
[Makefile]
indent_style = tab
[project]
name = "my-project"
version = "0.1.0"
requires-python = ">=3.12"
[tool.ruff]
target-version = "py312"
line-length = 88
[tool.ruff.lint]
select = ["E", "F", "I", "UP", "B", "SIM"]
[tool.pytest.ini_options]
testpaths = ["tests"]
asyncio_mode = "auto"
[tool.mypy]
strict = true
{
"compilerOptions": {
"target": "ES2022",
"module": "NodeNext",
"moduleResolution": "NodeNext",
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true,
"resolveJsonModule": true,
"declaration": true,
"declarationMap": true,
"sourceMap": true,
"outDir": "./dist",
"rootDir": "./src"
},
"include": ["src"],
"exclude": ["node_modules", "dist"]
}
| Gotcha | Why It Happens | Prevention |
|--------|---------------|------------|
| Wrong .gitignore for language | Used generic template, missing language-specific entries | Use gitignore.io or GitHub's templates for your stack |
| Forgot .env.example | Team members don't know which env vars are needed | Create .env.example with every var (empty values) at project start |
| No lockfile committed | Inconsistent dependency versions across environments | Commit package-lock.json, uv.lock, go.sum, Cargo.lock |
| Hardcoded port/host in code | Works locally, breaks in Docker/cloud | Always read from env var with sensible default |
| Tests coupled to real database | Tests fail without running DB, CI setup is complex | Use test containers or in-memory SQLite for unit tests |
| Missing health check endpoint | Deployment orchestrator cannot verify readiness | Add /health endpoint that checks DB connectivity |
| No multi-stage Docker build | Image is 2GB instead of 200MB | Use builder stage for deps/compile, slim runtime stage |
| Mixing tabs and spaces | .editorconfig missing, editor defaults vary | Add .editorconfig to every project root |
| No .dockerignore | Docker context sends node_modules/venv, build takes minutes | Mirror .gitignore entries plus .git directory |
| Monorepo without workspace protocol | Packages resolve from registry instead of local | Use workspace:* (pnpm) or path deps (Cargo, Go) |
| TypeScript paths not in tsconfig | Module aliases work in dev but fail at build time | Configure paths in tsconfig AND build tool (tsup, vite) |
| File | Contents | Lines |
|------|----------|-------|
| references/api-templates.md | Complete API scaffolds: FastAPI, Express/Fastify, Gin, Axum with full file content | ~700 |
| references/frontend-templates.md | Web app scaffolds: Next.js, Nuxt 3, Astro, SvelteKit, Vite+React with config | ~650 |
| references/tooling-templates.md | CI/CD, Docker, linting, testing, pre-commit, editor config, git templates | ~550 |
| Skill | When to Combine |
|-------|----------------|
| docker-ops | Container configuration, multi-stage builds, compose orchestration |
| ci-cd-ops | GitHub Actions workflows, deployment pipelines, release automation |
| testing-ops | Test framework setup, coverage configuration, CI test integration |
| python-env | Python virtual environments, dependency management with uv |
| typescript-ops | TypeScript configuration, strict mode, module resolution |
tools
yt-dlp operations - the media ACQUISITION layer that feeds ffmpeg-ops: format selection (-S sort vs -f filters) that avoids post-download transcodes, --download-sections clip-at-download, audio-only extraction for STT pipelines (-x --audio-format opus), playlists + --download-archive incremental channel syncs, cookies/auth (--cookies-from-browser), rate limiting and politeness, SponsorBlock mark/remove, output templates (-o), subtitle download (--write-subs/--write-auto-subs), remux-vs-recode doctrine, and failure triage (403s, throttling, geo blocks, the nsig-extraction class that means yt-dlp is outdated). Triggers on: yt-dlp, ytdlp, youtube-dl, download video, download youtube, download from youtube, download playlist, download channel, archive channel, channel sync, rip audio, youtube to mp3, youtube to mp4, save video, grab video, video downloader, download subtitles, download transcript, clip from youtube, download section, sponsorblock, cookies-from-browser, download-archive, nsig, requested format is not available, sign in to confirm, download livestream, record stream, live-from-start, premiere, impersonate.
tools
Comprehensive ffmpeg/ffprobe operations - probe-first media processing: transcode and compress (H.264/H.265/AV1/Opus), frame-accurate cut/trim/concat, EDL-driven editing, color grading and .cube LUTs, audio loudnorm and mixing, STT/Whisper audio prep, subtitles, GIF and thumbnails, HLS packaging, hardware encoding (NVENC/QSV/AMF/VideoToolbox), restoration, scene and silence detection, VMAF quality gates, screen capture, yt-dlp interop. Triggers on: ffmpeg, ffprobe, transcode, convert video, compress video, encode video, extract audio, trim video, cut video, concat videos, video to gif, thumbnail, contact sheet, burn subtitles, watermark, resize video, crop video, change fps, slow motion, timelapse, loudnorm, normalize audio, audio for whisper, transcription prep, scene detection, silence detection, remove silence, color grade, LUT, tonemap HDR, vmaf, nvenc, hardware encode, hls, remux, faststart, deinterlace, stabilize video, denoise video, screen record, EDL, keyframes.
development
Payload CMS 3 (Next.js-native) architecture - collections, globals, fields, access control, hooks, Local API, storage adapters, and database (Postgres/MongoDB/SQLite). Use for: payload, payloadcms, payload cms, payload 3, collection config, access control, payload hooks, local api, payload fields, multi-tenant payload, payload nextjs, payload s3, payload r2, payloadcms architecture, headless cms typescript.
testing
Cypress end-to-end and component testing operations - selector/retry-ability strategy, cy.intercept network stubbing, cy.session auth, component vs e2e, flake diagnosis, CI, Test Replay. Use for: cypress, e2e test, component test, cy.get, cy.intercept, cy.session, data-cy, data-test, retry-ability, flake, flaky test, cypress.config, cy.mount, Test Replay, custom commands, fixtures.