canvas-website/CLOUDFLARE_PAGES_MIGRATION.md

5.0 KiB

Migrating from Vercel to Cloudflare Pages

This guide will help you migrate your site from Vercel to Cloudflare Pages.

Overview

Current Setup:

  • Frontend: Vercel (static site)
  • Backend: Cloudflare Worker (jeffemmett-canvas.jeffemmett.workers.dev)

Target Setup:

  • Frontend: Cloudflare Pages (canvas-website.pages.dev)
  • Backend: Cloudflare Worker (unchanged)

Step 1: Configure Cloudflare Pages

In Cloudflare Dashboard:

  1. Go to Cloudflare Dashboard

  2. Navigate to PagesCreate a project

  3. Connect your GitHub repository: Jeff-Emmett/canvas-website

  4. Configure build settings:

    • Project name: canvas-website (or your preferred name)
    • Production branch: main
    • Build command: npm run build
    • Build output directory: dist
    • Root directory: / (leave empty)
  5. Click Save and Deploy

Step 2: Configure Environment Variables

In Cloudflare Pages Dashboard:

  1. Go to your Pages project → SettingsEnvironment variables

  2. Add all your VITE_* environment variables from Vercel:

    Required variables (if you use them):

    VITE_WORKER_ENV=production
    VITE_GITHUB_TOKEN=...
    VITE_QUARTZ_REPO=...
    VITE_QUARTZ_BRANCH=...
    VITE_CLOUDFLARE_API_KEY=...
    VITE_CLOUDFLARE_ACCOUNT_ID=...
    VITE_QUARTZ_API_URL=...
    VITE_QUARTZ_API_KEY=...
    VITE_DAILY_API_KEY=...
    

    Note: Only add variables that start with VITE_ (these are exposed to the browser)

  3. Set different values for Production and Preview environments if needed

Step 3: Configure Custom Domain (Optional)

If you have a custom domain:

  1. Go to Pages → Your project → Custom domains
  2. Click Set up a custom domain
  3. Add your domain (e.g., jeffemmett.com)
  4. Follow DNS instructions to add the CNAME record

Step 4: Verify Routing

The _redirects file has been created to handle SPA routing. This replaces the rewrites from vercel.json.

Routes configured:

  • /board/* → serves index.html
  • /inbox → serves index.html
  • /contact → serves index.html
  • /presentations → serves index.html
  • /dashboard → serves index.html
  • All other routes → serves index.html (SPA fallback)

Step 5: Update Worker URL for Production

Make sure your production environment uses the production worker:

  1. In Cloudflare Pages → SettingsEnvironment variables
  2. Set VITE_WORKER_ENV=production for Production environment
  3. This will make the frontend connect to: https://jeffemmett-canvas.jeffemmett.workers.dev

Step 6: Test the Deployment

  1. After the first deployment completes, visit your Pages URL
  2. Test all routes:
    • /board
    • /inbox
    • /contact
    • /presentations
    • /dashboard
  3. Verify the canvas app connects to the Worker
  4. Test real-time collaboration features

Step 7: Update DNS (If Using Custom Domain)

If you're using a custom domain:

  1. Update your DNS records to point to Cloudflare Pages
  2. Remove Vercel DNS records
  3. Wait for DNS propagation (can take up to 48 hours)

Step 8: Disable Vercel Deployment (Optional)

Once everything is working on Cloudflare Pages:

  1. Go to Vercel Dashboard
  2. Navigate to your project → SettingsGit
  3. Disconnect the repository or delete the project

Differences from Vercel

Headers

  • Vercel: Configured in vercel.json
  • Cloudflare Pages: Configured in _headers file (if needed) or via Cloudflare dashboard

Redirects/Rewrites

  • Vercel: Configured in vercel.jsonrewrites
  • Cloudflare Pages: Configured in _redirects file (already created)

Environment Variables

  • Vercel: Set in Vercel dashboard
  • Cloudflare Pages: Set in Cloudflare Pages dashboard (same process)

Build Settings

  • Vercel: Auto-detected from vercel.json
  • Cloudflare Pages: Configured in dashboard (already set above)

Troubleshooting

Issue: Routes return 404

Solution: Make sure _redirects file is in the dist folder after build, or configure it in Cloudflare Pages dashboard

Issue: Environment variables not working

Solution:

  • Make sure variables start with VITE_
  • Rebuild after adding variables
  • Check browser console for errors

Issue: Worker connection fails

Solution:

  • Verify VITE_WORKER_ENV=production is set
  • Check Worker is deployed and accessible
  • Check CORS settings in Worker

Files Changed

  • Created _redirects file (replaces vercel.json rewrites)
  • Created this migration guide
  • ⚠️ vercel.json can be kept for reference or removed

Next Steps

  1. Configure Cloudflare Pages project
  2. Add environment variables
  3. Test deployment
  4. Update DNS (if using custom domain)
  5. Disable Vercel (once confirmed working)

Support

If you encounter issues:

  • Check Cloudflare Pages build logs
  • Check browser console for errors
  • Verify Worker is accessible
  • Check environment variables are set correctly