feat(footer): Update legal links in Footer - #2755
Conversation
The site directory had no route to any legal document, and the two links that existed (Terms, Privacy in the footer nav) sat apart from the five card-programme documents, which were reachable only mid-application from CardTermsScreen. App-store review and the card issuer both expect those permanently reachable, so all seven now live in one Legal column. - Legal column: Terms of Service, Privacy Policy, Card Terms (U.S.), Card Terms (International), E-Sign Consent, Account Opening Privacy Notice, Prohibited Activities Policy — locale-routed like the manifest entries, so a Spanish reader lands on Spanish prose. - Resources column is gone; Help Center, Pricing and Supported Networks move to the top of Learn More. The manifest's "Terms" entry is dropped (a stale Notion export superseded by the /terms page) along with "Jobs", which already sits in the footer nav above. - Footer nav drops Terms and Privacy — one home per document. - footerTerms/footerPrivacy now read "Terms of Service"/"Privacy Policy", the labels a legal column wants; footerResources gives up its slot to the new Legal keys across all four catalogs. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018GWaH5h1Prm6zpeXkKWcZR
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (1)
Included review availability: 3 reviews are currently available. Your included PR review attempts over the past 7 days set your current allowance at 4 reviews per hour. 📝 WalkthroughWalkthroughThe footer removes Terms and Privacy links from primary navigation. ChangesFooter legal navigation
Playwright dependency installation
Estimated code review effort: 3 (Moderate) | ~20 minutes Merge Risk: ⚪ Minimal · up to This localized footer update consolidates legal links and reports passing validation checks; no actionable merge-blocking risk remains beyond normal review. Possibly related PRs
Suggested labels: Suggested reviewers: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
Code-analysis diffPainscore total: 7170.15 → 7170.54 (+0.39) 🆕 New findings (4)
✅ Resolved (4)
|
🧪 UI test report — ✅ all greenSuites
📊 Coverage (unit)
⏱ 10 slowest test cases
|
`apt-get update`, run inside `npx playwright install-deps chromium`, stalls intermittently on the runner's Azure mirrors. On 2026-08-19 it killed the e2e job three consecutive times on one commit — each run ignoring azure.archive.ubuntu.com, then hanging on archive.ubuntu.com noble-security until the 6-minute cap — while sibling runs minutes apart cleared the same step in seconds. Unrelated branches hit it the same afternoon, so it is not branch-specific. The stall is transient, so retry rather than mask: three attempts with a 150s per-attempt cap, dropping to the canonical archive after the first failure. One bad mirror now costs an attempt instead of the whole job. Deliberately still exits non-zero once the attempts are spent. Since `Run E2E tests` is continue-on-error, a setup step is the only thing that can red this job — making the install non-fatal would leave a genuinely missing system library silently unreported. The job cap moves 6 → 9 minutes to fit three bounded attempts; it stays well under the job's own 20-minute ceiling, so the fail-fast property that `ci-success` depends on is preserved. Verified by extracting the run block and exercising it under `bash -e` with fakes for npx/sudo/timeout: succeeds on first pass, recovers on a third attempt, and exits 1 when all three stall. The guarded pkill/sed cleanups return non-zero without aborting the script. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018GWaH5h1Prm6zpeXkKWcZR
Review feedback on the retry loop. `timeout` already runs the attempt in its own process group and signals that whole group, so the apt children do receive the SIGTERM — `--kill-after=15s` escalates to SIGKILL for any that ignore it. That makes `sudo pkill -9 -f '[a]pt-get'` both redundant and unsafe: it matched by command line across the entire runner, so it could have killed unrelated package work rather than only this step's descendants. Removed. The apt partial-list cleanup stays — that clears state a killed attempt leaves behind, which is what the next attempt trips over. Re-verified under `bash -e` with fakes: succeeds first pass, recovers on the third attempt, exits 1 when all three stall. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018GWaH5h1Prm6zpeXkKWcZR
…ps-retry fix(ci): retry Playwright system-deps install past apt mirror stalls
Why
The site directory had no route to any legal document. The only two legal links anywhere in the footer — Terms and Privacy — sat in the top nav, apart from the five card-programme documents, which were reachable only mid-application from
CardTermsScreen. App-store review and the card issuer both expect those permanently reachable, so all seven now live in one Legal column.The manifest's
resourcesentry for "Terms" also pointed at a stale Notion export (peanutprotocol.notion.site/Terms-of-Service-Privacy-Policy-…) rather than the real/termspage.What changed
Legal column replaces Resources (
SEOFooter.tsx), keeping the 4-up grid:Hrefs are authored
/en/…and localized by the existinglocalizeHref, same as the manifest entries, so a Spanish or Portuguese reader lands on their own locale (marketing pages fall back to English prose where a translation is missing).Resources folded into Learn More — Help Center, Pricing and Supported Networks now ride on top of the article links. Two entries are filtered out instead:
terms— the stale Notion export, superseded by/termsin the Legal columnjobs— already a top-level link in the footer nav aboveThe filter lives in the component because the manifest ships from the
peanut-contentsubmodule. If you'd rather those entries stop being generated at the source, that's a one-line change there andRESOURCES_MOVED_ELSEWHEREbecomes a no-op safety net.Footer nav now reads Support · Content · Docs · Security · Jobs — Terms and Privacy removed, one home per document.

Copy —
footerTerms/footerPrivacynow read "Terms of Service"/"Privacy Policy", the labels a legal column wants.footerResourcesgives up its slot tofooterLegalSectionplus five card-document keys, translated acrossen,es-419,es-arandpt-br.Testing
/en,/pt-brand/es-419pnpm typecheck— 0 source errorspnpm lint,prettier --check— cleanpnpm jest— 245/245 suites, 3169 tests passingpnpm verify-content— passes, including the footer-manifest link passOut of scope
This fixes discoverability on the web footer only. The native app shell doesn't render this footer, and the profile/settings menu still has no legal links — worth a follow-up, along with two inconsistencies found while auditing:
CardTermsScreenandApplicationStatusScreenuse plain<a target="_blank">instead ofDocsLink/openExternalUrl, and the prohibited-activities link is hardcoded to/en/while every other card link localizes.Generated by Claude Code
Summary by CodeRabbit
New Features
Updates