My Workflow

How I Use Claude Code

Same tool, different operating model. Here's how my sessions, infrastructure choices, and quality gates work day-to-day.

Infrastructure
Why Cloudflare, Not Vercel
Both are great. The difference is what you get beyond hosting. Cloudflare gives me a full backend toolkit at the edge — database, storage, vectors, queues — all in one ecosystem.
ConcernCloudflareVercel
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.

Day-to-Day
What a Build Session Looks Like
Every session follows the same enforced sequence. Hooks and gates make sure I can't skip steps even if I wanted to.
1
Pick an Issue
GitHub Issue is mandatory before any code edit
2
Brainstorm
Structured ideation — requirements, edge cases, approach
3
Plan
Written implementation plan, posted on the issue
4
Implement
Code in an isolated worktree — parallel agents if needed
5
Naysayer
Adversarial review gate — must pass before commit
6
Ship
Commit → push → PR, all referencing the issue
🎫

Issue-First Enforcement

A hook literally blocks file edits until I've engaged with a GitHub Issue in the session. No issue, no code.

🌳

Git Worktrees

Each feature gets its own isolated worktree. I can have multiple features in flight without branch conflicts.

🔀

Parallel Subagents

Independent tasks spawn subagents that work simultaneously — each in their own worktree, each focused on one job.

🧠

Persistent Memory

Claude remembers project context, past decisions, and my preferences across every session. No re-explaining.

Source of Truth
GitHub Is the Backbone
Everything flows through GitHub. Issues are tasks. Commits reference issues. PRs close issues. Nothing lives outside this loop.
📋

Issues = Tasks

Every piece of work starts as a GitHub Issue. No Jira, no Notion, no separate tracker. The issue IS the task.

🔗

Commits Reference Issues

Every commit message includes fixes #N or ref #N. Full traceability from code to task.

🔁

PRs Close the Loop

Pull requests auto-close issues on merge. Session progress gets commented on issues. History is always there.

Session Start

Every session begins by listing open issues. Claude picks one or creates one. This is enforced by hooks — not optional.

💬

Session End

Progress is commented on the issue. A session summary is generated for continuity. Next session picks up where this one left off.

Quality Gate
The Naysayer
The one custom piece I built. An adversarial review agent that runs as a hook-enforced gate. Claude literally cannot commit code until it passes.
How It Works Hard Block

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.

What It Reviews

CorrectnessDoes the code do what was asked?
ArchitectureSound design? Over-engineering?
SecurityInjection, auth gaps, OWASP top 10
Edge CasesError handling, race conditions

Enforcement Rules

HARD Failure = BlockedSecurity vulns or broken logic instantly block the commit
!
Score ≥ 8/10Must clear the threshold across all dimensions
!
Invalidation on EditChange code after passing? Review resets.
Anti-BypassTwo-phase verification — can't fake the result
Integrations
Connected Services (MCP)
MCP (Model Context Protocol) lets Claude Code talk directly to external platforms. These aren't custom — they're standard connectors.

Supabase

Run SQL, apply migrations, deploy edge functions, manage branches. Database ops from natural language.

n8n Workflows

Build, validate, and deploy automation workflows. Full CRUD on nodes, connections, execution logs.

💬

Slack

Search channels, read threads, send messages, create canvases. Operates inside team comms.

💳

Stripe

Products, prices, subscriptions, invoices. Manage billing without leaving the session.

🌐

Browser Automation

Navigate pages, click elements, fill forms, screenshot. Real Chrome browser for testing and data.

🔍

Preview Server

Start dev servers, inspect DOM, check console, verify changes. No manual QA needed.

Supabase
n8n
Slack
Stripe
Chrome
Preview
Google Drive
Scheduled Tasks
Capabilities
Skills (Slash Commands)
Pre-built skill modules that inject domain expertise on demand. These ship with Claude Code or are community-published — they handle best practices automatically.
/commit
Standardized git commits
/commit-push-pr
Commit → push → open PR
/code-review
Structured PR review
/frontend-design
Production-grade UI
/mobile-dev
Expo / React Native
/brainstorm
Structured ideation
/debug
Systematic root cause
/schedule
Cron-scheduled agents
/pdf
Read, merge, create PDFs
/pptx
Create presentations
Summary
The Operating Model
It's not about the tool — it's about the system around it.

GitHub is the brain

Issues, commits, PRs, and session continuity all flow through GitHub. One place to see what's happening, what happened, and why.

Cloudflare is the body

Workers, D1, R2, Vectorize, Queues — one platform for compute, data, storage, and AI. No stitching services together.

Hooks are the guardrails

Lifecycle hooks enforce issue-first, naysayer review, and session discipline. The process is automated, not aspirational.