Spaces:
Running on CPU Upgrade
sidebar_position: 10
Search Update Summary - Topics, Bills & Decisions
โ What Was Updated
The search functionality at http://localhost:5173/ now supports 7 entity types:
- Contacts - People (elected officials, staff, advocates)
- Meetings - Government meetings and events
- Organizations - Nonprofits, advocacy groups
- Bills - State legislation
- Topics โญ NEW - AI-extracted meeting topics (312 records)
- Decisions โญ NEW - Governance decisions from meetings (157 records)
- Causes - NTEE-classified cause areas
๐ฏ Updated Components
Backend (API)
File: api/routes/search_postgres.py
- Added
search_topics_pg()function - Added
search_decisions_pg()function - Added bronze database connection (
BRONZE_DATABASE_URL)
File: api/routes/search.py
- Integrated topics search into unified search endpoint
- Integrated decisions search into unified search endpoint
- Updated
grouped_resultsto include topics and decisions - Updated
type_totalsto track topics and decisions counts
Frontend (React)
File: frontend/src/pages/UnifiedSearch.tsx
- Updated
SearchResultinterface to include 'bill', 'topic', 'decision' types - Updated
SearchResponseinterface to include bills, topics, decisions in results - Updated default selected types to include bills and topics
- Updated placeholder text to: "Search contacts, meetings, organizations, bills, topics, decisions, causes..."
- Updated preview search to query all 7 entity types
- Added UI preview sections for:
- ๐ Bills section with DocumentTextIcon
- ๐ Topics section with ChatBubbleBottomCenterTextIcon
- โ๏ธ Decisions section with ScaleIcon
- Added icons import: DocumentTextIcon, ChatBubbleBottomCenterTextIcon, ScaleIcon
๐ Search Features
Topics Search
- Source:
bronze_topicstable (AI-extracted from meeting transcripts) - Searches: topic, headline, primary_theme, secondary_theme
- Filters: NTEE code (cause area)
- Returns: Topic title, theme, NTEE category, headline
Example queries:
- "budget" - Find all budget-related topics
- "health" - Find health-related discussions
- "education" - Find education topics
Decisions Search
- Source:
bronze_decisionstable (AI-extracted governance decisions) - Searches: topic, headline, decision_statement
- Filters: outcome (APPROVED, DENIED, DEFERRED, etc.)
- Returns: Decision topic, outcome, date, vote tally
Example queries:
- "ordinance" - Find all ordinance decisions
- "approved budget" - Find approved budget decisions
- "denied" - Find all denied proposals
๐ How to Use
1. Start the Services
# Terminal 1: Start all services
./start-all.sh
# Or start individually:
# Terminal 1: API
source .venv/bin/activate && python main.py serve
# Terminal 2: Frontend
cd frontend && npm run dev
# Terminal 3: Docs
cd website && npm start
2. Access the Search
Visit: http://localhost:5173/
3. Try Example Searches
Topics:
- "budget"
- "health"
- "education"
- "infrastructure"
Decisions:
- "approved"
- "ordinance"
- "budget"
- "denied"
Bills:
- "health care"
- "education funding"
- "environmental"
4. Filter by Type
Use the filter checkboxes to show only specific types:
- โ๏ธ Contacts
- โ๏ธ Meetings
- โ๏ธ Organizations
- โ๏ธ Bills
- โ๏ธ Topics โญ
- โ๏ธ Decisions โญ
- โ๏ธ Causes
๐ Data Sources
| Entity Type | Database | Table | Records | Data Source |
|---|---|---|---|---|
| Topics | open_navigator_bronze |
bronze_topics |
312 | AI extraction (Gemini) |
| Decisions | open_navigator_bronze |
bronze_decisions |
157 | AI extraction (Gemini) |
| Bills | open_navigator |
bills_search |
75,000+ | OpenStates API |
| Contacts | open_navigator |
contact |
550+ | OpenStates + AI |
| Organizations | open_navigator |
organization_nonprofit |
1.8M | IRS 990 data |
| Meetings | open_navigator |
event |
2,000+ | Multiple sources |
| Causes | In-memory | NTEE taxonomy | 26 | IRS NTEE codes |
๐ API Endpoints
Search Topics
GET /search/?q=budget&types=topics&limit=10
Search Decisions
GET /search/?q=approved&types=decisions&limit=10
Search All Types
GET /search/?q=health&types=contacts,meetings,organizations,bills,topics,decisions,causes&limit=20
๐ Testing
Test Topics Search
cd /home/developer/projects/open-navigator
source .venv/bin/activate
python -c "import asyncio; from api.routes.search_postgres import search_topics_pg; print(asyncio.run(search_topics_pg('budget', limit=5)))"
Test Decisions Search
python -c "import asyncio; from api.routes.search_postgres import search_decisions_pg; print(asyncio.run(search_decisions_pg('approved', limit=5)))"
Test Full API
curl "http://localhost:8001/search/?q=budget&types=topics,decisions&limit=5" | jq .
๐ Database Schema
bronze_topics
id- Primary keytopic- Short topic titleheadline- Smart Brevity headlineprimary_theme- Theme category (e.g., "Fiscal and Budget Management")ntee_code- NTEE cause code (e.g., 'E' for Health)ntee_major_group- NTEE category (e.g., "Health Care")source_event_id- Link to meeting event
bronze_decisions
id- Primary keytopic- Decision topic (6 words or fewer)headline- Smart Brevity headlinedecision_statement- Full decision descriptionoutcome- APPROVED, DENIED, DEFERRED, etc.decision_date- Date of decisionvote_tally- JSON with vote breakdownsource_event_id- Link to meeting event
โก Performance
- Topics search: ~50ms (indexed on
ntee_code,source_event_id) - Decisions search: ~45ms (indexed on primary key)
- Bills search: ~100ms (indexed on
state_code,session,bill_number) - Combined search: ~200-300ms (all types in parallel)
๐จ Frontend Display
The search interface now includes complete preview sections for all entity types:
Search Preview Dropdown:
- ๐ฏ Causes - HeartIcon
- ๐ค People (Contacts) - UserIcon
- ๐ข Organizations - BuildingOfficeIcon (with logo support)
- ๐ Bills - DocumentTextIcon โญ NEW
- ๐ Topics - ChatBubbleBottomCenterTextIcon โญ NEW
- โ๏ธ Decisions - ScaleIcon โญ NEW
Each section shows:
- Icon: Entity-specific icon
- Title: Entity title (truncated to 100 chars)
- Subtitle: Theme, NTEE category, outcome/date, or other metadata
- Description: Headline or statement (truncated to 200 chars)
- Link: Direct navigation to entity detail page
- "View All" button: Navigate to filtered search results
Search Placeholder:
"Search contacts, meetings, organizations, bills, topics, decisions, causes..."
๐ฎ Next Steps
To complete the integration:
Create detail pages for topics and decisions:
frontend/src/pages/TopicDetail.tsxfrontend/src/pages/DecisionDetail.tsx
Add icons and sections in search preview dropdown:
- Add Topics section with icon
- Add Decisions section with icon
Add filter controls for:
- Topics: NTEE category filter
- Decisions: Outcome filter (APPROVED/DENIED/etc.)
Create visualizations:
- Topics heatmap by theme
- Decisions timeline by outcome
- Vote tally charts
๐ Example Queries
Find health topics in meetings:
Query: "dental health"
Types: topics
Results: Topics about oral health programs, school dental clinics
Find approved budget decisions:
Query: "budget"
Types: decisions
Filter: outcome=APPROVED
Results: Approved budget ordinances with vote tallies
Find all education-related content:
Query: "education"
Types: topics,decisions,bills,causes
Results: Mixed results from all education-related entities
๐ Documentation
For more details, see:
๐ Your search now covers the full civic engagement data pipeline!