Manage local development environment, database resets, health checks, deployment validation, production data sync, and Vercel environment variables; use when setting up dev environment, resetting databases, running pre-deployment checks, syncing production data to staging/local, or fixing Vercel env vars with trailing newlines
Scanned 2/12/2026
Install via CLI
openskills install majiayu000/claude-skill-registry---
name: "dev-environment-manager"
description: "Manage local development environment, database resets, health checks, deployment validation, production data sync, and Vercel environment variables; use when setting up dev environment, resetting databases, running pre-deployment checks, syncing production data to staging/local, or fixing Vercel env vars with trailing newlines"
version: "3.1.0"
last_updated: "2025-12-23"
aliases:
- "vercel-env-fix"
- "fix-env-vars"
- "env-manager"
---
# Dev Environment Manager
## When to Use This Skill
Use this skill when:
- Setting up or resetting local development environment
- Running health checks on databases
- Validating environment before deployment
- **Syncing production data to local or staging**
## Quick Commands (Recommended)
The easiest way to reset and sync your local database:
```bash
# Reset local DB + sync from STAGING (default)
pnpm supabase:web:reset
# Reset local DB + sync from PRODUCTION
pnpm supabase:web:reset --prod
# Reset local DB only (no data sync)
pnpm supabase:reset:no-sync
```
These commands:
1. Apply all migrations (reset schema)
2. Sync data from staging/production
3. Include auth.users for login testing
**Login locally with any synced user email + password `password`**
## Full Sync Workflow: Production → Staging → Local
For a complete refresh of all environments:
```bash
# Step 1: Sync production data to staging
./.claude/skills/dev-environment-manager/scripts/sync-prod-to-staging.sh --confirm --yes
# Step 2: Reset local and sync from staging
pnpm supabase:web:reset
```
This ensures staging mirrors production, then local mirrors staging.
## Scripts
**Location**: `.claude/skills/dev-environment-manager/scripts/`
| Script | Description |
|--------|-------------|
| `sync-prod-to-staging.sh` | **Copy production data to staging** (READ-only from prod) |
| `sync-prod-to-local.sh` | **Copy production data to local** (READ-only from prod) |
| `sync-remote-to-local.sh` | **Unified sync script** (staging or prod to local) |
| `reset-local-dev.sh` | Complete local database reset with optional production sync |
| `health-check.sh` | Database health verification |
| `pre-deployment-checks.sh` | Pre-deployment validation |
| `fix-production-env-vars.sh` | Fix production environment variables |
| `verify-production-env-vars.sh` | Verify production env vars are set |
## Data Sync Details
### Safety Guarantees
All sync scripts have **multiple safety layers** to prevent accidental production writes:
1. **Read-only production connection** - Scripts only construct READ connections to production
2. **Explicit confirmation required** - Must pass `--confirm` flag AND type confirmation text
3. **Target verification** - Scripts verify the target database before writing
4. **Clear visual warnings** - Red warning banners before any destructive operation
### Sync Production → Staging
```bash
# Preview what will happen (safe, no changes)
./.claude/skills/dev-environment-manager/scripts/sync-prod-to-staging.sh
# Execute the sync (requires confirmation)
./.claude/skills/dev-environment-manager/scripts/sync-prod-to-staging.sh --confirm
# Skip interactive prompt
./.claude/skills/dev-environment-manager/scripts/sync-prod-to-staging.sh --confirm --yes
```
**What it does:**
1. READ all public + auth schema data from production
2. ERASE all data in staging
3. COPY production data to staging
4. Verify row counts match
**Production is NEVER modified.**
### Sync to Local (Staging or Production)
```bash
# Sync from STAGING (default)
pnpm supabase:web:reset
# Sync from PRODUCTION
pnpm supabase:web:reset --prod
# Or use scripts directly:
./.claude/skills/dev-environment-manager/scripts/sync-prod-to-local.sh --confirm --yes
```
**What it does:**
1. Reset local database (apply all migrations)
2. READ all data from staging/production
3. COPY data to local (includes auth.users)
4. Verify row counts match
### Credentials
Scripts automatically load credentials from:
1. `.env.local` (preferred)
2. 1Password (fallback, then cached to .env.local)
Required environment variables:
- `SUPABASE_DB_PASSWORD_PROD` - Production database password
- `SUPABASE_DB_PASSWORD_STAGING` - Staging database password
## Quick Start Examples
### Fresh Local Setup (Most Common)
```bash
# Start local Supabase + reset with staging data
pnpm supabase:web:start
pnpm supabase:web:reset
```
### Refresh All Environments
```bash
# Full sync: prod → staging → local
./.claude/skills/dev-environment-manager/scripts/sync-prod-to-staging.sh --confirm --yes
pnpm supabase:web:reset
```
### Reset Without Sync
```bash
# Fresh migrations, no external data
pnpm supabase:reset:no-sync
```
### Pre-Deployment
```bash
# Run all checks before deploying
./.claude/skills/dev-environment-manager/scripts/pre-deployment-checks.sh
```
## Database References
| Environment | Project Ref | Host | Port |
|-------------|-------------|------|------|
| Production | `csjruhqyqzzqxnfeyiaf` | `aws-1-eu-central-1.pooler.supabase.com` | 5432 |
| Staging | `hxpcknyqswetsqmqmeep` | `aws-1-eu-central-1.pooler.supabase.com` | 5432 |
| Local | N/A | `127.0.0.1` | 54322 |
## Troubleshooting
### "Local Supabase is not running"
```bash
cd apps/web && pnpm supabase start
```
### "Failed to get password from 1Password"
```bash
# Authenticate with 1Password
op signin
# Or set credentials manually in apps/web/.env.local:
SUPABASE_DB_PASSWORD_PROD="your-password"
SUPABASE_DB_PASSWORD_STAGING="your-password"
```
### "Connection timeout"
- Ensure you're using `aws-1-eu-central-1.pooler.supabase.com` (not aws-0)
- Check network/VPN connection
- Verify credentials are correct
### Resetting Remote Database (Staging)
**WARNING**: `supabase db reset` has `--local=true` by default!
```bash
# WRONG - This resets BOTH local AND staging!
supabase db reset --db-url "postgresql://staging..."
# CORRECT - Only reset staging
supabase db reset --db-url "postgresql://staging..." --local=false
```
For staging schema reset, prefer using the sync script which handles this correctly:
```bash
./.claude/skills/dev-environment-manager/scripts/sync-prod-to-staging.sh --confirm --yes
```
## Vercel Environment Variables
### Fix Trailing Newlines
Vercel env vars sometimes get trailing `\n` characters that break API connections.
```bash
# Fix production only (interactive)
./.claude/skills/dev-environment-manager/scripts/fix-production-env-vars.sh
# Fix production only (non-interactive)
./.claude/skills/dev-environment-manager/scripts/fix-production-env-vars.sh --yes
# Fix preview/staging only
./.claude/skills/dev-environment-manager/scripts/fix-production-env-vars.sh --env preview --yes
# Fix ALL environments (preview + production)
./.claude/skills/dev-environment-manager/scripts/fix-production-env-vars.sh --env all --yes
```
**What it does:**
1. Pulls current env vars from Vercel
2. Finds vars with trailing `\n` characters
3. Removes and re-adds them using `echo -n` (no trailing newline)
4. Verifies the fix worked
### Verify Environment Variables
```bash
./.claude/skills/dev-environment-manager/scripts/verify-production-env-vars.sh
```
## Related Skills
- `production-database-query` - Query production/staging databases
- `database-migration-manager` - Create and apply migrations
No comments yet. Be the first to comment!