# Encore Vercel Deploy

> Automates deployment of Encore.ts backend and Next.js frontend to Encore Cloud and Vercel. Use this skill when deploying the full-stack application, setting up new environments, or troubleshooting deployment issues.

- Skill: `majiayu000/encore-vercel-deploy` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add majiayu000/encore-vercel-deploy`
- Raw SKILL.md: https://api.skillmd.com/api/skills/majiayu000/encore-vercel-deploy/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Web & Frontend
- Author: majiayu000 (https://skillmd.com/u/majiayu000)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/majiayu000/encore-vercel-deploy

---


# Encore + Vercel Deployment Skill

Automates the deployment of full-stack applications with Encore.ts backend and Next.js frontend.

## When to Use This Skill

Use this skill when:
- Deploying backend to Encore Cloud and frontend to Vercel
- Setting up a fresh Encore app after git/deployment issues
- Configuring environment variables and secrets
- Connecting frontend to deployed backend
- Troubleshooting deployment failures

## Prerequisites

Before deployment, verify:
- Encore CLI installed and authenticated (`encore auth whoami`)
- Vercel CLI installed and authenticated (`vercel whoami`)
- Git repository with proper structure (no broken submodules)
- OpenAI API key available for agent services

## Deployment Process

### Step 1: Verify Git Structure

Ensure backend is NOT a git submodule:

```bash
# Check if backend is tracked properly
cd /path/to/project
git ls-tree HEAD backend
```

**If output shows mode `160000`** → Backend is a broken submodule. Fix it:

```bash
# Remove submodule reference
git rm --cached backend

# Add backend files properly
git add backend

# Commit
git commit -m "fix: properly add backend to git"
```

### Step 2: Create or Link Encore App

**Option A: Create New App (if starting fresh)**

```bash
cd /path/to/project
encore app create your-app-name

# Update backend/encore.app with new app ID
# Copy the app ID from output (e.g., your-app-name-xyz123)
```

Update `backend/encore.app`:
```json
{
  "id": "your-app-name-xyz123",
  "lang": "typescript",
  "global_cors": {
    "allow_origins_without_credentials": [
      "http://localhost:3000",
      "https://your-app.vercel.app",
      "https://your-app-*.vercel.app"
    ]
  }
}
```

**Option B: Link Existing App**

```bash
cd backend
encore app init  # Interactive linking
```

### Step 3: Configure Git Remote for Encore

```bash
# Remove old remote if exists
git remote remove encore 2>/dev/null

# Add Encore remote (use encore:// protocol)
git remote add encore encore://your-app-id

# Verify
git remote -v
```

### Step 4: Set Required Secrets

All agent services require `OpenAIApiKey`:

```bash
cd backend
encore secret set --type prod,dev OpenAIApiKey
# Paste your OpenAI API key when prompted
```

For additional secrets, repeat the command with different names.

### Step 5: Deploy Backend to Encore

```bash
# From project root
git add -A
git commit -m "feat: deploy to encore"
git push encore main:main
```

**Expected output:**
```
remote: main: triggered deploy https://app.encore.cloud/your-app-id/deploys/staging/...
```

**Deployment will be at:**
- Staging: `https://staging-your-app-id.encr.app`
- Dashboard: `https://app.encore.cloud/your-app-id`

### Step 6: Deploy Frontend to Vercel

**Set environment variable:**

```bash
cd frontend

# Add API URL (updates existing or creates new)
echo "https://staging-your-app-id.encr.app" | vercel env add NEXT_PUBLIC_API_URL production

# Or if variable exists, update via dashboard:
# https://vercel.com/your-team/your-project/settings/environment-variables
```

**Deploy:**

```bash
# Remove old project link if redeploying
rm -rf .vercel

# Deploy
vercel --prod --yes
```

**Alternative:** Push to GitHub if Vercel GitHub integration is configured.

### Step 7: Verify Deployment

**Backend health check:**
```bash
curl https://staging-your-app-id.encr.app/hello/World
# Should return: {"message":"Hello World!"}
```

