Politics, in plain English.
Poly is a mobile-first web app that helps Gen Z voters understand political issues, simplify legislation, and discover which candidates align with their values. Built for clarity and trust, Poly transforms complex civic information into an engaging, location-aware experience.
- Vibe Check: Swipe through political issues to build your values profile without needing deep political knowledge
- Civic Match: See which local candidates align with your values based on issue agreement, not party affiliation
- No-Read Translator: Paste or upload policy documents and get AI-powered explanations in plain language
- Ask Poly Chat: Ask follow-up questions about policies, candidates, or civic topics in a conversational interface
- Location-Aware: Enter your ZIP code to see candidates and elections relevant to where you actually vote
- Interactive 3D-style U.S. map landing experience
- Neutral, factual framing focused on values alignment rather than voting recommendations
- Mobile-optimized swipe and tap interactions
- AI-powered policy explanations via Amazon Bedrock
- Local JSON data architecture for reliable demos
- Frontend: React 19, TypeScript, Tailwind CSS, Framer Motion
- Build Tool: Vite
- Backend: AWS Lambda, API Gateway, Amazon Bedrock
- Data: DynamoDB, local JSON files
- Testing: Vitest, Testing Library, Fast-check (property-based testing)
# Install dependencies
npm install
# Run development server
npm run dev
# Build for production
npm run build
# Preview production build
npm run preview
# Run linter
npm run lintpoly/
├── src/
│ ├── components/ # React components (VibeCheck, CandidateCard, etc.)
│ ├── services/ # Business logic and API services
│ ├── engines/ # Matching and location resolution logic
│ ├── context/ # React context providers
│ ├── data/ # Local JSON data files
│ ├── types/ # TypeScript type definitions
│ └── lambda/ # AWS Lambda functions
├── public/ # Static assets
└── __tests__/ # Unit and property-based tests
Poly is built on three core principles:
- Neutral & Trustworthy: Present information factually without political bias
- Location-First: Tie all content to the user's actual voting jurisdiction
- Gen Z Native: Fast, mobile-friendly, and conversational without being gimmicky
This project uses:
- TypeScript for type safety
- ESLint for code quality
- Vitest for unit testing
- Fast-check for property-based testing
- Tailwind CSS for styling
MIT