Moving My Websites from Jekyll and Hugo to Django

October 12, 2026

I have two websites: my main site, jefftriplett.com, and my micro.blog, micro.webology.dev. Back in July, I moved jefftriplett.com from Jekyll to Django. A few weeks ago, I moved my micro.blog posts, which ran on Hugo, into the same Django site and added a banner to give everyone a heads-up. I backed up both sites first, and for now, everything lives in one stream on jefftriplett.com.

Jekyll served me well for close to a decade. I used it on dozens of websites, and it was great. Over time, though, I stopped making quick commits and small updates. No matter how I updated, it was too hard to open my website, type something, and hit publish.

Micro.blog is what finally got me comfortable hitting publish, so it will always have a place in my heart. But it was the same story. Too often, I worked around the platform instead of it working for me.

With agents, it is now much easier to customize software until it works exactly how I want. So I built my own, and since I am a Django developer, Django was the obvious choice.

Getting my posts and feeds across

A couple of people have asked how the move worked. My Jekyll site was Markdown files with front matter in GitHub, so importing everything was easy.

The hard part was making sure nothing broke. I ran a few rounds with an agent to compare my old sitemap.xml and feeds against the new Django site. I wanted the feeds to line up exactly so I would not dump a pile of duplicate posts into people’s feed readers. Apologies if I accidently did that.

Once everything was in the right place, the rest went quickly.

Micro.blog was easy to export, too. It gives you a JSON file of all your posts, which I appreciated. I used the same sitemap and feed checks for that move, so the new URLs match the old ones as closely as possible for both search engines and people following links.

Everything from my micro.blog is now mirrored on jefftriplett.com. micro.webology.dev will stay up as a static archive for now, though I might rethink that later. I have not set up redirects yet, but I plan to point the old links to the right places.

Visually, not much has changed. I ported the same layouts and design over as-is. I want to start on a refresh, but my first goal was to move everything over, then make small changes over time.

Software that works the way I do

The new site uses collections, an idea I borrowed from Jekyll, so I can add any content type I want.

Images were always a pain on both micro.blog and my old blog. Now I can drag and drop them in. I am also experimenting with something like Wagtail’s StreamFields so I can mix images and other blocks into a post.

A dynamic site also opens the door to features that are hard to pull off on a static one, like Webmentions and really good Open Graph images. I wrote a service that generates Open Graph images, and I already use it on several of my other sites. Now I can test it here and control exactly how each article looks when someone shares it. That is not fully set up yet, but I am excited that I no longer have to work within Jekyll or Hugo's limits every time I want to add a feature.

Writing from anywhere with MCP

I now have two ways to create and edit posts: the Django admin or MCP. The site is plain Django, and I added MCP with django-mcpz. My content items, blog models, categories, and collections are all exposed through a custom MCP server so that I can read and edit any of them.

That means I can write from whatever tool I happen to be in: Claude Code, Codex, the ChatGPT app, or the Claude app. A few of those work on my phone, and I can even use them through CarPlay. With voice mode, I can dictate a post while driving, save it as a draft, and clean it up later. I can also write something in Obsidian and tell Claude to publish it.

I have not used it much yet, but MCP already changes where and how I write. It feels less restrictive, which makes writing more fun.

Maximum control

Now that agents make it so quick to create and change things, I want the system that gives me maximum control. A static site generator used to feel like the safe choice for performance, but that tradeoff no longer worries me. With a CDN like Cloudflare or Fastly in front of Django, I can cache nearly everything, which makes performance a non-issue.

That is the whole point of this move: less friction between having an idea and publishing it. I no longer have to stop and figure out how I am going to blog or get a post onto my website. I can write, and I am looking forward to getting back into blogging.