Inspiration
My partner and I are both kids of immigrants. We witnessed our parents fight to be heard in community gatherings, school boards, and public dialogues, not due to a lack of valuable insights, but because language obstacles and intricate systems marginalized them.
We have observed directly how immigrant groups are consistently marginalized in civic participation. Survey forms are available exclusively in English. Feedback systems that overlook cultural communication styles. Policymakers who are unable to recognize the patterns of inequality in their own data due to a lack of tools to reveal them.
CivicLens is our answer to a question that shaped our childhoods: What if AI could break down the barriers our parents faced and ensure every community member's voice is truly heard and understood?
What it does
CivicLens transforms multilingual civic feedback into actionable insights for policymakers.
Upload feedback → Text, CSV files, or documents in any language
AI processes it:
- Translates non-English feedback (OpenAI GPT-5)
- Analyzes sentiment (positive/neutral/negative)
- Rewrites in inclusive, policy-ready language
- Tags demographics (language, age, income, location)
Dashboard reveals:
- Sentiment distribution across communities
- Representation gaps (e.g., "Spanish speakers report 40% more negative sentiment")
- Actionable recommendations for equitable engagement
Export results as CSV or PDF for policymaker presentations
How we built it
Frontend: React + TypeScript, Tailwind CSS, Shadcn/ui components, Recharts for visualizations
Backend: Express.js with OpenAI GPT-5 API for translation, sentiment analysis, and inclusive rewriting
Database: Supabase (PostgreSQL) with Drizzle ORM for type-safe queries
Key features:
- Async processing pipeline: Upload → translate → analyze → rewrite → visualize
- Custom demographic tagging algorithm detecting language, age, income, location markers
- Representation gap detection: Flags groups with <40% positive or >30% negative sentiment
Challenges we ran into
1. API Cost Management - OpenAI calls add up fast. Solution: Implemented smart caching and batch processing with delays.
2. Multilingual Sentiment Accuracy - Sentiment models work best in English. Solution: Always translate first, then analyze.
3. Database Configuration - Supabase connection strings are tricky. Solution: Created custom setup scripts with clear documentation.
4. Defining "Representation Gaps" - What threshold matters? Solution: Set data-driven benchmarks (<40% positive or >30% negative) after testing.
5. Ethical AI Concerns - How to rewrite without censoring? Solution: Always show original text alongside AI rewrite for transparency.
Biggest lesson: Focus beats features. A working demo that clearly solves a real problem beats an incomplete feature list every time.
Accomplishments that we're proud of
We built a tool that could have helped our parents. That's the accomplishment that matters most. But we're also proud of:
- Full-stack TypeScript application shipped in a hackathon timeframe: frontend, backend, database, and AI integration all working together
- Real multilingual processing
- Actionable insights not just data: the dashboard doesn't just show charts, it tells policymakers exactly which communities need attention
- Ethical AI design—we always show original text alongside rewrites, maintaining transparency and trust
- Type-safe architecture—using Drizzle ORM and Zod validation means fewer bugs and faster development
Most importantly, we proved that AI can amplify marginalized voices instead of replacing them.
What we learned
Technical lessons:
- API costs matter—OpenAI calls add up fast; caching and batch processing are essential
- Translation first, analysis second—sentiment models work best in English, so always translate before analyzing
- Type safety saves time—shared TypeScript types between frontend and backend prevented countless bugs
- Focus on the core loop—we cut voice input, real-time collaboration, and advanced NLP to ship a working MVP
Personal lessons:
- Building for communities you understand is powerful—our immigrant background gave us unique insight into the problem
- Ethical AI requires transparency—showing original + rewritten text side-by-side builds trust
- Data-driven thresholds matter—defining "representation gaps" required testing and iteration, not assumptions
What's next for CivicLens
Short-term:
- Voice input with OpenAI Whisper for audio feedback
- Advanced filtering by date, sentiment, and demographic
- Multi-language dashboard interface
Long-term vision:
- Partner with city councils and school boards for pilot programs
- AI-powered policy recommendations based on sentiment trends
- Show citizens how their feedback led to real policy changes
- Expand to 100+ languages and partner with international civic organizations
Impact goal: Help 50 municipalities identify and address 10,000+ representation gaps in the first year.
Built With
- express.js
- openaiapi
- postgresql
- react
- supabase
- tailwind
- typescript
Log in or sign up for Devpost to join the conversation.