**Frontend check:**
```bash
curl -I https://your-app.vercel.app
# Should return: 200 OK
```

**Test integration:**
- Open frontend URL
- Try sending a chat message
- Verify backend responds via SSE stream

## Common Issues & Solutions

### Issue: "repository not found" when pushing to Encore

**Cause:** Wrong git remote format or app not created

**Fix:**
```bash
# Verify app exists
encore auth whoami

# Recreate remote with encore:// protocol
git remote remove encore
git remote add encore encore://your-app-id
```

### Issue: "secret key(s) not defined: OpenAIApiKey"

**Cause:** Secrets not set before deployment

**Fix:**
```bash
cd backend
encore secret set --type prod,dev OpenAIApiKey
# Trigger redeploy
git commit --allow-empty -m "chore: redeploy after secrets"
git push encore main:main
```

### Issue: Backend showing old services (auth/portfolio instead of chat-gateway)

**Cause:** Backend was never properly pushed to git/Encore

**Fix:**
```bash
# Verify backend files are in git
git ls-files backend | head -20

# If empty or showing "backend" only → fix submodule issue
git rm --cached backend
git add backend
git commit -m "fix: add backend files"
git push origin main
git push encore main:main
```

### Issue: CORS errors between frontend and backend

**Cause:** Frontend domain not in `backend/encore.app` CORS config

**Fix:**

Update `backend/encore.app`:
```json
{
  "global_cors": {
    "allow_origins_without_credentials": [
      "http://localhost:3000",
      "https://your-actual-domain.vercel.app",
      "https://your-actual-domain-*.vercel.app"
    ]
  }
}
```

Then redeploy backend:
```bash
git add backend/encore.app
git commit -m "fix: update CORS for frontend"
git push encore main:main
```

### Issue: Vercel project named "frontend" instead of app name

**Fix:**
1. Go to Vercel project settings
2. Rename project to match desired domain
3. New URL will be `https://your-project-name.vercel.app`

## Quick Reference

### Encore Commands

```bash
# Check auth status
encore auth whoami

# Create new app
encore app create app-name

# List secrets
encore secret list

# View logs
encore logs --env=staging

# Get API URL
echo "https://staging-$(cat backend/encore.app | grep '"id"' | cut -d'"' -f4).encr.app"
```

### Vercel Commands

```bash
# Check auth
vercel whoami

# List projects
vercel list

# Set env var
vercel env add VAR_NAME production

# Deploy
vercel --prod

# Rollback
vercel rollback
```

### Git Commands

```bash
# Check for submodules
git ls-tree HEAD | grep 160000

# View remotes
git remote -v

# Push to multiple remotes
git push origin main
git push encore main:main
```

## Environment URLs

After successful deployment:

| Environment | Backend URL | Frontend URL |
|-------------|-------------|--------------|
| Local | `http://localhost:4000` | `http://localhost:3000` |
| Staging | `https://staging-{app-id}.encr.app` | `https://{project}.vercel.app` |
| Production | `https://prod-{app-id}.encr.app` | `https://{project}.vercel.app` |

## Security Notes

- Never commit `.env.local` or `.env.production` files
- Rotate OpenAI API keys regularly
- Use Encore's secret management for all sensitive values
- Enable Vercel password protection for preview deployments if needed

## Success Checklist

- [ ] Backend git structure verified (no broken submodules)
- [ ] Encore app created/linked with correct ID
- [ ] Git remote configured: `encore://app-id`
- [ ] OpenAI secret set in Encore
- [ ] Backend deployed successfully to Encore
- [ ] Frontend NEXT_PUBLIC_API_URL points to Encore staging
- [ ] Frontend deployed to Vercel
- [ ] CORS configured correctly in backend/encore.app
- [ ] Health check endpoints responding
- [ ] Frontend can communicate with backend

## Related Documentation

- Encore Deployment: https://encore.dev/docs/deploy/deploying
- Encore Secrets: https://encore.dev/docs/primitives/secrets
- Vercel CLI: https://vercel.com/docs/cli
- Vercel Environment Variables: https://vercel.com/docs/projects/environment-variables


