Jump to the tool you use. Each section is a one-time setup that makes the HRF QA gate part of your workflow. Tiers tell you how automated it gets — Auto means zero clicks per page after setup, Semi means one click per page, Manual means copy-paste.
Setup time: 30 seconds. After setup: every page Claude Code produces gets validated automatically before being shown to you, and it iterates until it passes.
One-time setup
In your project directory, open or create a file called CLAUDE.md at the root.
Paste the block below at the top of CLAUDE.md.
Save. That's it.
When generating HTML for the Human Rights Foundation (hrf.org) — landing pages, RFPs, program sections, etc. — you must validate the output against the HRF QA gate before showing it to the user. Workflow every time:
1. Produce a candidate HTML.
2. Run: curl -s -X POST https://hrf-qa-1.arcticmind.ai/api/check -H "Content-Type: text/html" --data-binary @candidate.html
3. Parse the JSON response. If verdict is "PASS", return the HTML.
4. If verdict is "FAIL", read the regenerate_prompt field, apply every fix it lists, produce new HTML, go to step 2.
5. Cap at 5 iterations. If still failing, return the latest attempt plus the failure report.
Full rule reference: https://github.com/hurleywhite/hrf-qa-system/blob/main/HRF-AGENT-CONTEXT.md
Voice reference: https://github.com/hurleywhite/hrf-qa-system/blob/main/HRF-VOICE-BRIEF.md
Cursor Auto
Setup time: 30 seconds. After setup: Cursor's agent automatically validates HTML it generates for HRF.
One-time setup
In your project, create .cursor/rules or open Cursor settings → Rules.
Paste the same block as Claude Code (above) into your Cursor rules.
Save.
Codex CLI / OpenAI Codex Auto
Setup time: 30 seconds.
One-time setup
Open your Codex CLI config (usually ~/.codex/config.toml) or the equivalent system prompt field.
Paste the same validation prompt as above.
Save.
ChatGPT Semi-auto
ChatGPT's main chat interface can't reliably make HTTP calls during generation. Two paths: (a) one-click manual via the web UI, or (b) build a custom GPT with API actions.
Lovable generates entire app skeletons and previews them in a browser. The "HTML" Lovable produces is React/Next.js components — not a body fragment Tony can paste into Elementor as-is.
If you're using Lovable for HRF pages
Reach out to Tony before publishing. Lovable's output isn't directly compatible with Elementor — it needs to be converted to static HTML or hosted separately.
If you want a static-HTML page (the format Tony needs), use ChatGPT, Claude, or the paste-and-check workflow instead. Lovable is best for standalone web apps, not embedded WordPress sections.
If you do export Lovable's HTML and want to validate, paste it into the checker — but expect a lot of failures because Lovable bundles its own framework styles.
Bolt (bolt.new) Manual
Bolt is similar to Lovable — it generates running applications, not embeddable HTML fragments. For HRF Elementor work, see the manual workflow.
Workflow
If you only need an HTML chunk for Elementor, prefer ChatGPT or Claude.
If Bolt is already what you're using, view source on the generated page, copy the body HTML, paste it into the checker.
Iterate via paste-back.
v0 (v0.dev) Manual
v0 generates React components. Same caveats as Lovable / Bolt — not directly Elementor-friendly, but the produced HTML CAN be checked.