Skip to content

Improve landing page conversion copy#598

Merged
riderx merged 3 commits into
mainfrom
codex/improve-landing-conversion-copy
May 1, 2026
Merged

Improve landing page conversion copy#598
riderx merged 3 commits into
mainfrom
codex/improve-landing-conversion-copy

Conversation

@riderx
Copy link
Copy Markdown
Member

@riderx riderx commented Apr 30, 2026

Summary

  • sharpen homepage hero, feature, monitoring, automation, and CTA copy around concrete release outcomes
  • add proof callout to the how-it-works section using existing testimonial text
  • align messaging with the roast recommendations: skimmable story, feature -> ability -> benefit, and customer transformation

Checks

  • bunx prettier --write messages/en.json apps/web/src/components/HowItWorks.astro
  • NODE_OPTIONS=--max-old-space-size=16384 bunx astro check (apps/web)
  • bun run check
  • bun run build:web

Summary by CodeRabbit

  • New Features

    • Added a testimonial block to the How It Works section.
  • Style

    • Reordered layout utility classes for consistent spacing and CTA presentation.
    • Adjusted CTA spacing and order for improved visual flow.
    • Enhanced SVG icons for improved accessibility (aria/focus improvements).
  • Chores

    • Updated marketing copy site-wide to clarify rollout, compliance, rollback, and release workflows.
    • Minor punctuation fixes in multiple translated testimonial strings.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Apr 30, 2026

📝 Walkthrough

Walkthrough

Reordered Tailwind utility classes in the HowItWorks component, added aria attributes to SVGs, inserted a testimonial block, and updated English marketing copy; several non-English locale files receive punctuation fixes to a testimonial string.

Changes

Cohort / File(s) Summary
HowItWorks component
apps/web/src/components/HowItWorks.astro
Reordered Tailwind class strings across section, badge, grid, cards, and CTA; inserted a testimonial block (description + <blockquote> + highlight) between the cards grid and CTA; added aria-hidden="true" and focusable="false" to SVG icons.
English marketing copy
messages/en.json
Substantive copy updates across landing/feature sections: reframed hero, "How it works" steps, developer features, automation/monitoring, compliance/CTAs, and security wording to emphasize store-compliant rollout, rollout visibility, and updated feature phrasing.
Locale testimonial punctuation fixes
messages/es.json, messages/fr.json, messages/id.json, messages/it.json, messages/ja.json, messages/ko.json, messages/zh.json
Appended trailing punctuation to the testimonial_highlight translation string in each file (minor text-only edits).

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Poem

🐰 I hopped through classes, neat and spry,
Gave icons hush and a voice to try,
A cozy quote tucked in-between,
Words aligned — a safer sheen.
I nibble lines and then I sigh. 🥕

🚥 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 'Improve landing page conversion copy' directly corresponds to the main changes in the PR: resharpening homepage messaging and adding proof callouts to improve conversion outcomes.
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.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/improve-landing-conversion-copy

Review rate limit: 0/5 reviews remaining, refill in 54 minutes and 11 seconds.

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

@riderx riderx marked this pull request as ready for review April 30, 2026 16:08
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 4

🧹 Nitpick comments (1)
apps/web/src/components/HowItWorks.astro (1)

391-394: ⚡ Quick win

Avoid set:html for plain localized copy.

testimonial_title is plain text in the current locale file, so set:html only drops Astro's escaping guarantees here. Render it normally unless this key is intentionally trusted rich text.

Suggested change
-        <p
-          class="relative text-lg leading-8 font-semibold text-white before:absolute before:inline before:-translate-x-full before:content-['\201C'] after:inline after:content-['\201D']"
-          set:html={m.testimonial_title({}, { locale: Astro.locals.locale })}
-        />
+        <p class="relative text-lg leading-8 font-semibold text-white before:absolute before:inline before:-translate-x-full before:content-['\201C'] after:inline after:content-['\201D']">
+          {m.testimonial_title({}, { locale: Astro.locals.locale })}
+        </p>
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/components/HowItWorks.astro` around lines 391 - 394, The element
in HowItWorks.astro uses set:html with m.testimonial_title(...), which exposes
raw HTML escaping for a plain localized string; replace the set:html usage with
normal rendering (put the result of m.testimonial_title({}, { locale:
Astro.locals.locale }) as the element's child or interpolate it) so Astro's
automatic escaping is preserved, and only use set:html if the key intentionally
contains trusted rich HTML.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@apps/web/src/components/HowItWorks.astro`:
- Around line 396-397: The template is appending a hard-coded period after the
translated string call m.testimonial_highlight, which forces English
punctuation; remove the trailing "." from the JSX/HTML so the template simply
renders {m.testimonial_highlight({}, { locale: Astro.locals.locale })} and
update the corresponding locale entries for testimonial_highlight to include
their own punctuation in each language. Ensure no other place appends extra
punctuation around m.testimonial_highlight so translators control the final
sentence punctuation.
- Around line 24-25: The decorative <svg> elements (e.g., the SVG inside the div
with classes "relative top-30 left-8 mb-8 flex h-64 items-center justify-center"
and the other decorative SVGs in this HowItWorks component) are exposed to
assistive tech; update each such <svg> to include aria-hidden="true" and
focusable="false" so screen readers skip them, and apply the same attributes to
the other decorative SVG instances in this section.

