Skip to content
Serafin Sanchez
Copydesk β€” an AI newsroom that writes your newsletter preview

Copydesk β€” an AI newsroom that writes your newsletter

Copydesk produces your weekly newsletter for you. Fifteen AI agents pull from your sources, decide what is worth covering, write it in your voice, edit it, and render a finished HTML email. You review it and hit send.

Next.js 16
React 19
Claude Agent SDK
InstantDB
AI Agents
MCP

Project Overview

Copydesk is an AI newsroom that produces your weekly newsletter.

A newsletter is more work than it looks. Every issue means finding the stuff worth covering, deciding what actually matters this week, writing it, editing it, keeping it in your voice, and getting it into HTML that doesn't break in Outlook. The writing is the fun part β€” maybe a fifth of the job. The rest is the part that makes people start a newsletter and quit three issues later.

Copydesk does that work for you. It pulls from your sources β€” podcasts, RSS, X, the web β€” ranks what's worth your reader's time, drafts the issue in your voice, edits it, and renders a finished HTML email. You open it, make any changes you want, and send. The job that used to take a weekend becomes a review.

Copydesk β€” the newsletter team you'd hire if you could A small newsroom of agents, each doing one job: reading, writing, editing.

How It Works

I built it as a newsroom, not one big prompt, because producing a newsletter is really a chain of separate jobs. Fifteen agents each own one stage, and an Editor-in-Chief runs the desk.

πŸ“₯ Content β€” finding the material

  • An RSS Scout reads your feeds, a Web Scout searches the open web (Exa), and a Social Analyst watches X
  • A Transcriptionist turns podcasts and audio into text (AssemblyAI / Deepgram), so a 90-minute episode becomes something the rest of the desk can use

🧠 Intelligence β€” deciding what matters

  • The Signal Analyzer scores every candidate on Relevance, Novelty, and Actionability β€” the filter between "interesting" and "worth your reader's time"
  • The Assignment Editor turns the top signals into a plan for the issue

✍️ Creative β€” writing it in your voice

  • A Staff Writer drafts, a Voice Coach pulls it back toward how you actually write, and a Copy Editor and Engagement Editor tighten it
  • Voice isn't guessed. A Voice Profiler builds a profile from an interview β€” your cadence, your tone, and the words you'd never use

πŸ› οΈ Production β€” getting it ready to send

  • The Production Editor renders the issue as a 600px, table-based, CSS-inlined HTML email that holds up across clients
  • The Editor-in-Chief sequences the whole run and checks the work before any of it reaches you

AI & MCP

The newsroom runs on the Claude Agent SDK, and the model is matched to the job β€” Opus for orchestration and the hard editorial calls, Sonnet and Haiku for the high-volume sourcing and transcription where speed and cost matter more than judgment.

Agents reach the outside world through the Model Context Protocol. RSS, web search, social, and transcription are all wired in as MCP integrations rather than one-off glue, so each agent stays small and does one thing. Every run tracks its own token use and cost, so I always know what an issue cost to produce.

Technical Architecture

  • Next.js 16 (App Router, Turbopack) with React 19 and TypeScript for the dashboard and the pipeline UI
  • InstantDB for real-time state β€” newsletterEmails, agentRuns, and agentLogs, so you can watch the desk work as each agent runs instead of waiting for a result
  • Vercel cron drives the schedule: feeds refresh in the morning, sources get gathered, and the issue moves through the pipeline on a weekly cadence
  • Tailwind CSS 4 and Radix UI for the interface
  • The landing page at getcopydesk.com is a separate, lean Vite site β€” vanilla JS, no framework β€” deployed on Vercel

The Landing Page

The site is its own small Vite build, but the part that took real work was the art, and all of it is generated.

The copper-robot renders β€” the hero, the interstitials, the team headshots β€” are made with Nano Banana Pro (Gemini 3 Pro Image), with Imagen 4 as a fallback when a generation fails. They aren't 3D renders. The prompts ask for photographs of six-inch brass figurines shot macro, and a fixed color grade plus reference images keep the same robot looking like the same robot from shot to shot. The hero video is Veo 3.1, generated image-to-video off the hero still so its first frame matches the rest of the page. It all runs from a handful of Python scripts (google-genai + Pillow). The agency one-pager PDF and the favicon are rendered with Puppeteer.

A robot reviewing proofs on the landing page The render style: photographed brass figurines, not 3D models β€” one consistent character across the whole site.

Tech Stack Breakdown

App

  • Next.js 16 (App Router, Turbopack), React 19, TypeScript
  • InstantDB for real-time runs, logs, and email state
  • Tailwind CSS 4 + Radix UI

AI & agents

  • Claude Agent SDK with a 15-agent newsroom (Opus / Sonnet / Haiku by task)
  • MCP integrations for RSS, web search (Exa), social (X), and transcription (AssemblyAI / Deepgram)
  • Per-run token and cost tracking

Platform

  • Vercel with scheduled cron jobs for the weekly cadence
  • Separate Vite landing site (vanilla JS) at getcopydesk.com

Landing page visuals

  • Nano Banana Pro (Gemini 3 Pro Image) for the robot renders and headshots, with Imagen 4 as a fallback
  • Veo 3.1 for the hero video, generated image-to-video off the hero still
  • Python generation scripts (google-genai + Pillow); Puppeteer for the agency PDF and favicon

Impact

Copydesk turns "spend a weekend pulling an issue together" into "read it and hit send." It does one thing β€” get a newsletter from your sources to a finished email β€” and most of the work went into making each step good enough that the review at the end is short.

Related Projects

Other projects you might find interesting

A free, nonpartisan news site that tracks every bill in Colorado’s 2026 legislative session β€” plain-English summaries, daily status updates, and business-opportunity analysis β€” written by a 15-agent AI newsroom and published as a weekly newsletter.
Next.js 16
React 19
InstantDB
+3
An open-source kit β€” a CLAUDE.md, a few skills and subagents, and a backlog format β€” that keeps AI coding agents on task, plus the site and 15-chapter manual that ship it.
Next.js 16
React 19
Neon Postgres
+3
A live polling app for the classroom. Ask a question, students join by link or QR with no account, and answers land in real time β€” so you hear from everyone, not just the loud ones. Formerly Cognivote.
Next.js 15
React 19
InstantDB
+3