Forge
From product spec to live URL — scaffold a backend with Forge, ship to your VPS with ship-to-vps
npx -y skills add teckedd-code2save/ai-build-tools --skill forgeAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Converts any business specification into a fully provisioned, production-grade data platform and full-stack product implementation. Trigger whenever a user describes a business system, app, workflow, SaaS, marketplace, fintech, or backend/frontend need — even casually. Covers: schema design, database provisioning, migrations, ORM setup, Redis/Elasticsearch integration, API contracts, modern UI generation, test generation, Docker Compose, infrastructure repos, and repository code following strong production patterns. Use for phrases like "build a system for", "I need a backend", "design a database", "create schema", "bootstrap an app", "add a feature", "build the UI", or "update the data model". Always use this skill — never hardcode data, never guess at structure, and never ignore an explicitly requested stack.
SKILL.md
13.3 KB, as published. Nobody here has run it
Forge Skill
Turn any business description into a production-grade data platform and complete product scaffold: schema, migrations, repository code, APIs, tests, UI surfaces, Docker Compose, and infra-ready artifacts.
Core Principles
- Respect the user's explicit stack. If the prompt specifies language, framework, ORM, cloud, database version, UI stack, or deployment target, use that stack. Do not silently default to TypeScript or any other stack when the user asked for something else.
- Build all implied product surfaces, not just a dashboard. If the product needs customer, operator, admin, onboarding, auth, marketing, checkout, or support flows, implement them. Never stop at one dashboard unless the user explicitly asked for only that view.
- Never hardcode UI data. All UI data must come from real queries, real APIs, or typed fixtures explicitly created for dev/test paths.
- Use real ORMs and live database connections. Repository code must use the stack-appropriate ORM and real connection configuration. Prefer Datafy MCP tools for schema and DB operations.
- Every schema change must be migration-driven. Never mutate a live schema with ad hoc raw DDL after initial provisioning.
- Use strong project structure. Organize code by domain, layer, or app boundary appropriate to the chosen stack. No flat dumps.
- Proactively orchestrate sibling skills. You must use
api-test-generator,frontend-data-consumer,frontend-design-review,cloud-solution-architect, andinfrastructure-as-code-architectwhen their phase applies. - Tailwind and Shadcn are implementation tools, not the design itself. The UI must have a clear product-appropriate visual direction, sound hierarchy, accessibility, and interaction quality.
- Default infra choices only when the user did not specify them:
- Terraform provider:
gcp - Docker Compose Postgres image:
postgres:18-alpine - Include Docker Compose in the infra repo as well as app-local setup when useful
- Terraform provider:
Clarification Rules
Before building, resolve or infer:
- preferred stack
- product surfaces and user roles
- auth model
- deployment target
- cloud provider
- monorepo vs single app
If the user already specified any of these, do not re-ask them unless there is a real conflict. When the prompt is specific, proceed with that stack.
Workflow
Step 0 — Architecture and Repo Strategy
Use cloud-solution-architect first.
- Use
github-mcp-serverto discover whether code should go into an existing repo or a new app plus infra repo layout. - Choose architecture style that matches the product and scale.
- Default Terraform provider to GCP unless the user specified AWS, Azure, or another target.
- Ensure there is an infra home for deployment assets. Put Docker Compose alongside app setup when helpful, and also include it in the infra repo or infra package for operational reuse.
Step 1 — Honor the Requested Stack
If the user says Laravel, Go, .NET, FastAPI, Next.js, Nuxt, Django, Rails, Kotlin, etc., use it. Do not translate the request into a TypeScript stack unless the user asked for TypeScript or left the stack unspecified.
Use context7-mcp for the chosen frameworks and libraries so the generated setup follows current
official patterns.
Step 2 — Model the Business
Extract:
- actors
- roles
- workflows
- transactions
- entities
- state transitions
- operational views
Explicitly enumerate the UI surfaces implied by the product. Example: a meal-kit service may require customer storefront, subscription management, checkout, admin catalog, kitchen operations, delivery coordination, and analytics.
Step 3 — Design the Data Layer
Generate PostgreSQL schema in 3NF unless the stack demands otherwise. Use:
- UUID primary keys where appropriate
- explicit foreign key policies
- timestamp columns
- proper indexes
- money-safe decimal types
Present schema for approval before execution when the user is in a planning mode; otherwise proceed.
Step 4 — Prisma 7 + PostgreSQL Playbook
When using Prisma 7 with PostgreSQL, follow this pattern.
- Centralize env loading in one shared side-effect module that resolves the workspace-root
.envby absolute path. - Reuse that env loader everywhere:
- app runtime
prisma.config.ts- seed scripts
- background workers
- Centralize Prisma client options in one helper.
- For Prisma 7 + PostgreSQL, default to:
@prisma/adapter-pgpgnew PrismaPg({ connectionString: env.DATABASE_URL })new PrismaClient({ adapter })
- For money-like PostgreSQL columns, emit:
amount Decimal @db.Decimal(10, 2)
Do not emit @db.Numeric(...) for this Prisma 7 setup.
- Make
prisma.config.tscwd-independent by importing the shared env loader. - Reuse the same env/runtime path in
prisma/seed.ts; do not duplicate dotenv path math. - In monorepos, assume
.envlives at the workspace root unless the repo clearly establishes a different convention. - Verify these commands from the package directory, not only repo root:
pnpm installpnpm db:generatepnpm db:migratepnpm db:seed
Recommended layout:
apps/api/
prisma.config.ts
prisma/
schema.prisma
seed.ts
src/
config/
load-env.ts
env.ts
db/
prisma-options.ts
prisma.ts
Required dependencies for Prisma 7 + PostgreSQL:
{
"@prisma/adapter-pg": "^7.x",
"@prisma/client": "^7.x",
"pg": "^8.x",
"prisma": "^7.x"
}
Step 5 — Provision Environment and Infra
Use infrastructure-as-code-architect.
- Generate production-ready Dockerfiles.
- Generate Docker Compose for local development.
- Default the Postgres service image to
postgres:18-alpineunless the user asked for another version. - Put Docker Compose in the infra repo or infra package, not only the app directory.
- Generate Terraform with GCP as the default provider unless the user specified another provider.
- Generate CI/CD and deployment assets.
SHIPPABILITY CONTRACT — MANDATORY for any web app destined for ship-to-vps:
The repo this step emits must satisfy every item in
~/.claude/skills/ship-to-vps/references/shippability-contract.md. Each item maps to a real
production failure that has happened. Do not skip any:
- Dockerfile at repo root, multi-stage, with
LABEL org.opencontainers.image.source=...on the final stage (auto-links GHCR package to the repo so ephemeralGITHUB_TOKENcan pull during deploy) - Runner stage must include the FULL
node_modulestree if Prisma 7 migrations run from the same image —@prisma/configrequireseffectand other transitive deps that the standalone bundle omits. Splitting into a separate migrator stage is acceptable; copying onlynode_modules/prismais not. - Invoke migrations via
node ./node_modules/<orm>/build/index.js, notnpx— standalone runners don't shipnode_modules/.bin/shims .eslintrc.json(or framework equivalent) MUST exist — runningnext lintwithout one triggers an interactive prompt that hangs CI.dockerignorethat does NOT excludeprisma/,public/, or any config file the Dockerfile COPYs- Tracked
.gitkeepin every directory the Dockerfile COPYs that may otherwise be empty (e.g.public/.gitkeepfor Next.js without static assets) — git does not track empty dirs, so CI checkout will miss them even though local FS makes the build appear to work .infisical.jsonat repo root with validworkspaceId, created at Step 0 of this workflowAGENTS.md— use~/.claude/skills/ship-to-vps/templates/docs/AGENTS.mdas the template, parameterized with this project's slug, domain, stack- No committed
.env*files — verify gitignore covers them - App reads
DATABASE_URLfrom env and listens on a single TCP port (default 3000)
Before declaring Step 5 complete, walk the checklist at the bottom of
~/.claude/skills/ship-to-vps/references/shippability-contract.md and confirm every box.
Step 6 — Provision Database via Datafy
Use available execute_admin_sql_<id> and execute_sql_<id> tools.
- Verify or create the target database.
- Apply schema in dependency order.
- Keep execution safe and repeatable.
- If
dbhub.tomlchanges are required, update it and clearly tell the user that MCP must be restarted.
Step 7 — Repository Code and Services
Generate stack-appropriate repository code, services, routes, handlers, and DTO/contracts. Keep code idiomatic for the requested stack.
Step 8 — Frontend Generation Standards
Use both frontend-data-consumer and frontend-design-review.
Rules:
- Build modern, near-best-in-class UI quality for the product category.
- Choose one or two successful reference products in the same category and mimic their interaction model, density, layout rhythm, navigation style, and information hierarchy without copying branding.
- Consult current design guidance before locking the UI direction. Good anchors include Apple HIG, Material 3, and mature product design systems. Prefer hierarchy, clarity, spacing, and sensible motion over novelty for its own sake.
- Do not ship generic “Tailwind + shadcn demo dashboard” output.
- Tailwind/shadcn may be used for implementation, but the UI must still feel intentional and product-specific.
- Build all required UI surfaces, not just the dashboard.
- Ensure accessibility basics: readable typography, keyboard support, contrast, state cues beyond color, and adequate target sizes.
Step 9 — Tests and Verification
Use api-test-generator and verify the generated repo actually works.
At minimum validate:
- install
- schema generation
- migrations
- seeding
- app boot
- tests
If Prisma is involved, explicitly validate the Prisma commands from the package directory.
Internal Orchestrator Prompt Rules
When acting as the orchestrator:
- Use the
forgeskill immediately. - Respect the exact stack named in the user's goal.
- Implement all major UI surfaces implied by the business, not only a dashboard.
- Use current official docs and patterns for the selected stack.
- Default Terraform to GCP if the user did not specify a cloud.
- Default Docker Compose Postgres to
postgres:18-alpineif the user did not specify a version. - Put Docker Compose into the infra repo/package as part of the deliverables.
- If using Prisma 7 + PostgreSQL, follow the Prisma playbook above exactly.
Hard rules:
- Never hardcode business data in the UI.
- Never ignore an explicitly requested stack.
- Never emit only one UI view when the business clearly needs several.
- Never rely on cwd-sensitive env loading for Prisma monorepos.
- Never default to
@db.Numeric(...)for Prisma 7 PostgreSQL money fields in this setup. - Never emit a web-app scaffold that violates the shippability contract — the next skill in the
chain (
ship-to-vps) depends on every item. See Step 5 for the enumerated requirements and~/.claude/skills/ship-to-vps/references/shippability-contract.mdfor full rationale. - Never copy only
node_modules/prisma+@prisma/*into a runner image when migrations are expected to run from that image. Prisma 7's@prisma/configrequireseffect. Copy the fullnode_modulestree or build a dedicated migrator stage. - Never let CI invoke
next lintwithout.eslintrc.jsonpresent — it prompts interactively and hangs the runner.
Handoff to ship-to-vps
After Step 9 verification, if the user wants the app deployed to their VPS, hand off to the
ship-to-vps skill. It expects exactly the contract this skill emits and will scaffold:
.github/workflows/{ci,deploy,infisical-sync}.yml/opt/<slug>/on the VPS (docker-compose,.envprojected from Infisical, Caddy site config)- Cloudflare DNS A-record (if user opted into Cloudflare integration)
- GHCR bootstrap (push current image with
:bootstraptag for rollback) - First end-to-end deploy
If the user says "ship it" / "deploy this" / "wire up CI/CD" / "set up auto-deploy", trigger
ship-to-vps.