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.

- You enter your address. Used to find your district, then discarded. No account, nothing stored. Tool: the site’s address form.
- Find your congressional district. Your address is resolved to the exact district. Source: Geocodio.
- Address on a district border? Check whether the address is right on the border between districts. Source: Geocodio.
- You pick which address is yours. Only if the address is right on the border, a second check. Source: Geocodio.
- Identify your representatives. One House member and two senators (territories have a non-voting delegate and no senators). Source: Congress.gov API.
- 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.
- Bills waiting in their committee. Expanding a committee reveals the bills referred to it and awaiting action. Source: Congress.gov API.
- 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.
- Do we already have a fresh saved copy? A cache check keeps the common lookup fast. Source: Upstash Redis.
- 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.
- 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.
- 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.