workflow-ship-faster
Ship Faster end-to-end workflow for small web apps (default: Next.js 16.1.1): idea/prototype → foundation gate → design-system.md → lightweight guardrails + docs → feature iteration → optional Supabase + Stripe → optional GitHub + Vercel deploy → optional AI-era SEO (sitemap/robots/llms.txt). Resumable, artifact-first under runs/ship-faster/ (or OpenSpec changes/). Trigger: ship/launch/deploy/production-ready MVP.
Packaged view
This page reorganizes the original catalog entry around fit, installability, and workflow context first. The original raw source lives below.
Install command
npx @skill-hub/cli install heyvhuang-ship-faster-workflow-ship-faster
Repository
Skill path: skills/workflow-ship-faster
Ship Faster end-to-end workflow for small web apps (default: Next.js 16.1.1): idea/prototype → foundation gate → design-system.md → lightweight guardrails + docs → feature iteration → optional Supabase + Stripe → optional GitHub + Vercel deploy → optional AI-era SEO (sitemap/robots/llms.txt). Resumable, artifact-first under runs/ship-faster/ (or OpenSpec changes/). Trigger: ship/launch/deploy/production-ready MVP.
Open repositoryBest for
Primary workflow: Grow & Distribute.
Technical facets: Full Stack, Frontend, DevOps, Data / AI, Tech Writer, Designer.
Target audience: everyone.
License: Unknown.
Original source
Catalog source: SkillHub Club.
Repository owner: Heyvhuang.
This is still a mirrored public skill entry. Review the repository before installing into production workflows.
What it helps with
- Install workflow-ship-faster into Claude Code, Codex CLI, Gemini CLI, or OpenCode workflows
- Review https://github.com/Heyvhuang/ship-faster before adding workflow-ship-faster to shared team environments
- Use workflow-ship-faster for development workflows
Works across
Favorites: 0.
Sub-skills: 0.
Aggregator: No.
Original source / Raw SKILL.md
---
name: workflow-ship-faster
description: "Ship Faster end-to-end workflow for small web apps (default: Next.js 16.1.1): idea/prototype → foundation gate → design-system.md → lightweight guardrails + docs → feature iteration → optional Supabase + Stripe → optional GitHub + Vercel deploy → optional AI-era SEO (sitemap/robots/llms.txt). Resumable, artifact-first under runs/ship-faster/ (or OpenSpec changes/). Trigger: ship/launch/deploy/production-ready MVP."
---
# Workflow: Ship Faster (Next.js 16.1.1)
The goal of this chain is: **Ship an idea or small prototype to production-ready state in the shortest time**, while maintaining iteration speed afterward.
## When to use
Use this workflow when the user wants an end-to-end chain like:
- “ship this MVP”, “make it production-ready”, “launch/deploy this project”
- “take this prototype and turn it into a real app”
- “set up the foundation + UI system + deployment”
## Core principles (non-negotiable)
- **Pass paths only, not content**: agents/sub-agents only pass `..._path`.
- **Files are first-class citizens**: Every step must persist artifacts; failures can be retried; replayable.
- **Confirmation points**: Any "high-risk/high-effort/side-effect" action must write a plan first and wait for confirmation.
- **Plans are checklists**: progress is tracked in `tasks.md` via `- [ ]` → `- [x]` (not in chat).
- **Progressive disclosure**: Only open step files in this skill directory (`foundation.md`, `deploy-vercel.md`, etc.) when needed—avoid loading all details at once.
- **Hooks doctor (required check; non-blocking)**: If running under Claude Code and you want the evolution loop active, run `tool-hooks-doctor` once at the start of the session; if hooks are missing, offer to install project-level hooks (continue either way).
## Inputs / outputs (paths only)
Inputs (paths only):
- `repo_root`: project root (default `"."`)
- Optional: `run_dir` (active run directory) if the user already has one
Outputs (artifacts, written under `run_dir/`):
- Required: `proposal.md`, `tasks.md`, `context.json`
- Optional: `design.md`, `evidence/`, `logs/`
Canonical contract (backends, templates, read order, auto-archive):
- [references/artifact-contract.md](references/artifact-contract.md)
- Reference index: [references/README.md](references/README.md)
## Step modules (open only when you hit that step)
- Foundation: [foundation.md](foundation.md)
- Guardrails: [guardrails.md](guardrails.md)
- Trace cleanup: [cleanup-traces.md](cleanup-traces.md)
- Docs baseline: [docs-baseline.md](docs-baseline.md)
- Supabase integration: [supabase-integration.md](supabase-integration.md)
- Stripe integration: [stripe-integration.md](stripe-integration.md)
- Deploy (GitHub + Vercel): [deploy-vercel.md](deploy-vercel.md)
- AI-era SEO (Next.js): [ai-seo-nextjs.md](ai-seo-nextjs.md)
## Process (Default Route)
### 0) Initialize Run (Required)
1. Resolve/create `run_dir/` (see the deterministic backend rules in [references/artifact-contract.md](references/artifact-contract.md)).
2. Ensure core artifacts exist (create if missing; merge/append if already present):
- `proposal.md`, `tasks.md`, `context.json`
3. In `tasks.md`, ensure:
- a `status: active|blocked|done` field near the top
- a short **Next action** section (1–3 items)
- an **Approvals** section (empty is fine until needed)
4. Only create `evidence/` and `logs/` when you actually have large outputs to store.
### 0.2) Scope Confirmation (Required)
Problem this solves: a run summary that marks core steps as “skipped” without the user ever choosing to skip them is misleading and hard to audit.
Ask the user to select a scope **before** executing steps beyond build checks:
- **A) full (default)**: Foundation → Design system → UI/UX → Guardrails → Docs → Feature iteration → Deploy
- **B) deploy-only**: Foundation (build + sanity) → Deploy only (no UI work, no guardrails/docs polish)
- **C) design-only**: Design system + UI/UX plan only (no code changes)
- **D) feature-only**: One feature iteration (plan + implementation), skip deploy
Rules:
- Persist the chosen scope to `context.json` (add/update a `scope` field).
- In `tasks.md`, do **not** mark a default step as “skipped” unless the user explicitly requested skipping it.
- Prefer: `disabled (scope=...)` with a short reason under a “Scope / Disabled steps” section
- Any destructive action (e.g., **force push** overwriting an existing repo) is a high-risk side effect:
- Write an executable approval item under `tasks.md` first
- Wait for explicit user confirmation before executing
### 0.25) Kickoff Clarification (Brainstorm-lite) (Recommended; required if goal is vague)
Problem this solves: people jump straight into “implement a feature” and end up with a very basic MVP that’s hard to demo.
Run this step if **any** of these are true:
- `proposal.md` is missing clear **acceptance criteria** and **non-goals**
- The user request is “build something like X” / “make a prototype” without specifying the core loop
- The user explicitly wants a “demo-ready” prototype (animation, wow factor, shareable)
How:
- Call `workflow-brainstorm` using the **same `repo_root` + this `run_dir`**.
- Follow the one-question-at-a-time rule and converge on:
- the one core loop (1 sentence)
- acceptance criteria (3–5 bullets)
- non-goals (1–3 bullets)
- constraints (timeline / risk preference)
- a “demo moment” direction (see step 0.3)
- Persist the confirmed spec to:
- `evidence/YYYY-MM-DD-kickoff-design.md`
- Then update (merge, don’t overwrite) these inputs:
- `proposal.md`
- `context.json` (ensure `need_database/need_billing/need_deploy/need_seo` are explicitly set)
### 0.3) Demo Moment First (Recommended for prototypes)
Principle: a prototype that **feels real** needs at least one “demo moment” (tastefully showy, not gimmicky).
Examples of “demo moment” (pick 1, keep it small):
- A hero section with a **live interactive preview** (fake data is fine) + smooth, purposeful motion
- A delightful micro-interaction: command palette, draggable cards, timeline scrubber, etc.
- A “before/after” transformation animation (input → output) that makes the core loop obvious
Workflow:
1. Write a small feature spec file (if it doesn’t exist):
- `evidence/feature-00-demo-moment.md`
- Include `mode: plan-only`, `feature_slug: demo-moment`, and `quality_bar: demo-ready`
2. Call `workflow-feature-shipper` to generate the plan **only** (no implementation yet).
3. Defer actual UI implementation until after Step 2 (design-system.md exists), so the demo moment follows the chosen design system.
### 0.5) Dynamic Branch Decision (Required)
Dynamically adjust execution order based on `context.json` content:
- **Database integration**: Only execute when `context.json` has `"need_database": true`
- **Payment integration**: Only execute when `context.json` has `"need_billing": true` or `"need_stripe": true`
- **Auth**: Only execute when `context.json` has `"need_auth": true` or `"auth": true`
- **Deployment**: Only execute when `context.json` has `"need_deploy": true` or user explicitly requests deployment
- **SEO**: Only execute when `context.json` has `"need_seo": true` or project is already live
Before starting each optional step:
- Check `context.json` (and your chosen `scope`) to decide whether the step applies
- If skipped, write a 1-line reason into `tasks.md` (so resume/audit doesn’t require chat history)
### 1) Foundation: Next.js Foundation (Default Required)
Open and follow: [foundation.md](foundation.md).
Artifact requirements (minimum):
- `evidence/foundation.md` (current state + risk assessment + chosen route)
- `tasks.md`: add a **Foundation** checklist section (tasks + verification commands)
- If upgrade/migration needed with significant changes: add an **Approval** item to `tasks.md` and wait for confirmation
**Branch rules (important)**:
- If conclusion is **keep-current-stack** (e.g., Vite static site), don't force continuing "Next.js-specific steps".
- Only continue steps that still apply to current stack: style (2), guardrails (3, adapted for current stack), docs (4), deploy (8 optional), SEO (9 optional)
- If DB/payment integration still needed: First ask user "want to migrate to Next.js?", or add integration step for that stack (not in this chain's default scope)
### 2) Style Specification (Default Required)
Call `tool-design-style-selector`: Scan project intent and persist `design-system.md`.
Confirmation point: After user confirms style, deploy `design-system.md`, and enter **2.5 UI/UX Implementation** (default required; if user explicitly skips, log reason).
### 2.5) UI/UX Implementation (Default Required)
Goal: Make `design-system.md` actually reflected in the interface, not "wrote spec but UI unchanged".
Recommended approach: Treat "redo UI/UX per design-system.md" as an independent feature and hand to `workflow-feature-shipper`:
- Input: `design-system.md` (as sole design constraint) + current UI page list (from code scan)
- Output: `evidence/features/<feature_slug>-plan.md` (scope/acceptance criteria/non-goals/risks/rollback) + code changes
Default enrichment (when installed):
- If `tool-ui-ux-pro-max` is installed, use it to enrich the UI/UX plan with concrete palette/typography/UX guardrails, and use its pre-delivery checklist as acceptance criteria.
- Only skip `tool-ui-ux-pro-max` enrichment if the user explicitly asks to skip it (e.g., “don’t over-design / keep it simple”), and log the reason.
For large-scale refactoring: add an **Approval** item to `tasks.md` first and wait for user confirmation before implementing.
### 3) Code Standards (Lightweight Required)
Open and follow: [guardrails.md](guardrails.md).
Artifact: `tasks.md` (Guardrails checklist section)
### 3.5) Trace Cleanup (De-branding & Source Hygiene) (Required if project was copied)
Problem this solves: many starter projects imported from Google AI Studio / v0 / Lovable ship with vendor branding, broken remnants (like `importmap`), and misleading README instructions.
Open and follow: [cleanup-traces.md](cleanup-traces.md).
Artifacts:
- `evidence/trace-scan.md`
- `tasks.md` (Trace cleanup checklist section)
### 4) Documentation Standards (Lightweight Required)
Open and follow: [docs-baseline.md](docs-baseline.md).
Artifact: `tasks.md` (Docs checklist section, plus project README update)
### 5) Core Feature Development (Iterative Loop)
Call `workflow-feature-shipper`:
- Each feature first produces `evidence/features/<feature_slug>-plan.md` (with acceptance criteria/non-goals)
- Default split into PR-able small steps
- After each batch (or before merge), recommend calling `review-quality` for a conclusive review + verdict
- `review-quality` is the single entry point and will auto-triage: if React/Next.js performance risk is detected, it will also run `review-react-best-practices` (CRITICAL rules first)
Auth note (optional): if a feature includes login/session/permissions and `tool-better-auth` is installed, call it before implementation to lock down session strategy, redirects, cookies/CSRF, and middleware boundaries. Persist:
- `evidence/auth-plan.md`
- `evidence/auth-summary.md`
### 6) Database Integration (Optional)
**Execution condition**: `context.json` has `"need_database": true` or `"database": "supabase"`
Open and follow: [supabase-integration.md](supabase-integration.md).
### 7) Payment Integration (Optional)
**Execution condition**: `context.json` has `"need_billing": true` or `"need_stripe": true` or `"payment": true`
Open and follow: [stripe-integration.md](stripe-integration.md).
### 8) GitHub + Vercel Deployment (Optional but Recommended)
**Execution condition**: `context.json` has `"need_deploy": true` or `"deploy_target"` field exists and non-empty
Open and follow: [deploy-vercel.md](deploy-vercel.md).
### 9) AI-Era SEO (Optional but Recommended)
**Execution condition**: `context.json` has `"need_seo": true` or `"seo": true`, or step 8 completed successfully (already deployed)
Open and follow: [ai-seo-nextjs.md](ai-seo-nextjs.md).
## Final Delivery
Write to: `final.md` (in the run root), at minimum include:
- Current project status (can run locally, can build, is deployed)
- Completed steps and artifact paths
- Next steps (prioritized by value)
And wrap up:
- Update `tasks.md` `status` to `done`, and fill the **Delivery summary**
- Run auto-archive after each batch (and at the end):
- `python3 ~/.claude/skills/workflow-ship-faster/scripts/auto_archive.py --run-dir "<run_dir>"`
- If you want a clean workspace (without auto-archive): move `active/<run_id>/` → `archive/YYYY-MM-DD-<run_id>/`
- Do a `skill-evolution` **Evolution checkpoint** (3 questions); if user chooses "want to optimize", run `skill-improver` based on this `run_dir` to produce minimal patch suggestions
---
## Referenced Files
> The following files are referenced in this skill and included for context.
### references/artifact-contract.md
```markdown
# Artifact Contract (runs/ + OpenSpec)
This document defines the **artifact-first, resumable run directory contract** used by `workflow-ship-faster`.
> Design goal: keep the workflow resumable and auditable **without requiring chat history**.
## Storage backends
This workflow supports two storage backends.
### Backend A (default): `runs/`
- Active: `runs/ship-faster/active/<run_id>/`
- Archive (after completion): `runs/ship-faster/archive/YYYY-MM-DD-<run_id>/`
### Backend B (OpenSpec-compatible): `openspec/`
If the repo is OpenSpec-initialized (detect via `openspec/project.md`), store artifacts as an OpenSpec change:
- Active: `openspec/changes/<change-id>/`
- Archive (after completion): `openspec/changes/archive/YYYY-MM-DD-<change-id>/`
Notes:
- In OpenSpec mode, `run_id` is the `change-id` (kebab-case, verb-led).
- If `openspec` CLI is available, prefer scaffolding the change via `openspec new change <change-id>`.
## Backend selection (must be deterministic)
Resolve `run_dir` using this priority order:
1) If `context.json` includes `"artifact_store": "runs"` or `"openspec"`, follow it.
2) Else if `openspec/project.md` exists in `repo_root`, use OpenSpec backend.
3) Else use the default `runs/` backend.
From this point on, treat `run_dir` as the resolved active directory (`runs/.../active/...` or `openspec/changes/...`).
## Required files (small + resumable)
Each run directory **must** contain:
- `proposal.md`: why/what/scope/constraints (stable context)
- `tasks.md`: executable checklist (`- [ ]` → `- [x]`) + approvals (**resume here**)
- `context.json`: machine-readable switches + repo_root + risk preference
Recommended minimal `context.json` (extend as needed):
```json
{
"repo_root": "",
"scope": "full",
"artifact_store": "auto",
"need_database": false,
"need_billing": false,
"need_deploy": false,
"need_seo": false
}
```
Optional (only create if needed):
- `design.md`: technical decisions (only if ambiguity/risk warrants it)
- `evidence/`: large outputs / scans / screenshots (paths only in chat)
- `logs/`: optional debug logs (`events.jsonl`, `state.json`)
## Templates (minimum viable)
### `proposal.md`
```md
# Proposal: <title>
- run_id: <run_id>
- status: active|blocked|done
- created_at: <ISO8601>
- repo_root: <path>
## Why
- <1-3 bullets>
## What changes
- <1-5 bullets>
## Acceptance criteria
- <3-7 bullets>
## Non-goals
- <1-3 bullets>
## Links
- tasks: tasks.md
- evidence: evidence/ (optional)
```
### `tasks.md`
```md
# Tasks: <title>
- run_id: <run_id>
- status: active|blocked|done
- last_updated: <ISO8601>
## Checklist
- [ ] T1: <small, verifiable>
- [ ] T2: <small, verifiable>
- [ ] T3: <small, verifiable>
## Verification (required for auto-archive)
- [ ] V1: Verification completed (commands + outcomes recorded under Evidence index)
## Approvals (only if needed)
- (none)
## Evidence index (paths only)
- evidence/<...>
## Delivery summary (fill when done)
- <what shipped>
- <how to verify>
- <next steps>
```
## Default read order (resume)
Unless the user points you at a specific file, read:
1) `tasks.md` (resume + progress)
2) `proposal.md` (context)
3) `context.json` (switches)
4) `design.md` (if exists)
5) Only then: `evidence/` / `logs/`
## Read/write hygiene (mandatory)
Layer info to avoid "output piling up in chat → context window explosion":
- **Raw evidence (traceable, not loaded by default)**: long command output, scans, screenshots → write to `evidence/` or `logs/`
- **Actionable state (default must-read)**: keep the checklist + the current truth in `tasks.md`
Constraints:
- Don’t paste large chunks into chat; write file(s) and return **paths only**
- Any info needed to resume must be written into `tasks.md`, not only in chat
- When tracing details: use `rg` inside `logs/` or search under `evidence/` first
## Archiving and retention (recommended)
If runs accumulate, default strategy is "read less + archivable", not "keep everything visible forever":
- Completed runs (`status: done`) should be **read-only**, avoid polluting retrospectives
- After completion: move `active/<run_id>/` → `archive/YYYY-MM-DD-<run_id>/`
## Auto-archive (fully automatic)
Ship Faster supports **fully automatic archiving** when a run is complete.
Archiving eligibility (must all be true):
- `tasks.md` contains a verification section (`## Verification` or `## Testing`) with at least one checkbox item
- **All** checkbox items in `tasks.md` are checked (`- [x]`)
Automation rule (mandatory):
- After every execution batch (or any time you update checkboxes), run:
- `python3 ~/.claude/skills/workflow-ship-faster/scripts/auto_archive.py --run-dir "<run_dir>"`
- The script is deterministic:
- If eligible: it archives the run directory immediately (no confirmation)
- If not eligible: it prints a short reason and does nothing
## OpenSpec alignment (recommended)
Separate "stable project truth" from "single change run" (avoid stuffing everything into run):
- **Source of truth (project-level docs)**: `design-system.md`, `README.md`, `docs/`, architecture/constraint docs
- **Change folder (this run)**: `run_dir/` (only this run’s proposal/tasks/evidence/logs)
Implementation rule:
- This run folder only stores **process + evidence + decisions**; anything that should live long-term gets merged back to project docs
```
### references/README.md
```markdown
# References (workflow-ship-faster)
This folder contains **deep docs** intended for **progressive disclosure**.
Start from `../SKILL.md` and only open these when you actually need the extra detail (to keep context small and execution deterministic).
## Index
| Doc | When to open | What it covers |
|---|---|---|
| `artifact-contract.md` | You need to create/resume a run, or confirm how archiving works | Storage backend selection (`runs/` vs OpenSpec), required artifacts (`proposal.md`, `tasks.md`, `context.json`), templates, resume read order, auto-archive rules |
## Editing rule (keep the workflow “Ship Faster standard”)
- Keep `SKILL.md` as the **routing + safety + I/O contract** entry point.
- Put “long-form” explanations, templates, and edge-case detail here under `references/`.
```
### foundation.md
```markdown
# Step 1 — Next.js Foundation (target: 16.1.1)
Goal: Get the project to a sustainable Next.js baseline (preferably **16.1.1**) with minimal risk.
## Input (Pass Paths Only)
- `repo_root`: Project root directory path (doesn't exist means "new project")
- `run_dir`: Resolved run directory (see `workflow-ship-faster` → **Artifact Storage**)
- `target_next_version`: Default `16.1.1`
## Output (Persisted)
- `evidence/foundation.md`
- `tasks.md` (Foundation checklist section: tasks + verification)
## Plan (Checklist Required)
Before making changes:
- Add a **Foundation** checklist section to `tasks.md` (checkboxes + verification)
- If the plan includes risky migrations/upgrades, add an **Approval** item under `tasks.md` and wait for explicit user confirmation
## 0) Stack Assessment Gate (Decide Whether to Migrate First)
> Purpose of this step: Avoid "migrating to Next.js for the sake of Next.js".
> Especially: **Vite/static sites/pure display pages** often aren't worth forcing migration for Ship Faster.
### 0.1 Quick Stack Identification (Required When Repo Exists)
Use minimum evidence set to determine current stack (don't guess):
- `package.json` dependencies/scripts: `next`, `vite`, `react-scripts`, `astro`, `nuxt`, `sveltekit`...
- Framework config exists: `next.config.*`, `vite.config.*`, `astro.config.*`, `nuxt.config.*`
- Routing/page structure: `app/` `pages/` (Next), `src/pages` (common in Vite/SPA), `public/` (static assets)
- Deploy/output: `vercel.json`, `netlify.toml`, build scripts (build output directory)
Write conclusion to `evidence/foundation.md`:
- Current stack: <detected>
- Evidence: <files/keys>
### 0.2 Ask One Question: Need to Migrate to Next.js?
When repo is **not Next.js**, ask user (multiple choice):
> Which situation best describes this project?
> 1) Pure static site/marketing page/display page (no SSR/API/auth/DB needed) → **Don't migrate**
> 2) Simple now, but soon becoming "full Web App" (auth, DB, dashboard, SEO, SSR/ISR) → **Recommend migrate**
> 3) Already mature engineering (lots of custom build/multi-package/complex routing) → **Don't auto-migrate**, only provide migration plan
Decision persisted (write to top of `evidence/foundation.md`, one clear line):
- Decision: `keep-current-stack` | `migrate-to-nextjs` | `plan-only-no-auto-migrate`
> Rule: When user chooses 1), don't "migrate anyway". This isn't a bug, it's strategy.
## Decision Tree (Must Follow)
### A) New Project (idea → project)
- Goal: Fastest path to runnable Next.js app (can `dev`, can `build`)
- Constraint: Minimize modifications, get main chain running first
Recommendation: Use `create-next-app` to create, then pin `next` version to `16.1.1`.
### B) Already Next.js Project
1. Identify current version (from `package.json` or lockfile)
2. If already `16.1.1`: No upgrade needed, just record "already at target"
3. If not `16.1.1`: Evaluate "is project too large"
**Project too large (default don't upgrade)** signals (any one triggers stop first):
- Lots of custom build: Complex `next.config.*` (webpack rewrites, complex rewrites/headers)
- Multi-package/monorepo structure is complex and CI build time is long
- Obvious framework migration history or lots of unconverged experimental features
When "too large":
- In `tasks.md`, write a **plan-only** Foundation section (upgrade risks, phased approach, rollback strategy)
- Don't auto-upgrade, wait for user confirmation
When not "too large":
- Upgrade to `16.1.1` (and record changes and verification results)
### C) Not Next.js but Very Small Prototype (Can Migrate)
Only migrate when "very small and confirmed migrate (Decision = migrate-to-nextjs)":
- Very small: Single package, few dependencies, simple routing/build logic
- Migration is definitely high effort: add an **Approval** item to `tasks.md` and wait for confirmation
Recommended migration route:
1. Create new Next.js 16.1.1 baseline project
2. Migrate UI components/business logic (prioritize no UI style changes)
3. Gradually replace routing and data fetching patterns
### D) Not Next.js and Not Migrating (Keep Current Stack)
When Decision = `keep-current-stack`:
- Don't do Next.js migration/upgrade actions
- In `tasks.md`, write a short "keep current stack" plan (e.g.: design system → guardrails → docs → deploy)
- Clearly state: Subsequent "Supabase/Stripe integration" are **Next.js adapters**; if still need DB/payment integration, need to:
- Either migrate to Next.js first
- Or add integration step for that stack (e.g., `vite + supabase`), underlying DB operations still reuse `supabase` skill
## Verification (Required After Every Change)
- `npm/pnpm/yarn dev` can start
- `build` passes (if project has it configured)
- Key pages can open
Write verification results to `evidence/foundation.md`.
```
### guardrails.md
```markdown
# Step 3 — Guardrails (Lightweight Code Standards)
Goal: Establish a code standards baseline that "won't slow down development" with minimal cost.
## Scope (Boundaries)
**Applicable:**
- Next.js projects (prioritize `next lint`)
- Non-Next.js frontend projects (like Vite/React/Vue): Can also use this step to establish lint/format/typecheck baseline, but adapt scripts for current stack (e.g., `vite build`, `eslint .`, `tsc -p tsconfig.json`)
**Not applicable:**
- You want "deep governance/refactoring health check" → Use `review-quality` or `tool-ast-grep-rules`
## Input (Pass Paths Only)
- `repo_root`: Project root directory
- `run_dir`: Resolved run directory (see `workflow-ship-faster` → **Artifact Storage**)
## Output (Persisted)
- `tasks.md` (Guardrails checklist section: tasks + verification)
- Optional: `evidence/guardrails-current.md` (current state scan)
## Plan (Checklist Required)
Before changing repo config/scripts, add a Guardrails checklist section to `tasks.md`.
Record verification results (lint/typecheck/format) inside the same `tasks.md` section.
## Principles
- **Prefer reusing existing conventions**: If project already has eslint/prettier/biome etc., don't introduce a second set.
- **Run first, stricten later**: Default to no "heavy governance", avoid blocking ship.
## Minimum Viable Baseline
1. Ensure `package.json` has clear script entries (add as needed per project state, don't force reorganize):
- `dev`, `build`, `start`
- `lint` (Next.js projects prioritize `next lint`)
- `typecheck` (if using TS)
- `format` (if using Prettier/Biome)
2. If missing formatter: Choose one (Prettier or Biome), only minimal config.
3. If CI already exists: Just align scripts; if no CI: Recommend completing alongside deployment step.
## Delivery
- In `tasks.md`, list files and commands to be added/modified
- After changes complete, append verification results to the same `tasks.md` section
```
### cleanup-traces.md
```markdown
# Step 3.5 — Trace Cleanup (De-branding & Source Hygiene)
Goal: When a project is copied from external generators (e.g., Google AI Studio, v0, Lovable), remove **their branding + scaffolding remnants** so the repo looks first‑party and doesn’t ship broken artifacts.
## Input (Pass Paths Only)
- `repo_root`
- `run_dir`
## Output (Persisted)
- `evidence/trace-scan.md` (what was found; paths + short notes)
- `tasks.md` (Trace cleanup checklist section: tasks + verification + evidence paths)
- Updated project files (README, HTML entrypoints, gitignore, etc.)
## Plan (Checklist Required)
Before making any edits, add a Trace cleanup checklist section to `tasks.md`.
Minimum requirements inside the plan:
- `## Tasks` as `- [ ]` items, derived from the checklist below
- `## Verification` as `- [ ]` items (commands + expected outcome)
- Evidence links to `evidence/trace-scan.md` and any other scan output
## What to Clean (Checklist)
### 1) Branding Sweep (fast scan)
Search for obvious vendor fingerprints and record hits (path + a short reason) in `evidence/trace-scan.md`:
- “AI Studio” / “Run and deploy your AI Studio app”
- `ai.studio` links
- `v0` / `v0.dev`
- “Lovable” / `loveable.dev`
- Google asset/badge URLs (e.g. `user-attachments`, `gstatic`, `googleapis`)
- “Generated by …” banners or boilerplate sections in `README.md`
### 2) README Hygiene (required)
- Remove third-party banner images and “view in X” links.
- Remove generator instructions that don’t match the repo (e.g., “npm install + set GEMINI_API_KEY…” when the project doesn’t require it).
- Replace with a clean project README (or Ship Faster template README if this is a template):
- one-line value prop
- features
- quickstart
- env vars (key names only; omit if none required)
- scripts
- design system link (if present)
### 3) Runtime Artifact Cleanup
Remove or exclude common “copied project” leftovers:
- Delete: `.claude/`, `runs/`, `node_modules/`, `dist/`, `.DS_Store`, `.vercel/` (if present)
- Ensure `.gitignore` covers these artifacts
- Ensure no secrets are committed (`.env.local` must never be in git)
### 4) Frontend Entry Hygiene (avoid subtle runtime bugs)
Common issues from copied starters:
- **Vite + `importmap` conflict**: if the project uses Vite bundling, remove any `<script type="importmap">` from `index.html` to avoid React being loaded twice.
- **`/index.css` 404**: remove hardcoded `<link rel="stylesheet" href="/index.css">` unless the file truly exists and is served that way. Prefer `import './index.css'` from `index.tsx`.
### 5) Environment Variable Hygiene
Goal: remove *vendor-specific* env requirements from docs unless truly required.
- Prefer **no required env vars** for demos/templates (fallback to mock output when missing).
- If a key is optional, document it as optional and default to safe behavior.
- Avoid naming env vars after vendors in docs (`GEMINI_API_KEY`, etc.). Prefer a neutral `API_KEY` when needed.
### 6) Keep Required Attribution
Don’t remove legal/license attribution if it’s required by the source or dependencies. Clean “marketing + generator fingerprints”, not legal obligations.
## Verification (must record results)
Write the final verification results into the Trace cleanup section in `tasks.md`:
- No hits for branding strings you intentionally removed
- `git status` shows no secrets / no accidental large artifacts
- App runs locally (`pnpm dev` / `npm run dev`)
- No console/runtime errors indicating double React / broken hooks
```
### docs-baseline.md
```markdown
# Step 4 — Docs Baseline (Minimum Viable Documentation)
Goal: Not "write everything", but **let people quickly run it, deploy it, and iterate**.
## Input (Pass Paths Only)
- `repo_root`
- `run_dir`
## Output (Persisted)
- `tasks.md` (Docs checklist section: tasks + verification)
- Main artifact is: Project `README.md` (in repo)
## Plan (Checklist Required)
Before editing docs, add a Docs checklist section to `tasks.md`.
Mark tasks complete only after verifying docs match the actual scripts/env requirements.
## Minimum README Template (Recommended Contents)
- One-sentence project description (goal/users)
- Local startup (Node version, install, `dev`)
- Environment variables (list key names, don't write secret values)
- Database (if applicable: Supabase)
- Payments (if applicable: Stripe)
- Deployment (Vercel)
- Design system: Link to `design-system.md`
## Principles
- Don't introduce large docs directories unless actually needed
- Content should be "copy-paste runnable", avoid lengthy theory
```
### supabase-integration.md
```markdown
# Step 6 — Next.js + Supabase (Ship Faster Integration)
Goal: Complete "can read/write data + types available + security gates" via shortest path.
## Scope (Boundaries)
**Applicable:**
- Need to **integrate Supabase into Next.js project** (env / types / minimal read-write / migration strategy / traceable artifacts)
**Not applicable:**
- Just want to run a quick query, execute some SQL, check logs, do a one-time migration (use `supabase` skill directly—faster and cleaner)
**Dependencies:**
- This step executes all DB actions through `supabase` skill (schema detection / migration / types generation / logs etc.)
- DB security gates (write operation confirmation, DDL via migration, UPDATE/DELETE must have WHERE...) follow `supabase` skill rules
## Input (Pass Paths Only)
- `repo_root`
- `run_dir`
- `requirements.md` (optional): What tables/fields/queries are needed
## Output (Persisted)
- `tasks.md` (Supabase checklist section: tasks + verification)
- `evidence/schema.md` (runtime detected/confirmed schema)
- `evidence/supabase-summary.md`
## Plan (Checklist Required)
Before any schema/migration/integration edits, add a Supabase checklist section to `tasks.md`.
For any write SQL (INSERT/UPDATE/DELETE), add an **Approval** item to `tasks.md` as the explicit confirmation gate.
## Process
1. Use `supabase` skill to dynamically detect schema (don't rely on outdated schema docs)
2. DDL always goes through migration (`apply_migration`)
3. Write operations always go through confirmation point (write SQL to `evidence/sql.md` first, then execute)
4. Generate TypeScript types (`generate_typescript_types`) and persist in project (location per project conventions)
5. Integrate with Next.js:
- Only write env key names, don't write secret values to logs
- Implement minimal data access layer first (one read, one write), then expand
## Confirmation Points
- Any INSERT/UPDATE/DELETE: add an **Approval** item to `tasks.md` first, then request user confirmation
- Rows affected > 100: Mandatory second confirmation
```
### stripe-integration.md
```markdown
# Step 7 — Next.js + Stripe (Ship Faster Integration)
Default goal: **Get paid first**, then gradually evolve into a deeper billing system.
## Input (Pass Paths Only)
- `repo_root`
- `run_dir`
- `billing.md` (optional): What to sell (one-time/subscription), pricing, delivery method
## Output (Persisted)
- `tasks.md` (Stripe checklist section: tasks + verification)
- `evidence/stripe-actions.md` (human-auditable action log: intended Stripe operations)
- `evidence/stripe-summary.md`
- `evidence/receipt.json`
## Plan (Checklist Required)
Before executing Stripe operations or integrating code, add a Stripe checklist section to `tasks.md`.
Keep `evidence/stripe-actions.md` as the human-auditable action list (what you plan to do in Stripe + why), then mark items `- [x]` only after execution + verification.
## Two Routes
### Route A (Default, Fastest): Payment Links (Low-code/No-code)
1. Use `stripe` skill to create/reuse Product + Price
2. Use `stripe` skill to create Payment Link (one-time or subscription)
3. Minimal integration in Next.js:
- Provide a "Buy/Subscribe" button that redirects to Payment Link
- Success page/copy can be optimized later
Pros: Fast, fewer pitfalls; Cons: Limited deep customization capability.
### Route B (Optional): Code Integration (webhook + SDK)
Only take this route when you need:
- Strong consistency of order status in your own system
- Webhook-driven business provisioning/permission control
Requires:
- Stripe SDK
- Webhook endpoint
- Securely store webhook secret (only in env, not in logs)
## Mandatory Confirmation Points
- Any money/contract related action (refund, cancel subscription, update subscription, submit dispute evidence) must:
1) Write to `evidence/stripe-actions.md`
2) Add an **Approval** item to `tasks.md`
3) Wait for explicit user confirmation before executing
```
### deploy-vercel.md
```markdown
# Step 8 — GitHub + Vercel Deploy (Ship Faster)
Goal: Quickly turn "runs locally" into "has a URL online (preview/prod)".
## Input (Pass Paths Only)
- `repo_root`
- `run_dir`
- `env-vars.md` (optional): What environment variables are needed (key names only, no secrets)
## Output (Persisted)
- `tasks.md` (Deploy checklist section: tasks + verification)
- `evidence/deploy-summary.md` (URLs + config notes + verification)
## Plan (Checklist Required)
Before any GitHub/Vercel actions, add a Deploy checklist section to `tasks.md`.
If the plan includes secrets, repo settings, or production switches, also add an **Approval** item to `tasks.md` and wait for explicit user confirmation.
## Process
1. GitHub:
- If no repo yet: Create and push to GitHub (can use `gh`)
- Set up minimal CI: lint/typecheck/build (per existing project scripts)
2. Vercel:
- Create/connect project (dashboard or `vercel` CLI)
- Configure env vars (Supabase/Stripe etc.)
- Confirm preview auto-deploy
3. Verification:
- Preview URL is accessible
- Key pages work correctly
## Confirmation Points
- Any action that modifies GitHub repo settings, writes secrets, or switches production environment: add an **Approval** item to `tasks.md` first and wait for confirmation.
```
### ai-seo-nextjs.md
```markdown
# Step 9 — AI-era SEO for Next.js
Goal: Get "discoverable by search engines + readable by LLMs" right with minimal investment.
## Input (Pass Paths Only)
- `repo_root`
- `run_dir`
- `site.json` (optional): Site info (domain, site name, main pages, update frequency)
## Output (Persisted)
- `tasks.md` (SEO checklist section: tasks + verification)
- `evidence/seo-summary.md`
## Plan (Checklist Required)
Before SEO edits, add an SEO checklist section to `tasks.md`.
Record verification (sitemap/robots routes reachable, metadata present) in the same `tasks.md` section.
## Minimum Delivery Checklist (Recommend Completing All)
1. `robots` (allow/disallow crawling policy)
2. `sitemap` (at least include core pages)
3. Site-wide metadata: title/description/canonical
4. OpenGraph/Twitter cards (at least one default set)
5. Structured data (JSON-LD): organization/product/article (choose by site type)
6. `llms.txt` (site index entry for LLMs; keep content brief and maintainable)
## Optional modules (when installed)
Use these to raise SEO quality without bloating the base step:
1. `review-seo-audit`: run after minimum checklist to find concrete issues and prioritize fixes.
- Persist: `evidence/seo-audit.md`
2. `tool-schema-markup`: if you need rich results / structured data beyond the basics.
- Persist: `evidence/schema-markup.md`
3. `tool-programmatic-seo`: if the goal includes template-driven pages at scale (directories, locations, comparisons).
- Persist: `evidence/programmatic-seo.md`
## Optional: Cloudflare Enhancement (Don't Block Ship)
If user explicitly wants to use Cloudflare:
- Only do minimal config directly related to "discoverability/performance" (caching/redirects/basic observability)
- Don't force complex edge logic at launch
```