Skip to content

feat(footer): regroup links and add a Tools column#129

Merged
wavekat-eason merged 7 commits into
mainfrom
feat/footer-links
Jul 21, 2026
Merged

feat(footer): regroup links and add a Tools column#129
wavekat-eason merged 7 commits into
mainfrom
feat/footer-links

Conversation

@wavekat-eason

@wavekat-eason wavekat-eason commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

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.

WAVEKAT VOICE     TOOLS                 MORE
  Overview          Prompt Generator ↗    Blog
  Alternatives                            About
  Download
  What's New

Links

  • New Tools column. The prompt generator had no footer link — it was reachable only through its marketing page. It now links straight to the live app on 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.
  • Added /voice/alternatives/ to the Voice column — an SEO hub that benefits from a sitewide internal link.
  • Removed /docs — synced from the private wavekat-voice repo 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 Voice heading also frees the first link to read Overview instead of repeating "Voice", reusing the subOverview string 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 keeps WaveKat Voice correctly 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-12 keeps 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 uns read 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:

Locale Convention Example
en Title case Use Cases, What's New, Talk to Us
de Noun capitalization Überblick, Sprachgenerator, Über uns (pronoun stays lowercase)
es / fr / it Sentence case — title case isn't a convention there Visión general, Cas d'usage, Casi d'uso
zh-Hans / zh-Hant / ja / ko No case distinction unchanged

dlOther and postBack were 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. subOverview and subAlternatives already existed everywhere. Three new strings — footerPrompts, footerMore, footerTools — added to the UIStrings interface, the inline en / zh-Hans dicts, and all seven src/lib/ui/<slug>.ts files:

  • footerTools — 工具, ツール, 도구, Tools (de), Herramientas, Outils, Strumenti
  • footerPrompts — 語音產生器, 音声ジェネレーター, 음성 생성기, Sprachgenerator, Generador de voz, Générateur vocal, Generatore vocale

WaveKat Voice is a product name and stays untranslated per the naming rule. /voice/prompts/ and /voice/alternatives/ were already in translatedRoutes, 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 with WAVEKAT_LOCAL_REPOS against 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 external target/rel attributes.

🤖 Generated with Claude Code

https://claude.ai/code/session_011wM5WdWCFkRyjvMEBJdZKb

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
wavekat-eason marked this pull request as ready for review July 21, 2026 07:21
@github-actions

Copy link
Copy Markdown
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-eason wavekat-eason changed the title feat(footer): link prompt generator and alternatives feat(footer): regroup links into two columns Jul 21, 2026
wavekat-eason and others added 3 commits July 21, 2026 19:33
"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
@wavekat-eason wavekat-eason changed the title feat(footer): regroup links into two columns feat(footer): regroup links and add a Tools column Jul 21, 2026
wavekat-eason and others added 2 commits July 21, 2026 19:52
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
wavekat-eason merged commit 3178fc6 into main Jul 21, 2026
2 checks passed
@wavekat-eason
wavekat-eason deleted the feat/footer-links branch July 21, 2026 07:57
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>
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