chore: back-merge main → dev (2026-08-20 release + #2760) - #2772
Conversation
Ports the whole LP change set onto main so it can ship to production. dev is 75 commits ahead of main, so #2690 cannot simply retarget; this is the same diff rebuilt on main's tree. Of the 51 files in the change set, 35 are byte-identical between main and dev and carried over whole. The other 16 also move on dev, so each was three-way merged with dev as the base — main's version plus the LP delta and nothing else. That keeps dev's unrelated work out: main's catalogs gain the seven ProblemFold keys, lose landingPayLocalSettles, and take the reworded support and footer strings, but none of dev's other new keys come along. src/content stays on main's pointer. Production content moves on its own pipeline and must not be dragged backwards or forwards by a code PR.
Konrad hotfix: small light-grey line below the CTA — verification required, no monthly/annual fees, cardholder terms, beta programme. New shhhhh.hero.disclaimer key in all four app catalogs (es/pt machine-drafted, flag at the localization gate).
… fade
Three findings from the review of this PR, all inside its own diff:
- The "24/7" marquee word pointed at `/support`, which is not a route — only a
permanent redirect to `/en/help`. Every neighbouring word resolves per locale,
so es/pt readers were the only ones dropped into English. Point it at
`/{locale}/help` instead.
- `PartnerLockup` carried `group` and `group-hover:opacity-90` on the same
element. Tailwind compiles that to a descendant selector, so the element can
never match itself and the fade was dead. `hover:opacity-90` is what was meant.
- `/lp/card` left the hand-maintained static-route lists in `verify-content` and
`generate-valid-links`, but its successor `/shhhhh` was never added — only
`ping-indexnow` got it. `/shhhhh` is now the canonical card page in the
sitemap, so the first content link to it would have failed verify-content's
Pass 1.
…ls FAQ body Two of the follow-ups this PR had filed rather than done, both code in this repo. The noFees "See the markup on" links pointed at /compare/wise|paypal|western-union. `generateStaticParams` only builds `peanut-vs-<slug>`, so all three 404'd. They are restored-from-dev lines, so the bug predates this branch, but it ships on the fold this PR rebuilt. `SupportedRailsFaqAnswer` hardcoded its five headings in English while its plain-text SEO twin was translated in all four catalogs, so a pt-BR reader opening the FAQ got a Portuguese question and an English body. The copy now comes from the landing catalog like every other FAQ body, and the non-EVM chain list joins on the existing `listJoinAnd` instead of a hardcoded "and". The es/pt values are lifted from the already-shipped `landingSupportedRailsFaqAnswer` sentence in each catalog, not drafted fresh. `t()` moves to `src/i18n/interpolate.ts` so a client component can interpolate without importing `@/i18n`, which would pull all four catalogs into the bundle. `@/i18n` re-exports it, so every existing caller is unchanged. Rail region names (`United States`, `36 countries`, …) stay English — they come from FIAT_RAILS and the plain-text answer already interpolates them the same way. Localizing that table is its own change.
…orts The hero artwork was sized purely by viewport width (50vw, no height cap), and the stack under it (mt-18 + tagline + mt-12 + button) is 344px of fixed height. On 16:9/16:10 laptops the SIGN UP button ends up at or below the fold: 1366x657 and 1280x689 -> below fold, 1440x789 (MacBook Air 13") -> clipped, 1536x753 -> below fold. Even 1920x969 fits with 2px to spare. Cap the artwork at 100svh minus the fixed stack (+3rem slack) and tighten the two desktop gaps (h2 mt-18 -> md:mt-12, CTA md:mt-12 -> mt-8). The button is now inside the fold at every measured viewport; tall screens are near-unchanged. Reported by Slava (Discord), Notion TASK-21626.
With the artwork now capped by viewport height, a 40vh mascot on a 1366x657 laptop was almost as tall as the artwork and hid "LOCAL FEEL". Cap it at 100svh-28rem too (md+ only) so it keeps the ~0.7x artwork proportion of the 1440x789 layout; viewports >= 789px tall are unchanged.
…e lines The first-fold fix sized the artwork against a 23rem stack below it, but that stack is not fixed — it assumes a two-line headline. pt-BR's "TOQUE. ESCANEIE. EM QUALQUER LUGAR." takes three lines, and four below 360px, where en and es take two. The surplus outran what the artwork cap bought back, so pt-BR stayed under the fold on short phones: -48px at 320x568, -42 at 360x600, -20 at 375x553 and 414x600, -2 at 360x640, -1 at 430x650. Measured on the preview, not reasoned about: shortening the headline does NOT fix it (still -10 at 320x568, -4 at 360x600, because it keeps wrapping to three lines on narrow screens), and taking the space from the artwork instead would shrink the hero for every locale on every short viewport to serve one. So take it from the gap above the headline, and only where the problem exists. Scoped to max-height 660px AND max-width 767px: without the width bound this would fire on 1366x657 laptops, which already clear the fold by 64px and do not need their spacing changed. Above those bounds nothing moves. All eight measured viewports now pass in pt-BR, worst case +8px; en gains slack it did not need and loses nothing elsewhere.
The fold shipped EN-first in all four catalogs, so /es-419, /es-ar and /pt-br
rendered "You already know the problem." in English inside an otherwise
localized page. Translating it was a recorded pre-merge gate, not a nice-to-have.
Written against the glossary test rather than translated loosely: es-419 stays
tuteo ("Ya conoces", "cruzas", "gastas") because voseo is banned there, es-ar
takes the voseo overrides ("conocés", "cruzás", "Ganás", "gastás") because
tú-forms are banned there, and pt-BR avoids the banned register. es-ar also
uses "plata" where es-419 says "dinero".
"WHAT'S THE $10? — A welcome reward. Complete verification + first $100 in card spend -> $10 unlocked to your balance..." promised money that no seeded perk backs. Removed outright rather than reworded or hedged, in all four catalogs plus the es-AR delta. q4 is dropped from faqKeys and the remaining keys keep their names. Renumbering q5-q8 across four catalogs to close the gap would risk pairing a question with another answer, for no user-visible gain, so the gap is documented in place. NOT covered here: home.carousel.card.description still says "$10 unlocks on your first $100 spend" on the in-app home carousel. Same unbacked claim, different surface and different owners, so it wants its own change rather than riding a landing-page PR.
Follow-through on 9063114, which took the same claim off /shhhhh. The home carousel still read "Closed beta. Badges skip the line. $10 unlocks on your first $100 spend." — the third sentence promises money no seeded perk backs, so it goes; the first two are true and stay. The es-AR override existed only to voseo the deleted verb ("Desbloqueá" vs es-419's "Desbloquea"), so it is removed rather than left duplicating es-419. The voseo title override stays. No "$10" string remains in any app catalog.
Prod release 2026-08-20: card CTA after deposit · QR-scanner + Pix fixes · es-AR · journey v2 · 1.0.53
feat(landing): homepage rebuild — persona manifesto, card beat high, /lp/card retired
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Comment |
Code-analysis diffPainscore total: 7298.77 → 7305.49 (+6.72) 🆕 New findings (76)
…and 56 more. ✅ Resolved (88)
…and 68 more. 📈 Painscore deltas (top movers)
|
🧪 UI test report — ✅ all greenSuites
📊 Coverage (unit)
⏱ 10 slowest test cases
|
Brings dev level with main after today's prod release (#2770) and Konrad's homepage rebuild (#2760, merged to main). Merged via the GitHub merge API, no conflicts. Merge with a merge commit, never squash.