Roll-call votes:
- Migration 0017: bill_votes + member_vote_positions tables
- Fetch vote XML directly from House Clerk / Senate LIS URLs
embedded in bill actions recordedVotes objects
- GET /api/bills/{id}/votes triggers background fetch on first view
- VotePanel on bill detail: yea/nay bar, result badge, followed
member positions with Sen./Rep. title, party badge, and state
Alert filter fix:
- _should_dispatch returns True when alert_filters is None so users
who haven't saved filters still receive all notifications
Authored-By: Jack Levy
7.6 KiB
7.6 KiB
PocketVeto — Roadmap
Consolidated feature roadmap and release history. Shipped items reflect what is live as of v0.9.3.
Shipped
Foundation & Core Pipeline
- Docker Compose stack — PostgreSQL, Redis, FastAPI, Celery, Next.js, Nginx fully containerized
- Bill polling — Congress.gov incremental sync, filtered to legislation that can become law (
hr,s,hjres,sjres) - Document fetching — GovInfo bill text retrieval with smart truncation for LLM token budgets
- LLM analysis — multi-provider AI briefs (OpenAI, Anthropic, Gemini, Ollama) with amendment diffing
- Citations — every key point and risk cites the bill section + verbatim quote;
cited_fact/inferencelabel - Citation UI — § chips expand inline with quote + GovInfo source link; "Inferred" badge on analytical items
- News correlation — NewsAPI + Google News RSS articles linked to bills via topic tags
- Trend scoring — composite zeitgeist score (0–100) from NewsAPI + Google News + Google Trends, nightly
- Full-text search — PostgreSQL tsvector across bills and members
- Multi-user auth — JWT email/password, admin role, user management panel
- Admin panel — LLM provider/model switching, pipeline stats, external API health, manual task triggers
- Bill type filtering — only legislation that can become law; 60-day seed window on fresh install
Member Profiles & Mobile
- Member profiles — bio, contact info, leadership roles, service history, sponsored/cosponsored counts
- Member interest scoring — composite trend score (NewsAPI + GNews + pytrends), nightly; lazy-loaded on first profile view
- Member news — articles correlated to members via name search
- Mobile UI — responsive layout, slide-in drawer, hamburger header, touch-friendly controls
Follows & Personalization
- Follows — per-user bill, member, and topic follows
- Follow modes —
neutral | pocket_veto | pocket_boostwith mode-selector UI and descriptions - Dashboard — personalized feed from followed bills/members/topics + trending
- Public browsing — unauthenticated guests browse bills, members, topics, and trending;
AuthModalgates interactive actions - Welcome banner — dismissible onboarding card for guests;
localStoragedismiss state
Bill Detail Features
- Bill action pipeline — full legislative action history from Congress.gov; nightly batch + event-driven on change
- Action timeline — full history with latest-action fallback while history loads
- Amendment briefs — "What Changed" badge; collapsible version history panel
- Bill text status indicators — Brief / Pending / No text badge on BillCard (single batch query)
- Draft letter generator — select up to 3 cited brief points, generate constituent letter via configured LLM; ZIP not stored
- Personal notes — private per-bill note with pin, auto-resize textarea; one note per user per bill
- Sponsor linking — poller fetches bill detail for sponsor; backfill task for existing bills
- "No bill text" state — shown on detail page when GovInfo has nothing published
Collections & Sharing
- Collections / Watchlists — named groups of bills, public/private, UUID share token;
CollectionPickerpopover on bill detail - Shareable brief links —
share_tokenonbill_briefs; public/share/brief/[token]page, no login required - Shareable collection links — public
/share/collection/[token]page, no login required
Notifications
- ntfy push — Celery dispatcher POSTs to user's ntfy topic; optional token/basic auth
- RSS feed — private tokenized XML feed per user; always real-time
- Quiet hours — local-time window (IANA timezone auto-detected by browser); events queued and sent as batch after window
- Digest mode — bundled ntfy summary on daily or weekly schedule instead of per-event pushes
- Weekly digest — Monday 8:30 AM UTC; 7-day summary of followed bill activity via ntfy + RSS
- Change-driven alerts —
categorize_action()maps action text to 6 named categories; all three follow types (bill, sponsor, topic) covered - Granular per-mode alert filters — 8 independently toggleable alert types per follow mode (Follow / Pocket Veto / Pocket Boost); preset defaults; tabbed UI with per-tab save
- Roll-call votes —
bill_votes+member_vote_positionstables; on-demand fetch from Congress.gov/votesendpoint; VotePanel on bill detail shows yea/nay bar + followed member positions
UX & Polish
- Party badges — solid red/blue/slate, readable in light and dark mode
- Chamber badges — amber/gold for Senate, slate/silver for House
- Fact vs inference labeling —
cited_fact/inferenceon every cited point; backfill task for existing briefs - Following page — accordion sections, search, topic filters
- Member search — "First Last" and "Last, First" both match via PostgreSQL
split_part() - How It Works page — feature guide covering follow modes, alert filter customization, collections, notifications, AI briefs
Up Next
Phase 4 — Accountability
- Vote History & Timeline — surface roll-call votes in the action timeline; add a "Votes" filter to the bills list so users can find bills that have had floor votes.
- Member Effectiveness Score — nightly Celery task; transparent formula: sponsored bills, bills advanced through stages, co-sponsorships, committee participation, bills enacted. Stored in
member_scores. Displayed on member profile with formula explanation. - Representation Alignment View — for each followed member, show how their votes and actions align with the user's followed topics. Neutral presentation — no scorecard framing.
Phase 5 — Search & Polish
- Search Improvements — filters on global search (bill type, status, chamber, date range); search within a member's sponsored bills; topic-scoped search.
- Desktop View — wider multi-column layout for large screens: sticky sidebar, expanded grid, richer bill detail.
- first_name / last_name Backfill — Celery task to populate empty first/last from stored "Last, First"
namefield via split (affects ~10% of member records).
Backlog
- Notification Channels v2 — email (SMTP), Discord webhook, Telegram bot.
- Cross-Bill Referencing — extract referenced bill IDs from LLM briefs;
bill_referencestable; hover preview popover in BriefPanel for referenced legislation. - Source Viewer Option B — in-app bill text viewer with cited passage highlighted and scroll-to-anchor. Deferred pending UX review of the current GovInfo-link approach.
- Raw Diff Panel —
difflibdiff between stored document versions, shown as collapsible "Raw Changes" below the amendment brief. Zero API calls. - Shareable Collection Subscriptions — "Follow this collection" so other users can subscribe to a public collection and get its bills added to their feed.
v1.0 Definition
v1.0 ships when the following are all live:
- Full bill pipeline (poll → fetch text → LLM brief → news → trend score)
- Cited AI briefs with fact/inference labels
- Follow modes (neutral / pocket_veto / pocket_boost)
- Granular per-mode notification filters
- Push (ntfy) + RSS + digest + quiet hours
- Collections with share links
- Shareable brief links
- Personal notes
- Draft letter generator
- Public browsing (no account required to read)
- Multi-user auth with admin panel
- Member effectiveness score
- Roll-call vote data
All other items above are post-v1.0.