home / skills / markus41 / claude / project-scaffolding

This skill guides you through detecting project type, selecting templates, applying post-scaffolding steps, Harness integration patterns, and testing

npx playbooks add skill markus41/claude --skill project-scaffolding

Review the files below or copy the command above to add this skill to your agents.

Files (1)
SKILL.md
19.6 KB
---
name: project-scaffolding
description: Project type detection matrix, template recommendations per project type, post-scaffolding checklist, Harness integration patterns, and testing recommendations
allowed-tools: [Bash, Read, Write, Edit, Glob, Grep, Task, WebFetch, WebSearch]
dependencies: [universal-templating, harness-expert]
triggers: [scaffold project, create project, project template, project type, initialize project]
---

# Project Scaffolding Skill

Comprehensive guide to project type detection, template selection, post-scaffolding setup, Harness integration, and testing strategies.

## Project Type Detection Matrix

### How to Detect Project Type

**Detection Priority:**
1. Look for language-specific files in root
2. Check build system presence
3. Examine package/dependency files
4. Analyze configuration files
5. Review existing CI/CD setup

### Type Identification Checklist

```
Python Project:
  ✓ setup.py, pyproject.toml, or requirements.txt
  ✓ .python-version file
  ✓ Pipfile (Pipenv)
  ✓ poetry.lock (Poetry)

Node.js/JavaScript:
  ✓ package.json exists
  ✓ node_modules/ directory
  ✓ .npmrc or .yarnrc
  ✓ yarn.lock or package-lock.json

Java/JVM:
  ✓ pom.xml (Maven) or build.gradle (Gradle)
  ✓ src/main/java structure
  ✓ .java files present

Go:
  ✓ go.mod file
  ✓ *.go source files
  ✓ go.sum dependencies file

Rust:
  ✓ Cargo.toml
  ✓ src/ directory
  ✓ Cargo.lock

C#/.NET:
  ✓ *.csproj or *.sln files
  ✓ appsettings.json
  ✓ global.json

TypeScript:
  ✓ tsconfig.json
  ✓ *.ts or *.tsx files
  ✓ package.json with typescript dependency

Kubernetes/DevOps:
  ✓ Dockerfile
  ✓ docker-compose.yml
  ✓ k8s/ or helm/ directory
  ✓ Helmfile

Infrastructure as Code:
  ✓ *.tf files (Terraform)
  ✓ bicep/ directory (Azure Bicep)
  ✓ cloudformation.yaml (AWS CloudFormation)
```

---

## Project Type Recommendations Matrix

### 1. Python Projects

**Best Templates:**
- **Cookiecutter** - Standard Python projects, packages
- **Copier** - Complex projects with versioning needs
- **Poetry** - Modern Python packaging

**Template Structure:**
```
{project_name}/
├── {project_name}/          # Main package
│   ├── __init__.py
│   ├── main.py
│   └── config.py
├── tests/                   # Test directory
│   ├── __init__.py
│   ├── conftest.py         # pytest fixtures
│   └── test_main.py
├── docs/                    # Documentation
│   ├── conf.py             # Sphinx config
│   ├── index.rst
│   └── api.rst
├── .gitignore
├── README.md
├── LICENSE
├── requirements.txt         # Or pyproject.toml
├── setup.py                # Or tool.poetry in pyproject.toml
├── pytest.ini
├── tox.ini                 # Multi-environment testing
└── Dockerfile
```

**Key Variables:**
```yaml
project_name: str           # Package name (lowercase, underscores)
author_name: str           # Author name
author_email: str          # Author email
python_version: str        # Target version (3.9, 3.10, 3.11, 3.12)
use_poetry: bool          # Use Poetry for dependency management
use_pytest: bool          # Use pytest (default: true)
use_docker: bool          # Include Dockerfile
include_cli: bool         # Include Click CLI framework
```

**Post-Scaffolding:**
```bash
cd {project_name}
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate
pip install -r requirements.txt
pytest tests/             # Verify test setup
```

---

### 2. Node.js/JavaScript Projects

**Best Templates:**
- **Cookiecutter** - Standard Node projects
- **Copier** - Full-stack applications

