🎯

phase-9-deployment

🎯Skill

from popup-studio-ai/bkit-claude-code

VibeIndex|
What it does

Deploys applications to production environments using CI/CD strategies, configuring infrastructure across various platforms like Vercel, Kubernetes, and Docker.

πŸ“¦

Part of

popup-studio-ai/bkit-claude-code(17 items)

phase-9-deployment

Installation

npm runRun npm script
npm run build
πŸ“– Extracted from docs: popup-studio-ai/bkit-claude-code
4Installs
-
AddedFeb 4, 2026

Skill Details

SKILL.md

|

Overview

# Phase 9: Deployment

> Production deployment

Purpose

Deliver the completed application to users.

What to Do in This Phase

  1. Prepare Deployment Environment: Infrastructure setup
  2. Build: Create production build
  3. Execute Deployment: Actual deployment
  4. Verification: Post-deployment operation check

Deliverables

```

docs/02-design/

└── deployment-spec.md # Deployment specification

docs/04-report/

└── deployment-report.md # Deployment report

(Infrastructure config files)

β”œβ”€β”€ vercel.json # Vercel configuration

β”œβ”€β”€ Dockerfile # Docker configuration

└── k8s/ # Kubernetes configuration

```

PDCA Application

  • Plan: Establish deployment plan
  • Design: Design deployment configuration
  • Do: Execute deployment
  • Check: Verify deployment
  • Act: Problem resolution and completion report

Level-wise Application

| Level | Deployment Method |

|-------|-------------------|

| Starter | Static hosting (Netlify, GitHub Pages) |

| Dynamic | Vercel, Railway, etc. |

| Enterprise | Kubernetes, AWS ECS, etc. |

Starter Deployment (Static Hosting)

```bash

# GitHub Pages

npm run build

# Deploy dist/ folder to gh-pages branch

# Netlify

# Configure netlify.toml then connect Git

```

Dynamic Deployment (Vercel)

```bash

# Vercel CLI

npm i -g vercel

vercel

# Or auto-deploy via Git connection

```

Enterprise Deployment (Kubernetes)

```yaml

# k8s/deployment.yaml

apiVersion: apps/v1

kind: Deployment

metadata:

name: my-app

spec:

replicas: 3

template:

spec:

containers:

- name: app

image: my-app:latest

```

---

Environment Management

Environment Configuration Overview

```

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”

β”‚ Environment Variable Flow β”‚

β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€

β”‚ β”‚

β”‚ Development β”‚

β”‚ └── .env.local β†’ Developer local machine β”‚

β”‚ β”‚

β”‚ Staging β”‚

β”‚ └── CI/CD Secrets β†’ Preview/Staging environment β”‚

β”‚ β”‚

β”‚ Production β”‚

β”‚ └── CI/CD Secrets β†’ Production environment β”‚

β”‚ └── Vault/Secrets Manager (Enterprise) β”‚

β”‚ β”‚

β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

```

Environment Classification

| Environment | Purpose | Data | Variable Source |

|-------------|---------|------|-----------------|

| Development | Local development | Test data | .env.local |

| Staging | Pre-deployment verification | Test data | CI/CD Secrets |

| Production | Live service | Real data | CI/CD Secrets + Vault |

---

CI/CD Environment Variable Configuration

GitHub Actions

```yaml

# .github/workflows/deploy.yml

name: Deploy

on:

push:

branches: [main, staging]

jobs:

deploy:

runs-on: ubuntu-latest

steps:

- uses: actions/checkout@v4

- name: Set environment

run: |

if [ "${{ github.ref }}" == "refs/heads/main" ]; then

echo "DEPLOY_ENV=production" >> $GITHUB_ENV

else

echo "DEPLOY_ENV=staging" >> $GITHUB_ENV

fi

- name: Build

env:

# General environment variables (can be exposed)

NEXT_PUBLIC_APP_URL: ${{ vars.APP_URL }}

NEXT_PUBLIC_API_URL: ${{ vars.API_URL }}

# Secrets (sensitive info)

DATABASE_URL: ${{ secrets.DATABASE_URL }}

AUTH_SECRET: ${{ secrets.AUTH_SECRET }}

API_STRIPE_SECRET: ${{ secrets.API_STRIPE_SECRET }}

run: npm run build

- name: Deploy to Vercel

env:

VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}

run: |

npx vercel --prod --token=$VERCEL_TOKEN

```

