Vercel -> Railway Migration Progress
User Instructions
Preferences
- Zero-downtime migration with parallel run period
- Cloudflare as CDN/DNS layer (Polish for image optimization)
- Workers migrate first (lowest risk), web apps follow
Skip/Defer
- None currently
Priority Overrides
- Workers first (see railway-worker-deploy project)
Quality Reference
- Target Grade: A+ (97+)
- Key Metrics:
- Zero downtime during cutover
- All apps respond correctly on Railway
- Cron jobs fire on schedule
- Deploy scripts updated and working
Wave 1: Pre-Migration Prep (no downtime)
Phase 1.1: Image Optimization — Cloudflare Polish
- Add domains to Cloudflare DNS (orange-cloud proxied)
- Enable Polish (Lossy + WebP)
- Enable Auto Minify
Phase 1.2: Remove maxDuration Export
- Remove Vercel-specific maxDuration from route handlers
Phase 1.3: Remove automaticVercelMonitors from Sentry
- Update Sentry config to remove Vercel-specific monitoring
Phase 1.4: Remove Sentry Edge Config
- Clean up edge runtime Sentry config if present
Wave 2: Railway Setup
Phase 2.1: Create Railway Project
- Create project with services for each app/worker
Phase 2.2: Configure Environment Variables
- Provision all env vars from .env.example
Phase 2.3: Configure Custom Domains
- Point app.eko.day, admin.eko.day, eko.day to Railway
Phase 2.4: Dockerfiles / Nixpacks
- Verify build configuration for each service
Wave 3: Cron Migration
Phase 3.1: Railway Cron Setup
- Migrate vercel.json cron schedules to Railway
Phase 3.2: Remaining Cron Routes
- Identify cron routes not in vercel.json
Phase 3.3: Delete vercel.json
- Remove Vercel config after migration
Wave 4: Deploy & Cutover
Phase 4.1: Update Deploy Scripts
- Update package.json deploy commands for Railway
Phase 4.2: Clean Up Vercel Artifacts
- Remove Vercel-specific files and configs
Phase 5.1: Parallel Run
- Run both platforms simultaneously, verify parity
Phase 5.2: DNS Cutover (via Cloudflare)
- Switch DNS from Vercel to Railway
Phase 5.3: Decommission Vercel
- Remove Vercel project after confirmation period
Blocked
Completed
Workflow Reference
Commands
@docs/projects/railway/TODO.md What's the current task? @docs/projects/railway/TODO.md Resume from where we left off @docs/projects/railway/TODO.md Mark [task] complete