Inspiration

We are a one-person creator studio that runs on AI agents. Part of how we fund ourselves is entering contests: AI art calls, short-form video awards, hackathons. Every week we read dozens of rules pages. The facts that decide whether a contest is worth it (who can enter, how many winners, what you must hand in, when it really closes in our time zone) are buried in legal text. We missed contests we could have won and spent days on ones we never had a chance in.

What it does

  • Extract: paste a contest URL or its text. Nemotron 3 Nano extracts the deadline (with time zone), eligibility, prizes, winner count, deliverables and judging criteria, and quotes the sentence each fact came from.
  • Score: Nemotron 3 Ultra scores the contest against your team profile on four axes (win odds, time, resources, cash) and returns go / maybe / skip with reasons and blockers.
  • Plan: a dated checklist from today to the deadline. Steps only a human can do (sign-ups, identity checks, submission) are flagged. Export to calendar (.ics) or the whole board to Markdown.
  • Find (optional): discover new contests with Tavily search and analyze any result in one click.

How we built it

  • Zero-dependency Node.js server + vanilla JS front end, deployed on Render's free plan.
  • Two-stage pipeline on Nebius Token Factory (OpenAI-compatible API): a fast Nemotron model for long-page extraction into strict JSON with evidence quotes, and a reasoning Nemotron model for scoring and date planning.
  • The server lists models via /v1/models and picks Nemotron models automatically (Nano for fast, Ultra/Super for reasoning).
  • Credit guard for the public demo: identical requests are cached for 24h, pages are trimmed, and live runs are capped per day and per visitor.
  • Tavily, two ways: Search finds fresh contest pages (time range: last month, because open calls change every month) and every result can be sent to Nemotron in one click. Extract is the fallback reader: when a contest page blocks plain fetching or renders almost nothing without JavaScript, Contest Scout reads it through Tavily Extract instead, and the UI shows which path was used.
  • Safety: only public http(s) pages are fetched (private network addresses are refused); unknown facts stay "unknown"; the board stays in the browser.

Challenges we ran into

  • Our first live run failed 3 of 4 cases: Nemotron Nano spent its entire token budget on hidden reasoning and returned truncated JSON. Turning thinking off for extraction (enable_thinking: false) and keeping it on for scoring fixed it.
  • Time zones: rules pages say "10:00 am Pacific Time"; we needed Seoul time. Asking the model for a full ISO timestamp with offset and converting in code made it reliable.

Accomplishments that we're proud of

  • 8/8 on our hand-checked accuracy set (English rules in PDT/PST, a Korean page in KST, a closed contest that must be skipped), versus 4/8 for a rule-based baseline. Run it yourself: node eval/run.js.
  • We already use it on our own contest list, including a Korean government AI contest with 36 winners, where it produced a dated plan in Korean.

What we learned

  • Split the work by model: a small, fast model with thinking off is the right tool for long-page extraction; the big reasoning model earns its cost only where judgment is needed.
  • Make the model quote its evidence. A verbatim sentence per fact made wrong answers easy to spot, and "unknown" became an acceptable answer instead of a guess.
  • Guard the credits from day one: caching, trimming and daily caps kept a public demo affordable on the free credit.

What's next

Deadline reminders, team sharing, and a weekly "new contests that fit you" digest built on the same Tavily search.

Built With

Share this project:

Updates

Submission history