Inspiration
For judges: click "Judge Access" after entering your email, and enter code onusdemo.
Schools grade students. Who grades the schools?
Every public post-secondary institution in BC is required to have a sexual violence policy, but "has a policy" and "the policy is actually good, current, and followed" are two very different claims. Students for Consent Culture publishes the minimum standards these policies should meet, but nobody was holding BC's 26 institutions to them in public, in plain language, in one place. So we decided to do the grading ourselves. Onus checks every published policy against those standards, line by line, and puts that grade next to what students on the ground actually report. Turns out schools can be graded too, and some of them have been coasting.
What it does
Onus is a live map of every public college and university in BC, 26 institutions, with UBC's two campuses counted separately. Each school gets two grades, 0–100 with a letter, same scale you'd remember from your own report cards:
- On paper — the school's own published policy, graded by AI against 17 criteria drawn from Students for Consent Culture's minimum standards. Every point has to be quoted word-for-word from the policy itself or it doesn't count. We don't give credit for vague language, same as no teacher should.
- In practice — short, anonymous ratings from people with a verified school email.
- The gap — schools where the two diverge get flagged with a ring on the map once enough real ratings come in.
From there you can drill into any school: the exact clause behind each score, its rank in BC, when the policy was last reviewed and when BC law requires the next review, and the nearest sexual assault support, counselling, and hospital for that campus, with a route drawn right on the map. You can read the exact quoted passage in the original policy PDF, ask questions about a school's policy by text or voice in any language, answered only from that school's own document with the section cited, rate your own school anonymously, and paste in a policy PDF live and watch it get graded against the same rubric. Show your work, we always say.
How I built it
Onus runs on Next.js 16 and React 19, with Tailwind v4, shadcn/ui and Base UI handling the front end, and Motion for the parts that needed to feel alive. The map itself is MapLibre GL JS on CARTO and OpenStreetMap, with routes to the nearest support centre or hospital precomputed with OSRM, so nobody's waiting on a route while they're already in distress.
Supabase runs the backend: Postgres with row level security, email-code auth, Realtime so the map updates live the moment a new rating comes in, and pgvector so policy search actually understands what you're asking.
The grading leans on Google Gemini, run through a crawl, extract, grade, verify, and embed pipeline built from scratch. Every "quote" gets checked against the actual source PDF before it's allowed to count toward a score, no policy gets graded on vibes here. ElevenLabs handles speech to text and text to speech, including Farsi and Punjabi, so asking a school to explain itself isn't limited to one language. PDF.js powers the in-app policy viewer, so you can always check the receipts yourself.
In short: we graded 26 institutions' homework, and we checked their citations.
Challenges we ran into
The hardest part was making the grading rubric strict enough to actually trust. It would have been easy to let a model give a school credit for warm, well-intentioned language that doesn't actually commit to anything. Requiring an exact, verified quote for every point meant building a whole separate verification pass that rejects any "quote" that doesn't really appear in the source PDF, the AI equivalent of catching someone citing a source they never read. Covering 26 institutions' worth of policies, review dates, and support and hospital routing data in the time available also meant building a real data pipeline instead of filling it in by hand.
Accomplishments that we're proud of
A working, end-to-end product, not a mockup: real policies in, real grades out, with a verifiable quote behind every single point, the kind of citation work that would make any professor happy. Full BC coverage across all 26 public institutions. A grading rubric strict enough that it can't hallucinate credit a school didn't earn. Multilingual voice support, so the "ask about this policy" feature isn't gatekept behind English.
What we learned
This was my first hackathon going solo, which meant it was also my first time owning the front end and back end together instead of specializing in one. I came out of it a lot more fluent in Git, and in how all the pieces of a full stack app actually talk to each other when there's no one else to hand the other half to.
The harder lesson was in the data itself. Building the grading rubric meant actually reading what these policies do and don't commit to in writing, and seeing how little protection most of them guarantee on paper was genuinely frightening. That's the part of this project that's stuck with me most, and it's the reason I don't think of Onus as finished just because the hackathon is ending.
What's next for Onus.
Replacing the seeded sample ratings with real, verified student ratings at scale, expanding past BC, and getting the review clock feature in front of policy offices directly, since it's built to show exactly what's due for revision and when. Every school gets re-graded eventually. We're just making sure it actually happens.
Built With
- elevenlabs
- google-gemini
- maplibre
- nextjs
- openstreetmap
- osrm
- pdf-js
- playwrite
- postgresql
- react
- shadcn-ui
- supabase
- tailwindcss
- typescript


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