# Scaffold Deploy

> Generate deployment configuration files (Dockerfile, vercel.json, wrangler.toml, etc.) based on target type.

- Skill: `mayarid/scaffold-deploy` (Agent Skill)
- Install (CLI): `npx skillmds@latest add mayarid/scaffold-deploy`
- Raw SKILL.md: https://api.skillmd.com/api/skills/mayarid/scaffold-deploy/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: DevOps & Infra
- Author: mayarid (https://skillmd.com/u/mayarid)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/mayarid/scaffold-deploy

---


## Context

Project {{project_name}} ({{project_type}}) uses {{stack}}.
Setup deployment to {{input.target}} with CI/CD via {{input.ci_provider}}.

## Instructions

1. **Create Dockerfile** (if target = docker, railway, fly, aws, gcp)
   - Multi-stage build (builder + runner)
   - Non-root user
   - Minimal image size (alpine if possible)
   - Proper .dockerignore
   - Health check endpoint

2. **Create docker-compose.yml** (for local development)
   - App service
   - Database service (if applicable)
   - Redis service (if applicable)
   - Volume mounts for development
   - Environment variables from .env

3. **Create CI/CD pipeline**

   **GitHub Actions:**
   ```
   .github/workflows/
   ├── ci.yml        # Run on PR: lint, typecheck, test
   ├── deploy.yml    # Run on push to main: build, deploy
   └── release.yml   # Run on tag (library only): publish
   ```

   **GitLab CI:**
   ```
   .gitlab-ci.yml    # stages: test, build, deploy
   ```

4. **Create environment configs**
   - `.env.example` (template, committed)
   - Document required env vars
   - Separation: development, staging, production

5. **Platform-specific config:**
   - Vercel: `vercel.json`
   - Railway: `railway.toml`
   - Fly.io: `fly.toml`
   - Library: npm publish config in package.json

## Script

```bash
#!/bin/bash
# Create deployment directories
mkdir -p .github/workflows 2>/dev/null

# Create .dockerignore if using Docker
if [ "{{input.target}}" != "vercel" ]; then
cat > .dockerignore << 'DOCKERIGNORE'
node_modules
.git
.env
.env.local
dist
coverage
.next
DOCKERIGNORE
echo "Created .dockerignore"
fi
```

## Validation

- [ ] Dockerfile builds successfully (`docker build .`)
- [ ] Container runs and responds to health check
- [ ] CI pipeline syntax valid
- [ ] CI pipeline runs successfully (lint, typecheck, test)
- [ ] .env.example contains all required variables
- [ ] No secrets hardcoded in any config file
- [ ] .dockerignore excludes sensitive files