**Template Structure:**
```
{project_name}/
├── src/
│   ├── index.js
│   ├── config.js
│   └── utils/
├── tests/
│   ├── unit/
│   ├── integration/
│   └── fixtures/
├── public/                # Static assets
├── docs/
├── .env.example          # Environment template
├── .eslintrc.json        # ESLint config
├── .prettierrc.json      # Code formatting
├── jest.config.js        # Jest testing config
├── tsconfig.json         # If using TypeScript
├── package.json
├── package-lock.json     # Or yarn.lock / pnpm-lock.yaml
├── Dockerfile
├── docker-compose.yml
├── .gitignore
├── README.md
└── LICENSE
```

**Key Variables:**
```yaml
project_name: str              # Project name
author_name: str               # Author
use_typescript: bool          # TypeScript support
use_eslint: bool              # ESLint (default: true)
use_prettier: bool            # Code formatter
use_jest: bool                # Jest testing
use_docker: bool              # Docker support
use_express: bool             # Express.js framework
package_manager: str          # npm, yarn, pnpm
```

**Post-Scaffolding:**
```bash
cd {project_name}
npm install              # or yarn / pnpm install
npm run lint             # Check linting
npm run test             # Run tests
npm run dev              # Start development server
```

---

### 3. Java/JVM Projects

**Best Templates:**
- **Maven Archetypes** - Standard Java projects
- **Gradle Template** - Gradle-based projects

**Template Structure (Maven):**
```
{project_name}/
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── com/company/{project_name}/
│   │   │       ├── App.java
│   │   │       └── service/
│   │   └── resources/
│   │       └── application.properties
│   └── test/
│       ├── java/
│       │   └── com/company/{project_name}/
│       │       └── AppTest.java
│       └── resources/
├── docs/
├── pom.xml              # Maven configuration
├── README.md
├── Dockerfile
└── .gitignore
```

**Key Variables:**
```yaml
groupId: str             # Maven group ID (e.g., com.company)
artifactId: str          # Maven artifact ID
package: str             # Java package name
java_version: str        # JDK version (11, 17, 21)
spring_boot_version: str # If using Spring Boot
build_tool: str          # maven or gradle
```

**Post-Scaffolding:**
```bash
cd {project_name}
mvn clean compile        # Compile project
mvn test                 # Run tests
mvn spring-boot:run      # If using Spring Boot
```

---

### 4. TypeScript Projects

**Best Templates:**
- **ts-node** - CLI tools and scripts
- **Next.js** - Full-stack web applications
- **NestJS** - Backend APIs

**Template Structure:**
```
{project_name}/
├── src/
│   ├── index.ts
│   ├── types/
│   │   └── index.ts
│   ├── services/
│   ├── controllers/      # If REST API
│   └── utils/
├── tests/
│   ├── unit/
│   └── integration/
├── dist/                 # Compiled JavaScript (output)
├── tsconfig.json        # TypeScript config
├── jest.config.js       # Jest testing
├── .eslintrc.json       # ESLint
├── package.json
├── Dockerfile
├── README.md
└── .gitignore
```

**Key Variables:**
```yaml
project_name: str
typescript_version: str   # Exact version or latest
jest_enabled: bool        # Testing framework
eslint_enabled: bool      # Linting
strict_mode: bool         # tsconfig strict
target: str               # Compilation target (ES2020, etc.)
module: str               # Module system (ESNext, CommonJS)
```

**Post-Scaffolding:**
```bash
cd {project_name}
npm install
npm run build             # Compile TypeScript
npm test                  # Run tests
npm start                 # Run compiled code
```

---

### 5. Go Projects

**Best Templates:**
- **Go Project Layout** - Standard Go project structure
- **Cobra CLI** - CLI applications

**Template Structure:**
```
{project_name}/
├── cmd/
│   ├── cli/
│   │   └── main.go      # Application entry point
│   └── server/          # If server application
│       └── main.go
├── internal/            # Private packages
│   ├── config/
│   ├── handler/
│   └── service/
├── pkg/                 # Public packages
│   └── {package_name}/
├── api/                 # API definitions
├── test/
├── docs/
├── Makefile             # Build automation
├── go.mod               # Module definition
├── go.sum               # Checksums
├── Dockerfile
├── .gitignore
├── README.md
└── LICENSE
```

**Key Variables:**
```yaml
project_name: str        # Go module name (github.com/user/project)
author_name: str
go_version: str          # Minimum Go version (1.19, 1.20, 1.21)
use_cobra: bool          # CLI framework
use_gin: bool            # Web framework (if server)
use_gorm: bool           # ORM (if database needed)
```

