skills/tools-and-apis/policyengine-vercel-deployment-skill/SKILL.md
Deploying PolicyEngine frontend apps to Vercel - naming, scope, team settings
npx skillsauth add policyengine/policyengine-claude policyengine-vercel-deploymentInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Standard patterns for deploying frontend apps (interactive tools, dashboards, static sites) to Vercel under the PolicyEngine team.
All PE apps deploy under the policy-engine Vercel team:
vercel link --scope policy-engine
vercel --prod --yes --scope policy-engine
Vercel auto-assigns the production URL on first deploy — the exact domain depends on team/name availability (suffixes like -one, -phi, or -policy-engine are common when the base name is taken). Examples of live PolicyEngine zones:
working-americans-tax-cut-act-one.vercel.app
keep-your-pay-act.vercel.app
oregon-kicker-refund.vercel.app
household-api-docs-policy-engine.vercel.app
policyengine-model-phi.vercel.app
Capture whatever Vercel assigns on the first deploy and hardcode that exact URL anywhere it's needed (host rewrites, apps.json source). Do not assume a deterministic naming scheme, and do not use custom aliases — they may have deployment protection issues.
cd my-project
# Link to team (creates .vercel/)
vercel link --scope policy-engine
# Deploy
vercel --prod --yes
vercel --prod --yes --scope policy-engine
For apps with API backends (e.g., Modal):
# Set env var (Next.js uses NEXT_PUBLIC_* prefix)
vercel env add NEXT_PUBLIC_API_URL production
# Must force-redeploy after changing env vars
vercel --prod --force --yes --scope policy-engine
Next.js apps access env vars via process.env.NEXT_PUBLIC_API_URL.
curl -s -o /dev/null -w "%{http_code}" https://your-app.vercel.app/
# Should return 200
Deployed to personal account: If vercel --prod goes to your personal account, delete .vercel/ and re-link:
rm -rf .vercel
vercel link --scope policy-engine
vercel --prod --yes
Deployment protection (401): Team deployment protection may block unauthenticated access to alias URLs. Use the auto-assigned production URL instead, or configure in Vercel dashboard > Settings > Deployment Protection.
Generic project names: Never use generic names like app or site — they can steal domains from other projects. Always use descriptive names.
Must be at repo root. For Next.js static exports, configure rewrites as needed:
{
"rewrites": [{ "source": "/(.*)", "destination": "/index.html" }]
}
PolicyEngine tools deploy as Next.js multi-zones mounted behind policyengine.org. The host (policyengine-app-v2/website/) proxies specific paths to each zone's Vercel deployment via rewrites in beforeFiles.
Before deploying a new tool, make sure you've read policyengine-interactive-tools-skill → "Multi-zone integration (preferred)". The Vercel-facing implications:
-one, -phi, or -policy-engine when the base name is taken). Capture whatever Vercel assigns and hardcode that exact URL in the host rewrite destination. Do not assume a naming convention.vercel.json self-rewrite so the zone's own preview can serve prefixed assets:
{
"framework": "nextjs",
"rewrites": [
{ "source": "/_zones/<repo-name>/_next/:path*", "destination": "/_next/:path*" }
]
}
policyengine.org — add to policyengine-app-v2/website/next.config.ts in rewrites().beforeFiles, hardcoded to the zone's production Vercel URL. /deploy-dashboard handles this after the first deploy captures the production URL./audit-multizone before announcing a zone as live — validates basePath, phase-gated assetPrefix, vercel.json self-rewrite, and host rewrites in one pass.tools
ONLY use this skill when users explicitly ask about the PolicyEngine Python package installation, REST API endpoints, API authentication, rate limits, or policyengine.py client library. DO NOT use for household benefit/tax calculations — ALWAYS use policyengine-us or policyengine-uk instead. This skill is about the API/client tooling itself, not about calculating benefits or taxes.
development
ALWAYS USE THIS SKILL for PolicyEngine microsimulation, population-level analysis, winners/losers calculations. Triggers: microsimulation, share who would lose/gain, policy impact, national average, weighted analysis, cost, revenue impact, budgetary, estimate the cost, federal revenues, tax revenue, budget score, how much would it cost, how much would the policy cost, total cost of, aggregate impact, cost to the government, revenue loss, fiscal impact, poverty impact, child poverty, deep poverty, poverty rate, poverty reduction, how many people lifted out of poverty, SPM poverty, distributional impact, state tax, state-level, California, New York, UBI, universal basic income, flat tax, standard deduction, winners and losers, winners, losers, inequality, Gini, decile, SALT, marginal tax rate, effective tax rate. NOT for single-household calculations like "what would my benefit be" - use policyengine-us or policyengine-uk for those. Use this skill's code pattern; explore codebase for parameter paths if needed.
development
PolicyEngine API v2 - Next-generation microservices architecture with monorepo structure
development
ALWAYS LOAD THIS SKILL before setting up any Python environment or installing packages. Defines the standard: uv, Python 3.13, uv pip install, .venv at project root. Triggers: "set up python", "install python", "create a venv", "virtual environment", "pip install", "install packages", "uv pip", "uv venv", "python version", "VIRTUAL_ENV", "venv conflict", "which python", "activate", "deactivate", "run the script", "run with uv", "uv run", "pyproject.toml", "install dependencies", "install requirements", "install the package", "editable install", "pip install -e", "latest package", "latest version", "current version", "newest version".