Skip to content

chore(home): delete 18 dead message keys, and unstick the cookie banner from the bottom nav - #383

Merged
catomean merged 1 commit into
mainfrom
chore/dead-keys
Aug 25, 2026
Merged

chore(home): delete 18 dead message keys, and unstick the cookie banner from the bottom nav#383
catomean merged 1 commit into
mainfrom
chore/dead-keys

Conversation

@catomean

Copy link
Copy Markdown
Collaborator

Dead keys

The home namespace held 78 strings; src/app/[locale]/page.tsx — its only consumer — reads 53. The rest render nowhere, and they were shipped to every visitor in eight languages, because next-intl serialises the whole catalog into the page payload.

Removed: hero.subtitle, hero.ctaAbout, the three actions.*.secondaryLabel, and the proServices, press, stats, asSeenIn and impact branches.

home.newsletter stays — and the way it nearly didn't is the point

It looked dead by the exact method that correctly identified the other 18: it appears in no t('…') call in page.tsx. It is in fact consumed by NewsletterSignup.tsx as a nested namespaceuseTranslations('home.newsletter') — which a grep for t('…') inside one file structurally cannot see. All 7 of its keys are live.

The typecheck caught the deletion. Recording the lesson here rather than relearning it: to judge a key's liveness, grep the namespace prefix ('home.) as well as the call sites, because next-intl lets any component mount a sub-tree as its own namespace.

The cookie banner sat underneath the bottom nav

CookieBanner used fixed inset-x-0 bottom-0. On admin and dashboard shells below lg, a fixed bottom nav occupies those same 3.5rem — so the banner and the nav overlapped and you couldn't reliably hit either.

It now offsets by --bottom-nav-clearance, the variable that exists for exactly this case and that HirnPublicFab already uses correctly. The variable resolves to 0px wherever there is no nav, so public pages are unaffected.

The transparency mission stated the consequence, not the goal

"…dass gebrauchte Hardware ein zweites Leben bekommt, offene Software für alle verfügbar ist…" — reuse first, and no mention of the thing evig is actually for. Reordered so intelligence leads and reuse is what makes it affordable, matching the homepage. ICU placeholders ({legalForm}, {foundingYear}, {description}) preserved exactly; they fill from org.ts.

Verification

npm run verify green: lint, umlauts, chrome, docs (68/68 baseline, 0 in primary docs), compliance, typecheck, 7746 tests, production build.

🤖 Generated with Claude Code

…er from the bottom nav

## Dead keys

The `home` namespace held 78 strings; `src/app/[locale]/page.tsx` — its only
consumer — reads 53. The rest render nowhere and were shipped to every visitor
in eight languages, because next-intl serialises the whole catalog into the
page payload. Removed: `hero.subtitle`, `hero.ctaAbout`, the three
`actions.*.secondaryLabel`, and the `proServices`, `press`, `stats`,
`asSeenIn` and `impact` branches.

`home.newsletter` STAYS, and the way it nearly did not is the point. It looked
dead by the same method that correctly identified the other 18 — it is absent
from every `t('…')` call in page.tsx. It is consumed by
`NewsletterSignup.tsx` as a *nested namespace*
(`useTranslations('home.newsletter')`), which a grep for `t('…')` in one file
structurally cannot see. The typecheck caught the deletion. Lesson recorded
here rather than relearned: for a key's liveness, grep the namespace prefix
(`'home.`) as well as the call sites, because next-intl lets any component
mount a sub-tree as its own namespace.

## Cookie banner sat under the bottom nav

`CookieBanner` used `fixed inset-x-0 bottom-0`. On admin and dashboard shells
below `lg` a fixed bottom nav occupies those same 3.5rem, so the banner and
the nav overlapped — you could not reliably hit either. It now offsets by
`--bottom-nav-clearance`, the variable that exists for exactly this and that
`HirnPublicFab` already uses correctly. The variable is `0px` wherever there
is no nav, so public pages are unaffected.

## Transparency mission stated the consequence, not the goal

"…dass gebrauchte Hardware ein zweites Leben bekommt, offene Software für alle
verfügbar ist…" — reuse first, and no mention of the thing evig is actually
for. Reordered so intelligence leads and reuse is what makes it affordable,
matching the homepage. ICU placeholders preserved exactly; they fill from
org.ts.

npm run verify green: lint, umlauts, chrome, docs (68/68 baseline, 0 primary),
compliance, typecheck, 7746 tests, production build.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@catomean
catomean merged commit 97fb04b into main Aug 25, 2026
9 checks passed
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