These Workers provide error logging and Web Vitals monitoring endpoints.
- errors.js -
/api/errors- Error logging endpoint - vitals.js -
/api/vitals- Web Vitals metrics endpoint
- 100,000 requests/day (resets at midnight UTC)
- 10ms CPU time per request
- 30 Workers scripts total
Your expected usage: ~150-200 requests/day (well under limit)
# Install Wrangler (if not already installed)
npm install -g wrangler
# Login to Cloudflare
wrangler login
# Deploy errors worker
cd workers
wrangler deploy errors.js --name toposlabs-errors --route "toposlabs.ai/api/errors"
# Deploy vitals worker
wrangler deploy vitals.js --name toposlabs-vitals --route "toposlabs.ai/api/vitals"- Go to https://dash.cloudflare.com/
- Select your account
- Click "Workers & Pages" in the left sidebar
- Click "Create application"
- Click "Create Worker"
For errors.js:
- Name:
toposlabs-errors - Click "Deploy"
- Click "Edit code"
- Paste the contents of
errors.js - Click "Save and deploy"
- Go to "Triggers" tab
- Click "Add route"
- Route:
toposlabs.ai/api/errors - Click "Add route"
For vitals.js:
- Repeat the same steps
- Name:
toposlabs-vitals - Route:
toposlabs.ai/api/vitals
# Install wrangler dev
npm install -g wrangler
# Test errors worker
cd workers
wrangler dev errors.js --port 8787
# In another terminal, test it:
curl -X POST http://localhost:8787/api/errors \
-H "Content-Type: application/json" \
-d '{"message": "Test error", "url": "https://toposlabs.ai/"}'
# Test vitals worker
wrangler dev vitals.js --port 8788
# Test it:
curl -X POST http://localhost:8788/api/vitals \
-H "Content-Type: application/json" \
-d '{"name": "LCP", "value": 1234, "id": "test-id"}'After deployment:
# Test errors endpoint
curl -X POST https://toposlabs.ai/api/errors \
-H "Content-Type: application/json" \
-H "Origin: https://toposlabs.ai" \
-d '{
"message": "Test error",
"url": "https://toposlabs.ai/",
"userAgent": "Test/1.0"
}'
# Expected response: OK
# Test vitals endpoint
curl -X POST https://toposlabs.ai/api/vitals \
-H "Content-Type: application/json" \
-H "Origin: https://toposlabs.ai" \
-d '{
"name": "LCP",
"value": 1234.5,
"id": "v3-123-456",
"url": "https://toposlabs.ai/"
}'
# Expected response: OK- Go to Workers & Pages
- Click on your worker (e.g.,
toposlabs-errors) - Click "Logs" tab
- View real-time logs
# Tail logs for errors worker
wrangler tail toposlabs-errors
# Tail logs for vitals worker
wrangler tail toposlabs-vitalsIf you want to persist logs for analysis:
# Create KV namespace
wrangler kv:namespace create "ERRORS_KV"
wrangler kv:namespace create "VITALS_KV"
# Update wrangler.toml (create if doesn't exist)wrangler.toml:
name = "toposlabs-errors"
main = "errors.js"
compatibility_date = "2025-01-01"
[[kv_namespaces]]
binding = "ERRORS_KV"
id = "YOUR_KV_NAMESPACE_ID"Then uncomment the KV storage code in the worker files.
- Dashboard → Workers & Pages
- Click on worker name
- View Metrics tab
- See request count, errors, CPU time
- Requests: ~150-200/day out of 100,000 (0.2% used)
- Very safe margin!
CORS errors?
- Check that origin is in
allowedOriginsarray - Verify route is set up correctly
Worker not found?
- Verify route:
toposlabs.ai/api/errors(no https://) - Check that worker is deployed
- Wait 1-2 minutes for propagation
Rate limited?
- Free tier: 100,000 req/day
- Check dashboard metrics
- Unlikely with your traffic
Workers not logging?
- Check console in Workers dashboard
- Verify wrangler tail is connected
- Check that worker is actually being called
Current setup: $0/month
- 100,000 requests/day free
- Your usage: ~150-200/day
- Plenty of headroom
If you need more:
- Workers Paid: $5/mo for 10M requests
- Not needed for your traffic levels
- Workers validate request method (POST only)
- CORS headers restrict origins
- No sensitive data stored
- Logs expire automatically if using KV
- Rate limiting via Cloudflare built-in
- Deploy both workers using one of the methods above
- Test endpoints with curl commands
- Update HTML to call these endpoints
- Monitor logs in Workers dashboard
- Enjoy free error and performance monitoring!