Back to list
digitalocean-labs

app-platform-designer

by digitalocean-labs

Claude/Agent Skills for DigitalOcean App Platform - deployment, migration, networking, database configuration, and troubleshooting

2🍴 1📅 Jan 23, 2026

SKILL.md


App Platform Designer Skill

Transform natural language descriptions into production-ready App Platform specifications.

Primary question: "I want to build [description]. What should my App Platform architecture look like?"

Produces:

  • .do/app.yaml — App Platform specification
  • .do/deploy.template.yaml — Deploy to DO button (public repos)
  • .env.example — Environment variable template

Quick Decision

What do you need?
├── Design new app from description → Workflow 1
├── Analyze repo and create spec → Workflow 2
├── Add Deploy to DO button → Workflow 3
└── Multi-environment setup → Workflow 4

Workflow 1: Natural Language → App Spec

Trigger: "I need a web app with [description]"

  1. Gather requirements:

    • What does the app do?
    • Language/framework?
    • Database needs?
    • Background processing?
  2. Decompose into components:

    • HTTP-facing → services
    • Background processors → workers
    • One-time/scheduled → jobs
    • Static frontends → static_sites
    • Data stores → databases
  3. Generate spec with health checks, env vars, routing

  4. Validate: doctl apps spec validate .do/app.yaml

Full guide: See architecture-patterns.md


Workflow 2: Analyze Repository → App Spec

Trigger: "Here's my repo, create an app spec"

Check for:
├── Dockerfile → Use dockerfile build
├── package.json → Node.js app
├── requirements.txt / pyproject.toml → Python app
├── go.mod → Go app
├── Multiple directories with above → Monorepo

Full guide: See component-types.md


Workflow 3: Deploy to DO Button

Trigger: "Add Deploy to DigitalOcean button"

Requirements: Public GitHub repository

  1. Create .do/deploy.template.yaml (wraps spec in spec: key, uses git: block)
  2. Add button to README
[![Deploy to DO](https://www.deploytodo.com/do-btn-blue.svg)](https://cloud.digitalocean.com/apps/new?repo=https://github.com/OWNER/REPO/tree/BRANCH)

Full guide: See deploy-to-do-button.md


Opinionated Defaults

DecisionDefaultRationale
Instance sizeapps-s-1vcpu-1gbGood starting point
Instance count1Start minimal
DatabaseDev databaseCost-effective
CacheValkey (not Redis)Redis is EOL
BuildDockerfile if presentMore control
Health check/health or /healthzIndustry standard
Deploy on pushtrueGitOps workflow
RegionnycGood default
Source formatgit: blockRequired for deploy.template.yaml

Component Summary

TypeUse CaseExample
servicesHTTP workloadsAPIs, web apps
workersBackground processingQueue consumers, internal APIs
jobsOne-time/scheduledMigrations, reports
static_sitesFrontend/docsReact, Vue, marketing
databasesData storagePostgreSQL, Valkey

Full guide: See component-types.md


Pattern Selection

What are you building?
├── Simple app (1 service)? → Pattern 1
├── Frontend + API? → Pattern 2
├── Need background processing? → Pattern 3
├── Monorepo? → Pattern 4
└── Complex SaaS? → Pattern 5

Full patterns: See architecture-patterns.md


Quick Start: Single Service + DB

name: my-app
region: nyc

services:
  - name: web
    git:
      repo_clone_url: https://github.com/owner/repo.git
      branch: main
    http_port: 8080
    instance_size_slug: apps-s-1vcpu-1gb
    health_check:
      http_path: /health
    envs:
      - key: DATABASE_URL
        scope: RUN_TIME
        value: ${db.DATABASE_URL}

databases:
  - name: db
    engine: PG
    production: false

Quick Start: API + Frontend

name: fullstack-app
region: nyc

services:
  - name: api
    git:
      repo_clone_url: https://github.com/owner/repo.git
      branch: main
    source_dir: /api
    http_port: 8080
    health_check:
      http_path: /health
    envs:
      - key: DATABASE_URL
        scope: RUN_TIME
        value: ${db.DATABASE_URL}

static_sites:
  - name: frontend
    git:
      repo_clone_url: https://github.com/owner/repo.git
      branch: main
    source_dir: /frontend
    build_command: npm run build
    output_dir: dist
    envs:
      - key: VITE_API_URL
        scope: BUILD_TIME
        value: /api

databases:
  - name: db
    engine: PG
    production: false

ingress:
  rules:
    - match:
        path:
          prefix: /api
      component:
        name: api
    - match:
        path:
          prefix: /
      component:
        name: frontend

Environment-Portable Design

All code must work in: local dev, Docker Compose, AND App Platform.

PrincipleImplementation
Bind to $PORTprocess.env.PORT || 3000
Public servicesListed in ingress.rules
Internal servicesNot in ingress, use ${name.PRIVATE_URL}
Never hardcodeUse env vars with defaults
// Portable port binding
const port = process.env.PORT || 3000
server.listen({ port, host: '0.0.0.0' })

Database Quick Reference

EngineSlugDev DB?Notes
PostgreSQLPGYesRecommended
ValkeyVALKEYYesUse instead of Redis
MySQLMYSQLNoManaged only
MongoDBMONGODBNoManaged only

Full guide: See database-configuration.md


Environment Variables Quick Reference

ScopeUse Case
RUN_TIMESecrets, DB URLs
BUILD_TIMEPublic API URLs, feature flags
RUN_AND_BUILD_TIMENPM tokens, shared config
PlaceholderResolves To
${db.DATABASE_URL}Database connection string
${service.PRIVATE_URL}Internal service URL
${service.PUBLIC_URL}Public service URL

Full guide: See environment-variables.md


Ingress (Routing)

ingress:
  rules:
    - match:
        path:
          prefix: /api
      component:
        name: api
    - match:
        path:
          prefix: /
      component:
        name: frontend

For advanced routing: See networking skill


Validation

doctl apps spec validate .do/app.yaml
doctl apps spec validate .do/deploy.template.yaml
ErrorFix
invalid component nameUse lowercase, hyphens only
unknown instance sizeCheck instance-sizes.yaml
invalid database referenceVerify database name matches
routes is deprecatedUse ingress.rules

Instance Sizes

SlugCPURAMPriceUse Case
apps-s-1vcpu-0.5gb1 shared512 MiB$5/moWorkers, jobs
apps-s-1vcpu-1gb1 shared1 GiB$12/moDefault
apps-d-1vcpu-2gb1 dedicated2 GiB$39/moProduction

Full list: See shared/instance-sizes.yaml


Reference Files


Shared References


Integration with Other Skills

  • → deployment: Deploy the generated app spec via GitHub Actions
  • → devcontainers: Create local dev environment with prod parity
  • → postgres: Advanced database configuration
  • → networking: Custom domains, CORS, VPC
  • → migration: Convert from other platforms

Score

Total Score

75/100

Based on repository quality metrics

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

+10
説明文

100文字以上の説明がある

+10
人気

GitHub Stars 100以上

0/15
最近の活動

1ヶ月以内に更新

+10
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

+5

Reviews

💬

Reviews coming soon