Track: Campus Impact
🍊 Inspiration
As a graduate student at Syracuse University, I've been in courses where I wanted to give feedback midway through the semester — but the only channel is end-of-semester evaluations. By then, it's too late to help me OR the professor. My teammate Ashish and I asked: why is this broken? And can we fix it in 24 hours?
🎯 What it does
OrangeVoice is an anonymous, AI-clustered, mid-semester feedback platform built specifically for Syracuse. It connects three stakeholders who all suffer from the current system:
- 🎓 Students submit anonymous feedback per course, per cycle (weekly). Verified via Blackboard SSO, but no identifier is ever stored with feedback.
- 👨🏫 Professors see AI-clustered themes, an Impact Score, and preserved individual voices — instead of reading hundreds of raw comments.
- 🏛️ Deans monitor cross-course health but get alerts only after a fair 2-cycle escalation process.
The key innovation is procedural fairness: the professor gets Cycle 1 to hear feedback and address it. Only after Cycle 2, when a course still needs support, does the dean's dashboard flag it — with intentionally supportive language, not punitive.
🏗️ How we built it
Two-layer identity model: SU Blackboard SSO verifies enrollment (Layer 1), then OrangeVoice stores only {course, feedback, cycle} — no identifier (Layer 2). Prevents spam without storing identity.
AI-powered clustering: OpenAI GPT-4o mini analyzes all feedback per cycle to generate:
- Impact Score (0-10, color-coded): weighted composite of sentiment (50%) + concern volume (30%) + severity language (20%)
- Theme clusters grouped by student count and severity
- Individual voice preservation for single-student concerns
2-cycle escalation logic: Dean alerts trigger only after 2 consecutive cycles of poor feedback, with percentage-based configurable thresholds (default 10% yellow, 20% orange, 30% red) that scale with class size.
Tech stack:
- Frontend: Streamlit (Python)
- AI: OpenAI GPT-4o mini
- Visualization: Plotly
- Storage: JSON (PostgreSQL in production)
- Hosting: Streamlit Community Cloud
- Auth (production): SU Blackboard SSO
🚧 Challenges we ran into
- Anonymity framing: We initially wrote "no login" as our anonymity story, but realized judges (and users) would immediately worry about spam. We refactored to the two-layer identity model — SSO verifies at the edge, feedback stored anonymously.
- UI contrast: First iteration had readability issues on colored alert cards. Fixed with explicit white text overrides on all colored backgrounds.
- Score direction: We debated whether higher scores should mean more concerns or better health. We chose "higher = healthier" to align with grade-based mental models.
- Escalation thresholds: Balancing false positives (too sensitive) vs missed signals (too tolerant). Solved with configurable per-department sliders.
🏆 Accomplishments we're proud of
- Fully working end-to-end MVP with 3-role dashboards
- Live deployment on Streamlit Community Cloud
- Ethically defensible design: procedural fairness + preserved individual voices + human-in-the-loop
- Clean, judge-friendly UI with SU Orange branding
- 26 pre-seeded feedback entries demonstrating both a critical-alert path (IST 615) and an improvement-recognized path (IST 688)
🎓 What we learned
- Feedback systems that only flag problems are incomplete — recognizing improvement is equally important
- AI works best as a "compressor" (clustering, summarizing) rather than a decision-maker
- Percentage-based thresholds scale better than fixed numbers across different class sizes
- Two-layer identity models solve the "anonymous but not spammable" tension elegantly
🚀 What's next for OrangeVoice
- Real Blackboard SSO integration for production authentication
- Blackboard Roster API for automatic enrollment counts (removes manual input)
- Weekly email digests via SendGrid so professors get proactive summaries
- Multi-department dashboards with per-college calibration
- Historical baseline calibration against past Syracuse course evaluation data
Log in or sign up for Devpost to join the conversation.