Back

Editorial process

How it's made.

Every newsletter issue and every blog post is shaped by an editorial process that combines AI synthesis with human judgment. Here's exactly how.

The weekly newsletter

Seven stages, ~60 seconds end-to-end. No issue ships without a human approving the draft.

7 stages

From RSS feed to inbox

  1. Fetch the news

    RSS · no LLM

    RSS feeds from TechCrunch, The Verge, VentureBeat, HN + Swiss outlets (Netzwoche, IT-Markt, Startwerk, Technikblog).

  2. Compose the issue

    Claude Opus 4.7

    Picks the deep dive + 3 top stories + 5 industry-snapshot bullets + 2-3 Swiss picks from the freshly-gathered pool.

  3. Fetch story thumbnails

    og:image + gpt-image-1

    og:image probe on each source URL. AI fallback for sites that block scrapers (X, paywalled Reuters).

  4. Generate cover image

    gpt-image-1

    Header cover generated in our brand aesthetic (amber palette, abstract geometric).

  5. Save draft

    Supabase · no LLM

    Persisted with an issue number. Status stays "draft" until human approval.

  6. Editorial review

    Human · /admin

    Human read-through. Edits to headlines, phrasing, attribution. Inline preview matches the final email pixel-for-pixel.

  7. Ship

    Resend · human

    Sent via Resend in batches of 50 with RFC-compliant List-Unsubscribe headers. One-click vote block in the footer.

The Weekend Editions

Longer single-topic format, published occasionally on Sundays. Structure, story selection, and analytical framing are written by the editor; AI assists with image generation and copy refinement. Nothing automated here — each edition is hand-composed.

The blog

Six stages, ~2 minutes end-to-end, strict validation at every gate. If a stage fails (unverifiable facts, corporate voice, missing source), the process aborts — no zombie drafts.

6 stages

From raw topic to published post

  1. Pick the angle

    Sonnet 4.6 · planner

    The “planner” reads ~24 fresh items and picks the one that deserves a take, anchored to one of the six column themes.

  2. Read the source

    Sonnet 4.6 · researcher

    The "researcher" pulls the source article, extracts publicly-verifiable facts, flags rumours and single-sourced claims.

  3. Stress-test the angle

    Sonnet 4.6 · critic

    The "devil's advocate" runs 8 critical lenses (operator, executive, regional reader, cynic). Returns sharpen / revise / kill.

  4. Draft the column

    Opus 4.7 · writer

    600-900 words, voice calibrated to TC × Wired × Verge × Stratechery with the Romand register. No slogans, no first-person singular.

  5. Fact-check claims

    Sonnet 4.6 · fact-check

    The "fact-checker" walks every material claim — entity, number, date, quote, attribution — and checks each one against the source material. Severity-grades anything that doesn't hold up.

  6. Revise and ship

    Editor + validation

    Editor pass on voice failures (oracle voice, hype, AI tells). Strict gates (sources linked, ≥3 subheaders). Cover image. Human review in /admin.

Long-form essays

A note on method, for the curious

It seemed faintly absurd to publish a 3,500-word essay about the frontier of AI without acknowledging the tools that made it possible to write — and design — it. So here, briefly, is how a piece like this comes together.

We start with a research brief and point two frontier AI systems at it — Claude (Anthropic) and ChatGPT (OpenAI), both running in deep-research mode. Between them, they read roughly 170 primary sources across the past six months: lab papers from Anthropic, OpenAI, Google DeepMind and Apollo Research; conference keynotes from SAP Sapphire and Sequoia Capital; the International AI Safety Report; the Apertus release documentation; Mistral's European AI playbook; and rather more arXiv preprints than was strictly comfortable.

On top of that machine pull, the editor adds sources and articles hand-curated and saved to a dedicated directory for the topic — the human pre-reading layer the AIs don't have access to, and the one that anchors the essay in things nobody could have guessed.

The result is a roughly 30,000-word research pack. A human editor — caffeinated, opinionated, Romandy-based — then cuts, frames, structures, fact-checks, and rewrites it into the essay you just read. The page itself is then designed and built using Claude's design system, which produces two complete editorial directions — an NYT-style photo-led layout and a Swiss-typography dispatch — before we choose the one you are reading on.

The AI does the reading, the drafting scaffolding, and the front-end. The human does the choosing, the cutting, the framing, and the final word on every sentence and every pixel. Both, we like to think, do their best work.

The byline is Romandy CTO Editorial because the editorial responsibility is ours alone. If anything in the piece is wrong, that is a human mistake, not a machine one.

The newsroom

Romandy CTO newsroom illustration

