Inspiration

On construction and fit-out jobs, the scope says what has to be done and the supplier's quote says what they'll actually do. The two rarely line up word for word: testing gets excluded at the bottom of page two, 120 metres of cable tray becomes 80, and "access by others" quietly moves a cost back to the contractor. Someone has to read both documents line by line before award. Miss something, and it turns into a variation claim later.

What it does

ScopeCheck puts the scope and the quote side by side and lists candidate gaps: quantity differences, exclusions, requirements the quote never mentions, and terms that need clarifying. Every finding shows the exact scope line and quote line behind it, plus a ready-to-send clarification question. The reviewer marks findings reviewed and exports a clarification checklist for the supplier, or the full review as JSON.

  • Review with Nemotron sends both documents to NVIDIA Nemotron 3 Super on Nebius Token Factory for a semantic review: requirements worded differently, exclusion sections, provisional allowances.
  • A deterministic rules engine runs first with no AI, so the page is useful immediately and the two can be compared.
  • Text, Markdown, CSV and selectable-text PDF import; four fictional scenarios to try.

How we built it

  • Model: nvidia/nemotron-3-super-120b-a12b on Nebius Token Factory's OpenAI-compatible /v1/chat/completions (US-central endpoint), temperature 0, strict json_schema response format.
  • Prompting: both documents go in as numbered line arrays; the system prompt treats document text as untrusted data and requires exact line citations.
  • Trust layer: before anything reaches the screen, the server checks that every cited line number and quote matches the source exactly, that every scope requirement is accounted for, and that findings and coverage agree. One bad citation rejects the whole answer; there is no silent fallback.
  • App: React + TypeScript (Vite) front end, Node.js server holding the key, PDF.js for in-browser PDF text.
  • Hosting: a hardened hosted mode (exact-host allow-list, same-origin HTTPS, HSTS, strict CSP, per-client and daily AI caps) on Render.
  • Testing: 65 backend/API/provider-contract tests with a mocked provider, 9 UI tests, a real-Chrome check, and a live-check script that runs genuine Token Factory calls over every scenario.

Challenges we ran into

  • Trusting model output. An answer that looks right can cite a line that doesn't exist. We made provenance a hard gate: exact text plus line number, or the result is thrown out.
  • Model vs rules. In live runs Nemotron matched the rules on two scenarios but missed a split luminaire allowance on another, and put "disposal by the main contractor" in a warning instead of a finding. So every AI result is labelled as a candidate, and the rules view is always one click away.
  • Making a local, key-holding tool safe to host for judges without exposing the key or an open-ended bill.

Accomplishments that we're proud of

  • Every AI finding on screen is traceable to exact words in the documents.
  • Live Nemotron runs pass strict schema and evidence validation in about 4–18 seconds.
  • The reviewer stays in charge: "reviewed" never means "resolved".

What we learned

  • Strict JSON schemas on Token Factory worked unchanged with Nemotron 3 Super; the hard part is validating meaning, not shape.
  • Numbered-line input makes citations checkable, which is what makes model output usable in a commercial review.

What's next

  • Table-aware PDF extraction and OCR for scanned quotes.
  • A held-out evaluation set with estimator-reviewed answers.
  • Side-by-side "AI vs rules" diff view, and multi-quote comparison.

Built by Treyn at AppForge Digital, with ChatGPT and Claude as AI coding partners. All documents in the demo are fictional.

Built With

Share this project:

Updates

Submission history