Ops: Deploy
Deploy the application to remote environments.
Argument: $ARGUMENTS — environment (dev, staging, production) and optional target (frontend, backend, both; default: both)
Path Convention
- Frontend: Current project directory (
.) - Backend:
${BACKEND_DIR:-../backend-v2}— setBACKEND_DIRin.claude/settings.local.jsonif your backend is elsewhere
Safety
CRITICAL: Production deployments require explicit human confirmation before proceeding. Always ask for confirmation when $ARGUMENTS contains production.
Discovery
- Read backend
package.jsonto discoverdeploy:*,aws:signin:*scripts - Read frontend
package.jsonto discover available scripts - Read
.env.{environment}files to find GraphQL URLs for post-deploy verification
CI/CD Path (Preferred)
The standard deployment path is via CI/CD — pushing to environment branches triggers auto-deploy. Manual deployment instructions below are for when CI/CD is not suitable.
Frontend Deployment
EAS Update (OTA — over-the-air JavaScript update)
Use for JS-only changes (no native module changes).
-
Verify EAS CLI:
eas whoamiIf not authenticated:
eas login -
Copy environment file:
cp .env.{environment} .env -
Deploy OTA update:
STAGE={env} NODE_OPTIONS="--max-old-space-size=8192" eas update --auto --channel={env} --message="Manual update" -
Verify deployment:
eas update:list --branch {env} --limit 3
EAS Build (Native binary — only when app.config.ts or native modules change)
-
eas build --platform all --non-interactive --no-wait --profile={profile} -
Check build status:
eas build:list --limit 5
Backend Deployment
Full Deploy (Serverless Framework)
-
AWS signin (discover script name from backend
package.json):cd "${BACKEND_DIR:-../backend-v2}" bun run aws:signin:{env} -
Deploy all functions:
cd "${BACKEND_DIR:-../backend-v2}" bun run deploy:{env} -
Verify (use the GraphQL URL from
.env.{environment}):curl -sf {graphql-url} -X POST \ -H "Content-Type: application/json" \ -d '{"query":"{ __typename }"}' \ -w "\nHTTP %{http_code} in %{time_total}s\n"
Single Function Deploy
Discover available function names from backend package.json deploy:function:* scripts:
cd "${BACKEND_DIR:-../backend-v2}"
FUNCTION_NAME={fn} bun run deploy:function:{env}
Post-Deploy Verification
After any deployment:
- Health check the deployed environment (use
ops-verify-healthskill) - Check logs for errors in the first 5 minutes (use
ops-check-logsskill) - Monitor Sentry for new issues (use
ops-monitor-errorsskill) - Run browser UAT smoke test against the deployed environment (use
ops-browser-uatskill)
Report deployment result as a table:
| Target | Environment | Method | Status | Verification | |--------|-------------|--------|--------|-------------| | Frontend | dev | EAS Update | SUCCESS/FAIL | URL responds | | Backend | dev | Serverless | SUCCESS/FAIL | GraphQL responds |