For multilingual sites
When your site has to exist in more than one language
Running a publication in several languages is mostly an exercise in moving the same post through a pipeline without breaking it. You have the original, you have a translation, and somewhere in between you have an automation calling a translation API, a tag map, a slug convention, a set of images, and a tangle of internal links that all have to come out the other side intact. The hard part was never the translation — modern machine translation is good. The hard part is everything wrapped around the words, and getting each version back into the CMS without flattening it on the way.
Specter gives that work a single place to happen, with a diff before anything ships. Subscribe now for 500 free credits.
What actually breaks in a translation pipeline
A typical flow fires a webhook on publish, ships the body to a translation API, stitches the result back together, and tries to recreate tags, a slug, and a feature image on a second post or site. Every hop is a place something quietly goes wrong: the translated post loses a tag, collides on a slug, comes back as plain prose where a callout or bookmark used to be, or keeps internal links pointing at the source-language URLs because nothing rewrote them. And because it runs through automation you half-remember configuring, you find out weeks later when a reader or a search console does. The deeper issue is that none of it lives anywhere you can see at once.
A control plane for every language
Connect your site and the whole archive becomes content you can work on in one place — source language and translations side by side. Instead of pushing one post at a time through a webhook, you run a translation recipe across a whole section, asking the model to translate every body while leaving structure and metadata alone, and you read the result as a diff before any of it goes near the live site. The dry-run is what makes this safe rather than reckless: you see exactly which posts would be created, updated, or flagged as a conflict, instead of trusting an automation to have done the right thing. Translate your blog walks through the workflow; browsing and reviewing cost nothing, only AI runs spend credits.
Why structure and cards are the whole game here
Translation is where fidelity stops being abstract. The editable content is a faithful projection of the underlying post, not the underlying truth — for ordinary prose the round-trip is clean, but card-heavy posts (galleries, embeds, toggles, bookmarks) can lose detail on the way back. This is exactly why the diff matters more in a translation flow than almost anywhere else: it’s the moment to confirm a callout is still a callout before you ship the German version. How Specter handles Ghost cards is worth reading before you translate a card-heavy archive. The same review makes the cross-reference work tractable — rewriting links so the French version points at French URLs becomes one reviewed pass, not a hand-edit per post.
What this does and doesn’t solve
Specter works on the content layer — the posts, their text, their metadata. It doesn’t configure your multilingual site for you: the theme work, the URL routing between languages, and the hreflang/canonical setup that tell search engines which version is which live in your CMS and infrastructure, and that’s a separate job. What Specter handles is keeping the actual content of each language correct and in sync. If your setup runs one instance per language, that maps cleanly — each connects on its own. And if you’d rather run the whole thing locally, with each language as a folder of plain files you can diff and back up, that’s the desktop and open-source edition.