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 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 through a test, the model volunteered that it had invented 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.