Each process reads like a real newsroom: several LLM "agents" with distinct roles, the way a serious magazine has separate people for pitch editing, reporting, standards review, copy editing, and fact-checking. The role separation is deliberate — one agent doing everything would produce more average, less verifiable content.

And like a newsroom, each role has its own style book — a Markdown file you can read in full. Click the "Style book" link at the bottom of each card to read the actual instructions we give that agent.

Planner — illustration

Planner

Blog

aka Pitch Editor (in the newsroom)

Claude Sonnet 4.6

Role: Pick the angle

Reads the candidate pool and picks the single subject worth a take this week. Maps it to one of the six column themes. Refuses to continue if nothing fits.

Does not draft. Does not fact-check.

Researcher — illustration

Researcher

Blog

aka Beat Reporter (in the newsroom)

Claude Sonnet 4.6

Role: Read the source

Fetches the source article and extracts publicly-verifiable facts (numbers, dates, entities, direct quotes). Explicitly flags rumours and single-sourced claims.

Does not opine. Does not synthesise.

Devil's Advocate — illustration

Devil's Advocate

Blog

aka Standards Editor (in the newsroom)

Claude Sonnet 4.6

Role: Stress-test the angle

Runs eight critical lenses against the proposed angle: operator, executive, regional reader, cynic, etc. Returns a verdict: sharpen / revise / kill.

Does not rewrite. Just judges whether the angle holds.

Writer — illustration

Writer

Blog

aka Staff Columnist (in the newsroom)

Claude Opus 4.7

Role: Draft the column

600-900 words. Voice calibrated to TechCrunch × Wired × The Verge × Stratechery, then dialled back to the Romand register. No slogans, no first-person singular, no US-business cadences.

Does not pick the subject. Does not validate facts.

Fact-checker — illustration

Fact-checker

Blog

aka Fact Checker (in the newsroom)

Claude Sonnet 4.6

Role: Verify the claims

Walks every material claim — named entity, number, date, quote, attribution — and checks each against the source material. Severity-grades each gap: a rounded number is minor; an invented quote or an unsourced factual claim is blocking.

Does not edit tone. Does not judge angle.

Editor — illustration

Editor

Blog

aka Copy Editor (in the newsroom)

Claude Sonnet 4.6

Role: Revise the voice

Rewrites passages with oracle-voice, hype, hollow slogans, AI tells ("delve", "crucial", "robust"). Does not touch facts.

Does not change numbers or sources.

Composer — illustration

Composer

Newsletter

aka Issue Editor (in the newsroom)

Claude Opus 4.7

Role: Compose the full issue

In a single call: picks the deep dive (1), top stories (3), industry-snapshot bullets (4-5), and Swiss picks (2-3). Drafts the intro, headline, preview text, closing line, and CTO insight quote.

Does not generate images. Does not send.

Style book

newsletter-generator.ts

Image generator — illustration

Image generator

Both

aka Art Director (in the newsroom)

OpenAI gpt-image-1

Role: Produce visuals

Generates the header cover for every edition + every blog post in our brand aesthetic. Also serves as fallback for per-story thumbnails when the source blocks scrapers.

Never reads subscriber content.

Validator (runtime) — illustration

Validator (runtime)

Both

aka Production Desk (in the newsroom)

No LLM — TypeScript code

Role: Lock the invariants

Deterministic checks before publish: ≥3 subheaders, ≥1 source link, no first-person singular, valid frontmatter, JSON schema conformant. Hard-fails if any rule trips.

Fixes nothing — only blocks.

Style book

blog-pipeline.mjs (validation gates)

Human editor — illustration

Human editor

Both

aka Editor-in-Chief (in the newsroom)

Biological brain

Role: Approve and publish

Reads every draft in /admin with an inline preview that matches the final email pixel-for-pixel. Edits headlines, phrasing, attribution. Decides: send, revise, or scrap. Nothing auto-sends.

The only agent with send authority.

Style book

human judgment — no file

The sources

Every issue and every blog post is composed from the public RSS feeds listed below. No secret sources, no clandestine scraping. If a piece cites a fact, it links to its primary source.

Newsletter — global tech

Newsletter — Swiss tech

Blog — broader pool

What we don't do

  • Subscriber emails, names, or personal data are never used as inputs to our prompts.
  • We never invent quotes, statistics, community anecdotes, or sources. Everything links to a primary article.
  • We never pass off AI-generated content as human-written without this page as context.

Why we do it this way

Romandy CTO is a peer network run on the side of a full-time job. AI lets us ship a credible weekly memo without it becoming a part-time job. The trade-off we accept: occasional rough edges in phrasing. The trade-off we refuse: fabricated content, undisclosed AI involvement, or losing the editorial voice.

Questions or feedback on this process? Email hello@romandycto.org.