chore(home): delete 18 dead message keys, and unstick the cookie banner from the bottom nav - #383
Merged
Conversation
…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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Dead keys
The
homenamespace 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 threeactions.*.secondaryLabel, and theproServices,press,stats,asSeenInandimpactbranches.home.newsletterstays — and the way it nearly didn't is the pointIt looked dead by the exact method that correctly identified the other 18: it appears in no
t('…')call inpage.tsx. It is in fact consumed byNewsletterSignup.tsxas a nested namespace —useTranslations('home.newsletter')— which a grep fort('…')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
CookieBannerusedfixed inset-x-0 bottom-0. On admin and dashboard shells belowlg, 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 thatHirnPublicFabalready uses correctly. The variable resolves to0pxwherever 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 fromorg.ts.Verification
npm run verifygreen: lint, umlauts, chrome, docs (68/68 baseline, 0 in primary docs), compliance, typecheck, 7746 tests, production build.🤖 Generated with Claude Code