GitHub Secrets Configuration Guide

```

Repository Settings β†’ Secrets and variables β†’ Actions

  1. Repository secrets (sensitive info)

β”œβ”€β”€ DATABASE_URL

β”œβ”€β”€ AUTH_SECRET

β”œβ”€β”€ API_STRIPE_SECRET

└── VERCEL_TOKEN

  1. Repository variables (general settings)

β”œβ”€β”€ APP_URL

β”œβ”€β”€ API_URL

└── NODE_ENV

  1. Environment-specific secrets

β”œβ”€β”€ production/

β”‚ β”œβ”€β”€ DATABASE_URL (production DB)

β”‚ └── API_STRIPE_SECRET (live key)

└── staging/

β”œβ”€β”€ DATABASE_URL (staging DB)

└── API_STRIPE_SECRET (test key)

```

Vercel Environment Variable Configuration

```

Project Settings β†’ Environment Variables

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”

β”‚ Variable Name β”‚ Development β”‚ Preview β”‚ Production β”‚

β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€

β”‚ DATABASE_URL β”‚ dev-db β”‚ staging-db β”‚ prod-db β”‚

β”‚ AUTH_SECRET β”‚ dev-secret β”‚ stg-secret β”‚ prod-secret β”‚

β”‚ API_STRIPE_* β”‚ test key β”‚ test key β”‚ live key β”‚

β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Configuration steps:

  1. Project Settings β†’ Environment Variables
  2. Add New Variable
  3. Select environment (Development / Preview / Production)
  4. Check Sensitive (if sensitive info)

```

---

Secrets Management Strategy

Level-wise Secrets Management

| Level | Secrets Management Method | Tools |

|-------|--------------------------|-------|

| Starter | CI/CD platform Secrets | GitHub Secrets, Vercel |

| Dynamic | CI/CD + environment separation | GitHub Environments |

| Enterprise | Dedicated Secrets Manager | Vault, AWS Secrets Manager |

Starter/Dynamic: CI/CD Secrets

```yaml

# Usage in GitHub Actions

  • name: Deploy

env:

DB_PASSWORD: ${{ secrets.DB_PASSWORD }}

```

Enterprise: HashiCorp Vault

```yaml

# Fetch Secrets from Vault

  • name: Import Secrets from Vault

uses: hashicorp/vault-action@v2

with:

url: https://vault.company.com

token: ${{ secrets.VAULT_TOKEN }}

secrets: |

secret/data/myapp/production db_password | DB_PASSWORD ;

secret/data/myapp/production api_key | API_KEY

```

Enterprise: AWS Secrets Manager

```typescript

// lib/secrets.ts

import { SecretsManagerClient, GetSecretValueCommand } from "@aws-sdk/client-secrets-manager";

const client = new SecretsManagerClient({ region: "ap-northeast-2" });

export async function getSecret(secretName: string): Promise> {

const command = new GetSecretValueCommand({ SecretId: secretName });

const response = await client.send(command);

if (response.SecretString) {

return JSON.parse(response.SecretString);

}

throw new Error(Secret ${secretName} not found);

}

// Usage

const dbSecrets = await getSecret("myapp/production/database");

// { host: "...", password: "...", ... }

```

---

Environment-specific Build Configuration

Next.js Environment Configuration

```javascript

// next.config.js

/* @type {import('next').NextConfig} /

const nextConfig = {

// Environment-specific settings

env: {

NEXT_PUBLIC_ENV: process.env.NODE_ENV,

},

// Environment-specific redirects

async redirects() {

if (process.env.NODE_ENV === 'production') {

return [

{ source: '/debug', destination: '/', permanent: false },

];

}

return [];

},

};

module.exports = nextConfig;

```

Environment-specific API Endpoints