**Post-Scaffolding:**
```bash
cd {project_name}
go mod download          # Download dependencies
go build ./cmd/cli       # Build application
go test ./...            # Run tests
./cli --help             # Test CLI
```

---

### 6. Kubernetes/DevOps Projects

**Best Templates:**
- **Helm Chart** - Kubernetes deployments
- **Kustomize** - Kubernetes customization
- **Copier** - Multi-environment setups

**Template Structure:**
```
{project_name}/
├── helm/
│   └── {release_name}/
│       ├── Chart.yaml
│       ├── values.yaml
│       ├── values-dev.yaml
│       ├── values-prod.yaml
│       └── templates/
│           ├── deployment.yaml
│           ├── service.yaml
│           ├── configmap.yaml
│           └── ingress.yaml
├── k8s/
│   ├── base/
│   ├── dev/
│   └── prod/
├── kustomization.yaml
├── docker-compose.yml   # For local development
├── Dockerfile
├── .dockerignore
├── docs/
├── README.md
└── .gitignore
```

**Key Variables:**
```yaml
project_name: str        # Application name
image_registry: str      # Docker registry
image_name: str          # Docker image name
replicas_dev: int        # Dev environment replicas
replicas_prod: int       # Prod environment replicas
namespace: str           # Kubernetes namespace
enable_ingress: bool
enable_monitoring: bool  # Prometheus/monitoring
```

**Post-Scaffolding:**
```bash
cd {project_name}
docker build -t {image}:latest .
helm lint helm/{release}
helm template helm/{release} -f values-dev.yaml
kubectl apply -f k8s/dev/  # Deploy to dev
```

---

### 7. Infrastructure as Code (Terraform)

**Best Templates:**
- **Terraform Module** - Reusable infrastructure components
- **Terraform Project** - Full environment setup

**Template Structure:**
```
{project_name}/
├── main.tf              # Main configuration
├── variables.tf         # Input variables
├── outputs.tf           # Output values
├── terraform.tfvars     # Variable values
├── locals.tf            # Local values
├── vpc.tf               # VPC configuration
├── security.tf          # Security groups
├── iam.tf               # IAM roles/policies
├── modules/
│   ├── vpc/
│   ├── compute/
│   └── database/
├── environments/
│   ├── dev/
│   │   └── terraform.tfvars
│   ├── staging/
│   └── prod/
├── docs/
├── .gitignore
├── README.md
├── versions.tf          # Terraform version constraints
└── backend.tf           # State backend config
```

**Key Variables:**
```yaml
project_name: str        # Project identifier
aws_region: str          # AWS region
environment: str         # dev, staging, prod
terraform_version: str   # Minimum version
```

**Post-Scaffolding:**
```bash
cd environments/dev
terraform init           # Initialize backend
terraform plan           # Preview changes
terraform apply          # Apply configuration
terraform output         # View outputs
```

---

## Post-Scaffolding Checklist

### Universal Tasks (All Projects)

- [ ] Review generated files and structure
- [ ] Verify .gitignore is appropriate
- [ ] Update README.md with project-specific info
- [ ] Add LICENSE file (if not included)
- [ ] Initialize Git repository
- [ ] Create initial commit
- [ ] Add remote repository
- [ ] Verify dependency installation
- [ ] Run basic tests to confirm setup works
- [ ] Document build/run commands
- [ ] Set up CI/CD configuration

### Language-Specific Tasks

**Python:**
- [ ] Verify virtual environment works
- [ ] Test package imports
- [ ] Check pytest configuration
- [ ] Verify linting (flake8/pylint) setup
- [ ] Test documentation build (if Sphinx)
- [ ] Verify type hints (if mypy configured)

**Node.js:**
- [ ] Verify npm/yarn/pnpm setup
- [ ] Test linting and formatting
- [ ] Verify test framework (Jest/Mocha)
- [ ] Check TypeScript compilation
- [ ] Verify build output directory
- [ ] Test hot reload (if dev server)

**Java:**
- [ ] Verify Maven/Gradle build
- [ ] Test unit tests run successfully
- [ ] Verify IDE integration
- [ ] Check dependency tree
- [ ] Verify JAR/WAR packaging

**Go:**
- [ ] Verify go mod download
- [ ] Test build command
- [ ] Verify all tests pass
- [ ] Check linting (golangci-lint)
- [ ] Verify binary execution

### Docker Tasks

