Files
PocketVeto/frontend/lib/types.ts
Jack Levy e21eb21acf feat(members): add full member bio, contact info, and service history
Lazy-enriches member profiles on first view via Congress.gov detail API.
Adds office address, phone, official website, congress.gov link, birth
year, terms history, leadership roles, and sponsored/cosponsored counts.
Includes DB migration 0007 for new member columns.

Co-Authored-By: Jack Levy
2026-03-01 00:14:16 -05:00

138 lines
2.7 KiB
TypeScript

export interface MemberTerm {
congress?: number;
chamber?: string;
partyName?: string;
stateCode?: string;
stateName?: string;
startYear?: number;
endYear?: number;
district?: number;
}
export interface MemberLeadership {
type?: string;
congress?: number;
current?: boolean;
}
export interface Member {
bioguide_id: string;
name: string;
first_name?: string;
last_name?: string;
party?: string;
state?: string;
chamber?: string;
district?: string;
photo_url?: string;
official_url?: string;
congress_url?: string;
birth_year?: string;
address?: string;
phone?: string;
terms_json?: MemberTerm[];
leadership_json?: MemberLeadership[];
sponsored_count?: number;
cosponsored_count?: number;
}
export interface CitedPoint {
text: string;
citation: string;
quote: string;
}
export interface BriefSchema {
id: number;
brief_type?: string;
summary?: string;
key_points?: (string | CitedPoint)[];
risks?: (string | CitedPoint)[];
deadlines?: { date: string | null; description: string }[];
topic_tags?: string[];
llm_provider?: string;
llm_model?: string;
govinfo_url?: string;
created_at?: string;
}
export interface TrendScore {
score_date: string;
newsapi_count: number;
gnews_count: number;
gtrends_score: number;
composite_score: number;
}
export interface BillAction {
id: number;
action_date?: string;
action_text?: string;
action_type?: string;
chamber?: string;
}
export interface NewsArticle {
id: number;
source?: string;
headline?: string;
url?: string;
published_at?: string;
relevance_score?: number;
}
export interface Bill {
bill_id: string;
congress_number: number;
bill_type: string;
bill_number: number;
title?: string;
short_title?: string;
introduced_date?: string;
latest_action_date?: string;
latest_action_text?: string;
status?: string;
chamber?: string;
congress_url?: string;
sponsor?: Member;
latest_brief?: BriefSchema;
latest_trend?: TrendScore;
updated_at?: string;
}
export interface BillDetail extends Bill {
actions: BillAction[];
news_articles: NewsArticle[];
trend_scores: TrendScore[];
briefs: BriefSchema[];
}
export interface PaginatedResponse<T> {
items: T[];
total: number;
page: number;
per_page: number;
pages: number;
}
export interface Follow {
id: number;
follow_type: "bill" | "member" | "topic";
follow_value: string;
created_at: string;
}
export interface DashboardData {
feed: Bill[];
trending: Bill[];
follows: { bills: number; members: number; topics: number };
}
export interface SettingsData {
llm_provider: string;
llm_model: string;
congress_poll_interval_minutes: number;
newsapi_enabled: boolean;
pytrends_enabled: boolean;
}