How AI Helped Me Build This Blog

8 minute read

I’ve been without a main platform. I haven’t written on Blogger since 2019; I never got into my Substack; my Twitter is now private.

For the last year, I’d become convinced that self-hosting a blog is the way to go. For a few months, my goal has been to copy Will Larson and use the Hugo framework. But Will had warned me that Hugo is a pain to set up, and so I procrastinated.

Then I accidentally discovered that AI has made it web programming a whole lot less painful. I estimate AI to have saved me 20+ hours in setting up this blog. Here’s more about this experience and my takeways.

Using Hugo to set up this blog

Finding myself awake at 5am in a bout of jet lag, I decided to figure out this Hugo business. Like the old-school backend dev I am, I downloaded Hugo and opened Vim in a terminal. I followed my usual workflow of typing coding questions into Google and discovered the responses had become a whole lot more helpful, thanks to AI summaries with Gemini.

For anyone interested in a full chronology, I provide it below, with the AI-assisted steps marked by ✨. Everyone else may skip ahead to my summary and takeaways.

Day 1: 2 hours before work, 1 hour after work

  1. I follow the Hugo “Getting Started” tutorial. As a busy person who needs to start my workday in two hours, I decided to take a shortcut and directly use the Cactus theme, instead of the tutorial theme.
  2. Mistake! The Cactus theme has many deprecations, for instance using the Google.SiteAnalytics property that no longer exists. I can’t even run my Hugo server locally due to said deprecations. But fear not. I type the bugs into Google and Gemini gives me suggestions for fixing them. Without knowing anything about the intricacies of Hugo, I resolve these deprecation issues in five minutes.
  3. Emboldened by my early success, I start messing around with the files to see what I can change. I test out the blog features by migrating a test blog post. But somehow formatting the “About” page is hard. I asked Gemini, but I don’t get a great answer. I try just typing things into different files, but I don’t figure it out. I give up and do my actual work.
  4. Not able to stop thinking about how I failed to make an “About” page, I keep asking Gemini different versions of “why is this not working.” Unfortunately, I am forced to actually read some documentation about Hugo. I learn that the format of the “About” page is defined by the single layout file. Who knew!

Day 2: 2 hours after work

  1. ✨ Glorious day! I now have a website. I am able to format a bunch of stuff. I even add a new page of my talks and podcasts and define a new format for generating these pages programmatically from JSON files. Throughout the process, Gemini is super helpful by giving me generally correct, occasionally erroneous, step-by-step instructions for everything I want to do.
  2. Now it is time to deploy. I follow the instructions I found on the Hugo website for deploying via GitHub pages. I sign up for GitHub Pro, I make a config page for my Github Action. It’s go time.
  3. ✨ When trying to deploy my GitHub page, I hit another bug. My Action won’t run! Relying on my clutch dev skills, I click into the Action to see the log. Looks like Hugo needs my theme to be a submodule to properly work. I remember reading and ignoring something about this. Darn it, I haven’t messed with submodules in over ten years. Gemini teaches me that I need to commit twice when it comes to submodules: once the submodule and once the project containing it. Everything works now. My page gets deployed.

Day 3: 2 hours after work

  1. I now have unbounded confidence in my Hugo skills. It is time to hook up my GitHub page to my custom subdomain. I follow the instructions from GitHub docs. My page shows up at jeanyang.com, but it is broken. The cute Cactus theme is gone. Everything is terrible. I have flown too close to the sun.
  2. ✨ Having no human to help me, I turn to my friend Gemini. Gemini teaches me about opening up the Chrome inspector, which my frontend team has tried to teach me previously but somehow did not stick. I confirm that every single theme element is failing to load. The reason is surprising! The page is HTTPS but somehow the theme elements are trying to load as HTTP. Scandal!
  3. ✨ To help with my most complex debugging feat yet, I again turn to Gemini. I am confused about why the page resources would be loading as HTTP when I’ve so clearly specified HTTPS in my configuration file. Gemini helps me figure out that the URLs could be loading dynamically. After a series of conversations with Gemini and reading a bunch of files to find how my theme assets are getting loaded, I discover the root cause: my GitHub page does not have HTTPS enabled and will not let me enable HTTPS due to DNS misconfigurations.