- [ ] Build Docker image
- [ ] Test image runs locally
- [ ] Verify volumes/ports are correct
- [ ] Document docker run command
- [ ] Add Docker Compose if multi-container
- [ ] Set up .dockerignore

---

## Harness Integration Patterns

### Pattern 1: Basic CI Pipeline

**For:** Single service, simple build and push

```yaml
# harness/build-pipeline.yaml
pipeline:
  name: Build and Push
  identifier: build_push
  stages:
    - stage:
        name: Build Docker
        type: CI
        spec:
          codebase:
            repoName: {project_name}
            branch: main
          build:
            type: Docker
            spec:
              dockerfile: Dockerfile
              registryConnector: <+input.docker_connector>
              imageName: <+input.image_name>
              imageTag: <+codebase.commitSha>
```

### Pattern 2: Build, Test, and Deploy

**For:** Multi-stage pipeline with testing

```yaml
pipeline:
  name: Build Test Deploy
  identifier: build_test_deploy
  stages:
    - stage:
        name: Build
        type: CI
        spec:
          build:
            type: Docker
            spec:
              dockerfile: Dockerfile

    - stage:
        name: Test
        type: CI
        depends_on:
          - Build
        spec:
          steps:
            - step:
                type: Run
                spec:
                  image: <+artifact.image>
                  script: npm test

    - stage:
        name: Deploy Dev
        type: Deployment
        depends_on:
          - Test
        spec:
          service:
            serviceRef: <+input.service>
          environment:
            environmentRef: dev
```

### Pattern 3: Multi-Environment Deployment

**For:** Dev → Staging → Production with approvals

```yaml
stages:
  - stage:
      name: Deploy Dev
      type: Deployment
      spec:
        environment: dev
        infrastructure: dev-k8s-cluster

  - stage:
      name: Deploy Staging
      type: Deployment
      depends_on:
        - Deploy Dev
      spec:
        environment: staging
        infrastructure: staging-k8s-cluster

  - stage:
      name: Approval for Production
      type: Approval
      depends_on:
        - Deploy Staging
      spec:
        approvers:
          - <+input.approver_group>

  - stage:
      name: Deploy Production
      type: Deployment
      depends_on:
        - Approval for Production
      spec:
        environment: production
        infrastructure: prod-k8s-cluster
```

### Pattern 4: GitOps with Harness

**For:** Managing manifests separately from source code

```yaml
stages:
  - stage:
      name: Build
      type: CI
      spec:
        build:
          type: Docker

  - stage:
      name: Update Manifests
      type: CI
      spec:
        steps:
          - step:
              type: Run
              spec:
                script: |
                  git clone <+input.manifest_repo>
                  sed -i "s/IMAGE_TAG/<+artifact.imageTag>/g" k8s/deployment.yaml
                  git commit && git push

  - stage:
      name: Deploy via GitOps
      type: Deployment
      spec:
        gitOpsEnabled: true
        service:
          serviceRef: <+input.service>
        environment:
          environmentRef: <+input.environment>
```

---

## Testing Recommendations by Project Type

### Python Testing

**Frameworks:**
- **pytest** - Modern, flexible test framework
- **unittest** - Standard library
- **nose2** - Plugin-based testing

**Setup:**
```bash
pip install pytest pytest-cov pytest-mock
```

**Test Structure:**
```
tests/
├── conftest.py          # Shared fixtures
├── unit/
│   ├── test_module.py
│   └── test_service.py
├── integration/
│   └── test_api.py
└── fixtures/
    └── sample_data.py
```

**Coverage Target:** 80%+

---

### Node.js Testing

**Frameworks:**
- **Jest** - All-in-one solution
- **Mocha + Chai** - Flexible combination
- **Vitest** - Fast alternative

**Setup:**
```bash
npm install --save-dev jest @testing-library/react
```

**Test Structure:**
```
tests/
├── unit/
│   ├── utils.test.js
│   └── helpers.test.js
├── integration/
│   └── api.test.js
└── e2e/
    └── user-flow.test.js
```

**Coverage Target:** 80%+

---

### Java Testing

**Frameworks:**
- **JUnit 5** - Modern testing framework
- **Mockito** - Mocking framework
- **TestNG** - Alternative to JUnit

**Setup:**
```xml
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit-jupiter</artifactId>
    <scope>test</scope>
</dependency>
```

**Test Structure:**
```
src/test/java/
└── com/company/project/
    ├── ServiceTest.java
    ├── ControllerTest.java
    └── IntegrationTest.java
```

