HRF QA Gate

Catches the common breakages in AI-generated HTML before pages reach Tony's queue — theme conflicts, dead buttons, mobile overflow, missing alt text, dead links, exposed secrets.

For Tony — test the prototypes in Elementor

Body-only HTML fragments + test plan

Two Elementor-ready HTML fragments (alex-rfp-v4 and r2-bdf-v4), test checklist, known TODOs. This is the package Tony needs to validate before the Financial Freedom rollout.

TONY

If you're an HRF staff member who produces web content

The four pages below are for you. They cover everything you need.

Start Here — for staff producing HTML

Two-minute overview of the workflow. Send this URL to anyone who's vibe-coding HRF content.

START HERE

Paste & check your HTML

The validator. Paste in your HTML, see what's wrong, copy the regenerate prompt back to your AI tool. Or click "Fix it for me" if the auto-fix is configured.

RECOMMENDED

Per-tool playbooks

One-time setup per tool — Claude Code, Cursor, Codex, ChatGPT, Lovable, Bolt, v0, Cassidy AI, Gemini. Find your tool, follow the steps.

SET & FORGET

Quick tool-usage survey

5 questions, 2 minutes. Tells us which tools to prioritize as we expand the system.

2 MIN

Demo / reference pages (for the digital team)

What the gate catches, what it produces, and how the regenerate loop closes the gap. Three sections: passing pages, before/after on real submissions, canonical failure examples.

1. Pages that PASS the gate

These three pages pass all ten checks and are ready to paste into Elementor on hrf.org.

Freedom Tech Programs — canonical example

The minimal "what good output looks like" sample. Shipped with the project as a reference.

PASS · 0 issues

AI for Individual Rights — RFP (regenerated)

Clean version of Alex Gladstein's RFP page after running the original through the gate. All 24 issues from the original (see Section 2) are gone.

PASS · 0 issues

Bitcoin Development Fund (regenerated)

Clean version of R2's BDF page after running the original through the gate. All 20 issues from the original (see Section 2) are gone.

PASS · 0 issues

2. Before / after — Tony's two real submissions

These are the exact pages Tony forwarded the week of May 5. Compare the original AI output (FAIL) to the regenerated version (linked above in Section 1).

AI for Individual Rights — RFP (original)

Alex Gladstein's vibe-coded version. Loads HRF's logo from a CDN HRF doesn't control, embeds custom fonts and colors, hosted off hrf.org, missing all social-preview info. Gate caught 24 issues.

FAIL · 24 issues

Bitcoin Development Fund (original)

R2's vibe-coded version. Pulls D3.js from an external CDN, custom dark-mode styles, doesn't work in Safari, slow on mobile, hosted on GitHub Pages. Gate caught 20 issues.

FAIL · 20 issues

3. Canonical failure examples — what the gate catches

Four small test pages, each engineered to fail a specific rule. Ship with the project so the gate's self-test always demonstrates its catches.

Theme inheritance violation

Custom @font-face, redefined heading sizes, inline color styles. Fights HRF's WordPress theme.

FAIL · theme

Dead buttons

A <button> with no handler and two anchors with href="#". Look like buttons, do nothing.

FAIL · buttons

Safari incompatibility

Unprefixed backdrop-filter and mask-image. Works in Chrome, breaks in Safari.

FAIL · Safari

Insecure backend

An Airtable Personal Access Token baked directly into client-side JavaScript. Anyone viewing source can read it.

FAIL · security

4. Use it on your own page (three paths)

Pick whichever fits the tool you're using. They all hit the same gate.

Paste-and-check page — easiest, works for any tool

For Lovable, Bolt, v0, ChatGPT, Gemini, or anything that generates HTML in a browser. Copy the AI's HTML, paste into the page, click Check. If it fails, copy the regenerate prompt back into your AI and re-run.

RECOMMENDED

Agent system prompt — for Claude Code / Cursor / Codex CLI

For agentic coding tools that can call HTTP APIs mid-generation. Paste the system prompt into the tool once. After that, your agent runs the gate automatically before showing you the result and iterates until it passes. Zero clicks per page.

SET & FORGET

POST /api/check — raw HTTP endpoint

The underlying API. Returns JSON with a verdict and a paste-ready regenerate_prompt. Use this if you're scripting or building your own integration. See API docs.

API · LIVE