Building My Website with Cloudflare, Codex, and AI Agents

I've got jedmay.com up and running again, this time through cloudflare for free!

By Jed May ·

Building My Website with Cloudflare, Codex, and AI Agents

I finally decided to stop overthinking my personal website and just build the thing again. I had done this previously with Bluehost, and it turned into a maintenance PITA. I figured I would see what was available, now that I use AI as a sounding board for most of my curious queries, and wow did it not disappoint!

For years, I treated personal websites like they needed to become some massive polished portfolio project before they were “worthy” of going live. Every time I started one, it eventually turned into architecture discussions, framework decisions, redesign ideas, deployment plans, authentication thoughts, SEO considerations, analytics, and eventually, they remained a pipedream.

This time, I wanted something different. I wanted something lightweight. Something personal. Something that felt more like a notebook than a product. Ironically, AI is probably the reason it finally happened.

Cloudflare Ended Up Being Ridiculously Easy

I had never really used Cloudflare Pages before this project. I always assumed it was going to be another one of those “simple” developer experiences that secretly involved hours of DNS confusion and documentation rabbit holes. Instead, the free tier ended up being more than enough for what I needed.

The workflow was surprisingly clean:

  • Push code to GitHub
  • Cloudflare detects changes
  • Site builds automatically
  • Deployment happens in a couple minutes

That was basically it. No servers. No VM management. No worrying about scaling. Just write code and push commits. Even the custom domain setup was far less painful than I expected once I stopped fighting myself and let Cloudflare manage DNS properly.

The Weird Part: I Barely Coded Most Parts of It

I still wrote code. A lot of code, actually. But the process felt fundamentally different from how I’ve worked for most of my career. Instead of sitting down and manually building every component line by line, I spent a huge amount of time deploying agents that acted like reviewers, architect, debugger, even prompt writers (that's the big one that helped).

I used ChatGPT heavily to help me think through ideas, refine prompts, and clarify what I actually wanted before handing those instructions off to Codex. That ended up being one of the biggest lessons from this entire project. It's not a huge secret, but the payoff was massive with this bit of knowledge:

The quality of the result was heavily tied to the quality of the instruction.

The better I described in excruciating detail, the better the output became in a single shot.

Agents Talking to Agents Feels Strange at First

One thing that felt incredibly weird at first was using one AI system to improve prompts for another AI system. But honestly, once I got over how absurd that sounds, it became one of the most effective parts of the entire workflow.

A lot of the process ended up looking something like this: I would explain what I was trying to do to ChatGPT, have it help me organize my thoughts or refine the prompt, then feed that into Codex and let it start generating or modifying code. From there, I would review the output, tweak things, ask more questions, and repeat the process again.

At some point it stopped feeling like “AI writes code for you” and started feeling more like directing extremely fast junior developers that require very explicit instructions. The better I explained the architecture, constraints, desired workflow, styling, or even just the vibe I was after, the dramatically better the output became.

That was probably the biggest realization from the entire project. The quality of the result was directly tied to the quality of the instruction. If I gave vague prompts, I got vague results. If I slowed down and really explained exactly what I wanted in fine detail, the results became honestly kind of ridiculous.

It also massively reduced the friction involved in starting things. Instead of staring at a blank screen trying to figure out the “perfect” way to structure something before writing a single line of code, I could immediately start iterating. That made experimentation fun again instead of mentally exhausting.

The Free Versions Were Enough

That part honestly surprised me too. Cloudflare’s free hosting handled the site perfectly fine, GitHub handled the repo and deployments, and most of the AI experimentation happened without needing some massive expensive setup.

I think the biggest bottleneck throughout the project usually wasn’t the tooling at all. Most of the time it was just me not fully understanding what I wanted yet. Once I became more clear about the direction, the actual implementation started moving incredibly fast.

I Think I’m Done Chasing “Professional”

Somewhere along the way, I realized I don’t really care about building some polished “developer brand” anymore. I’m not trying to become an influencer, optimize SEO, grow traffic, or turn every thought into some monetized funnel. Most of this came from lack of confidence; needing to prove myself and have a digital footprint out there to show I'm worth the time.

I think I just wanted a place to think out loud again. That's why I built this site again.

A place where I can document weird ideas, architectural frustrations, experiments, mistakes, random rabbit holes, or things I learned without feeling like every post needs to become some hyper-professional article written for engagement metrics.

Ironically, removing that pressure made the entire project dramatically more enjoyable almost immediately.

Final Thought

AI didn’t magically build the website for me or anything, but it drastically reduced the friction involved in starting. That’s probably the biggest thing I noticed throughout this entire process. I wasn’t sitting there getting trapped in endless planning loops anymore. I could iterate almost immediately, and that made building fun again.

Honestly, the hardest part wasn’t deployment, frameworks, hosting, or infrastructure. It was getting out of my own head long enough to stop trying to make everything perfect before allowing myself to create something at all.

An unhandled error has occurred. Reload 🗙