**Coverage Target:** 80%+

---

### Go Testing

**Testing Style:**
- Standard Go testing package
- Table-driven tests
- Subtests

**Setup:**
```bash
go get github.com/stretchr/testify
```

**Test Structure:**
```
internal/
├── service/
│   ├── service.go
│   └── service_test.go
└── handler/
    ├── handler.go
    └── handler_test.go
```

**Coverage Target:** 80%+

---

## Post-Scaffolding Setup Verification

### Universal Verification Commands

```bash
# Git setup
git init
git add .
git commit -m "Initial commit from template"

# Dependency verification
{build-tool} list              # List dependencies

# Test verification
{build-tool} test              # Run test suite

# Build verification
{build-tool} build             # Build project

# Docker verification (if applicable)
docker build -t {image}:test .
docker run {image}:test --version
```

### Checklist Summary

```
ESSENTIAL:
- [ ] Project initialized and builds
- [ ] Dependencies installed
- [ ] Tests run and pass
- [ ] Documentation exists
- [ ] .gitignore configured
- [ ] Initial commit created

HARNESS INTEGRATION:
- [ ] Harness service created
- [ ] Pipeline template ready
- [ ] Environment configured
- [ ] Deployment target defined

QUALITY GATES:
- [ ] Linting passes
- [ ] Tests pass
- [ ] Code coverage >= 80%
- [ ] Documentation complete
- [ ] Security scan passes
```

---

## Related Documentation

- [Cookiecutter Documentation](https://cookiecutter.readthedocs.io/)
- [Copier Documentation](https://copier.readthedocs.io/)
- [Maven Archetypes](https://maven.apache.org/guides/introduction/introduction-to-archetypes.html)
- [Harness Delegate Setup](https://developer.harness.io/docs/platform/delegates)
- [Helm Charts](https://helm.sh/docs/)
- [Terraform Best Practices](https://www.terraform.io/docs/cloud/guides)

Overview

This skill provides a practical project scaffolding playbook: it detects project type, recommends templates, lists post-scaffolding tasks, and maps Harness CI/CD integration patterns and testing recommendations. It is focused on actionable checks and concrete templates for common stacks (Python, Node, Java, TypeScript, Go, Kubernetes, Terraform). Use it to automate or review bootstrapped projects and ensure consistent developer onboarding.

How this skill works

The skill inspects repository roots for language and tooling indicators (files like package.json, pyproject.toml, go.mod, Dockerfile, *.tf, tsconfig.json, pom.xml) and applies a detection priority that checks language files, build systems, dependency manifests, config files, and existing CI/CD. Based on the detected type it returns recommended templates, a canonical folder structure, key templating variables, and a short post-scaffold checklist. It also emits Harness pipeline patterns tailored to single-service builds, multi-stage test-and-deploy flows, and multi-environment promotion with approvals.

When to use it

  • Initializing a new codebase from a template or template generator
  • Validating a scaffolded project before developer handoff
  • Automating CI/CD wiring and Docker/Helm setups for new services
  • Creating consistent infra-as-code projects and Terraform modules
  • Auditing repository to suggest missing project conventions or tests

Best practices

  • Run detection early in CI to pick correct templates and linters
  • Include a minimal smoke test and lint step in the scaffolded output
  • Provide clear template variables (name, author, language version) to avoid manual edits
  • Commit .gitignore and basic CI config in the first commit
  • Document build, test and run commands in README immediately after scaffolding

Example use cases

  • Scaffold a Python package with Poetry, pytest and Dockerfile and run the post-scaffold checklist
  • Generate a TypeScript API (NestJS/Next.js) with ESLint, Jest, strict tsconfig and a build/test pipeline
  • Create a Helm chart scaffold with values-dev/values-prod and a helm lint + kubectl apply quickstart
  • Start a Terraform project with environments/dev/staging/prod and run terraform init/plan in CI
  • Bootstrap a Go CLI using Cobra, confirm go mod download and run go test across modules

FAQ

How does detection handle multi-language repos?

It prioritizes explicit indicators (build files and manifests) per detection priority; if multiple types are present, it surfaces all matches and recommends a primary type based on build or top-level language files.

Can I customize template variables and defaults?

Yes — templates are designed with explicit variables (project_name, author, language/version, feature toggles) so defaults can be overridden during generation or via a config file.