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
- Collect and deduplicateplatform rules enforced firstFrom: the official Czech buyer feeds and TED
- Rules filteronly rules decide what shows
- Claude commentsfixed format, no tools
- Second opinion · Claudedropped IT tenders: add, not hide
- Read the documents · Clauderequirements, quotes checkedFrom: tender documents, where the platform allows it
- Management decidesbid or no bidFrom: a Slack post with the verdict, details in the threadTo: bid preparation (2 tenders so far)
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