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.
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, andagentLogs, 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.
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.
