← Viktor Madič

Tender radar

~1 day

of my own time for the first version, over 9 calendar days.

Public tenders were never worked systematically: they sit on dozens of buyer profiles that can only be read by hand.

A daily radar over the official Czech buyer feeds and the EU’s TED. Rules decide what shows up. Claude comments, gives a second opinion on dropped IT tenders and pulls the qualification requirements from the documents, each with a quote checked against the text.

The AI here comments and reads. It does not decide what shows up.

How it works

  1. Collect and deduplicateplatform rules enforced firstFrom: the official Czech buyer feeds and TED
  2. Rules filteronly rules decide what shows
  3. Claude commentsfixed format, no tools
  4. Second opinion · Claudedropped IT tenders: add, not hide
  5. Read the documents · Clauderequirements, quotes checkedFrom: tender documents, where the platform allows it
  6. Management decidesbid or no bidFrom: a Slack post with the verdict, details in the threadTo: bid preparation (2 tenders so far)
Solid box: rules and code. Dashed box: Claude. Yellow box: a person decides.Steps marked Claude are done by Claude. The rest is rules and code. Yellow is where a person decides.

What broke and what I changed

  • A 21 M CZK tender slipped through before the radar went live.

    Nobody was reading the buyer profiles systematically, which is the problem the radar exists for.

  • The prompt passed a buyer’s past tenders off as our references.

    The unit tests were green. A probe that ran the real prompt over a copy of the database caught it. I now measure the AI steps on real data, with the pass criterion written down before I look at the result.

  • The watchdog was twice quietened so the status page would stay green.

    A threshold set above the batch size and a widened weekend window hid real silence. An adversarial check I ran caught both, and tests now pin the thresholds.

Guardrails

  • Rules decide what shows up. The AI can add a tender, never hide one.

    The model runs without tools and sees only the text it is given.

  • Every requirement pulled from the documents carries a quote checked against the text.

    Numbers may only come from the quote, and a comment without an anchor in the text is dropped.

  • Platform rules are enforced in code before any request goes out.

    Blocked endpoints and document paths, pauses between requests, and a robots check before any download.

  • It starts in dry-run, and one switch turns real posting on and off.

    1,400+ automated checks guard it, and it deploys on every push.

Numbers

~1 day
of my own time, over 9 calendar days
1,400+
automated checks
Aug 26
2026: live on our office server, every working morning since
2
tenders went into bid preparation. The decision to bid stays with management
21 M CZK
the tender that slipped through before the radar went live