Skip to content
Case study · FB-Media (in-house) 2026

Five Romanian publisher sites. One pipeline. Zero headcount after launch.

Five Romanian publisher sites running on a single Docker stack, articles, layouts, distribution, all unattended after launch.

1,200+

Articles published

5

Sites running

4

Custom themes

100%

Uptime since launch

Context

Five Romanian publisher sites in three different niches (general news, sport, business) running side-by-side from a single 32GB Docker host. The brief was to publish daily, in idiomatic Romanian, on a small enough operating budget that the project would not need a single editorial hire after launch.

The constraint that shaped everything: nobody on the team writes Romanian as a first language. So the pipeline had to produce text good enough to read like a local, not “AI-translated”, not “good enough to skim”.

Brief

  • Five news sites, distinct niches and editorial voices.
  • Romanian-language only, but the pipeline lives in English (operator).
  • One Docker host, on a single workstation, no per-site cloud bill.
  • 100% unattended after launch, no scheduled human review of generated articles.
  • Custom theme per site, designed in Figma, built as a WordPress block theme.
  • 12 months of “100% uptime” as the explicit success bar.

Architecture

A single Docker Compose stack on a Gaming PC running WSL2 hosts the whole thing, a shared MariaDB, a shared Ollama, a shared N8N, plus one WordPress + one pipeline container per site.

The article-generation backend is layered: Claude Sonnet (via a local proxy that wraps the Claude Code CLI subscription, so per-article cost is functionally zero) is the primary; if the proxy times out or returns a malformed response, the pipeline falls through to qwen3:14b on Ollama. The fallback runs on the same workstation’s GPU, so there’s never a “both systems down” failure mode unless the host itself is offline.

A small Cloudflare layer sits in front of all five sites: TLS termination, edge caching for the static assets, and DNS.

Outcomes

  • 1,200+ articles published across the five sites in the first months after launch.
  • 100% uptime since launch, the only outages were planned host reboots, never the pipeline.
  • Four custom themes shipped from Figma, with the typography drift between them caught in v2 (see “What I’d do differently”).
  • Zero editorial headcount, the founder spends less than 30 minutes a week on the operator console.
  • Per-article cost is bounded by the Claude Max subscription Fares already pays for, no per-article API spend.

Screens

[FILL: replace with anonymized screenshots of the operator console + a side-by-side of two of the four custom themes. Avoid screenshots of the public sites themselves, the brand identities are sensitive.]

What’s next

Two items on the next-iteration list:

  1. Shared object storage, replacing per-container WordPress uploads dirs. The single-host architecture caps comfortable horizontal scaling at the current site count; a shared S3-compatible store (likely Cloudflare R2) would lift that ceiling.
  2. Per-language editorial styles. Each of the four themes currently shares one tone-of-voice prompt; promoting the prompt to a per-niche style guide would let the sport and business sites diverge stylistically without manual editing.

The tech

Tech used

  • WordPress
  • Docker
  • MariaDB
  • N8N
  • Ollama
  • Claude
  • Cloudflare

What I'd do differently

Move the WordPress instances behind a shared object storage layer from day one. Per-site uploads dirs were fine for v1 but limit horizontal scaling once a single site sustains heavy traffic.

Want something like this for your team?

30-minute discovery call. No pitch deck. We talk about what you're shipping, what's in the way, and whether I can help. If yes, you get a fixed quote within a week.