From 4b79cda9f7dfd1dfe9b85d2ffea5d9deb626c43e Mon Sep 17 00:00:00 2001 From: Eason WaveKat Date: Wed, 8 Jul 2026 19:13:18 +1200 Subject: [PATCH 1/7] feat: modern full-width UX redesign - Inter for UI/body with JetBrains Mono kept as accent for code/repo names - Full-width sticky glass header and richer full-width footer - Homepage: gradient hero with direct platform-aware download button, localized product screenshot showcase, refreshed library cards - Voice section: full-width underline-tab sub-nav - Modernized blog cards, talk CTA, download pills across all 9 locales - Shared ConversionTracking component so download clicks track anywhere Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_013oRLgHKazJ3wCcj7aR8LbR --- src/components/ConversionTracking.astro | 28 ++++++ src/components/Footer.astro | 106 +++++++++++++------- src/components/Header.astro | 49 +++++---- src/components/LanguageSwitcher.astro | 4 +- src/components/NotFound.astro | 7 +- src/components/PostCard.astro | 14 +-- src/components/TalkCTA.astro | 66 ++++++------ src/components/VoiceDownload.astro | 9 +- src/layouts/Base.astro | 4 +- src/layouts/Docs.astro | 11 +- src/layouts/Post.astro | 9 +- src/layouts/Voice.astro | 22 ++-- src/pages/about.astro | 7 +- src/pages/blog/index.astro | 7 +- src/pages/de/about.astro | 7 +- src/pages/de/blog/index.astro | 7 +- src/pages/de/index.astro | 125 ++++++++++++++--------- src/pages/docs/index.astro | 9 +- src/pages/es/about.astro | 7 +- src/pages/es/blog/index.astro | 7 +- src/pages/es/index.astro | 125 ++++++++++++++--------- src/pages/fr/about.astro | 7 +- src/pages/fr/blog/index.astro | 7 +- src/pages/fr/index.astro | 125 ++++++++++++++--------- src/pages/index.astro | 127 +++++++++++++++--------- src/pages/it/about.astro | 7 +- src/pages/it/blog/index.astro | 7 +- src/pages/it/index.astro | 125 ++++++++++++++--------- src/pages/ja/about.astro | 7 +- src/pages/ja/blog/index.astro | 7 +- src/pages/ja/index.astro | 125 ++++++++++++++--------- src/pages/ko/about.astro | 7 +- src/pages/ko/blog/index.astro | 7 +- src/pages/ko/index.astro | 125 ++++++++++++++--------- src/pages/zh-hant/about.astro | 7 +- src/pages/zh-hant/blog/index.astro | 7 +- src/pages/zh-hant/index.astro | 125 ++++++++++++++--------- src/pages/zh/about.astro | 7 +- src/pages/zh/blog/index.astro | 7 +- src/pages/zh/index.astro | 125 ++++++++++++++--------- src/styles/global.css | 69 ++++++++++++- 41 files changed, 1045 insertions(+), 615 deletions(-) create mode 100644 src/components/ConversionTracking.astro diff --git a/src/components/ConversionTracking.astro b/src/components/ConversionTracking.astro new file mode 100644 index 0000000..a30b96e --- /dev/null +++ b/src/components/ConversionTracking.astro @@ -0,0 +1,28 @@ +--- +// Google Ads conversion wiring for any `a[data-conversion]` on the page. +// Include once per component that renders conversion links (Astro dedupes the +// bundled script); the per-element guard keeps a link from ever being bound +// twice even if two components include it on the same page. +--- + + diff --git a/src/components/Footer.astro b/src/components/Footer.astro index fb7d44c..f5435cb 100644 --- a/src/components/Footer.astro +++ b/src/components/Footer.astro @@ -6,7 +6,18 @@ import { resolveLocale, localesForPath, localizedPath, t } from '../lib/i18n'; const { code: lang } = resolveLocale(Astro.url.pathname); const ui = t(lang); -const aboutHref = localesForPath('/about/').includes(lang) ? localizedPath('/about/', lang) : '/about/'; +const localeHref = (path: string) => + localesForPath(path).includes(lang) ? localizedPath(path, lang) : path; + +// Sitemap links reuse the localized chrome strings — no new translations needed. +const links = [ + { href: localeHref('/voice/'), label: ui.navVoice }, + { href: localeHref('/voice/download/'), label: ui.subDownload }, + { href: localeHref('/voice/changelog/'), label: ui.subChangelog }, + { href: '/docs', label: ui.navDocs }, + { href: localeHref('/blog/'), label: ui.navBlog }, + { href: localeHref('/about/'), label: ui.footerAbout }, +]; let siteVersion: string; try { @@ -16,48 +27,67 @@ try { } --- -