Govroll

Congress, finally readable. Govroll turns the firehose of federal legislation into a feed you can actually follow. Bills are ranked by whether they’re moving, headlined in plain language, and backed by an AI layer that answers questions by quoting the bill itself.

What Govroll is

Govroll started from a simple want: to cast an informed vote on the bills in front of Congress. Chasing that led straight into the problem. Each session produces thousands of bills, most written in citation-dense legalese, and the large majority die quietly in committee. Only a handful gain momentum or become law, and nothing in the official record tells an ordinary person which is which.

Govroll is a civic-transparency platform that makes that readable. It takes the algorithmic feed, the one interface most people already know how to read, and points it at Congress. Bills surface by whether they’re moving. Headlines are in plain language. An AI layer summarizes and quotes them, and your own representatives’ votes sit alongside each one. The tagline puts it plainly: it’s Congress, finally readable.

It’s live at govroll.com, open source, independent, non-partisan, and funded by the people who read it.

A firehose of legislation, ranked by what’s moving and answerable in plain language. Built solo, end to end, and honest about what it costs to run.

A feed that ranks by whether it’s moving

Recency is the wrong sort order for Congress. A bill referred to committee eighteen months ago and then abandoned looks identical, in its official status, to one referred yesterday. So Govroll ranks the feed by a momentum signal that sorts bills into plain tiers (DEAD, DORMANT, STALLED, ACTIVE, ADVANCING, ENACTED) and filters out the roughly 90% that never go anywhere. Knowing a bill is dead is worth as much as knowing it’s advancing. Either way the reader learns where not to spend their attention.

Readability also meant fixing the headline. Official bill titles tend to be either procedural boilerplate (“Providing for consideration of…”) or dense amendment language (“to amend title X… and for other purposes”). Rewriting them with AI would put an editorial voice in charge of deciding what a bill is “really” about, which a non-partisan tool can’t do. So the headline system is deterministic instead. It strips the boilerplate, pulls the action out of amendment titles, and when a title is purely procedural it falls back to the Congressional Research Service’s own neutral summary. The official citation always stays attached, so the bill is exactly as findable and quotable as before.

A low-cost pipeline that knows what’s alive

Behind the feed is a data pipeline that has to stay both fresh and nearly free. Govroll runs on a free hosting tier that caps scheduled jobs at once per day, far too slow for floor votes. So the ingest schedule runs on GitHub Actions instead, calling idempotent, secret-gated endpoints on a staggered cadence: roll-call votes every 30 minutes, new bills every few hours, the in-session and recess detector every ten. Each endpoint resumes from a cursor, so a large backfill that runs past one job’s budget just picks up on the next. It reconciles two public sources: GovTrack for bills, votes, and members, and Congress.gov for full text and action history.

The momentum signal is computed rather than guessed, and built to be read. Hard overrides run first: a bill from a prior Congress is dead, 365 days of silence is dead, a failed vote or veto is dead. Then a graded score ranks the bills that are still alive. Only substantive movement counts toward recency, meaning a markup, a vote, or a chamber passage, so procedural busywork in committee can’t inflate a bill’s rank. The formula is published rather than hidden, because a civic tool shouldn’t sort the public’s attention through a black box.

Some of the sharpest work went into the honest edge cases. Most enacted bills, like naming a post office or a technical fix, pass by voice vote or unanimous consent, which record no individual votes. Govroll infers that from its own data and tells the reader the bill “passed by a method that didn’t record individual votes,” instead of the misleading “your reps haven’t voted.” A failed cloture motion, a failed suspension, and an outright rejection each show up as their own situation, because they mean different things about where a bill actually stands.

Summarize and quote, without a RAG

The AI layer had one hard requirement. It has to both summarize a bill and quote its exact language, with attribution. An earlier attempt a few years back tried to do this with a retrieval pipeline and never landed: retrieval was good at finding relevant passages, but it kept the model from holding enough of the bill to summarize it faithfully. Larger context windows changed that. For the great majority of bills, Govroll now feeds the full text straight into the model and asks it to answer by quoting directly, in markdown blockquotes attributed to the section each quote came from. A standing instruction tells the model never to invent provisions and to say plainly when the bill doesn’t cover what was asked. In the reader, those citations are live links that scroll to and highlight the section they point at.

Model choice follows the cost. The heavy summarize-and-cite work uses a frontier model. The cheap, bounded tasks run on a much smaller one, where the risk of a made-up answer is low to begin with: classifying what a question is asking so retrieval can route it, summarizing what changed between two versions of a bill, writing section captions. Calls go straight to the provider, skipping a gateway’s per-event fee, and every call is metered into a spend ledger. Identical first questions on a bill are cached so the same answer isn’t paid for twice. Retrieval didn’t disappear entirely. It stays as a fallback for the rare bills too large to fit in context, where a vector search over embeddings picks which sections are worth packing in.

Funded by readers, honest about it

AI is the one variable cost that could sink a free civic tool, so Govroll runs it on a public budget instead of a hidden one. Reader donations and AI spend sit in a simple monthly ledger. When a month’s spend outruns what came in, the AI features pause and say so, with a link to chip in, and a surplus from a good month carries forward instead of resetting. The fixed monthly costs are written into the source as plain line items anyone can read and check, and the funding ledger, every citizen keeping it running, is a public page.

The same thinking shapes the data. The address a reader uses to find their representatives stays on their own device rather than on a server. Govroll is independent, non-partisan, and not affiliated with any government, and the design choices follow from that. Deterministic headlines and a published momentum formula are both there so a reader can check the tool’s work rather than take it on faith.

Live, and open source

Govroll is live at govroll.com, with the full loop shipping: the bill feed, plain-language headlines, the momentum signal, per-representative vote records, address-based rep lookup, and the AI reader that summarizes and quotes. The codebase is open source, a Next.js app on a Postgres database, with the ingest pipeline, the momentum formula, and the cost ledger all out in the open.

One person designed and built it end to end, with feedback from Holly along the way: the product, the data pipeline, the AI, payments, and the budget tracking that keeps it honest about what it costs to run.

Selected screens

The feed. Bills are sorted by a momentum signal instead of raw recency, and the count says so out loud: 2,870 shown, 25,982 dormant or dead hidden.
A bill page: a plain-language summary, a status tracker, and an AI note on what changed between the last two versions.
Ask AI answers in plain language and quotes directly from the bill text. Below it, an address lookup that stays on your own device.
Funding is a public page. No ads, no sponsors. Readers keep it running, and the AI pauses when a month's spend outruns donations.

Building something in a domain where trust is the whole product, or an AI layer that has to cite its sources? Tell us about it.