```typescript

// lib/config.ts

const config = {

development: {

apiUrl: 'http://localhost:3001',

debug: true,

},

staging: {

apiUrl: 'https://api-staging.myapp.com',

debug: true,

},

production: {

apiUrl: 'https://api.myapp.com',

debug: false,

},

} as const;

type Environment = keyof typeof config;

const env = (process.env.NODE_ENV || 'development') as Environment;

export const appConfig = config[env];

```

---

Environment Variable Validation (Pre-deployment)

Required Variable Check Script

```javascript

#!/usr/bin/env node

// scripts/check-env.js

const REQUIRED_VARS = [

'DATABASE_URL',

'AUTH_SECRET',

'NEXT_PUBLIC_APP_URL'

];

const missing = REQUIRED_VARS.filter(v => !process.env[v]);

if (missing.length > 0) {

console.error('❌ Missing required environment variables:');

missing.forEach(v => console.error( - ${v}));

process.exit(1);

}

console.log('βœ… All required environment variables are set');

```

Validation in CI/CD

```yaml

# GitHub Actions

  • name: Validate Environment

run: node scripts/check-env.js

env:

DATABASE_URL: ${{ secrets.DATABASE_URL }}

AUTH_SECRET: ${{ secrets.AUTH_SECRET }}

NEXT_PUBLIC_APP_URL: ${{ vars.APP_URL }}

```

---

Environment Variable Management Checklist

Pre-deployment

  • [ ] Secrets Registration

- [ ] DATABASE_URL (per environment)

- [ ] AUTH_SECRET (per environment)

- [ ] External API keys (per environment)

  • [ ] Environment Separation

- [ ] Development / Staging / Production distinction

- [ ] Per-environment database separation

- [ ] Per-environment external service key separation (test/live)

  • [ ] Validation

- [ ] Run required variable check script

- [ ] Build test

Post-deployment

  • [ ] Operation Check

- [ ] Verify environment variables are injected correctly

- [ ] External service integration test

  • [ ] Security Check

- [ ] Verify no sensitive info in logs

- [ ] Verify no server-only variables exposed to client

---

Deployment Checklist

Preparation

  • [ ] Environment variable configuration (see checklist above)
  • [ ] Domain connection
  • [ ] SSL certificate

Deployment

  • [ ] Build successful
  • [ ] Deployment complete
  • [ ] Health check passed

Verification

  • [ ] Major feature operation check
  • [ ] Error log review
  • [ ] Performance monitoring

Rollback Plan

```

If problems occur:

  1. Immediately rollback to previous version
  2. Analyze root cause
  3. Fix and redeploy

```

Template

See templates/pipeline/phase-9-deployment.template.md

After Completion

Project complete! Start new feature development cycle from Phase 1 as needed

More from this repository10

🎯
phase-3-mockup🎯Skill

Rapidly create trendy, interactive UI mockups using HTML/CSS/JS, designed for easy Next.js component conversion without requiring a designer.

🎯
phase-5-design-system🎯Skill

Builds platform-independent design systems with consistent UI components across multiple frameworks and technologies.

🎯
pdca🎯Skill

Skill

🎯
desktop-app🎯Skill

Develops cross-platform desktop applications using web technologies with Electron or Tauri frameworks, targeting Windows, macOS, and Linux.

🎯
phase-6-ui-integration🎯Skill

Implements frontend UI screens, integrates with backend APIs, and manages application state using design system components and centralized API architecture.

🎯
bkit-rules🎯Skill

Enforces AI-native development rules using PDCA methodology, automatically detecting project complexity and applying consistent code quality standards.

🎯
zero-script-qa🎯Skill

Enables log-based feature verification and real-time Docker monitoring without traditional test scripts, focusing on structured JSON logging and automated issue detection.

🎯
phase-8-review🎯Skill

Verifies overall codebase quality through comprehensive architecture, convention, and implementation gap analysis before deployment.

🎯
code-review🎯Skill

Performs comprehensive code review by analyzing code quality, detecting potential bugs, and providing actionable feedback across multiple dimensions like security, performance, and best practices.

🎯
bkit-templates🎯Skill

Skill