Built with Claude Code: This project is human designed and directed but the code is written by machine intelligences.


Premise

In a floor vote, your representative is 1 person out of 435 making the decision, and in the senate your two senators are 2 out of 100. In committee, that number is more like 1 in 30 so each individual has more influence. Therefore, a constituent can have a lot more impact by keeping track of representatives’ committee activity.

Enter your address or zip code, get back a profile for each senator or representative: contact information, committee assignments, upcoming committee meetings, bills recently referred to those committees, and sponsored or cosponsored bills. When available, each bill includes a plain-language summary of the bills sourced from congress.gov. With upcoming meetings and contact information, constituents using the Representative Tracker have enough to stay informed on the day to day operations of congress and make a call before a decision is made, instead of weeks later when the bill is on the floor.

All information on representatives is sourced from congress.gov, house.gov, or senate.gov and is presented in a position-neutral way. There’s no way of knowing what Constituents think of each issue, so Representative Tracker provides up to date information without opinions.


How it works

One lookup, step by step.

Flowchart of the Representative Tracker pipeline as twelve numbered steps from top to bottom: 1 enter your address, 2 find your congressional district, 3 district-border check, 4 pick which address is yours, 5 identify your representatives, 6 gather each rep's activity, 7 bills waiting in their committee, 8 this week's floor schedule, 9 fresh-saved-copy cache check, 10 fetch it fresh and save a copy, 11 your page, 12 background refresh on a timer.
How a lookup flows, top to bottom (step 12 runs on a timer in the background). Shapes — rounded = start or end, diamond = a yes/no check, rectangle = a step. Colors — teal = your input or result, green = data from an outside source (Geocodio, Congress.gov, House/Senate), blue = our cache, kept for speed. The numbers match the key below. Click the image to enlarge.
  1. You enter your address. Used to find your district, then discarded. No account, nothing stored. Tool: the site’s address form.
  2. Find your congressional district. Your address is resolved to the exact district. Source: Geocodio.
  3. Address on a district border? Check whether the address is right on the border between districts. Source: Geocodio.
  4. You pick which address is yours. Only if the address is right on the border, a second check. Source: Geocodio.
  5. Identify your representatives. One House member and two senators (territories have a non-voting delegate and no senators). Source: Congress.gov API.
  6. Gather each rep’s activity. Committee roles, upcoming committee meetings and hearings, and sponsored or cosponsored bills with verbatim plain-English summaries, plus contact info. Sources: Congress.gov API, the open congress-legislators dataset (committee roles + district offices), and CRS summaries.
  7. Bills waiting in their committee. Expanding a committee reveals the bills referred to it and awaiting action. Source: Congress.gov API.
  8. This week’s floor schedule. What the full House and Senate plan to take up — best-effort and time-stamped. Sources: docs.house.gov, senate.gov.
  9. Do we already have a fresh saved copy? A cache check keeps the common lookup fast. Source: Upstash Redis.
  10. Fetch it fresh, then save a copy. On a cache miss, pull live from the official sources and store the result for next time. Sources: Congress.gov API, the congress-legislators dataset, and docs.house.gov / senate.gov.
  11. Your page. One section per representative, plus the floor schedule — what’s decided, who decides, when, and how to reach them. Built with Next.js and React.
  12. Behind the scenes: refresh on a timer. Scheduled jobs re-warm the saved copies so pages load fast and stay current. Tools: Vercel Cron, GitHub Actions.

Tools & connectors

Stack

  • Next.js (App Router) on Vercel — server-rendered; keeps API keys server-side.
  • TypeScript, Tailwind, Vitest + Testing Library (195 tests, 24 files).
  • Upstash Redis — cache and store for the pre-warmed events index.
  • cheerio — parses the floor-schedule and recess scrapes.

External connectors

Connector Role
Geocodio Address → district + state
Congress.gov API Members, meetings, hearings, bills, CRS summaries, DC contact
unitedstates/congress-legislators Committee assignments + district-office contact
docs.house.gov / senate.gov (scraped) Floor schedule + recess signal
Vercel Cron + GitHub Actions Cache-warming (nightly + every 30 min)

No LLM integration (a previous version used Claude Haiku for summarizing but was retired). Bill text is the Congressional Research Service summary, verbatim.


Lessons From Building

An earlier prototype included a small LLM to summarize bills in plain language and answer questions about the contents. Partway thorough a test, the model mentioned inventing a summary from just the title. This was unacceptable, a civic tool can’t make assumptions and misinform voters. After some consideration of guardrails, I decided it was better to remove the model entirely. Largely because the actual effects and implications of a bill require detailed understanding of law and contemporary politics. Models with only surface level knowledge have neither the reliability nor the expertise needed for use in this tool. So I rebuilt Representative Tracker to pull bill summaries verbatim.

Conclusion

It started as an idea: a more effective way to follow what your representatives are about to do. It became a usable tool, wired into Geocodio, the Congress.gov API, and open congressional datasets, and live at reptracker2.vercel.app.