Copy polish: clearer scan limit, stronger upgrade nudge, visible score button - #495
Copy polish: clearer scan limit, stronger upgrade nudge, visible score button#495manazoid4 wants to merge 5 commits into
Conversation
… nudge, visible score button - FindJobsPage: replace cryptic "Buyer and submission context locked" with plain "Free scans used — buyer details and bid guidance unlock with Full Access" - FindJobsPage: upgrade nudge now leads with "THESE ARE REAL JOBS — BUYER DETAILS LOCKED", adds ROI line (one job covers 12 months), and surfaces "No credit card required to browse · 30-day money back" alongside the CTA - FindJobsPage: WHY THIS SCORE? button enlarged (9px→11px, border-2, yellow hover) so tradesmen can actually find and tap it on mobile — key trust signal - PricingPage: bottom CTA reordered (free scan first), headline sharpened to "SCAN YOUR PATCH FREE. PAY ONLY IF IT FITS.", 30-day money-back guarantee made prominent in bold rather than faint/60 opacity text
|
This pull request has been ignored for the connected project Preview Branches by Supabase. |
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: ec0f9e5159
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| ? `3 free scans this week — no credit card required` | ||
| : `${weeklyScansRemaining} free scan${weeklyScansRemaining === 1 ? '' : 's'} left this week` | ||
| : 'Buyer and submission context locked. Scanning remains free.'} | ||
| : 'Free scans used — buyer details and bid guidance unlock with Full Access.'} |
There was a problem hiding this comment.
Keep exhausted-scan copy aligned with scanner behavior
After three successful scans, this banner says the free scans have been used, but submit remains available and continues calling /api/leads/search; the client neither blocks the request nor sends the authorization token needed for the server-side authenticated quota. Users can therefore keep scanning while the UI claims their allowance is exhausted, and buyer details were already locked from the first preview scan. Either enforce the stated limit or retain copy that explains scanning remains available.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Fixed in 33b6c5b. Updated to: "Weekly scans used — scanning still works, buyer details unlock with Full Access." — correctly reflects that the scan endpoint remains available and only the buyer/submission context is gated.
Generated by Claude Code
| : 'SEE BUYER, DEADLINE AND BID ROUTE ON EVERY LEAD.'} | ||
| </h2> | ||
| <p className="mt-2 text-sm font-black text-[var(--ink)]/70"> | ||
| Full Access shows the buyer, published value, deadline and official response route. One job covers 12 months at £39. |
There was a problem hiding this comment.
Restore availability qualifiers for paid lead fields
For leads whose source omits a value or deadline, Full Access cannot show the fields promised here: normaliseDate converts a missing deadline to an empty string and formatValue converts a missing value to POA. The previous copy correctly said the published value was included only where available; removing that qualifier now tells customers that paying will reveal data that does not exist for every lead.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Fixed in 33b6c5b. Restored "where available": now reads "Full Access shows the buyer, published value where available, deadline and official response route." — matches actual behaviour where missing values surface as POA.
Generated by Claude Code
| </div> | ||
| <p className="mt-4 text-sm font-black text-[var(--ink)]/70">Official tenders are public. You pay for qualification, evidence and workflow.</p> | ||
| <p className="mt-1 text-sm font-black text-[var(--ink)]/60">No card required for the free current-coverage check.</p> | ||
| <p className="mt-1 text-sm font-black text-[var(--ink)]">30-day money-back guarantee — one job worth chasing or we refund every penny. No quibbles.</p> |
There was a problem hiding this comment.
Reconcile the refund guarantee with the paid-plan terms
This newly promises a full refund within 30 days when no job is deemed worth chasing, while the Terms of Use state that cancellation “does not refund a current billing period” and define no guarantee exception or claim process. A customer purchasing from this pricing page is therefore shown two incompatible refund policies; update the terms and implementation to honor this guarantee, or remove/qualify the promise before accepting payments.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
This is a valid flag. The 30-day money-back guarantee pre-existed in the FAQ page before this PR — this PR amplified it onto the pricing page bottom section. The conflict with Terms ("cancellation does not refund a current billing period") was already present site-wide before this change.
Fixing this requires a policy decision by the repo owner: either (a) update the Terms to include a guarantee exception clause, or (b) remove the guarantee from both the FAQ and the pricing page. That's outside the scope of this PR. Flagging for the owner to address separately — not pushing a change here to avoid making a unilateral legal decision.
Generated by Claude Code
|
✅ Meticulous spotted 0 visual differences across 169 screens tested: view results. Meticulous evaluated ~4 hours of user flows against your PR. Expected differences? Click here. Last updated for commit |
…t fix npm audit fix upgraded nanoid (GHSA-2v37-7h3g-55p8, high severity) and postcss (GHSA-fxqj-rqcc-2cmp, moderate). Result: 0 vulnerabilities. Also includes next-env.d.ts update generated by Next.js build.
…ndings - Scan limit message: 'Free scans used' → 'Weekly scans used — scanning still works, buyer details unlock with Full Access' (scanning is never blocked; copy now correctly reflects that only buyer details are gated, not the scan) - Value qualifier: restore 'where available' to published value description in upgrade nudge (some leads return POA/empty; the qualifier was accurate and was incorrectly dropped in the previous commit)
Summary
FindJobsPage – scan limit copy: Replace the cryptic "Buyer and submission context locked. Scanning remains free." with plain English: "Free scans used — buyer details and bid guidance unlock with Full Access." Tradesmen scan copy, not read it — the old message was jargon.
FindJobsPage – upgrade nudge: Label now says "THESE ARE REAL JOBS — BUYER DETAILS LOCKED" (fear). Added ROI line "One job covers 12 months at £39" (proof). "No credit card required to browse · 30-day money back" surfaced inline next to CTA (control). Removed a paragraph of disclaimer copy that buried the conversion point.
FindJobsPage – WHY THIS SCORE? button: Enlarged from 9px/single-border to 11px/border-2 with yellow hover. Renamed from "WHY?" to "WHY THIS SCORE?" so the purpose is obvious. Score reasons are the primary trust signal — hiding them behind an almost-invisible button defeated the purpose.
PricingPage – bottom CTA section: Reordered CTAs (free scan first, activate second — matches the product's scan-before-pay promise). Headline sharpened to "SCAN YOUR PATCH FREE. PAY ONLY IF IT FITS." 30-day money-back guarantee moved from faint
text/60opacity to bold black — it was there but invisible.Test plan
npm run build— confirmed clean (120/120 static pages)npx tsc --noEmit— no errorsGenerated by Claude Code