Skip to content

fix(public): add in-content conversion CTA to the /specimen proof page - #155

Merged
nish3451 merged 45 commits into
mainfrom
fix/specimen-conversion-cta-lane1
Aug 13, 2026
Merged

fix(public): add in-content conversion CTA to the /specimen proof page#155
nish3451 merged 45 commits into
mainfrom
fix/specimen-conversion-cta-lane1

Conversation

@nish3451

@nish3451 nish3451 commented Aug 12, 2026

Copy link
Copy Markdown
Collaborator

Finding

[unreviewed-by-grok] The /specimen proof page contains no in-content conversion CTA — the page the homepage routes its "Read the specimen" call-out to (public/index.html line 249).

Fix

The reader who finishes the sample report previously ended at the Confidentiality section with only the nav CTA to convert. This adds an in-content conversion step right where the report ends:

  • public/specimen.html — dark .band block after the report with an explicit .cta link to /#start (same request surface as the nav CTA), a no-guarantees note, and the house copy voice.
  • public/specimen.css — pill CTA styling with a ≥44px tap target (padding 16px 24px), matching the site's tap-target standard; the band itself uses the shared.css house pattern already used on /pricing and /agents.
  • public/specimen.js — includes the band in the reveal-on-scroll selector.
  • scripts/check-site.mjs — static guard so the band CTA, its /#start target, the no-guarantees note, and the tap-target padding cannot silently regress.
  • scripts/test-heading-hierarchy.mjs — locked outline gains the new h2: [1, 2, 2, 2, 2, 3, 2, 2].

Supersession note

PR #107 (fix/specimen-conversion-cta) carried the identical change set but has been CONFLICTING/DIRTY against main since 2026-08-11 and is stale. This branch is cut fresh from current origin/main and carries the same fix cleanly — it is the superior delivery path for this finding; #107 can be closed.

Validation

npm run check ✓ · test:headings 6/6 ✓ · test:sitemap 7/7 ✓ · test:contract 8/8 ✓ · test:worker 55/55 ✓ · test:ui 16/16 ✓

Summary by CodeRabbit

  • New Features
    • Added an in-content promotional band before the footer inviting visitors to request an appraisal.
    • Included details about the four manual review passes, delivery timeline, keep-or-discard terms, and no-performance-guarantee notice.
    • Added a clearly styled request link with accessible hover, focus, and tap-target states.
    • Added reveal animation behavior for the new promotional band.

The homepage routes its 'Read the specimen' call-out to /specimen, but the
page ended at the Confidentiality section with only the nav CTA to convert.
A reader who finishes the sample report had no in-content next step.

Add a dark .band (house pattern from shared.css, as used on /pricing and
/agents) after the report with an explicit .cta link to /#start, a
no-guarantees note, and a >=44px tap target. Include .band in the specimen
reveal-on-scroll selector, update the locked heading outline (new h2), and
guard the CTA shape in check-site.mjs so it cannot silently regress.

Supersedes the conflict-locked PR #107 (fix/specimen-conversion-cta), which
carried the same change set but has been DIRTY against main since 2026-08-11.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nish3451 has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 3f0d20e1-b0ae-482f-a21c-4ecfe3fa968d

📥 Commits

Reviewing files that changed from the base of the PR and between 319e763 and 9e523a7.

📒 Files selected for processing (1)
  • scripts/check-site.mjs
🚧 Files skipped from review as they are similar to previous changes (1)
  • scripts/check-site.mjs

📝 Walkthrough

Walkthrough

The specimen page adds an appraisal CTA band before the footer. CSS styles the CTA, and reveal animation includes the band. Static checks validate the CTA content, styling, and heading hierarchy.

Changes

Specimen appraisal CTA

Layer / File(s) Summary
Add and wire the appraisal CTA
public/specimen.html, public/specimen.css, public/specimen.js
The page adds appraisal details, a request link, and no-guarantees text. CSS adds CTA states. Reveal animation now targets .band.
Validate CTA content and structure
scripts/check-site.mjs, scripts/test-heading-hierarchy.mjs
Static checks validate the band, CTA link, notice, and tap-target padding. The expected heading sequence includes the new h2.

Estimated code review effort: 2 (Simple) | ~10 minutes

Mergeability Score: ⚪ Minimal · up to 9e523

