The scene: Friday evening. You're on page 147 of a 200-page procurement spec. Clause 17.3 says "mandatory: Cyber Essentials Plus certification." Your draft response says "Cyber Essentials certified."
Those two words — "Plus" and nothing — are the difference between a compliant bid and an auto-disqualification.
I've been there. So I built a tool that catches it before you hit submit.
Two text boxes. One API call. One table.
Paste the specification. Paste your draft. Click analyze. The tool returns a compliance matrix showing exactly what's covered, what's partial, and what's missing — categorised by requirement, with suggestions for each gap.
No accounts. No database. No data stored. Open the page, use it, close it.
Inference: Groq, free tier. Running llama-3.3-70b at no cost. ~30 analyses per day included. If you burn through that, there's a BYOK field for your own API key (any OpenAI-compatible provider).
Backend: One Cloudflare Worker. 180 lines of JavaScript. Receives text, sends it to Groq, returns structured JSON. Deployment is npx wrangler deploy
.
Frontend: One HTML file. Vanilla JavaScript. Dark and light themes. Side-by-side text areas on desktop, stacked on mobile.
Domain: Cloudflare DNS, proxied CNAME to the Worker. Routes by path so new tools don't need new infrastructure.
Ongoing cost per month: $0.
The hardest part wasn't the code. It was the prompt.
Getting an LLM to return consistently structured JSON across different procurement formats — PDFs pasted as plain text, multi-column tender tables, scanned sections — took more iterations than the entire deployment pipeline.
The trick was three things working together:
`response_format: { type: "json_object" }`
on the Groq API[https://tools.workswithagents.com/rfp](https://tools.workswithagents.com/rfp)
Click "Load Sample" to see it work with a real IT managed services tender. The analysis takes about 15 seconds.
For the visual walkthrough: Every tool in this series will be:
Next in the series: a plain-English grader for procurement responses. Because if the evaluator can't understand your bid, you've already lost.