Several hours over several days in DNS hell

  1. First, I simply wait for the DNS certificate to propagate. I hate waiting, so during this time I read many blog posts. Somehow Gemini is not as helpful when it comes to DNS misconfigurations. Fast-forward 24 hours, this allows me to at least enable HTTPS.
  2. ✨ HTTPS is now enabled, but the site is still not displaying the cute theme! I learn from Gemini and other sources that it is probably because I have forwarding still turned on from my DNS provider and now that is messing with things.
  3. ✨ Even after turning forwarding off, my theme still does not load. I inspect the page and discover that the Chrome inspector now has an AI mode, but that AI mode isn’t super helpful. I type the new bug into Google and Gemini tells me that I’m getting an issue there’s an infinite loop of redirects when fetching my assets due to some HTTPS misconfiguration issue. The suggestion is to remove the custom domain from my GitHub page and reinstall it.
  4. Fast-forward 24 more hours (DNS is like an old-school train), I now I have a blog with a functional cute Cactus theme. There are still some known issues, like the top nav going away after scroll on a post and the bottom nav showing up after the copyright, but we’ll fix those soon. (Please contact me with solutions, thanks.)

What AI was most helpful for

I’m primarily a backend dev by training who mostly wrote compiler and verifiers. Most of the websites I’ve made, I’ve written by opening up Vim and typing <HTML></HTML>. The last web framework I’ve worked in is Bootstrap. I estimate it would have taken me about 30 hours, instead of ten-ish, to figure all this out without the help of Gemini.

Here are the main ways AI was helpful:

  • Reduce onboarding time onto a new framework or technology. Thanks to Gemini (which people say is not nearly as good as Claude Code), I was able to get a working Hugo website, in my intended theme, within 15 minutes. Without AI, I can easily see myself needing at least an hour to read documentation, sort through online forum posts about debugging the deprecations for my theme, etc. This easily made the difference between me committing to this project, versus doing something else with my bonus jet lag hours.
  • Reduce debugging time. Debugging is probably the place where I most benefited from AI summarization during this experience. Before AI, my experience of debugging in frameworks where I was familiar involved searching my bug and reading three to five StackOverflow posts to see if there was a solution there. Even then, I would often have to ask a friend or write to a mailing list. AI suggestions and summaries really helped me narrow in on what was going wrong and how to fix it much faster than otherwise.
  • Enable fast progress without deep knowledge. When I was in grad school, I had an officemate Joe who always knew more than I did about web frameworks and things I wanted to do, like dual install Linux on my Windows machine. Joe helped a lot of things go faster because he was just always there to resolve small questions. During this project, I felt like AI was as helpful as Joe. (Sorry, Joe, if I am misremembering your nuanced insights.)

Takeaways about AI and developer tools

People have speculated about the future of developer tools and AI on less, so I’m going to go ahead and generalize too. What I now believe after this experience:

  • Fundamentals will become way more important than technology-specific skills. I might use outdated technologies and have rusty web skills, but during this project I relied on my knowledge of markdown, static webpages, partial evaluation, Git, DNS, and HTTPS certificates. Even though I may not understand Git submodules, I do have a fair amount of experience when it comes to narrowing down and reproducing issues. AI tools are particularly empowering in my case, where I know what I want and I know generally how I want it to work, but I don’t know the specific syntax and other incantations.
  • Productivity improvements completely rely on having good data. In this blog project, AI was particularly helpful when there was underlying available data, for instance if posts about my specific bug or very related bugs were already online. Even in cases where there were a small number of posts about something, AI was less helpful. For instance, for part of my DNS issues there seemed to only be posts online about resolving them on Cloudflare hosting and I was not hosted on Cloudflare, so I had to rely on my own insights from reading several posts, rather than AI summarization.
  • AI will only empower new developers if the underlying abstractions improve. Look, I’m having a really good time in this AI revolution. It’s easier for me to use low-code tools like Flows and Zapier than ever before. I can now set up bespoke self-hosted blogs without bothering to really learn much about the underlying framework. But I’m currently only able to get far with any of these tools because I’m able to quickly build a mental model of what’s going on underneath. And that’s because I’ve used the non-AI version of these tools, albeit a very long time ago. If we want to truly empower more software builders who don’t have as much Computer Science fundamentals, we’re going to need new, better low-code and no-code abstractions to truly enable vibe coding.

I’ve been told that if I can do all this with Gemini, I will be able to go even faster with Claude Code. It’s a fun time in the AI coding world. I’m excited to see how things continue to unfold.

(And if you know how to fix my theme issues, please help thanks.)