-
Notifications
You must be signed in to change notification settings - Fork 0
fix(public): put a real Request-the-appraisal signup form in the /pricing closing callout #114
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
b34e395
c13aadb
db9f2d5
e5d81f7
5fc5325
28c0263
56b5419
7114fd7
2883793
4fab41d
abd7110
213c730
470dde5
4ee6a10
387ea89
6a7992d
d5644dd
fe21193
43dc65a
8bde0ce
48e7679
efaf76f
cc725e1
c665939
22d3b93
a6b4bae
5b1cdb5
5355ad8
f88197c
0cc90ab
1dec4ce
e3e4d6b
29d695e
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -129,6 +129,11 @@ <h2>Before you ask</h2> | |
| <div class="band"> | ||
| <h2>The appraisal costs you an email. The rest is a decision you can make later.</h2> | ||
| <p>Six a month, done by hand. When this month's sixth is taken the intake closes until the next one opens.</p> | ||
| <form class="lead two" action="/api/signups" method="post"> | ||
| <input type="text" name="website" required inputmode="url" autocomplete="url" placeholder="yourwebsite.com" aria-label="Your website domain" pattern="(https?://)?([a-zA-Z0-9\-]+\.)+[a-zA-Z]{2,}(:[0-9]+)?(/[^\s]*)?" title="Enter your domain, like example.com"> | ||
| <input type="email" name="email" required placeholder="Your work email" aria-label="Your work email"> | ||
|
Comment on lines
+133
to
+134
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
In the new pricing-band form, the placeholders are the only visible field labels, but the shared Useful? React with 👍 / 👎.
Comment on lines
+133
to
+134
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
When a keyboard user tabs through this new form, both inputs inherit Useful? React with 👍 / 👎. |
||
| <button>Request the appraisal</button> | ||
| </form> | ||
| <div class="note">No revenue, ranking, ROAS, conversion, booked-call or sales-volume guarantees. The delivery guarantee above is the only promise we make about outcomes, and it is a promise about our work, not your market.</div> | ||
| </div> | ||
|
|
||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -297,6 +297,33 @@ if (!retiredDesk.includes("role=\"tabpanel\"") || !retiredDesk.includes("aria-la | |
| failures.push("Agent output must expose a proper tabpanel relationship."); | ||
| } | ||
|
|
||
| // Pricing closing-callout regression (Grok finding: the /pricing closing band | ||
| // ended in a dead end — "The appraisal costs you an email" with no way to send | ||
| // one — while every other served conversion surface carried a real intake | ||
| // form). The band must keep the actual signup form: a form.lead inside the | ||
| // .band posting website + email to /api/signups, both fields with a | ||
| // persistent programmatic aria-label, and a submit button reading "Request | ||
| // the appraisal". STATIC SOURCE GUARD (regex over pricing.html), matching the | ||
| // repo's other source-string guards. | ||
| const sitePricing = read("public/pricing.html"); | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
The new pricing form is not added to the website validation loop above, which still checks only Useful? React with 👍 / 👎. |
||
| const pricingBand = sitePricing.match(/<div class="band">([\s\S]*?)<\/div>\s*<section id="confidential">/)?.[1] ?? ""; | ||
| const pricingForm = pricingBand.match(/<form\b[^>]*class="lead[^>]*"[^>]*>[\s\S]*?<\/form>/i)?.[0] ?? ""; | ||
|
|
||
| if (!pricingForm || !pricingForm.includes('action="/api/signups"') || !pricingForm.includes('method="post"')) { | ||
| failures.push("Pricing closing callout must carry the real signup form (form.lead posting website + email to /api/signups) so the appraisal ask is actionable in place."); | ||
| } | ||
| for (const input of pricingForm.matchAll(/<input\b[^>]*>/gi)) { | ||
| const tag = input[0]; | ||
| if (!/\bname="(?:website|email)"/.test(tag)) continue; | ||
|
Comment on lines
+315
to
+317
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
If either Useful? React with 👍 / 👎. |
||
| const aria = tag.match(/\baria-label="([^"]*)"/)?.[1] ?? ""; | ||
| if (!aria.trim()) { | ||
| failures.push(`Pricing intake input must carry a persistent programmatic aria-label (placeholder-only labels disappear as buyers type): ${tag}`); | ||
| } | ||
| } | ||
| if (!/Request the appraisal/i.test(pricingForm)) { | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
If the button is removed or changed to a non-submitting element while the phrase “Request the appraisal” remains anywhere in the form, this regex still passes, even though users no longer have a clickable way to submit the two-field form. Match the text specifically inside a Useful? React with 👍 / 👎. |
||
| failures.push('Pricing closing callout submit button must read "Request the appraisal".'); | ||
| } | ||
|
|
||
| // Mobile layout regression: at 390x844 the /audit page previously overflowed | ||
| // horizontally (navlinks measured to x=569, the 53-of-89 stat to x=451). | ||
| // The mobile treatment must live in audit.css behind the shared 760px | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
On
/pricingat widths just above 760px, the shared.twoform remains a single row even though the band's 62px side padding leaves only 524px at a 768px viewport. The nowrap submit button then leaves each input about 160px wide including 42px of input padding, clipping theyourwebsite.complaceholder and leaving sighted users without a readable field prompt. Add a pricing-specific earlier stacking breakpoint (similar to the homepage's 900px treatment) or otherwise preserve enough input width.Useful? React with 👍 / 👎.