This PR adds a localized in-content conversion CTA to the specimen page with matching styling, scroll behavior, and regression checks; no actionable merge-blocking risk remains beyond normal checks and review.

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely describes the main change: adding an in-content conversion CTA to the /specimen proof page.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/specimen-conversion-cta-lane1

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
scripts/check-site.mjs (1)

1675-1675: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Assert the .note element, not only its text.

Line 1675 searches for the sentence anywhere inside specimenCtaBand[1]. If the text moves into another band child, the check still passes while the .band .note styling is removed. Match the .note element before checking its text.

Proposed guard
-  if (!/No revenue, ranking, ROAS, conversion, booked-call or sales-volume guarantees\. Only the work\./.test(specimenCtaBand[1])) {
+  const specimenCtaNote = specimenCtaBand[1].match(/<div class="note">([\s\S]*?)<\/div>/);
+  if (!specimenCtaNote || !/No revenue, ranking, ROAS, conversion, booked-call or sales-volume guarantees\. Only the work\./.test(specimenCtaNote[1])) {

The supplied public/shared.css context defines .band .note as the styled note element.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@scripts/check-site.mjs` at line 1675, Update the assertion using
specimenCtaBand[1] to first require the presence of the .band .note element,
then verify that element contains the expected guarantee text. Do not allow
matching the sentence elsewhere in the band to satisfy the check.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@scripts/check-site.mjs`:
- Line 1675: Update the assertion using specimenCtaBand[1] to first require the
presence of the .band .note element, then verify that element contains the
expected guarantee text. Do not allow matching the sentence elsewhere in the
band to satisfy the check.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: fdf34a5d-a6e7-4e33-81a1-07003dd60ed7

📥 Commits

Reviewing files that changed from the base of the PR and between ad9cee3 and 37295c1.

📒 Files selected for processing (5)
  • public/specimen.css
  • public/specimen.html
  • public/specimen.js
  • scripts/check-site.mjs
  • scripts/test-heading-hierarchy.mjs

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nish3451 has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nish3451 has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nish3451 has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nish3451 has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nish3451 has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nish3451 has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your trial has ended. Reactivate Greptile to resume code reviews.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your trial has ended. Reactivate Greptile to resume code reviews.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your trial has ended. Reactivate Greptile to resume code reviews.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your trial has ended. Reactivate Greptile to resume code reviews.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your trial has ended. Reactivate Greptile to resume code reviews.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your trial has ended. Reactivate Greptile to resume code reviews.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your trial has ended. Reactivate Greptile to resume code reviews.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@nish3451
nish3451 merged commit b81281f into main Aug 13, 2026
3 checks passed
nish3451 added a commit that referenced this pull request Aug 14, 2026
…nt main and live (2026-08-14) (#195)

The review item "[unreviewed-by-opus] The /specimen proof page contains no
in-content conversion CTA" is already fixed: PR #155 (b81281f) landed the
.band conversion CTA on /specimen on 2026-08-14, superseding the
conflict-locked PR #107. This receipt re-verifies the fix against current
origin/main (2088b6b) and the live deployment (release 5c6521a): the band
CTA to /#start is on source, guarded by check-site.mjs, served live, and
covered by the passing test suite. No code change was needed.

Co-authored-by: nish3451 <nish3451@users.noreply.github.com>
Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
nish3451 added a commit that referenced this pull request Aug 14, 2026
… on current state (#203)

#107 closed 2026-08-14 (stale duplicate, conflict-locked since 2026-08-11);
#155 merged 2026-08-13 as b81281f and is on current main and live. The
specimen.html band hunks are byte-identical as the item states, and no open
PR carries the fix — the cluster is fully resolved.

Co-authored-by: nish3451 <nish3451@users.noreply.github.com>
Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
nish3451 added a commit that referenced this pull request Aug 21, 2026
…-107-155-lane1-2026-08-21

docs(evidence): reconcile the duplicate specimen-CTA PR #107/#155 cluster (2026-08-21, lane 1)
nish3451 added a commit that referenced this pull request Aug 21, 2026
…current main and live (2026-08-20, lane 1) (#273)

Review item 94ec723c9e ([unreviewed-by-opus] The /specimen proof page
contains no in-content conversion CTA) is already resolved: PR #155
(b81281f) added the .band CTA on 2026-08-13 and it is intact on current
main (92d55c3) and live. Close the item out with a fresh re-verification
receipt so it cannot be re-opened by tracker drift.

Co-authored-by: minimax-vps <minimax-vps@local>
Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant