Neutral, non-partisan tracker of US legislative activity: bills, votes, amendments, and riders, made searchable.
The unfiltered public record of what government does.
Docket tracks federal and state legislative activity and makes it searchable for any citizen - bills, votes, amendments, riders, spending awards, executive actions, and the closed-door procedural moves that rarely make the news.
Every fact links directly to an official government record. No editorializing. No partisan framing. Just the record.
Docket is deliberately and structurally non-partisan. It presents the official public record as-is. To enforce that:
.gov or state legislature URL. No think tanks, no news sources, no secondhand data.See docs/NEUTRALITY.md for the full enforceable doctrine, including CI gates.
|
Activity feed - dark mode
|
Activity feed - light mode
|
|
Federal spending tracker
|
Cross-type search
|
All primary sources are free and official. No secondhand sources appear in user-facing data.
| Source | Data | Auth |
|---|---|---|
| Congress.gov API | Bills, amendments, members, votes | Free api.data.gov key |
| GovInfo API | Full bill text, Congressional Record, public laws | Same key |
| USAspending.gov API | Federal awards, agency outlays | None |
| Treasury Fiscal Data | Debt, deficit, daily cash flows | None |
| House Clerk XML | Roll-call votes, posted within hours | None |
| Senate roll-call XML | Senate roll calls | None |
| Federal Register API | Executive Orders, rules, notices | None |
| LDA.gov API | Lobbying disclosures (LD-1/LD-2) | Free key |
| OpenStates v3 | 50-state bill and vote data | API key (paid tier for production) |
| LegiScan | State coverage supplement | API key |
| CBO | Cost estimates per bill | None (scrape) |
When an aggregator normalizes data (OpenStates, LegiScan), the user-facing source link always points to the underlying official government record.
See docs/DATA_SOURCES.md for the full contracts, rate limits, and change-detection strategy.
Government APIs --> Python ingest workers --> SQLite
(Congress.gov, (services/ingest/) (docket.db)
GovInfo, |
USAspending, v
Federal Register, Next.js API routes
OpenStates, ...) (app/api/*)
|
v
Browser (dark + light)
The ingest layer polls each source on a configurable schedule, detects changes by watermark and content-hash, and writes normalized rows to SQLite. The Next.js frontend reads its own API routes backed by better-sqlite3 - no separate API server needed for single-box deployments. Every row carries an allowlisted sourceUrl pointing to an official government endpoint; the build rejects any fact without one.
Detailed architecture: docs/ARCHITECTURE.md
API contract: docs/API.md
Ingest strategy: docs/INGESTION_STRATEGY.md
git clone https://github.com/zionboggan/docket.git
cd docket
npm install
cp .env.example .env
# Fill in DOCKET_CONGRESS_KEY (api.data.gov key)
# Optional: DOCKET_OPENSTATES_KEY, DOCKET_LEGISCAN_KEY, DOCKET_LEGISCAN_KEY
cd services/ingest
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
# Seed with federal data (no keys needed for GovInfo bulk path)
DOCKET_DB_PATH=../../docket.db python -m ingest.run --source bills_bulk --once
DOCKET_DB_PATH=../../docket.db python -m ingest.run --source votes_house --once
# from repo root
DOCKET_DB_PATH=./docket.db npm run dev
Open http://localhost:3000.
npm run neutrality
This checks all generated copy, summaries, and push text against the banned-words list and confirms every fact has an allowlisted source URL.
| Layer | Technology |
|---|---|
| Frontend | Next.js 14 (App Router), React 18, Tailwind CSS |
| Database | SQLite via better-sqlite3 |
| Ingest | Python 3.11+, asyncio, ARQ (Redis-backed workers) |
| Fonts | Archivo (display), JetBrains Mono (data labels), Fraunces (prose) |
| Hosting | Cloudflare Pages (frontend edge) + self-hosted ingest workers |
| Push | ntfy (MVP), Web Push API |
Contributions that strengthen neutrality, improve data coverage, or fix bugs are welcome.
Before opening a PR, run npm run neutrality and confirm the lint passes. Any copy that adds qualitative modifiers, assigns blame, or characterizes a bill's merit will not be merged.
See the neutrality doctrine at docs/NEUTRALITY.md.
Apache 2.0 - see LICENSE.