In `@messages/en.json`:
- Line 1103: Update the localization key "how_it_works_card3_title" in
messages/en.json to clarify that the update is automatic; replace the current
value "Users switch on next launch" with a clearer phrase such as "Update
applies on next launch" so the title matches the actual updater behavior
described elsewhere.
- Line 1630: Update the JSON value for the "problem_solution_title" key to fix
grammar and readability: replace "App store reviews slow" with "Slow App Store
reviews" (preserve surrounding quotes and JSON formatting for the
"problem_solution_title" entry).

---

Nitpick comments:
In `@apps/web/src/components/HowItWorks.astro`:
- Around line 391-394: The element in HowItWorks.astro uses set:html with
m.testimonial_title(...), which exposes raw HTML escaping for a plain localized
string; replace the set:html usage with normal rendering (put the result of
m.testimonial_title({}, { locale: Astro.locals.locale }) as the element's child
or interpolate it) so Astro's automatic escaping is preserved, and only use
set:html if the key intentionally contains trusted rich HTML.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: e523413e-44f8-43a3-aaff-f6c860acef1d

📥 Commits

Reviewing files that changed from the base of the PR and between 95f79c4 and 798ab85.

📒 Files selected for processing (2)
  • apps/web/src/components/HowItWorks.astro
  • messages/en.json

Comment thread apps/web/src/components/HowItWorks.astro Outdated
Comment thread apps/web/src/components/HowItWorks.astro Outdated
Comment thread messages/en.json Outdated
Comment thread messages/en.json Outdated
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@messages/en.json`:
- Line 1728: Update the JSON value for the key "reach_users_now_not_weeks_later"
to avoid implying immediate in-session updates and reflect the "apply on next
launch" flow: reword the message so it says users will receive or see the web
fix on their next app launch (and optionally note that this typically happens
within minutes), ensuring the copy aligns with the update lifecycle described
elsewhere in the PR.
- Line 1630: Update the localization key "problem_solution_title" in
messages/en.json to use the correct product-name capitalization by changing its
value from "App store review delays" to "App Store review delays" so the
headline reads with a capital "S" for "Store".
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: f71a51a9-4cb0-4dfc-bd19-d2d7985a9c3f

📥 Commits

Reviewing files that changed from the base of the PR and between 798ab85 and b0111d2.

📒 Files selected for processing (9)
  • apps/web/src/components/HowItWorks.astro
  • messages/en.json
  • messages/es.json
  • messages/fr.json
  • messages/id.json
  • messages/it.json
  • messages/ja.json
  • messages/ko.json
  • messages/zh.json
✅ Files skipped from review due to trivial changes (7)
  • messages/it.json
  • messages/ko.json
  • messages/fr.json
  • messages/zh.json
  • messages/es.json
  • messages/id.json
  • messages/ja.json
🚧 Files skipped from review as they are similar to previous changes (1)
  • apps/web/src/components/HowItWorks.astro

Comment thread messages/en.json Outdated
Comment thread messages/en.json Outdated
@sonarqubecloud
Copy link
Copy Markdown

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

♻️ Duplicate comments (1)
messages/en.json (1)

1128-1130: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Clarify when the update actually applies.

This still reads as if the fix is applied “in the background,” which conflicts with the next-launch flow used elsewhere in the PR. Make the download/apply split explicit so the copy stays consistent.

✏️ Suggested copy tweak
-  "instant_updates_for_capacitor_apps_description": "When a web-layer bug is live, ship the fix through Capgo instead of waiting days for app store approval. Users get the update in the background while native changes stay in the normal review path.",
+  "instant_updates_for_capacitor_apps_description": "When a web-layer bug is live, ship the fix through Capgo instead of waiting days for app store approval. Users download the update in the background and it applies on their next launch while native changes stay in the normal review path.",
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@messages/en.json` around lines 1128 - 1130, Update the copy for the keys
"instant_updates_for_capacitor_apps_description" and (if relevant)
"instant_updates_for_your" to explicitly state the download vs apply behavior:
say the fix is downloaded in the background but applied on next app launch (or
similar "next-launch" wording) so it matches the PR's next-launch flow and
removes the implication that fixes are applied immediately in the background.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Duplicate comments:
In `@messages/en.json`:
- Around line 1128-1130: Update the copy for the keys
"instant_updates_for_capacitor_apps_description" and (if relevant)
"instant_updates_for_your" to explicitly state the download vs apply behavior:
say the fix is downloaded in the background but applied on next app launch (or
similar "next-launch" wording) so it matches the PR's next-launch flow and
removes the implication that fixes are applied immediately in the background.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 7aeb1d03-e160-42a7-af34-951993465011

📥 Commits

Reviewing files that changed from the base of the PR and between b0111d2 and 4cc1dec.

📒 Files selected for processing (1)
  • messages/en.json

@riderx riderx merged commit 4ccb033 into main May 1, 2026
9 checks passed
riderx added a commit that referenced this pull request May 1, 2026
riderx added a commit that referenced this pull request May 1, 2026
* Simplify landing live update copy

* Revert "Improve landing page conversion copy (#598)"

This reverts commit 4ccb033.

* Refine landing hero copy

* Clarify update apply timing

* Restore landing testimonial block
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