So, the blog is live with Hugo and I’m writing the first post in markdown.
The road has been long, but because I geeked in a new way … well we are in 2026, you already guessed it: yes, AI is behind all of that !
It all started with a question to Gemini: port the blog from WordPress to a static site using a generator in Go… then we started to code with a lot of copy-paste: the Hugo conf and templates, a first docker-compose with a dump of the WordPress db to recover the content. The idea was to code a tool in Go that would do the conversion, so that as long as the rendering wasn’t satisfying I could erase everything and relaunch the import of the posts.
After a lot of reluctance I installed opencode but not without locking it in a Docker. Then I discovered greywall, pi.dev and developed AI-Cabin but my dive into AI is another story, back to the blog.
So I was saying, this port was made with the help of more and more performant AI, but still limited because to keep control over my data I didn’t open accounts at the big actors. I used Gemini because I already have a Google account and this blog is already public, then I moved to the models of Scaleway.
The 3 big elements of this port:
- an
importer: code in Go that uses sqlc to read the db and html-to-markdown/v2 to transform the (pseudo) html of WordPress into markdown files. - a multilingual Hugo conf
- and there, the feature I never finished: the thing that was limping with gengo and that I didn’t finish on polylang: the multilingual aggregate view was finally possible ! a virtual language
allin the Hugo config and a virtual duplication of the french or english content into this ‘dimension’ as defined since Hugo v0.156.
- and there, the feature I never finished: the thing that was limping with gengo and that I didn’t finish on polylang: the multilingual aggregate view was finally possible ! a virtual language
- finally, a tool to compare the Hugo rendering against a wget capture of the WordPress (with plenty of tolerance rules for the things I chose to change)
The big features:
- reproducible and quite faithful import despite a conversion to markdown
- thanks to a plugin on html-to-md that I have to publish quickly: because the WordPress html has quite a lot of weirdness:
- you think already about the line jumps that make paragraphs (wpautop)
- the smileys
- the typographic conversions (ex the pretty quotes)
- thanks to a plugin on html-to-md that I have to publish quickly: because the WordPress html has quite a lot of weirdness:
- comments import (in static because well it was disabled since a long time … thanks spammers)
- URI preservation because « Cool URIs don’t change » — I already talked about it in 2010 — by configuring Hugo to reproduce in part the WordPress structure, the rest with generated redirects.
There it is, it’s live, I’ll be able to remove PHP from the server, a bit less stress regarding the flaws 😅