Skip to content
~/ tommybuilt .dev

// blog /

Cloudflare Runs Almost Everything I Build. Vercel Runs One Thing.

by Tommy
  • #cloudflare
  • #vercel
  • #solo_dev
  • #ai_tools

It has been a few months since I last wrote here. Most of that time went into taking things I had already built and turning them into products someone can actually pay for. On paper that is a small jump. In practice it was the hardest stretch of the year.

Here is the short version of what shipped. I rebuilt this site from the ground up, light by default now, with the whole portfolio sorted into real categories instead of one long scroll. I took four of my live demos, MonkNote for comments, CleverBotly for chat, Ask Sage for retrieval, and War Room Agents for business briefings, and started giving each one pricing and a real path to a customer. I built a national trades directory that already holds around 8,700 real listings. I rebuilt an old gaming magazine of mine on a modern stack. And I spent a lot of quiet hours getting fluent in the two platforms I deploy everything on.

The biggest lesson of the spring came from putting AI tools out in public. A public AI demo is a stranger holding your API key. The moment one goes live, someone pastes a wall of text into it at three in the morning to see what breaks, and someone else tries to use it as a free OpenAI proxy. So every public tool I run wears the same boring armor before it ships. A human check on the way in. A hard daily spend cap, so a bad day costs me five dollars and stops. A moderation pass on what the visitor types, and a second pass on what the model answers back. Rate limits keyed to a hashed version of the IP, so I never store the raw one. That armor never shows up in a screenshot, and it is the only reason I can leave a public AI tool running while I sleep.

That armor runs on infrastructure, which is where the rest of my learning budget went. Almost everything I build lives on Cloudflare. One project lives on Vercel. Building the same kind of work on both is the clearest way I have found to learn what each platform is genuinely good at.

Cloudflare hands you primitives and trusts you to build the app out of them. Workers run the code. D1 is a SQLite database that lives at the edge. KV is for fast key lookups. R2 stores files with no egress fees, which matters more than it sounds until the first time a bill does not punish you for serving images. Durable Objects give you a small piece of stateful coordination when you need it, and that is what powers the live comment rooms in MonkNote, one object per page holding the open connections so a new comment lands for everyone at once. Queues handle work that should happen after the response already went out. It is cheap, the free tier is honestly generous, and once these pieces live in your head you can stand up a real backend in an afternoon. The price you pay is that you are holding all the pieces yourself. Nobody hands you a finished framework. You wire it together.

Ask Sage is the one that lives on Vercel, and it earns its spot there. It is a Next.js app, and Vercel builds and ships Next.js better than anywhere else, because they are the ones who make Next. The retrieval needed real vector search, so its data sits in Postgres on Neon with the pgvector extension, and the whole stack came together fast. The deploy experience is the smoothest I have touched. You push a branch, it builds, it goes live, every branch gets its own preview URL, and there is almost nothing to configure.

The catch showed up about a week in. Serverless Postgres goes to sleep when nobody is using it, and a sleeping database means the first person to ask Sage a question sits there waiting for it to wake up. My fix is almost funny. There is a Cloudflare Worker on a timer whose entire job is to ping Neon every few minutes so it never nods off. So even my one Vercel project quietly leans on Cloudflare to stay healthy. That detail taught me more than any benchmark could. The platform you trust to run unattended in the background is the one you actually believe in.

So my default is Cloudflare, and the reason is cost and control at the scale I run. When a dozen small things are live at once, the edge primitives are cheap, they compose well, and the bill never surprises me. I reach for Vercel when a project is Next-shaped and getting to live fast matters more than shaving the cost, or when I want something from that ecosystem, like pgvector, that is simply easier to grab there. Cloudflare has its own vector database now, Vectorize, and for the next retrieval build I will probably try keeping the whole thing on one platform. Ask Sage was the fast version, and fast was the right call when I built it.

The quietest change of the spring was also the biggest one. For a long time these tools lived as demos under my own name, a developer showing what he can do. Now they are turning into products under the company, TPS Worldwide, with real prices and a checkout. I am wiring Stripe into the company site now. The payment button took an afternoon. Everything that has to be solid around it is the part that takes the real time: the failed payment, the refund, the receipt that has to actually arrive, the customer who clicks things in an order I never expected. You cannot take someone’s money in good conscience until all of that is boring and reliable.

This was a few months of slow, unglamorous work. Taking things I already had and making them solid enough to charge for. Learning my tools deep enough to trust them while I sleep. That is the part that compounds. Every product I harden hands me the pattern for the next one. Every platform I push to its edges becomes something I can reach for without thinking about it. The machine gets a little more capable each time, and the next build starts a little further down the road.

// keep reading