The dashboard already deploys to Cloudflare Pages (deploy.yml, wrangler.toml)
but CLAUDE.md, the deployer/build-checker agents, and the dashboard/cloudflare
rules still described the old Vercel setup. The pulse worker still called the
Vercel API for deploy metrics even though the project moved off Vercel.
- Update CLAUDE.md, deployer.md, build-checker.md, dashboard.md, cloudflare.md
to reflect Cloudflare Pages (wrangler deploy/rollback, CLOUDFLARE_API_TOKEN/
CLOUDFLARE_ACCOUNT_ID secrets) instead of Vercel
- Apply an unmerged fix (55741ad4) that replaces pulse's Vercel deploy-metrics
collector with a Cloudflare Pages collector
- Remove dead dashboard/vercel.json; port its security/CORS headers to
dashboard/public/_headers (Cloudflare Pages' native headers file) since
Cloudflare Pages was silently ignoring vercel.json
- Rewrite scripts/deploy.sh to call wrangler instead of vercel --prod
- Migrate all API endpoints from api/ (Vercel serverless) to dashboard/src/pages/api/ (Astro routes)
- track-download-supabase, track-command-usage, track-installation-outcome, track-website-events
- collections (index, [id], items)
- health-check, claude-code-check, discord/interactions
- Add shared API libs: cors.ts, neon.ts, auth.ts, changelog-parser.ts
- Add @supabase/supabase-js, @neondatabase/serverless, discord-interactions, @clerk/backend deps
- Remove catch-all API proxy ([...path].ts) - APIs are now native Astro routes
- Serve components.json and trending-data.json from dashboard/public/
- Switch to same-origin fetching (relative URLs) for data files
- Add dashboard/vercel.json with crons and CORS headers
- Simplify CI/CD to single deploy target (dashboard project)
- Update deploy script and package.json scripts
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Move VERCEL_ORG_ID, VERCEL_SITE_PROJECT_ID, and
VERCEL_DASHBOARD_PROJECT_ID to .env. Deploy script and deployer
agent now read from environment variables instead of hardcoding.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>