feat(press): add /press/brand — brand and asset subpage - #2811
Conversation
The press kit had vector logos and a PDF but nothing a journalist or a directory submission actually needs: no raster marks, no social image at a standard size, no product screenshots, and no statement of the palette or type rules. The UI Kit section of the old Notion kit was an empty stub. Adds /press/brand covering the design side, linked from /press: - logo usage do/don't, from Brand Guidelines v1.2 p.5-7 - every downloadable file in one place, vector and raster - raster marks (icon 1024 transparent + on pink, 512, logotype, wordmark) - social images at 1200x630 and 1200x1200 - product screenshots, full resolution 1080x1920, EN + pt-BR + es-AR - palette hexes and the type roles, incl. the KNERD accent-only rule Screenshots are the 2026-07-08 store composites. The card screen is deliberately excluded — public card mentions need Rain pre-publication review and submissions are on hold. /press keeps rendering the prose kit from the mono content mirror; this page carries design-system reference data, so it lives in src/data next to the files it describes.
|
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: Team Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Comment |
Code-analysis diffPainscore total: 7151.08 → 7161.48 (+10.4) 🆕 New findings (11)
✅ Resolved (5)
📈 Painscore deltas (top movers)
|
🧪 UI test report — ✅ all greenSuites
📊 Coverage (unit)
⏱ 10 slowest test cases
|
There was a problem hiding this comment.
Chip review: Changes requested
The new localized brand page is structurally sound, but most of its user-facing guidance remains English on the Spanish and Portuguese routes.
Findings
- MAJOR · src/data/press-brand.ts:72 · Localize the brand reference data
Opening/es-419/press/brand,/es-ar/press/brand, or/pt-br/press/brandtranslates the section headings, butBRAND_FILE_GROUPS,BRAND_COLORS,BRAND_TYPE,LOGO_RULES, and the asset labels all come from this single English-only dataset. Consequently most of each advertised localized page still renders English text such as download descriptions and all logo do/don't guidance. Move these user-facing strings into the locale dictionaries (or key this data by locale) before publishing hreflang alternates for these routes.
Checked clean
- Verified the detached worktree HEAD, trusted PR author, base ref, base SHA, and merge base against the supplied values.
- Reviewed the full page, press-page link, brand-data manifest, and all four locale dictionary changes for correctness, security, adversarial failure paths, and slop.
- Verified every referenced static download exists in the exact-head Git tree and all new PNG dimensions and transparency modes match their declared metadata.
- Visually inspected the English screenshot set plus representative Spanish (AR) and Portuguese (BR) assets; the stated card-screen exclusion is preserved.
- Checked locale validation, canonical and hreflang generation, same-origin download handling, and static asset trust boundaries.
- All exact-head CI gates reported success, including typecheck, lint, format, unit, e2e, analysis, and preview deployment.
Second opinion by moonshotai/kimi-k3: 0 finding(s), marked with the model name. It reads the diff only, so treat its findings as advice.
Exact head: 6773638458ab · Context: repo
|
|
||
| export const BRAND_FILE_GROUPS: BrandFileGroup[] = [ | ||
| { | ||
| label: 'Logotype', |
There was a problem hiding this comment.
MAJOR: Localize the brand reference data
Opening /es-419/press/brand, /es-ar/press/brand, or /pt-br/press/brand translates the section headings, but BRAND_FILE_GROUPS, BRAND_COLORS, BRAND_TYPE, LOGO_RULES, and the asset labels all come from this single English-only dataset. Consequently most of each advertised localized page still renders English text such as download descriptions and all logo do/don't guidance. Move these user-facing strings into the locale dictionaries (or key this data by locale) before publishing hreflang alternates for these routes.
|
@0xkkonrad — this is green on CI but can't merge: #2836 is stacked on this and clean, so it retargets to Good news on sequencing: this pair is the only work in the current queue that's genuinely independent of the design system. Everything under |
dev moved the theme from tailwind.config.js into src/styles/globals.css. Repoint the palette's source comment, and drop the cream swatch — it is no longer a theme token and the brand book's main/secondary set doesn't carry it.
There was a problem hiding this comment.
Chip review — changes requested
The earlier localization defect remains, and the exact head now also fails the required design-system lint ratchet.
Findings
-
MAJOR · src/data/press-brand.ts:72 · Localize the brand reference data
This remains present after the earlier review. Opening/es-419/press/brand,/es-ar/press/brand, or/pt-br/press/brandtranslates the section headings, butBRAND_FILE_GROUPS,BRAND_COLORS,BRAND_TYPE,LOGO_RULES, screenshot labels, and mascot labels still come from this English-only dataset. Most of each advertised localized page therefore renders English guidance. Move these user-facing strings into the locale dictionaries (or key the reference data by locale) before publishing hreflang alternates for these routes. -
MAJOR · src/app/[locale]/(marketing)/press/brand/page.tsx:142 · Make the new page pass the ds-lint ratchet
The requiredds-lintcheck fails at this exact head:inlineStylerises from 50 to 51 andstockTextSizefrom 362 to 386. The added page accounts for exactly onestyle={{ ... }}swatch and 24text-xs/text-sm/text-xlutilities, so this is introduced by the PR rather than a base failure. Use token-backed swatch classes and the design-system text scale/recipes; do not raise the debt baseline for a new page.
Checked clean
- Verified the detached worktree HEAD, trusted PR author, base ref, base SHA, and merge base against the supplied values.
- Re-evaluated the earlier localization finding against the current code; it is still present and was not answered by the intervening diff.
- Reviewed the full page, press-page link, brand-data manifest, and all four locale dictionary changes for correctness, security, adversarial failure paths, and slop.
- Verified every referenced static download and mascot asset exists in the exact-head tree; locale validation, canonical/hreflang generation, and same-origin download paths are otherwise sound.
- Ran the exact repository ds-lint command locally and confirmed the PR page contributes the full failing deltas: one inline style and 24 stock text-size usages.
- At review time unit, typecheck, eslint, format, analysis, human-authors, and baseline checks were green; ds-lint and aggregate ci-success were failed, while ds-shots and preview deployment were still running.
Second opinion by moonshotai/kimi-k3: 0 finding(s), marked with the model name. It reads the diff only, so treat its findings as advice.
Exact head: 072141772472 · Context: repo
| export const BRAND_FILE_GROUPS: BrandFileGroup[] = [ | ||
| { | ||
| label: 'Logotype', | ||
| description: 'Icon and wordmark locked up together. The default mark.', |
There was a problem hiding this comment.
MAJOR: Localize the brand reference data
This remains present after the earlier review. Opening /es-419/press/brand, /es-ar/press/brand, or /pt-br/press/brand translates the section headings, but BRAND_FILE_GROUPS, BRAND_COLORS, BRAND_TYPE, LOGO_RULES, screenshot labels, and mascot labels still come from this English-only dataset. Most of each advertised localized page therefore renders English guidance. Move these user-facing strings into the locale dictionaries (or key the reference data by locale) before publishing hreflang alternates for these routes.
| <span | ||
| aria-hidden | ||
| className="size-10 shrink-0 rounded-sm border border-n-1" | ||
| style={{ backgroundColor: color.hex }} |
There was a problem hiding this comment.
MAJOR: Make the new page pass the ds-lint ratchet
The required ds-lint check fails at this exact head: inlineStyle rises from 50 to 51 and stockTextSize from 362 to 386. The added page accounts for exactly one style={{ ... }} swatch and 24 text-xs/text-sm/text-xl utilities, so this is introduced by the PR rather than a base failure. Use token-backed swatch classes and the design-system text scale/recipes; do not raise the debt baseline for a new page.
ds-lint ratchets inline styles and stock tailwind text sizes; the page added
one of the former and 24 of the latter, so CI went red on the merge.
- swatches paint with the token whose value IS that colour
(bg-background-brand, bg-background-icon-bubble-yellow/blue,
bg-foreground-primary/inverse) instead of style={{ backgroundColor }}
- type moves to the semantic scale: text-heading-xs, text-label-l/m,
text-body-s/xs — each carries its own weight, so font-bold/font-medium go
- colours move to text-foreground-primary/secondary and border-border-default
There was a problem hiding this comment.
Chip review — changes requested
Request changes: the recurring localization defect remains, and two downloadable screenshots overstate local-rail availability. The previous ds-lint issue is fixed.
Findings
-
MAJOR · src/data/press-brand.ts:79 · Localize the remaining brand reference data
This remains from both earlier reviews. On /pt-br/press/brand (and both Spanish routes), translated section headings still wrap English-only labels and guidance from BRAND_FILE_GROUPS, BRAND_COLORS, BRAND_TYPE, LOGO_RULES, SCREENSHOTS, and MASCOTS; for example this card renders “Logotype” and its English description. Move every user-facing field into the locale data (or return these collections by Locale), including alt/caption strings, so each localized route renders one language. -
MAJOR · src/data/press-brand.ts:143 · Scope the local-rail claims in the screenshots
Publishing 05-add-money.png and 06-withdraw.png exposes ready-to-reuse copy saying Pix and Mercado Pago deposits/withdrawals work “from/to anywhere.” Current eligibility allows non-residents to make QR payments, but ARS and BRL deposits/withdrawals require residence in the corresponding country, so a non-resident journalist can download and repeat an unavailable capability. Replace these images with product-accurate, rail-scoped copy or omit them until the claims are verified.
Checked clean
- Exact head, base, merge base, trusted author, and clean detached worktree verified.
- Earlier findings reassessed: localization is still present and re-reported; ds-lint is fixed with semantic tokens.
- All exact-head CI checks completed successfully, including unit, eslint, typecheck, ds-lint, ds-shots, analyze, and preview.
- Every referenced logo, font, PDF, raster, social, screenshot, and mascot asset exists; PNG dimensions match the manifests.
- Security pass found only static same-origin download paths and no new user-input or executable-URL boundary.
- Brand palette and typography were cross-checked against the bundled v1.2 guidelines; screenshot claims were checked against the live Lexicon and current product eligibility rules.
Second opinion by moonshotai/kimi-k3: 0 finding(s), marked with the model name. It reads the diff only, so treat its findings as advice.
Exact head: 88f86ac895ed · Context: repo, product
|
|
||
| export const BRAND_FILE_GROUPS: BrandFileGroup[] = [ | ||
| { | ||
| label: 'Logotype', |
There was a problem hiding this comment.
MAJOR: Localize the remaining brand reference data
This remains from both earlier reviews. On /pt-br/press/brand (and both Spanish routes), translated section headings still wrap English-only labels and guidance from BRAND_FILE_GROUPS, BRAND_COLORS, BRAND_TYPE, LOGO_RULES, SCREENSHOTS, and MASCOTS; for example this card renders “Logotype” and its English description. Move every user-facing field into the locale data (or return these collections by Locale), including alt/caption strings, so each localized route renders one language.
| { slug: '01-hero', label: 'Balance' }, | ||
| { slug: '02-qr-pay-local', label: 'Pay by QR' }, | ||
| { slug: '04-send', label: 'Send' }, | ||
| { slug: '05-add-money', label: 'Add money' }, |
There was a problem hiding this comment.
MAJOR: Scope the local-rail claims in the screenshots
Publishing 05-add-money.png and 06-withdraw.png exposes ready-to-reuse copy saying Pix and Mercado Pago deposits/withdrawals work “from/to anywhere.” Current eligibility allows non-residents to make QR payments, but ARS and BRL deposits/withdrawals require residence in the corresponding country, so a non-resident journalist can download and repeat an unavailable capability. Replace these images with product-accurate, rail-scoped copy or omit them until the claims are verified.
What
Adds
/press/brand, a companion page to/press, linked from the Brand assets section there.The press kit shipped vector logos and the brand PDF, but nothing a journalist or a directory submission actually needs: no raster marks, no social image at a standard size, no product screenshots, and no written statement of the palette or the type rules. (The old Notion kit's UI Kit section was an empty stub.)
What's on the page
tailwind.config.js+ guidelines p.25New files in
public/press/assets/raster/#FF90E8, icon 512, logotype 1200×292, wordmark 1200×248social/metadata-img.pngon exact brand pinkscreenshots/{en,pt-BR,es-AR}/Deliberately excluded
The card screen is not included. Public card mentions need Rain pre-publication review (14-day window, submissions on hold per Konrad 2026-07-05), so the card stays off this page entirely.
Why the data is in
src/dataand not the content mirror/pressrenders prose — boilerplate, taglines, team, company facts — fromcontent/press/{lang}.mdin the mono mirror, and that stays exactly as it is. This page is design-system reference data (hexes, type roles, file manifests) that describes files living inpublic/, so it sits next to them in code.Notes
types.ts./pressisn't insitemap.tseither, soverify-content'ssitemap-routegate is unaffected.