deploy
Deploy a venture's code to Vercel and/or set up Supabase — run by ChiefOfStaff
Deploy Venture
Deploy a venture's code to Vercel and/or set up a Supabase project. This skill is executed by ChiefOfStaff — ventures do not self-deploy.
Input
Venture slug: $ARGUMENTS
Step 1: Read Context
- Read
portfolio/registry.mdto find the venture and confirm stage allows deployment - Read the venture's
CLAUDE.mdfor current deployment state (check for existing URLs) - Read
portfolio/guardrails.mdto confirm free-tier deployment is allowed at this stage
Step 2: Pull Latest Code
cd $PROJECTS_DIR/{slug} && git pull --quiet
Step 3: Pre-Deployment Quality Gate (MANDATORY)
Before deploying, verify the code meets quality standards. If any check fails, DO NOT deploy — fix the issue first.
cd $PROJECTS_DIR/{slug}
# 1. Build must pass
npm run build 2>&1
# 2. Check for placeholder links (href="#")
grep -r 'href="#"' src/ --include="*.tsx" --include="*.ts" --include="*.jsx" --include="*.js" || echo "PASS: No placeholder links"
# 3. Check for console.log in API routes (should use real storage)
grep -r 'console.log' src/app/api/ --include="*.ts" --include="*.js" | grep -v 'console.error' || echo "PASS: No console.log in API routes"
# 4. Check for fake/placeholder content
grep -rEi '(lorem ipsum|\[Name\]|\[Company\]|TODO:|FIXME:)' src/ --include="*.tsx" --include="*.ts" || echo "PASS: No placeholder content"
# 5. Check for proper metadata
grep -r 'metadata' src/app/layout.tsx || echo "WARNING: No metadata found in layout"
If any checks fail, fix the issues before proceeding to deployment.
Step 4: Deploy to Vercel
If the venture has deployable code in src/ or has a package.json:
cd $PROJECTS_DIR/{slug}
vercel --yes --prod 2>&1
Capture the deployment URL from output.
If this is the first deployment, also link the project:
vercel link --yes 2>&1
Important: Only use Vercel's free (Hobby) tier. If the deployment would require a paid plan, stop and submit a Spending approval instead.
Step 5: Set Up Supabase (if needed)
If the venture needs a database/auth (check docs/architecture.md):
# Only if no Supabase project exists yet
supabase init 2>&1 # In the venture directory
supabase start 2>&1 # For local development
For remote Supabase (production), the founder needs to have a Supabase account. Check if one exists:
supabase projects list 2>&1
If no account/project exists, submit a Spending approval to the Decisions DB for Supabase setup.
Step 6: Record Deployment URLs
-
Update the venture's
CLAUDE.md— add/update the Deployment section:## Deployment - **Live URL**: {vercel-url} - **Vercel Project**: {project-name} - **Supabase Project**: {project-ref} (if applicable) - **Last Deployed**: {date} -
Update
portfolio/registry.mdwith the live URL -
Update the Notion Ventures DB entry with the live URL (in the Repo URL or a note)
-
Log in the venture's
docs/changelog.md:## {date}: [Deployment] Deployed to Vercel Live at: {url}
Step 7: Post-Deployment Verification
Check that the deployment is live and functional:
# Basic health check
curl -s -o /dev/null -w "%{http_code}" {deployment-url}
# Check for server errors in the response
curl -s {deployment-url} | head -50
Step 8: Trigger QA Check
After deployment, run the QA agent to verify everything works end-to-end:
- Use the
qa-checkskill with the venture slug and deployment URL - QA agent will test all forms, links, responsiveness, and console errors
- If QA finds critical issues, fix and redeploy before reporting success
Report: "Deployed {venture} to {url}. Status: {http_code}. QA: {pass/fail}."