Devpost Project Story
Inspiration
The theme asked us to find a system people are stuck in and build the way out. We kept coming back to the one system nobody can opt out of anymore: AI itself. It screens resumes, suggests salaries, interprets symptoms, and answers the questions we used to Google.
Then we read the research. A 2025 hiring audit found Claude 4's decisions flipped on race or gender 63 times, and its written reasoning mentioned them zero times. One model advised a man to ask for $400,000 and an equally qualified woman to ask for $280,000. As Muslim women, some of us had felt this before we could name it: advice that seemed quieter, smaller, more cautious than it should be. The bias is real, documented, and completely invisible to the person receiving it.
What it does
Mizan (Arabic for "scale," the symbol of justice) is a Chrome extension that catches AI bias the moment it happens.
While you chat with Gemini, one click sends your prompt to our backend, which builds a counterfactual copy where only the identity markers change (Fatima to Emily, she to he). It runs both versions through the same Gemini model 5 times each, then an AI judge compares the answer pairs across dimensions like dollar amounts, ambition of advice, tone, and warnings. If the flip rate crosses 5%, the pre-registered threshold from EQUITRIAGE (Young & Matthews, 2026), Mizan shows a "Bias detected" verdict with the answers side by side.
Then it goes past detection: one click drafts a formal bias report from the evidence and helps you submit it to Google through Gemini's official feedback channel. Detect, prove, act.
How we built it
- Extension: plain JavaScript, Manifest V3. A content script on gemini.google.com grabs your last message and renders the results panel in a Shadow DOM
- Backend: Node.js + Express with two endpoints: /analyze (the full swap, run, judge pipeline) and /report (drafts the formal bias report)
- AI: Gemini Flash through the official @google/genai package
Challenges we ran into
- Gemini's DOM fought us. The page hides accessibility text inside message containers, and selectors shift between builds. We layered fallback selectors and added a manual paste box so scraping can never sink the product
- Free tier rate limits. The newest flash alias allows about 20 requests a day, which one analysis would nearly consume. We switched to a stable Flash model with a much larger allowance and added wait-and-retry logic
- Clean counterfactuals are hard. If anything besides the identity markers changes, the comparison is meaningless, so the swap instruction had to be ruthless about changing nothing else
Accomplishments that we're proud of
- A full detect, prove, act loop working end to end in 24 hours: capture, swap, 10 model runs, judgment, verdict, and a submittable report
- Grounding every design choice in published research, from the counterfactual method to the 5% threshold, instead of inventing our own definition of bias
- A validation script that runs Mizan against prompts where peer-reviewed research already documented bias, so we can state our detection rate instead of asking judges to trust us
- Auditing the same model the user actually talks to, on the site where they talk to it
- Total infrastructure cost: $0
What we learned
- Newer models did not fix bias, they hid it. Safety training reduces overt bias while covert bias persists (Nature 2024, PNAS 2025), which is why outcome comparison beats asking a model to explain itself
- Statistics are a product feature. Repeat runs and a pre-registered threshold are what separate evidence from anecdote
- Contract-first teamwork scales. One agreed JSON shape plus a shared CLAUDE.md let four people and four AI coding sessions build in parallel without stepping on each other
- Chrome extension development (Manifest V3, content scripts, service workers, Shadow DOM) as complete first-timers
- Reading fairness research well enough to build on it is a skill, and it made every part of the pitch stronger
What's next for Mizan
- More platforms: ChatGPT and Claude support.
- Personalized-session auditing: our clean API baseline is the control condition. V2 compares the personalized session against it to measure what a user's profile adds on top
- Broader marker coverage: dialect, disability, age, and intersectional swaps, with user-defined markers
- A public scoreboard: aggregate anonymized flip rates per model over time, creating accountability pressure that outlasts any single report
- Configurable rigor: let researchers raise the run count and export raw data for their own analysis
Built with (tags)
javascript, node.js, express, chrome, gemini, google-gemini-api, manifest-v3, html, css, claude-code, git, github
Built With
- chrome
- claude-code
- css
- express.js
- gemini
- git
- github
- google-gemini-api
- html
- javascript
- manifest-v3
- node.js


Log in or sign up for Devpost to join the conversation.