A comprehensive web application for exploring political campaign finance data, featuring interactive visualizations, AI-powered politician descriptions, and detailed funding network analysis.
- Politician Database: Browse and search through thousands of political candidates
- Campaign Finance Data: View detailed financial information including receipts, contributions, and funding sources
- Interactive Filtering: Live-updating filters for chamber, state, party, and search terms
- Pagination: Efficient handling of large datasets with paginated results
- AI-Generated Descriptions: Dynamic politician descriptions powered by Google's Gemini AI
- Funding Network Visualization: Interactive D3.js graphs showing funding connections and sources
- Real-time Filter Counts: Live updates showing remaining options as you apply filters
- Responsive Design: Mobile-friendly interface built with Bootstrap 5
- Force-Directed Graphs: Network visualization of funding relationships
- Funding Source Analysis: Color-coded nodes showing individual, PAC, and party funding
- Interactive Exploration: Click and drag nodes to explore funding networks
- Python 3.8+
- pip (Python package manager)
- Git
-
Clone the repository
git clone https://github.com/mumtahinamomo/HackHarvard.git cd HackHarvard -
Create and activate virtual environment
python -m venv venv # On Windows venv\Scripts\activate # On macOS/Linux source venv/bin/activate
-
Install dependencies
pip install -r requirements.txt
-
Set up environment variables Create a
.envfile in the project root:SECRET_KEY=your_secret_key_here DATABASE_URI=sqlite:///database.db GEMINI_API_KEY=your_gemini_api_key_here
-
Initialize the database
flask db init flask db migrate -m "Initial migration" flask db upgrade -
Run the application
python run.py
-
Access the application Open your browser and navigate to
http://localhost:5000
The application uses SQLite for development and can be configured for other databases in production.
HackHarvard/
├── flask_app/ # Main Flask application
│ ├── templates/ # HTML templates
│ ├── static/ # CSS, JS, and assets
│ ├── graph/ # Graph visualization components
│ ├── models.py # Database models
│ ├── routes.py # Main routes
│ ├── politician_routes.py # Politician-specific routes
│ └── graph_api.py # Graph API endpoints
├── migrations/ # Database migrations
├── instance/ # Database files
├── requirements.txt # Python dependencies
└── run.py # Application entry point
/- Homepage/list_politicians- Politician listing with filters/politician/<id>- Individual politician details/api/politicians- JSON API for politician data/generate_description/<id>- AI description generation/graph/<id>- Network visualization for specific politician/network- Standalone network viewer
Politician: Main model storing candidate information, financial data, and AI-generated descriptions
- Google Gemini AI: For generating politician descriptions
- D3.js: For interactive network visualizations
- Bootstrap 5: For responsive UI components