Automate with the Necessary Love

Automate with the Necessary Love

Wardrome was born Italian, many years ago, when it was still a browser game and the universe could afford accents, inflections, and that certain Mediterranean theatricality that doesn’t ask for permission. Then it became English, because when you decide to leave the courtyard, you have to learn to speak the language of the longer road. This time I chose to start directly in English, both for the site and for the game. Not to betray the origins, but for strategic consistency: if you build an interstellar fleet, you cannot think in dialect.

Then I looked at the numbers. Thousands of visitors from China. An Italy that continues to read, silent but present. It wasn’t a romantic issue, it was a matter of responsibility. If someone comes all the way here, crossing half a digital planet to read what you write, the least you can do is not force them to translate it themselves. It’s a spirit of service. Thus, the Italian version was born, almost like a return home, and then the Chinese one, like a bridge thrown towards the east.

Ghost, however, is not multilingual. Not really. It can pretend to be, but it wasn’t made for that. So I had to do two things. The first was to redo the theme. Not a cosmetic modification, not a patch. I taught the site that the world does not speak a single language. I translated the static parts of the interface, added a language switch, created separate indexes for each version, imposed routing rules like /it/, and inserted filters on tags and search so that an Italian reader wouldn’t suddenly find themselves catapulted into English. It was complex because every detail of the interface assumes a monolingual world. You have to dismantle it patiently and rebuild it without making it collapse.

The second part was quieter and more mechanical: automation. I built an external system that works only through the Ghost APIs. It doesn’t touch the core, it doesn’t dirty it. It’s a night cron job, for now. When everyone is asleep, it reviews the English articles, checks if there is already a version with the it or zh tag, and if it doesn’t exist, it creates it. It translates the content, translates the titles, the meta descriptions, even the alt texts of the images. It translates internal links using a simple but decisive thing: speaking slugs. If the English is about, the Italian is it-about, the Chinese zh-about. Thus, the replacement is deterministic, no mapping database is needed, no black magic is required. It’s clean architecture.

In the process, hreflang tags are also generated, including the x-default, and they are injected into the dedicated field of the post. Each article knows who its siblings are in other languages. Canonical and relationships are consistent. Google does not report duplications, it doesn’t seem irritated. The real results will come with time, but at least the setup is correct.

For the translation, I use a complex and disciplined prompt. Inside are the terms of the setting, the words that must not be trivialized, the Wardrome Technocracy, the consistency of tone. The model is gpt-4o-mini, sufficient, respectful, sober enough not to turn everything into rhetoric. It works well. And yet, when it comes to literary pieces, the more narrative parts of the setting, I intervene myself. Especially in Italian. Not because the AI makes glaring mistakes, but because the epic has a rhythm that cannot be completely delegated. Automation assists, it does not replace. The fleet departs, but someone still has to check the course.

The Chinese is simplified. The punctuation is adapted by the model, and the theme has held up without typographical issues. I haven’t yet made specific optimizations for Baidu; for now, I care that those who arrive can read without friction. The newsletter remains in English. It has technical criticalities that require another level of intervention, and I do not rule out addressing them. But everything in its own time.

In the end, I did not build a multilingual empire, I did not implement a roadmap feature to impress anyone. I automated a process, with the necessary love. I took something that could have been done by hand, with effort and the risk of inconsistency, and made it systematic without making it cold. I put AI at the service of care, not speed. Because translating a universe does not mean multiplying it. It means ensuring that it remains itself even when it changes language, like a ship that crosses different galaxies but continues to recognize itself by its name.

Meanwhile, the system has continued to work.

After Italian and Chinese, German has also arrived. Not as a new “feature,” but as the natural consequence of the architecture. When the setup is solid, adding a language does not mean rebuilding everything: it simply means extending the fleet.

The night cron job does not distinguish between alphabets and geographies. It looks at the English articles, checks if their counterparts exist, and if a language is missing, it creates it. Thus, slowly, Wardrome has begun to speak German as well. Not to colonize markets, but to reduce friction. If someone comes here from Berlin or Hamburg, they should not have to cross the universe with an automatic translator open in another tab.

You can see the result on the wardrome blog: https://wardrome.com

Is your project stuck at a technical hurdle?

Book 15 minutes