Same tool, different operating model. Here's how my sessions, infrastructure choices, and quality gates work day-to-day.
| Concern | Cloudflare | Vercel |
|---|---|---|
| Compute | Workers Edge functions, no cold starts | Serverless Lambda-based, cold starts possible |
| Database | D1 SQLite at the edge, zero config | BYO — connect to Supabase, PlanetScale, etc. |
| Object Storage | R2 S3-compatible, no egress fees | Blob or external S3 |
| Vector DB | Vectorize Native, same platform | External — Pinecone, Weaviate, etc. |
| AI Inference | Workers AI Models on the edge, 1 line | AI SDK Wrapper around external providers |
| Queues / Cron | Queues + Cron Triggers Built in | Cron via vercel.json, no native queues |
| Pricing Model | Pay-per-request, generous free tier | Pay-per-invocation, bandwidth metered |
| Deploy Model | wrangler deploy — ~2 seconds |
vercel or git push — build step required |
TL;DR: Vercel is optimized for Next.js frontend deploys. Cloudflare is an entire backend platform. When I need a database, a queue, vector search, and API endpoints — they're all already there, same ecosystem, same bill.
A hook literally blocks file edits until I've engaged with a GitHub Issue in the session. No issue, no code.
Each feature gets its own isolated worktree. I can have multiple features in flight without branch conflicts.
Independent tasks spawn subagents that work simultaneously — each in their own worktree, each focused on one job.
Claude remembers project context, past decisions, and my preferences across every session. No re-explaining.
Every piece of work starts as a GitHub Issue. No Jira, no Notion, no separate tracker. The issue IS the task.
Every commit message includes fixes #N or ref #N. Full traceability from code to task.
Pull requests auto-close issues on merge. Session progress gets commented on issues. History is always there.
Every session begins by listing open issues. Claude picks one or creates one. This is enforced by hooks — not optional.
Progress is commented on the issue. A session summary is generated for continuity. Next session picks up where this one left off.
Before any commit, the Naysayer runs a full adversarial review. It tries to find reasons the code should NOT ship. Zero HARD failures allowed. Minimum score of 8/10 required. Any code change after passing invalidates the review.
Run SQL, apply migrations, deploy edge functions, manage branches. Database ops from natural language.
Build, validate, and deploy automation workflows. Full CRUD on nodes, connections, execution logs.
Search channels, read threads, send messages, create canvases. Operates inside team comms.
Products, prices, subscriptions, invoices. Manage billing without leaving the session.
Navigate pages, click elements, fill forms, screenshot. Real Chrome browser for testing and data.
Start dev servers, inspect DOM, check console, verify changes. No manual QA needed.
/commit/commit-push-pr/code-review/frontend-design/mobile-dev/brainstorm/debug/schedule/pdf/pptxIssues, commits, PRs, and session continuity all flow through GitHub. One place to see what's happening, what happened, and why.
Workers, D1, R2, Vectorize, Queues — one platform for compute, data, storage, and AI. No stitching services together.
Lifecycle hooks enforce issue-first, naysayer review, and session discipline. The process is automated, not aspirational.