The problem

I enter design and development contests. Twice now I have lost one for a reason that had nothing to do with the work.

The first time, the brief asked for a file format I read past and never produced. The second was a contest with 33 entries where 32 were cut before judging, almost all of them for a missing deliverable rather than a weak design. The requirement is always there in the brief. It is just sitting in the middle of a paragraph about something else, and by the time you have finished the actual work, you are reading your own files, not the brief.

Checking it by hand does not work either, because you check against the brief you remember rather than the brief you were given.

What it does

One page. Paste the brief the contest gave you, drop the files you are about to submit, press Audit.

It comes back with the brief's requirements as a numbered list, split three ways:

  • Missing — the brief asks for it and nothing in your folder looks like it
  • Needs your confirmation — things no file can prove, like "all artwork must be your own original work"
  • Covered — with the file that covers it named

Every row carries the exact sentence from the brief that asks for it, so you can check the model instead of trusting it. Nothing is final: any row can be corrected by hand, and a correction is marked as set by you. Copy report gives you a plain-text checklist to paste into your submission notes.

The part I care about most

A model asked to list requirements will happily invent one that sounds like it belongs. That is the failure that would make this tool worse than useless, because it would send you off making a file nobody asked for.

So the model is made to quote. Every requirement has to come back with the sentence from the brief that says it, and before anything reaches the screen, each quote is checked against the pasted text. A requirement whose quote is not really in the brief is dropped. The check is about forty lines, and it is the reason the output can be trusted at all.

How it works

The whole thing is a static page: HTML, CSS and plain JavaScript modules, no build step and no server of mine anywhere. One request to Gemini with a responseSchema, so the answer arrives as structured JSON rather than prose that has to be parsed. Your API key is typed into the page and stays in that browser tab.

Files are read for their names, sizes and types only. Nothing is uploaded, because matching a deliverable to a file does not need the file's contents.

18 tests cover the quote verification, the grouping and the report, and the page has been driven end to end headless: the audit, the overrides, the clipboard, the mobile layout, a rejected key, a rate limit and a malformed answer.

Who it is for

Anyone who submits work against a written brief and can be eliminated on a technicality: contest entrants on Devpost, Freelancer or 99designs, and freelancers delivering to a client's spec.

What I learned

I came to get better at working with a coding agent, and three things changed how I do it.

Plan in documents, not in chat. Scope, then a PRD, then a spec, then a checklist, each one written and reviewed before any code existed. Every decision I would otherwise have made badly at two in the morning was already made.

Let it ask. The flipped-interaction prompts in the Skill Pack had the agent interview me rather than guess. It asked who the user was and what the failure mode was, and the anti-invention gate came out of answering that honestly.

Verify what the model claims, cheaply. The quote check is the smallest part of the code and the only reason the rest is worth anything. I now assume any model output that cannot be checked against a source will eventually be wrong, and I build the check first.

Built With

Share this project:

Updates

Submission history