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
Fetch the news
RSS · no LLMRSS feeds from TechCrunch, The Verge, VentureBeat, HN + Swiss outlets (Netzwoche, IT-Markt, Startwerk, Technikblog).
Compose the issue
Claude Opus 4.7Picks the deep dive + 3 top stories + 5 industry-snapshot bullets + 2-3 Swiss picks from the freshly-gathered pool.
Fetch story thumbnails
og:image + gpt-image-1og:image probe on each source URL. AI fallback for sites that block scrapers (X, paywalled Reuters).
Generate cover image
gpt-image-1Header cover generated in our brand aesthetic (amber palette, abstract geometric).
Save draft
Supabase · no LLMPersisted with an issue number. Status stays "draft" until human approval.
Editorial review
Human · /adminHuman read-through. Edits to headlines, phrasing, attribution. Inline preview matches the final email pixel-for-pixel.
Ship
Resend · humanSent 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
Pick the angle
Sonnet 4.6 · plannerThe “planner” reads ~24 fresh items and picks the one that deserves a take, anchored to one of the six column themes.
Read the source
Sonnet 4.6 · researcherThe "researcher" pulls the source article, extracts publicly-verifiable facts, flags rumours and single-sourced claims.
Stress-test the angle
Sonnet 4.6 · criticThe "devil's advocate" runs 8 critical lenses (operator, executive, regional reader, cynic). Returns sharpen / revise / kill.
Draft the column
Opus 4.7 · writer600-900 words, voice calibrated to TC × Wired × Verge × Stratechery with the Romand register. No slogans, no first-person singular.
Fact-check claims
Sonnet 4.6 · fact-checkThe "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.
Revise and ship
Editor + validationEditor 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

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
Blogaka 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.
Style book
idea_to_outline.md →
Researcher
Blogaka 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.
Style book
research_standards.md →
Devil's Advocate
Blogaka 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.
Style book
devils_advocate.md →
Writer
Blogaka 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
Blogaka 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.
Style book
fact_checking.md →
Editor
Blogaka 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.
Style book
approval_workflow.md →
Composer
Newsletteraka 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
Bothaka 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.
Style book
image-prompts.md →
Validator (runtime)
Bothaka 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
Bothaka 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
- TechCrunch — techcrunch.com/feed
- The Verge — AI — theverge.com/rss/ai-artificial-intelligence
- VentureBeat — AI — venturebeat.com/category/ai/feed
- Hacker News — front page, 100+ points
Newsletter — Swiss tech
- Netzwoche — News — netzwoche.ch (DE, Swiss ICT)
- Netzwoche — Storys — long-form pieces
- IT-Markt — it-markt.ch (DE, Swiss IT business)
- Startwerk — startwerk.ch (Swiss startups)
- Technikblog — technikblog.ch (Swiss consumer tech)
Blog — broader pool
- TechCrunch
- The Verge — full feed
- WIRED
- CNET
- Mashable
- VentureBeat — full feed
- VentureBeat — AI
- The Verge — AI
- Hacker News — front page, 75+ points
- Dev.to
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.