I Built an RFP Compliance Checker in One Session — Here's the Exact Stack A developer built a free RFP compliance checker in a single session using Groq's free tier, a Cloudflare Worker, and a single HTML file. The tool compares procurement specifications against draft responses to identify missing requirements, with no data storage or accounts required. The hardest part was crafting a prompt that reliably returns structured JSON across varied document formats. 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.