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