Politician Guide
Political information is scattered across government websites, legislative records, campaign finance databases, and financial disclosures. I built Politician Guide to bring these records into one searchable experience.
I designed and built both Politician Guide and its data foundation, PoliDB, including the Python ingestion pipeline, central database, API, and public research interface.
Designing the Research Experience
The starting point is simple: find an official and explore their record. I organized the experience around a profile that keeps biographical context, legislative activity, and financial information together.
From Search to a Profile
Visitors can search by name or narrow the directory by state, party, or office. The profile establishes who they are researching before introducing individual records.
From a Profile to the Evidence
Profile tabs group votes, sponsored bills, campaign funding, and disclosures around the same official. Visitors can filter recorded votes and follow source links to investigate an individual action.
Following Money & Influence
Financial research extends from the profile into dedicated views of contributors, campaign finance, disclosures, stock trades, and lobbying. These connections help visitors examine funding alongside public activity, while keeping the distinction between a documented relationship and evidence of influence clear.
Comparing Officials & States
Visitors can also place officials side by side to compare their backgrounds and legislative records. Where shared roll-call votes are available, voting similarity is based on those comparable votes, giving the result a defined basis.
Also compare states finance and taxes, crime rate, education costs, and more.
Engineering Reliable Public Data
Building PoliDB as the Data Foundation
I built PoliDB as the central database behind Politician Guide. A Python application collects and normalizes information from public sources, then stores it in PoliDB as the platform’s single source of truth. PoliDB’s API makes those records available to Politician Guide, separating data collection and management from the public browsing experience.
From Public Sources to PoliDB to Politician Guide
PoliDB — the data foundation I built
-
Public Sources
Government APIs & official recordsLegislation, votes, financial records, and reference datasets -
Python Application
Collect & normalizeGather source data, reconcile identities, and store consistent records -
PoliDB
Single source of truthThe central database I built for collected political and government data -
PoliDB API
Access to central recordsSupplies the data foundation to Politician Guide
Politician Guide reads from the PoliDB API
Politician Guide — the public research experience
-
Refresh Workers
Background updatesBounded requests, backoff, and deduplication -
Local Browsing Data
Saved snapshots & linked recordsLocal copies for reliable browsing, stored in MariaDB/MySQL -
Application API
Express + TypeScriptSearch, aggregation, and comparisons over saved data -
Public Interface
React + TanStack QueryProfiles, legislation, and state comparisons
Politician Guide’s shared API specificationGenerates backend validation schemas and typed frontend API hooks.
Connecting Records to the Right Person
An official may appear under different names or offices across legislative and campaign finance records. I used source identifiers and conflict checks to connect those records, leaving ambiguous matches unresolved. When verified duplicates are consolidated, linked records, an audit history, and existing profile URLs are preserved.
Preserving Access When Sources Fail
Politician Guide keeps local snapshots and linked records from PoliDB for reliable browsing. Background workers refresh these copies through the PoliDB API separately from public page requests, so saved information remains available if a refresh fails. Request limits and backoff manage refresh traffic. This trades immediate freshness for more dependable access while keeping PoliDB as the central source of truth.
Sections without saved data explain their availability. Failed downloads and information a provider has not collected are treated separately, so an unavailable source does not become a misleading empty result.
Keeping the Interface and Backend Consistent
Politician Guide has its own application API, built with Express and TypeScript, which serves its saved browsing data to the React interface. A shared API specification keeps this interface and backend consistent as the product evolves. Its MariaDB/MySQL storage supports the public application; PoliDB remains the central database for the ingestion pipeline.
Core technologies: Python, React, TypeScript, TanStack Query, Express, and MariaDB/MySQL.
Results
A Nationwide Collection of Connected Political Records
Politician Guide brings tens of thousands of legislative records together with profiles of more than 10,000 politicians and coverage spanning all 50 states. By connecting officials, legislation, voting records, campaign finance, and public spending in one searchable experience, the platform helps people investigate relationships that would otherwise require navigating separate databases. The achievement is both the scale of the collection and the context that makes those records useful.
Together, PoliDB and Politician Guide form a working public research platform, from collecting source records to presenting them in context. Visitors can move from finding an official to examining individual records and comparisons, with source links and coverage context supporting further investigation.
Coverage snapshot: On October 31, 2026, the public homepage reported 10,655 politicians, 57,478 bills, 40,567 roll-call votes, and representation across 50 states. Coverage varies by official and source.
