Inspiration
We're entering about ten online contests this season from California, with deadlines written in Eastern, Pacific, Korea and UTC+3 time. Every rules page runs to hundreds of lines, and the requirements that cost an entry are scattered through them: a video "less than three (3) minutes", planning files that must be in the repo, who can't enter. Pasting the rules into a chatbot gives a tidy summary, but nothing tells you which line it made up.
What it does
Ruleproof turns a contest's official rules into the checklist hiding inside them, and every item comes with proof.
- Paste the rules, or a link to the rules page. No sign-up.
- The deadline in your time zone, with a countdown and the rules' own wording beneath it: "5:00 pm Eastern Time" shows as "Mon, Oct 26 · 2:00 PM PDT" in California. If the rules give no time or no zone, Ruleproof says so instead of guessing.
- A checklist in four groups: Submit, Build, Can you enter?, Watch out. Then how entries are judged.
- Proof for every item. Click an item and the rules beside it scroll to the highlighted sentence that requires it. Click a highlight in the rules and you land on its item.
- Nothing invented passes. If an item's quote isn't in the rules word for word, the item is set apart as "Not found in the rules". It can't be ticked, and it can be dismissed.
- Come back to it. Tick items as you finish them, add the deadline to your calendar (reminders 3 days, 1 day and 3 hours before), and find your contests again in your browser, soonest deadline first.
It's for solo builders entering several online hackathons at once, often from a different time zone than the organizers.
How we built it
We planned before writing code, with the Devpost Learn Skill Pack in Claude Code: a scope with an explicit cut list, a PRD, a technical spec, and a build checklist of six slices, each checked before the next. All of it is in the repo's devpost/ folder.
- The reader. A Cloudflare Worker (free plan) asks GPT-5.5, through the OpenAI Responses API, to read the rules once and return the brief in a strict JSON schema, every deadline, item and criterion with a verbatim quote. Readings are cached in Workers KV by a fingerprint of the rules text.
- The check. Plain TypeScript in the browser (
shared/verify.ts) looks for every quote in the rules. It ignores only differences that never change meaning: letter case, spacing and line breaks, curly vs. straight quotes, dash styles, list bullets, invisible characters. Nothing fuzzier, because a near miss is exactly what an invented requirement looks like. A quote under 15 characters never counts. Each match is mapped back to the original text to draw the highlight. - Time. The model reports the date, time and zone as written; Luxon turns them into an exact moment and shows it in your zone, daylight saving included.
- The page. React and Vite, set in IBM Plex, with the rules shown like a printed document under a highlighter. For a link, the Worker fetches the public page and Mozilla Readability pulls out the rules text.
- Tests. Vitest covers the parts that must be exact: quote matching, time math and the calendar file.
Challenges we ran into
- A checklist as long as the rules. The first reading of one page returned 53 items. Now the reader keeps at most 24, choosing the ones most likely to cost an entry and leaving out legal boilerplate; real pages come back with 10 to 24.
- The website is not the rules. Devpost's banner about planned maintenance came back as a contest date. The reader now ignores notices about the website itself.
- Pages aren't clean text. Pulling the rules from a link left list bullets on lines of their own, so true quotes didn't match. Extraction joins them now, and the checker ignores bullets at the start of a line.
- A heading is not proof. On one page the model backed "Fit one hackathon track" with nothing but the heading "Tracks:". That is why short quotes never count.
Accomplishments that we're proud of
On five real rules pages read through the live app (Build With AI: Basics, IEEE ClimateChain, PayPal AI Hackathon, Nebius x NVIDIA and YouCam), 105 of 106 checklist items were proven word for word. The one that wasn't is the "Tracks:" item above, and Ruleproof set it apart instead of passing it off as proven.
What we learned
- Make the AI show its work, then check the work with code you can read. The model is good at finding requirements in legal text; the trust comes from the check.
- Planning first paid off. The cut list (no accounts, no contest discovery, no PDF upload) kept the build to six slices, and each slice's check caught problems while they were small, like the phone view that first scrolled to only 10 of 24 quotes.
- When the point is proof, exact matching beats fuzzy matching.
What's next
- A profile (country, age, student or not) that checks eligibility for you.
- Watching a saved rules page and flagging changes.
- Rules in other languages, Korean contests first.
- A browser extension that runs on the contest page.
Try it: https://ruleproof.mikey9220.workers.dev (press "Try it with this hackathon's rules").
Code (MIT) and planning docs: https://github.com/mikey92/ruleproof
Built With
- claude-code
- cloudflare-workers
- luxon
- mozilla-readability
- openai
- react
- typescript
- vite
- vitest
- workers-kv
Log in or sign up for Devpost to join the conversation.