Inspiration
During the Palestine conflict, I watched people read the same events but walk away with opposite realities. It wasn't fake news—it was framing. One headline said "clashes" when one side had F-16s. Palestinian victims "died" while Israeli victims were "killed." Sources were framed as "Hamas-run ministry" vs "Israeli officials." I realized: real-time fact-checking is impossible, but revealing how stories are told is totally achievable.
What it does
Bias Mirror analyzes news articles to reveal manipulation techniques in real-time:
- Loaded language: "terrorist" vs "fighter" vs "freedom fighter"
- Emotional manipulation: "innocent children" vs neutral "civilians"
- Passive voice hiding actors: "mistakes were made" (by whom?)
- Source imbalance: Shows when articles quote one side 5x, the other 0x
- Strategic omissions: Flags missing context that changes interpretation
- Color-coded highlighting: Red for loaded language, yellow for missing context, orange for source imbalance, blue for passive voice
- Alternative perspectives: Suggests sources with different framing
How we built it
Tech Stack: React, Tailwind CSS, Claude API (Anthropic)
8-Hour Sprint:
- Hours 1-2: Engineered specialized prompt teaching Claude to identify 15+ bias patterns without fact-checking
- Hours 3-5: Built clean interface with color-coded real-time highlighting and expandable explanations
- Hours 6-7: Created Bias Pattern Library for conflict coverage (Palestine/Kashmir/Rohingya) and Source Credibility Database (30 outlets)
- Hour 8: Demo prep with examples showing different bias directions
Core algorithm: Two-pass system—fast regex/keyword matching (<100ms) then AI semantic analysis on flagged sections (2-3s)
Challenges we ran into
The fact-checking trap: Initially tried verifying claims, but realized it's impossible in real-time and many claims are fundamentally unverifiable. Pivoted completely to revealing framing instead.
False equivalence: Early version flagged "occupation" as loaded language, but it's the actual legal term! Built context-aware detection distinguishing emotional manipulation from legitimate contentious terminology.
Detecting omissions: Hardest challenge—how do you flag what's NOT there? Solution: domain knowledge library that checks for missing context patterns.
Passive voice is tricky: Simple grammar detection failed. Built semantic analysis for "responsibility obscuring"—detecting when agency is hidden, not just passive grammar.
Accomplishments that we're proud of
- Intellectual honesty: Admitting we can't fact-check, only reveal framing
- Actually works: Tested on 20+ real articles across conflicts—consistently reveals subtle bias
- Prevents new bias: Doesn't become another arbiter of truth—shows multiple framings, lets users decide
- Generalizable: Works for Palestine, Kashmir, Rohingya, any conflict
- Demo power: Watching judges' faces when they see their trusted source highlighted
What we learned
Technical: Prompt engineering > model size. Well-crafted prompts on Claude Sonnet outperformed generic GPT-4 usage.
Conceptual: "Objectivity" is impossible, "transparency" is achievable. No reporting is unbiased, but we CAN reveal the bias.
Human insight: People don't want to be told what's true—they want to understand WHY sources frame things differently. The tool that scaffolds critical thinking beats the tool that thinks for you.
Most powerful: The biggest bias is what's omitted. Detecting silence is harder than detecting loaded language, but it's what actually shapes perception.
What's next for BIAS TRACKER
- Browser extension: Real-time analysis while reading any news site
- Video/audio support: Transcript analysis for broadcast news
- Multi-language: Arabic, Hebrew, Urdu for conflict zone coverage
- Timeline tracking: Show how THE SAME event is framed across 50+ outlets over days
- Bias fingerprints: Build profiles of news organizations' framing patterns
- Ultimate goal: Make media literacy as automatic as spell-check—subtle highlighting while you read, click for alternative framings, understand without effort
Log in or sign up for Devpost to join the conversation.