Streamlining content ops with LLMs: Wagtail user guide A three-month Wagtail user guide project achieved 5x faster monthly content operations and a viable path to 52 language translations via fully automated draft AI translations, according to contributor Raghaddahi. The overhaul replaced a broken versioning system with version-numbered blocks and added Docker Compose, vector indexing, and AI code reviews, with translations initially planned via DeepL but switched due to cost. Streamlining content ops with LLMs: Wagtail user guide A case study in LLM-powered content operations After three months contributing to the Wagtail user guide https://guide.wagtail.org/en/ , here is what we achieved and my thoughts on getting involved with open source. Streamlined content operations and translations The guide website had serious issues: broken versioning that cost editors hours of work per release, and translations that had not progressed since launch. The codebase wasn't complex, and there were a lot of opportunities to thoughtfully adopt AI models to streamline the work while maintaining or increasing quality. Here is what we achieved: 5x faster monthly content operations thanks to a big content versioning architecture overhaul 52 languages translations in sight , with an actually-viable path, via fully automated draft AI translations Flawless RTL "Right-to-Left" languages support - for Arabic, Farsi, Hebrew, and Urdu.- Vector indexing and related pages: to facilitate cross-linking across hundreds of pages. - Project tooling improvements: adoption of AGENTS.md and AI code reviews. You can view all of my work in GitHub for the duration of the project https://github.com/wagtail/guide/commits?author=Raghaddahi , here is how it happened in more detail. Versioning The biggest piece of work was replacing the versioning system. The old one required site editors to spend hours copying the entire site content. With a new Wagtail release every three months, that didn't scale. And because every release published entirely new pages, translations had to be copied over and re-edited for each language; it was too much work to keep up with, so many pages never got translated. The state before the project, with a very overwhelming picker: After prototyping, we replaced this with special blocks carrying a version number and a "type-of-change" setting added/changed/removed , so each update only touches the blocks tied to it, and readers switch between versions with a UI filter. This kind of block configuration is dramatically simpler with Wagtail’s block settings / StructBlock layout https://docs.wagtail.org/en/stable/advanced topics/customization/streamfield blocks.html changing-the-order-and-grouping-of-child-blocks feature, added in version 7.3. Here is what it looks like on the site’s pages: Translations Testing RTL and translations properly ran into an unexpected blocker: the build fixtures had limited content, so I needed something closer to the deployed database. As a fast workaround, I pulled a copy of the deployed database and ran it locally by adding Docker Compose to the project https://github.com/wagtail/guide/pull/433 , which also gave me a good excuse to widen my database knowledge. My mentor Thibaud recommended DBeaver https://dbeaver.io/ , which I used to look at the actual schema, and I picked up commands and topics like EXPLAIN ANALYZE that I hadn't worked with before. AI translations The guide website was published in 2022, before LLMs went mainstream, so translating it into a new language required a lot of manual work. Which is why almost none of the languages were fully translated. Automated translation was the solution. The next question was which engine to use. We initially planned to work with DeepL https://www.deepl.com/en , but it did not seem viable for the scale of the site. Although it’s currently small, we planned to extend the content to 100+ pages across 10+ languages: a one-time bulk run came to roughly $1000, so we started looking at other options. That search turned into the richest part of my AI integration learning. I started with wagtail-localize-ai https://github.com/infofactory/wagtail-localize-ai , but reviewing the Arabic translations I noticed output problems that needed prompt refining. Since the package doesn't allow changing its system prompt, I forked the repo to test different versions directly. It took a couple of iterations until I was satisfied. Since we couldn't depend on my fork, we moved to adding a machine translator to the repo itself, with a more advanced system prompt that reflects the needs of the site: default system prompt = """\ You are a professional translator translating text from {source language} to {target language}. Translate only the text and keep its structure intact. Reply with just the translated text and no wrapper, explanation, or code fence of any kind. - Only standard HTML inline tags are allowed: a, abbr, acronym, b, code, em, i, strong, br. -