Team edition waitlist form
The "Join the waitlist" button on the Team pricing card links to `/contact` — a page with email addresses and no form. A visitor who wants to join the waitlist has to manually compose an email. That's a dead conversion path that loses every casual-interest lead. Replace the CTA with an inline email capture form backed by Formspree. No redirect, no modal, no page navigation. Type email, submit, see confirmation.
verdict PASSscore 23 / 23findings 7 (0 risk · 3 debt · 4 obs)duration 1h 43mrejection cycles 0shipped May 18, 2026surface website
Pipeline timeline
Intent to proven code in 1h 43m across Think, Plan, Build, and Verify.
Think1m
Plan4m
Build4m
Verify4m
Assertion ledger
23 claims, each independently verified. Showing 8 — show all →
| ID | Says | Matcher | |
|---|---|---|---|
| A001 | The Team card shows an email form instead of a link button | verified | ok |
| A002 | The Individual card still shows its original install button | verified | ok |
| A003 | Submitting an email sends a POST to Formspree with JSON headers | verified | ok |
| A004 | The submission includes an Accept JSON header so Formspree returns JSON | verified | ok |
| A005 | After a successful submission the form disappears and a confirmation message shows | verified | ok |
| A006 | The success message has a fade-in transition | verified | ok |
| A007 | When submission fails an error message appears with a fallback email | verified | ok |
| A008 | The form stays interactive after an error so the user can retry | verified | ok |
Findings 7 total
debtwebsite/components/pricing/WaitlistForm.tsx→ accept
Honeypot DOM input is dead code — JSON submission hardcodes _gotcha: '' regardless of field value
debtwebsite/components/pricing/WaitlistForm.tsx→ accept
Hidden _source DOM input is dead code — JSON body hardcodes _source value, DOM element never read
obswebsite/components/pricing/WaitlistForm.tsx→ monitor
Success message aria-live on freshly mounted element — screen readers may not announce dynamically inserted aria-live regions
debtwebsite/components/pricing/pricing.module.css→ accept
Error color hardcoded as #ff8a8a on highlighted card instead of CSS custom property
obswebsite/components/pricing/WaitlistForm.tsx→ monitor
No client-side rate limiting — user can spam submit after error state re-enables the button
+2more findings
Integrity seal
scopesha256:f387a3f35df9e...
contractsha256:b7c91dfdf3d46...
plansha256:2636016defd5b...
specsha256:2f4eb2de9669b...
build-reportsha256:21c8328603505...
build-datasha256:9e50852d5cad2...
verify-reportsha256:1d8d43a710985...
verify-datasha256:acd77807eb50a...
audit cmd$ ana proof audit waitlist-form → all hashes match