Files
Daniel Avila dae5faa009 migrate: Vercel → Cloudflare Pages + Workers (/mes → ~/bin/zsh-5/mes) (#571)
* migrate: Vercel → Cloudflare Pages + Workers para reducir costos ($110 → ~$0-5/mes)

- Cambia adaptador Astro de @astrojs/vercel a @astrojs/cloudflare (mode: 'directory')
- Agrega dashboard/wrangler.toml con nodejs_compat para compatibilidad total
- Crea cloudflare-workers/crons/ Worker que reemplaza los cron jobs de Vercel
  (claude-code-check cada 30min, health-check cada 1h en vez de cada 15min)
- Actualiza CI/CD: Vercel CLI → wrangler pages deploy (requiere CLOUDFLARE_API_TOKEN y CLOUDFLARE_ACCOUNT_ID en GitHub Secrets)
- Elimina crons duplicados del proyecto legacy aitmpl (root vercel.json)
- Quick win: agrega Cache-Control headers a components.json (86400s), plugins.json,
  trending-data.json y claude-jobs.json para cortar el costo de bandwidth de $53

Próximos pasos manuales (ver PR description):
1. Crear proyecto en Cloudflare Pages
2. Agregar secrets de Cloudflare en GitHub
3. Migrar env vars de Vercel a Cloudflare Dashboard
4. Deployar cloudflare-workers/crons con wrangler
5. Apuntar dominios a Cloudflare Pages

* fix: nodejs_compat_v2 + react-dom/server.node alias para Cloudflare Workers

- Cambia compatibility_flags de nodejs_compat a nodejs_compat_v2
- Agrega alias vite react-dom/server → react-dom/server.node para evitar
  MessageChannel error en module init time en Cloudflare Workers runtime
- Agrega ssr.noExternal para bundlear react-dom y aplicar el alias

* fix: revert compatibility_flags a nodejs_compat (estándar)

nodejs_compat_v2 no es el flag primario. El fix real del MessageChannel
error fue el alias vite react-dom/server → react-dom/server.node,
no el cambio de flag.

* fix: inject Cloudflare Pages runtime env into process.env via middleware

Add Astro middleware that copies context.locals.runtime.env (Cloudflare
Pages secrets) into process.env before each request, so API routes can
use process.env.X as a unified pattern without changing the call sites.

Also add || process.env.X fallbacks to all API routes/libs that were
using import.meta.env exclusively (build-time only in Vite).

Verified on staging: track-download-supabase, health-check,
claude-code-check, collections, github/token all return correct responses.
2026-05-08 20:24:28 -04:00
..

Cloudflare Workers

This directory contains Cloudflare Workers for automation and monitoring tasks that run on Cloudflare's edge network.

Why Cloudflare Workers?

We separate monitoring and automation tasks into Cloudflare Workers to:

  • ✅ Separation of concerns: Vercel focuses on the web app, Cloudflare on automated tasks
  • ✅ Better performance: Ultra-fast edge computing with 0 cold starts
  • ✅ Free cron jobs: Unlimited unlike Vercel
  • ✅ Scalability: 100k requests/day on free tier
  • ✅ KV Storage included: Save state without a database
  • ✅ 100% CLI managed: No dashboard needed - everything via wrangler CLI

📦 Available Workers

docs-monitor

Claude Code documentation monitor with Telegram notifications.

Functionality:

  • Monitors https://code.claude.com/docs every 6 hours
  • Detects changes using SHA-256 hash
  • Sends Telegram notifications when changes occur
  • Includes HTTP endpoint for manual triggers

Quick Start (CLI only):

cd docs-monitor
npm install
wrangler login
npm run deploy

Full documentation: docs-monitor/README.md

pulse

Weekly KPI report sent via Telegram every Sunday at 14:00 UTC.

Functionality:

  • Collects metrics from GitHub, Discord, Supabase, Vercel
  • Formats a consolidated weekly report
  • Sends to Telegram automatically via cron
  • Manual trigger via HTTP endpoint

Quick Start (CLI only):

cd pulse
npm install
wrangler login
npm run deploy

Full documentation: pulse/README.md

🚀 General Setup (CLI)

Prerequisites

  1. Cloudflare account (free)
  2. Wrangler CLI installed:
    npm install -g wrangler
    

Common CLI Commands

# Authenticate
wrangler login

# Develop locally
wrangler dev

# Deploy to production
wrangler deploy

# View real-time logs
wrangler tail

# List deployments
wrangler deployments list

# View deployment details
wrangler deployments view <deployment-id>

# List workers
wrangler deployments list

# Delete a worker
wrangler delete

KV Storage Commands (CLI)

# Create KV namespace
wrangler kv:namespace create MY_KV

# List all namespaces
wrangler kv:namespace list

# List keys in namespace
wrangler kv:key list --namespace-id=<id>

# Get key value
wrangler kv:key get <key> --namespace-id=<id>

# Set key value
wrangler kv:key put <key> "<value>" --namespace-id=<id>

# Delete key
wrangler kv:key delete <key> --namespace-id=<id>

Secrets Management (CLI)

# Set a secret
wrangler secret put SECRET_NAME

# List all secrets
wrangler secret list

# Delete a secret
wrangler secret delete SECRET_NAME

📁 Project Structure

Each worker follows this structure:

worker-name/
├── index.js          # Main worker code
├── wrangler.toml     # Cloudflare configuration
├── package.json      # Dependencies and scripts
├── .env.example      # Environment variables template
├── .gitignore        # Git ignored files
└── README.md         # Specific documentation

🔐 Secrets Management

Secrets are stored securely in Cloudflare via CLI:

# Add a secret (prompts for value)
wrangler secret put SECRET_NAME

# List configured secrets (doesn't show values)
wrangler secret list

# Delete a secret
wrangler secret delete SECRET_NAME

⚠️ IMPORTANT: Never commit secrets to code or .env files. Always use wrangler secret put for production.

💰 Costs

Cloudflare Workers free tier includes:

  • 100,000 requests/day
  • 10ms CPU time/request
  • Unlimited cron triggers
  • KV: 100k reads/day, 1k writes/day
  • 1 GB storage

For most use cases: $0.00/month

📚 Resources

🤝 Contributing

To add a new worker:

  1. Create a directory: cloudflare-workers/my-worker/
  2. Follow the standard structure (see above)
  3. Document clearly its purpose in README.md
  4. Add an entry in this main README
  5. Use CLI for all operations

🎯 CLI-First Philosophy

This project emphasizes CLI usage:

  • ✅ No need to access Cloudflare Dashboard
  • ✅ Everything scriptable and automatable
  • ✅ Version control friendly (wrangler.toml)
  • ✅ CI/CD ready
  • ✅ Reproducible deployments

All worker management, deployment, monitoring, and debugging can be done via wrangler CLI.


Part of the claude-code-templates project