feat(footer): regroup links and add a Tools column#129
Merged
Conversation
The footer nav had fallen behind the site: it still listed the six sections that existed when it was written, missing the prompt generator landing page and the alternatives hub. Both are SEO/GEO front doors that benefit most from a sitewide internal link. Add both, and drop the docs link — docs are synced from the private wavekat-voice repo and are English-only, so it was the one entry that couldn't be localized (and the only one missing a trailing slash). Lowercase footerAbout across the Latin-script locales so every label matches the lowercase chrome style; the string is footer-only, so nothing else is affected. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011wM5WdWCFkRyjvMEBJdZKb
wavekat-eason
marked this pull request as ready for review
July 21, 2026 07:21
Contributor
A flat seven-link grid didn't communicate that half the entries belong to the Voice desktop app and half are sitewide. Split it into a "WaveKat Voice" column (overview, alternatives, download, what's new) and a "more" column (prompt generator, blog, about) — the prompt generator sits in the second group because it's a platform tool, not part of the Voice app. The heading also frees the first link to read "overview" (reusing the existing subOverview string) instead of repeating "voice". Adds footerMore across the nine locales; the Voice heading is the brand name and stays untranslated. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011wM5WdWCFkRyjvMEBJdZKb
"WaveKat Voice" next to "more" read as inconsistent casing. The site
already solves this on the homepage, where section labels ("Our app",
"Free tool", "Libraries") keep natural casing in source and render
uppercase via font-mono/tracking-widest — including on the CJK
homepages.
Reusing that class here normalizes both headings visually, so the brand
name stays correctly cased in source while the rendered footer matches
the rest of the site's label system.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011wM5WdWCFkRyjvMEBJdZKb
The all-lowercase chrome was a style choice that worked in English but
left German orthographically wrong — 'stimme', 'überblick', 'über uns'
read as errors in a language that capitalizes every noun, and the same
file already capitalized its sentence-level strings correctly.
Capitalize per language rather than applying one rule everywhere:
English gets title case, German capitalizes nouns ('Über uns' keeps the
lowercase pronoun), and Spanish/French/Italian get sentence case since
title case is not a convention in those languages. CJK and Korean have
no case and are unchanged.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011wM5WdWCFkRyjvMEBJdZKb
The two hosted tools had no footer link at all — the prompt generator was only reachable via its marketing page, and Common Voice Explorer only from the blog posts that mention it. Both now sit in their own Tools column, linking straight to the live app: someone reaching for a tool in the footer wants the tool, not a description of it. They earn a separate group because they're distinct products from the Voice desktop app. External links get target/rel and a corner arrow so the jump off-site is visible; the layout goes to three columns on sm+. Also capitalizes the last two lowercase chrome strings, dlOther and postBack, to match the nav and footer. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011wM5WdWCFkRyjvMEBJdZKb
Three equal columns left a lone tool stranded next to a four-item list. Nest the two short groups instead: WaveKat Voice fills the first column, Tools and More stack in the second, so both columns come to five rows. Common Voice Explorer is no longer linked from the footer. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011wM5WdWCFkRyjvMEBJdZKb
Restores the flat three-column layout. The spread was the real problem, not the column count: equal grid tracks stretched the groups across the full width, leaving a one-item Tools column stranded far from its neighbours. Auto-width groups hugging the right edge sit an even distance apart regardless of how many links each holds. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011wM5WdWCFkRyjvMEBJdZKb
wavekat-eason
pushed a commit
that referenced
this pull request
Jul 21, 2026
🤖 I have created a release *beep* *boop* --- ## [0.0.47](wavekat-com-v0.0.46...wavekat-com-v0.0.47) (2026-07-21) ### Features * **footer:** regroup links and add a Tools column ([#129](#129)) ([3178fc6](3178fc6)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.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.
What
The footer had fallen behind the site — one flat list of six links, written before several sections existed. This rebuilds it as three labelled columns and brings the chrome casing in line.
Links
platform.wavekat.com: someone reaching for a tool in the footer wants the tool, not a description of it. It's a separate group because it's a distinct product from the Voice desktop app./voice/alternatives/to the Voice column — an SEO hub that benefits from a sitewide internal link./docs— synced from the privatewavekat-voicerepo and English-only, so it was the one entry that couldn't be localized, and the only href missing a trailing slash. Docs remain in the header.External links get
target="_blank" rel="noopener noreferrer"and a corner arrow so the jump off-site is visible.Grouping and layout
A flat list didn't communicate that the entries belong to three different things. The
WaveKat Voiceheading also frees the first link to read Overview instead of repeating "Voice", reusing thesubOverviewstring the Voice sub-nav already uses.Column headings use the site's existing section-label style (
font-mono … uppercase tracking-widest, the same class as the homepage's "Free tool" / "Libraries"). Because the uppercasing happens in CSS, the source keepsWaveKat Voicecorrectly cased while the rendered headings stay uniform.The groups are auto-width flex items hugging the right edge, not equal grid tracks. Stretched tracks pushed the one-item Tools group into the middle of a wide empty cell, leaving ~350px gaps; a fixed
gap-x-12keeps the horizontal rhythm even regardless of how many links each group holds.Casing
The all-lowercase chrome was a style choice that worked in English but left German orthographically wrong —
stimme,überblick,über unsread as errors in a language that capitalizes every noun, while the same file already capitalized its sentence-level strings (Sprache wechseln,Für Mac herunterladen) correctly.Nav and footer labels are now capitalized per language rather than by one global rule:
Use Cases,What's New,Talk to UsÜberblick,Sprachgenerator,Über uns(pronoun stays lowercase)Visión general,Cas d'usage,Casi d'usodlOtherandpostBackwere swept in for consistency. Language endonyms in the switcher (English,Deutsch, …) are left alone — they're proper nouns.i18n
Everything routes through the existing
localeHref()helper, so internal links resolve per locale.subOverviewandsubAlternativesalready existed everywhere. Three new strings —footerPrompts,footerMore,footerTools— added to theUIStringsinterface, the inlineen/zh-Hansdicts, and all sevensrc/lib/ui/<slug>.tsfiles:footerTools— 工具, ツール, 도구, Tools (de), Herramientas, Outils, StrumentifooterPrompts— 語音產生器, 音声ジェネレーター, 음성 생성기, Sprachgenerator, Generador de voz, Générateur vocal, Generatore vocaleWaveKat Voiceis a product name and stays untranslated per the naming rule./voice/prompts/and/voice/alternatives/were already intranslatedRoutes, so hreflang and the sitemap needed no changes.One tradeoff worth a look
Pointing the Tools column at the live app means
/voice/prompts/— the SEO/GEO landing page — no longer gets a sitewide footer link. It's still linked from the homepage ("Learn more about the generator") and is in the sitemap, so it isn't orphaned, but it loses the internal link equity a footer link would give it. Easy to flip the Tools entry to the landing page, or to carry both, if we'd rather have the SEO than the direct jump.Verification
Full build plus
npm run check:links— 195 pages, no broken or leaking internal links, including the private/docs/voice/*(built withWAVEKAT_LOCAL_REPOSagainst a local checkout). The rendered header and footer were parsed out of the built HTML per locale to confirm the three columns, correctly-prefixed URLs, translated labels, and the externaltarget/relattributes.🤖 Generated with Claude Code
https://claude.ai/code/session_011wM5WdWCFkRyjvMEBJdZKb