Project Overview
Assembly Required is a free, nonpartisan news site that covers the Colorado state legislature. It tracks every bill in the 2026 General Assembly session and turns each one into a plain-English read: what the bill actually does, where it stands, who's behind it, and — for entrepreneurs — what business opportunity it might create. It's built for busy Colorado residents who want to know what their legislature is doing without reading statute.
The premise is that statehouse news is both important and unreadable. The real action is at the state level — housing, healthcare, taxes, schools — but it's buried in bill text, fiscal notes, and committee calendars that no normal person has time to parse. Assembly Required does the parsing: it watches the whole session, explains each bill in human language, and ships the week's most important moves as a newsletter.
assemblyrequired.co — every bill gets a headline, a status, and a plain-language story.
How It Works
The product is two systems sharing one database. A backend AI newsroom does the reading and writing; a public Next.js site does the publishing.
🏛️ Track the whole session
- A daily Vercel cron scrapes the bill index from leg.colorado.gov, diffs it against the database, and pulls fresh details for anything that changed — so status, sponsors, and committee assignments stay current without anyone touching it
- Each bill carries its status and history, sponsors, committee, subject tags, a link to the official text, and its fiscal note
✍️ Explain it in plain language
- Every bill gets a plain-English summary and a full analysis article — the legalese translated into what it means and who it affects
- An opportunity signal flags bills that open a door for businesses and entrepreneurs, which is the angle most legislative trackers ignore
- Bills are organized into topic pages — education, healthcare, housing, taxation, criminal justice, and more — so readers can follow only what they care about
📰 Publish and send
- The site is a clean, newspaper-style front page: a featured story, a "latest" rail, topic filters, and search across the session
- The same analysis is assembled into a weekly newsletter (Beehiiv) for readers who'd rather have it land in their inbox than check a site
The Newsroom Behind It
The writing isn't a single prompt. The analysis and the newsletter are produced by a 15-agent newsroom built on the Claude Agent SDK — an Editor-in-Chief (Opus) that orchestrates fourteen subagents across four stages: content acquisition, intelligence, creative, and production.
The model is matched to the job — Haiku for high-volume, low-reasoning work (feed scanning, transcription, production), Sonnet for writing and analysis, and Opus for the high-leverage calls (orchestration, voice review, editorial assignment). Agents reach the outside world through the Model Context Protocol — seven pre-built MCP servers for the database, RSS, transcription, social, and web search — so each agent stays small and does one thing. The newsroom writes its bill analysis straight into the shared database, where the public site picks it up.
SEO & AEO — built to be found by people and by AI
A statehouse tracker is only useful if people (and now AI agents) can find the right bill. So discovery is a first-class feature:
- Structured data on every bill — JSON-LD using schema.org
Legislation,Article,FAQPage,NewsMediaOrganization, andDataset, so search engines and assistants can read a bill page as data, not just prose - Answer-engine optimization — a
llms.txtsite overview and a dynamicllms-full.txtthat serves the entire bill dataset as plaintext, plusrobots.txtexplicitly welcoming the major AI crawlers (GPTBot, ClaudeBot, PerplexityBot, and others) - AI-referral analytics — GA4 is wired to track traffic arriving from ChatGPT, Perplexity, Gemini, Claude, and Copilot, so the AEO work is measured, not assumed
Technical Architecture
- Next.js 16 (App Router) with React 19 and TypeScript (strict) for the public site — server components fetch bill data, interactive filtering and search live in client components
- InstantDB is the shared spine: the newsroom writes bill analysis (
articleContent,plainEnglishSummary,opportunitySignal) and the site reads it — two repos, one database, oneINSTANT_APP_ID - ISR keeps bill pages fast and fresh — pages revalidate on a timer, and the cron route calls
revalidatePathafter each daily update, with an on-demand revalidate webhook for external tools - Tailwind CSS 4 with a custom editorial theme — DM Sans and Source Serif 4 on a cream/navy palette for a newspaper feel
- Deployed on Vercel, with the daily scrape running as a scheduled cron and the newsletter delivered through Beehiiv
Tech Stack Breakdown
Public site
- Next.js 16 (App Router), React 19, TypeScript (strict)
- Tailwind CSS 4, DM Sans + Source Serif 4 editorial theme
- ISR, daily Vercel cron scraping leg.colorado.gov, Beehiiv newsletter
Newsroom (backend)
- 15-agent newsroom on the Claude Agent SDK (Opus / Sonnet / Haiku by task)
- 7 MCP servers (InstantDB, RSS, AssemblyAI, TwitterAPI.io, Exa, and production)
- Writes plain-English summaries, full analysis, and opportunity signals
Data & discovery
- InstantDB as the shared spine between both repos
- JSON-LD (Legislation, Article, FAQPage, Dataset), llms.txt + llms-full.txt
- robots.txt for 11 AI crawlers; GA4 AI-referral tracking
Why I Built It
State politics decides most of what touches daily life, and almost no one follows it — not because people don't care, but because the source material is unreadable and there's too much of it. The bet behind Assembly Required is that an AI newsroom can do the unglamorous 80% — reading every bill, tracking every status change, translating the legalese — so a Colorado resident only has to do the part that's actually worth their time: deciding what they think.
