feat(landing): homepage rebuild — persona manifesto, card beat high, /lp/card retired - #2690
feat(landing): homepage rebuild — persona manifesto, card beat high, /lp/card retired#26900xkkonrad wants to merge 17 commits into
Conversation
…, 11 sections diet to 5 beats Locked plan (mono projects/lp-refresh): card beat imports /shhhhh straight after the hero, manifesto + problem prose follow, works-today grid carries the surviving proof (live FX widget, compare links), exclusion ending closes. /lp/card retired via permanent redirect to /shhhhh; sitemap and robots entries removed. Sticky bar splits by audience (SIGN UP NOW + TRY THE DOOR). Weekly admission copy moves 20 -> 50 per product/card.md ruling 2026-08-12. New landing copy ships EN-first in all catalogs; localization follows before prod merge.
… FX widget landing mode, sticky-bar migration branch + robust suppression, card kill switch, shared ScarcityCounter, dead code out 17-item consolidated fix from 7 review angles + visual/copy QA: zero-fee claim now appears exactly once; ExchangeRateWidget gains hideCta/hideFees/default corridor props (USD->BRL — widget enforces a USD leg); StickyMobileCTA regains the pwa-sunset store branch and suppresses via data-own-cta + MutationObserver instead of one-shot id lookup; disableCardBeat kill switch; DOOR_TRY gains surface on /shhhhh; /lp/card purged from build scripts, /shhhhh added to the sitemap; ScarcityCounter shared by homepage + /shhhhh with ADMISSIONS_PER_WEEK=50 in doorTally.utils; TweetCarousel + 10 orphaned i18n keys deleted; static beats back to server slots; card face ssr:false behind a reserved box; content submodule bumped to the Sumsub FAQ fix.
# Conflicts: # src/app/lp/card/page.tsx
The manifesto rebuild rewrote sections that already earn their keep. Most of the approved v3 page is the live folds in a new order, so restore them and re-sequence instead of writing new ones. Two folds are new. A black door fold distils the /shhhhh hero — same catalog, same scarcity counter — and every click in it goes to /shhhhh, so the fold makes the offer and the page does the work. A cream problem fold names the three people we built peanut for, right before the product folds answer them. Restored from dev: the tweet wall, the hero, NoFees, the sticky mobile bar, the exchange-rate widget, the landing string bag, and the marquee words from the content system. Dropped with the rebuild: CardBeat, Manifesto, ProblemProse, WorksToday, NotForYou. The DropLink fold leaves the homepage because v3 has no slot for it; the component stays for /exchange. Manteca turns blue: it now follows RegulatedRails, which is cream. On the black fold the button and the card carry pink drop shadows, because a black shadow is invisible there. disableCardBeat becomes disableLandingCardFold and hides the door fold together with the closed-beta strip under it.
A transform is ignored on a non-replaced inline element, and next/link renders an inline anchor, so the card sat straight instead of at -12deg.
The three placeholder line icons were generic stock shapes that belonged to no other Peanut surface. Each card now carries art the site already uses, so the fold reads as ours. "Living across borders" takes the marquee's thumbs-up turned over — the verdict every neobank hands these people. "Sending money home" is a Knerd percent, outline rather than filled: at this size the filled cut closes its counters and reads as a blob. "Paid from abroad" is the pinch hand cut out of the no-hidden-fees art into its own asset, so the card pulls 11KB of paths instead of the whole 34KB banner. One 44px-tall slot holds all three, because the glyph and the drawings need different type sizes to carry the same optical weight.
The landing page names cities and repeats product claims that all have a real
article behind them, and none of it was reachable. This links the ones with a
genuine destination and leaves the rest alone — "Instant" has no article, so
it stays plain text.
MarqueeComp now takes {label, href} items alongside plain strings, so a strip
can link some words and not others. Every existing caller passes strings and
is untouched. The strip under the door fold links all five words to /shhhhh,
since the whole strip is the door. Marquee thumbs lose their "Marquee Image"
alt: now that the strips carry links, a screen reader would read that filler
between every one.
The city line stays one translated string per locale. A helper splits it on
the city names — aliases cover "New York", "Nueva York" and "Nova York" — and
wraps the matches. A locale whose wording drops a city loses that link and
keeps its sentence, which is why the helper matches rather than interpolates.
Konrad drew a peace hand and a coin stack for the problem cards, so the placeholder marks go: the turned-over thumbs-up and the pinch hand cropped out of the no-hidden-fees banner last round. That crop had exactly one consumer, so the asset goes with it. Card 2 keeps the Knerd percent, and all three still share one 44px slot so the card tops line up. The door fold loses its body paragraph. It was the /shhhhh pitch repeated a click early, scarcity count and all — the fold only has to make the offer. Wordmark, tagline, door, card. The shared ScarcityCounter stays; /shhhhh is still its caller.
The works-with strip named nine partners and answered nothing about any of them. Each logo now opens the page that honestly explains what it does with Peanut: Wise and Revolut their compare pages, Mercado Pago the QR explainer, PIX the Brazil page, and the SEPA/ACH banks the bank-deposit article. Brubank and Stripe stay unlinked — no article covers their rail, and a logo that lands somewhere vague is worse than one that does nothing. Mercado Pago and PIX are the only two marks in the set that aren't a heavy wordmark, and both were disappearing into the pink tile, so those two get a white card behind them. Round-2 links also stop underlining at rest. Eight underlined words in a scrolling strip read as clutter; the underline now waits for the cursor.
…more Six of the seven landing FAQs have a help article that answers the question properly, and none of them said so. The FAQ panel takes an optional learnMoreHref per question and the landing page supplies it from a map keyed on the content system's question ids — the content file stays free of code concerns, and a question with no honest article simply has no entry. "Why Peanut?" has none; "My question is not here" already links the help centre. Both other FAQsPanel callers pass nothing and are unchanged. Konrad asked for the learn-more links right-aligned, remembering they used to be. Git says otherwise: neither has ever carried an alignment class. The securityBuiltIn one only looks centred on a phone because it inherits text-center from the feature card while the paragraph beside it opts out with text-left. Right-aligning all three is the change he actually wants; there was nothing to revert. The 24/7 card also drops "real humans" — we shouldn't promise a person picks up. Spanish and Portuguese first sentences follow; second sentences untouched.
Both cards were carrying raster art at 44px. The peace hand already existed as a vector — the same hand-peace.svg the footer and the security fold use, so the homepage now draws from the same file instead of a near-duplicate PNG. Konrad supplied the coin stack as an SVG too. Ratios differ from the PNGs (37x57 and 197x173), but the shared 44px slot sizes on height, so the row still lines up.
react-fast-marquee sets overflow-x:hidden on its container. A visible Y axis against a hidden X axis computes to auto, so the strip clips vertically too — and the tiles carried mb-2 with no top margin, sitting flush against that edge. Hovering lifted a tile 2px into it and sheared off its top border. my-2 gives the tile 8px above to move into. Measured under a real hover: the tile top sat 2px past the clip edge before, and 6px clear of it after.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Important Review skippedDraft detected. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Code-analysis diffPainscore total: 7154.13 → 7161.12 (+6.99) 🆕 New findings (70)
…and 50 more. ✅ Resolved (82)
…and 62 more. 📈 Painscore deltas (top movers)
|
🧪 UI test report — ✅ all greenSuites
📊 Coverage (unit)
⏱ 10 slowest test cases
|
The Pix wordmark in pix-brz.svg is mint #32BCAD. Against the homepage's #90A8ED that is 1.01:1 — the same luminance as the ground — so it reads as a rendering fault rather than a logo. It failed on cream too (2.15:1); the blue only made it obvious. A lighter card does not rescue it either: the mint is 2.35:1 on white and 1.17:1 on pink. Only the black mark clears 4.5:1. So each lockup now uses what #regulated-rails already ships one fold up: the pink partner tile, 1px black border and 4px hard shadow, holding the black mark on the white inner card that fold gives PIX and MercadoPago (both are line art, not heavy wordmarks, and go weak straight on the pink). The flags stay, but as their own assets drawn to one rule — the old SVGs baked flag and logo into a single file, so the logo could not move into a tile without splitting them. mepa-arg.svg also carried no outline at all, which is why Argentina dissolved into the background at 1.37:1; both flags now have the same 3px black edge and hold their silhouette on either ground. Also fixes the asset itself: pix-logo.svg declared viewBox "0 0 88 38" while its ink spans x = -15.7..87.7, so the left petal of the diamond was sheared off — visible on the rails marquee today, not just here. Both links keep their hrefs and now look like links: the tile lifts on hover and an underlined "Learn more ->" sits under each, reusing landingLearnMore, so no locale file changes. On mobile the pair sits above the phone, so the sticky CTA covers the screenshot instead of a link. Mobile and desktop share one block via md:contents, which drops the duplicated markup from four link elements to two.
…iles fix(landing): give the country lockups the partner-tile treatment
Konrad hotfix ruling: the 'Settles in digital dollars at the real exchange rate.' line goes (Manteca renders on / and /quests — removed from both), dead landingPayLocalSettles key removed from all catalogs. Footer link EN label Jobs → Career; es/pt keep their existing labels for the localization gate to revisit.
Follow-up queued for whoever is on this branch: the #qr-pay lockups need partly revertingNothing is in flight — no branch, no PR, no worktree. Picking this up is deliberate. #2692 merged into
So the target is: original flag artwork, black marks straight on the section ground, no tile and no card. That partly undoes #2692, which is exactly why it needs a handoff rather than being discovered later as a regression. Full brief: One decision is still open: mark scale, S or L. Konrad has the mockups and has not picked — https://claude.ai/code/artifact/f2f57741-2e87-4ea9-a1d6-c7749d2788aa. Don't guess; ask if he hasn't answered. Three things from #2692 that should stay:
And two consequences that belong in that PR's body rather than buried: the page will present these two brands two different ways one scroll apart (accepted, in exchange for a calmer fold — don't "fix" it by restoring the tile), and the original Argentine flag has no black stroke anywhere in the file, so at 1.37:1 it loses its edges against the blue. That's a property of the artwork, not the tile. Adding an outline to it is not authorised — offer it, don't bundle it. |
…ground Implements mono projects/lp-refresh/handoff-qrpay-lockups.md (Konrad's revised ruling): the pink tile and white inner card go, the original wavy flag artwork returns (cropped flag-only via root viewBox — ink untouched), and the black marks sit directly on the section bg (9:1 on the homepage blue, 19:1 on the /quests cream). Mark scale L per the brief's recommendation — the PIX Banco Central strapline is illegible at S. Fixed-height slot keeps the marks on a shared baseline; the underlined Learn more stays as the sole click affordance. Kept from #2692: the pix-logo viewBox fix and the Manteca mobile/desktop collapse.
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).
Summary
Rebuild of the peanut.me homepage per mockup v3.1 (mono
projects/lp-refresh/mockups/mockup.html, Konrad-approved 2026-08-13). Doctrine: reuse the live page heavily — the homepage is the live sections reordered, plus two new folds. The earlier v1 implementation on this branch was rejected as too busy and is fully unwound (additive commits, no force-push).New fold order (bg): live hero (pink) → ShhhhhFold (black, NEW) → ProblemFold (cream, NEW) → NoFees (blue) → yourMoney (yellow) → TweetCarousel (pink) → RegulatedRails (cream) → Manteca (blue ← was cream) → securityBuiltIn (pink) → sendInSeconds (yellow) → FAQs → footer. Yellow marquee strips between every fold as on live; the strip after ShhhhhFold carries the /shhhhh words (IYKYK · WORD TRAVELS · …).
ScarcityCounter(51→50), TRY THE DOOR + waitlist link, blurredPixelatedCardFaceat −12°. Every click routes to/shhhhh— no inline join logic. Copy comes from the existingshhhhh.*next-intl catalog (already localized, 4 locales). Pink drop shadows on this fold only (black shadows vanish on black).src/i18ncatalogs. sendInSeconds keeps the full scroll-freeze grow-button machinery./lp/cardretired (redirect →/shhhhhin redirects.json, route deleted, sitemap + robots cleaned), sharedScarcityCounter, 20→50/week admission copy across /shhhhh + metadata perproduct/card.mdruling 2026-08-12.disableLandingCardFold(default off) hides ShhhhhFold + its marquee strip in one flip, mirroring the olddisableCardPioneersgating./questsunchanged.Design source: mockup v3.1 + decisions in mono
projects/lp-refresh/README.md.Task
TASK-21424 — https://app.notion.com/p/3ba83811757981dd8b7cd252044265e5
Risks / notes for review
/compare/wise|paypal|western-union, which 404 (onlypeanut-vs-*slugs are generated). Worth a separate one-line PR.npm run buildcould not run locally (sandbox OOM, environmental); typecheck + 231 suites / 2939 tests green locally — CI + Vercel preview are the build verification.QA
🤖 Generated with Claude Code
#qr-pay lockups (cb10001 — revised ruling, partly reverts #2692)
Per mono
projects/lp-refresh/handoff-qrpay-lockups.md: original wavy flag artwork restored (flag-only viewBox crop), pink tile + white card removed, black marks straight on the ground (9:1 on blue, 19:1 on cream), scale L. Two consequences stated deliberately, not to be "fixed":#regulated-rails, plain in#qr-pay, one scroll apart. Konrad accepted this inconsistency in exchange for a calmer fold.