What I Learned Moving My Blog from WordPress to VitePress with AI
Moving my blog from WordPress to VitePress gave me the Markdown-based, Git-controlled, AI-friendly writing workflow I have wanted for years.

For a long time I have struggled to find the best blogging platform.
WordPress has been my go-to for years, but I have tried more than most: Medium, Substack, Ghost, Twitter for a day or two, Blogspot, and a few others that escape me at the moment.
I will get to why I picked VitePress, but before I do I feel like I need to say something about blogging itself.
You might be wondering, "Why a blog?"
Blogging and syndication are from an age past, right?
Maybe. But I still believe in blogging, and I have three reasons.
Why blogging over social media
First, I personally believe in being in control of my content. Blogging has been deeply connected to how I represent myself online. I do not want corporations with values that do not align with mine to control my voice.
I use Twitter, LinkedIn, and other platforms too. They can be nice. I just do not believe in letting those platforms control how my thoughts and ideas get into the world.
Second, social is many times a battle for attention over bringing value. I am just not interested in a rat race for views and likes.
That is not to say social cannot bring value. Many people bring great value online, and I can name more than a few. If you bring value there, great. I love that.
I like to post my blog content on those platforms too, as long as it is for value and not attention. Attention should be an outcome of value. LinkedIn does this better than some of the others, I might say.
Third, intentional or not, social platforms determine what you and I do and do not see.
Unlike blogging, these platforms shape the information in front of us, and that influences how we interpret the world around us if we do not take the time to ask questions.
And to ask those questions, we need to engage with the subject deeply.
Unfortunately, engagement on social is focused more on tic-tac snacks than full-course dinners that take time to digest. The shaping information we should question often goes unquestioned because we flick to the next thing.
We do not really think about the fact that we were just shown a headline that probably made a truth claim. We see it, assume it is true enough, and move on because the next thing might be more interesting.
It is that "I saw this before, and I know it already" walk-by we do with information each day.
Meaning, we have often already decided if a statement is true or not based on our past experience. We assume based on what information we already agree with, and social sites are very good at getting us to look at what we agree with.
This is mainly on us. At some point, we need to escape the need to be in the big socially accepted circles these companies are drawing.
And I do mean circles, plural.
The companies know you need good guys and bad guys to get you to act. Like in marketing, problems and solutions. So they make circles, they demand you join one, and those inside them know for sure they are the good ones.
Intentional or not by these companies, or if it is just human nature, I digress.
The point is, I do not mind blogging because what I write is separated from that environment.
With that set aside, let's get into the technical bits.
Why not WordPress?
WordPress has been going through a lot of change and drama over the last few years, and I am losing my desire to be involved in the platform.
Also, the tool is showing its age.
Its age is especially visible in the age of AI.
When I write posts today, I use AI as a type of editor. I had already written 644 words for this post before asking my editor to look at it. I do not always want to do what an editor will do: edit it down, fix grammar, and smooth the content so it flows.
Sure, I could do this. I like doing this. Sometimes I do not use AI at all.
But many times, like today, I did something and just wanted to document what I was doing and thinking about. I am not writing a book. I am making notes.
WordPress is not a great tool for that kind of AI-enabled writing.
Also, I have many code examples in my content. Most blogging platforms and CMS tools are not designed for things like code syntax highlighting.
Tools like Prism exist, but they are not adequate for many programming language syntax nuances. But something like Shiki is really good at it.
That is where I started.
Syntax highlighting.
That is what I wanted most aside from a better AI writing workflow.
Why VitePress?
This is where VitePress comes into play.
It lets me write in Markdown. AI is good at Markdown. So it was a natural choice to move toward a Markdown-based CMS.
But VitePress is not really a CMS. It is a documentation tool for code, and it has a Shiki plugin.
Those two things (AI editing and Shiki) made VitePress a great choice.
But only if you have a week to code up and transform the documentation tool into a CMS for a blog.
Needless to say, to make VitePress a CMS, I needed to retool it a bit.
And that is where AI comes into the picture.
AI made this possible for me because it lowered the cost of getting what I wanted. I could vibe code my way through setting up VitePress the way I wanted.
For design I chose to use UI.sh. It worked well enough for my needs.
The general order of things
Off I went, in this general order.
First, I installed VitePress and got it running with Bun. This was easy. I just followed the installation process.
Next, I needed to convert my WordPress posts into Markdown, so I found a WordPress plugin that did what I needed 80% of the way: simple-export-md.
From there, I loaded the plugin into AI and vibe coded the VitePress format into the export. I added featured images to the export. I added bulk export. I added export tooling for Gutenberg tables.
I tuned it for about 30 minutes, and it was done. All my posts were in Markdown, in the VitePress format, with YAML headers.
Third, I downloaded all my images.
Then I vibe coded a CLI tool to scan the Markdown files for image and media files I actually used and remove the rest.
Then I vibe coded another CLI tool to convert images into modern formats like WebP and AVIF.
Fourth, I vibe coded the design with UI.sh.
This took a few prompts:
- "Make this look nice."
- "Add search."
- "Add a nice mobile menu."
- "Add dark and light mode."
And a few others.
Next, I asked AI to look at my existing site and imitate the about page, footer, and header navigation.
It just worked.
Next, I told it I needed category pages.
It just worked after two instructions.
Finally, I asked it to improve the SEO and performance. I scanned the site using Chrome Lighthouse, copied the report in JSON, and AI fixed it.
The site hit 100% performance and a 100% SEO score.
Launch time
Technically, I launched the new blog partway through the process.
To launch the site, I chose Cloudflare Workers. I used AI to aid in that process too.
That was another moment where this project fit AI well. I was not trying to engineer a complex product. I was moving a blog to static files and making the workflow match how I wanted to work.
AI did not need to be brilliant in the abstract. It just needed to be useful in the context of a specific, bounded project.
And it was.
Learning and results
I learned a few things in this process.
First, VitePress can achieve a lot more than I expected.
I knew it was good for documentation. I knew it had Markdown and Shiki. I did not know how well it could be shaped into a personal blog once the right pieces were in place.
Second, I learned a lot more about Cloudflare Workers.
I use Cloudflare every day, and I have used Workers before, but this project helped me dive a little deeper. It gave me a better sense of how Workers fit into the shape of a static site and how simple the deployment story can be when the site itself is simple.
Third, I learned that I do not have to be in total control to get the results I need.
AI did not remove the need for judgment. It only changed how I apply it.
The result is that I have the blog I have wanted for years.
A simple, Markdown-based CMS with the best syntax highlighting I can get. I can host it for free. It can live fully version controlled in Git. I can edit the files directly on my Mac. I can use any Markdown editor for writing.
And I now have a little more experience driving AI and vibe coding, learning its limitations, and mentally noting what works and what does not.
For this migration process from WordPress to VitePress, AI made it possible with just a few hours at the end of the day and a movie with my wife.
It required very little work from me.
That is not because the work had no value. It is because this was the right kind of work for AI to help with.
It did not need to be over-engineered by me. It is just a blog and static files. This was a perfect project for vibe coding.
I got software designed around exactly how I want to work.
And now, after 1,409 words, it is time for my editor to look at this post and get it ready to publish.