feat(site): bilingual static routes and homepage v2 content (#1191, #1192)#1198
Conversation
…1192) Replace the client-side language swap with two server-rendered static routes — / (en) and /zh-CN/ — sharing one Home.astro body component driven by a lang prop and the I18N copy dictionary. Each page renders fully localized HTML at build time, so crawlers and AI search see real content in both languages instead of a single English DOM. SEO/GEO (#1191): - Self-referencing canonical plus en / zh-CN / x-default hreflang on every page - og:locale + og:locale:alternate and JSON-LD inLanguage per page - Bilingual sitemap.xml with xhtml:link alternates for both URLs - robots.txt now allows Bytespider: it powers Doubao search (a major CN AI search surface) and does not separate retrieval from training, so blocking it drops PawWork from CN AI search Homepage v2 content (#1192): - Crawlable sections — definition strip, capability bento with real task outputs, model-provider panel, comparison table, download/get block — so the page carries indexable substance, not just a hero - Self-hosted Bricolage Grotesque (Latin subset, China-accessible) for display headings - Chinese copy polished with DeepSeek v4-pro to remove translation-ese Verification: bun run build emits /index.html (lang=en, canonical /) and /zh-CN/index.html (lang=zh-CN, canonical /zh-CN/), each with all three hreflang alternates and a clean 1×H1 + 4×H2 heading outline.
|
Warning Review limit reached
More reviews will be available in 17 minutes and 19 seconds. Learn how PR review limits work. Your organization has run out of usage credits. Purchase more in the billing tab. ⌛ How to resolve this issue?After more reviews become available, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available. Please see our Fair Usage Limits Policy for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (8)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Code Review
This pull request updates the PawWork landing page to version 2, refactoring the localization architecture to render static, crawlable pages for English and Chinese instead of relying on client-side language switching. It introduces a shared Home component, updates sitemaps and layout metadata for better SEO, allows the ByteDance crawler, and updates the global stylesheet with new typography and layouts. The review feedback highlights two main improvements: correcting invalid HTML nesting in Home.astro where block-level <div> elements are placed inside an inline <span>, and extending the prefers-reduced-motion media query in global.css to also disable transitions for better accessibility.
Important
The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.
…sitions Address Gemini review on #1198: - The free model row wrapped two block-level <div>s (.nm/.ds) in a bare inline <span>, which browsers reparent — swap it for a <div> so the two text lines stack correctly as a flex item. CSS uses descendant selectors (.prow .nm/.ds), so styling is unaffected. - prefers-reduced-motion only zeroed animation-duration; also zero transition-duration and mark scroll-behavior !important so transitions on body/.toggle/.dlbtn/.tile are disabled for motion-sensitive users.
|
Addressed both Gemini review comments in 7fe7d29:
Rebuilt: |
…Base.astro comment Follow-up review on #1198: - prefers-reduced-motion now also sets transform: none on .dlbtn / .dlbtn.lead / .tile hover, so motion-sensitive users get no positional jump on hover. transition-duration was already zeroed, but the -2/-3px translateY offset itself still applied instantly. - Base.astro header comment still described the old client-side language swap; rewrite it to reflect the static per-route lang prop that drives html lang, canonical, hreflang, and og:locale.
Summary
Replaces the marketing site's client-side language swap with two server-rendered static routes —
/(en) and/zh-CN/— sharing oneHome.astrobody component driven by alangprop and theI18Ncopy dictionary. Each page now renders fully localized HTML at build time, and the homepage is expanded with crawlable content sections.Multilingual SEO/GEO (#1191):
canonicalplusen/zh-CN/x-defaulthreflang on every pageog:locale+og:locale:alternateand JSON-LDinLanguageper pagesitemap.xmlwithxhtml:linkalternates for both URLsrobots.txtnow allowsBytespider(it powers Doubao search, a major CN AI search surface, and does not separate retrieval from training — blocking it drops PawWork from CN AI search)Homepage v2 content (#1192):
Why
The previous single-page site served one English DOM and swapped strings on the client, so crawlers and AI search engines (Google, Doubao/Bytespider, etc.) only ever saw English and a thin hero. That hurts both standard SEO and GEO (generative-engine optimization) discoverability, especially in the CN market. Real per-language static HTML with correct hreflang/canonical and substantive crawlable content fixes both.
Related Issue
Closes #1191, closes #1192.
Human Review Status
PendingReview Focus
Base.astrohead tags: canonical/hreflang/og:locale correctness per language and the anti-flash theme script staying intact.i18n.tsChinese copy quality and that every inline<b>/<span>/<u>tag injected viaset:htmlis balanced.robots.txtBytespider allow — confirm this is the intended CN-discoverability tradeoff.docs/DESIGN.md: keeping thepawchipbrand mark and the Bricolage display font on the marketing site (DESIGN.md's no-web-fonts / restraint rules govern app chrome, not the landing page).Risk Notes
Marketing-site-only change (
site/), decoupled from the desktop app; no app/runtime/packaging surface touched. Bricolage is self-hosted (Latin subset, no Google CDN), so no China-accessibility regression. None beyond that.How To Verify
Screenshots or Recordings
Visual check: rendered the built
/index.htmland/zh-CN/index.htmlin Chromium (light + dark themes), reviewed hero, capability bento, comparison table, and download block; the polished Chinese page was shared with the maintainer for sign-off.Checklist
bug,enhancement,task,documentation. Type labels are author-added; the labeler bot does NOT assign them. Add the label in the GitHub UI, then tick this.app,ui,platform,harness,ci. The labeler bot assigns these on PR open based on changed paths. Confirm the bot's choice (or override if wrong), then tick this.P0,P1,P2,P3. The priority-triage bot suggests one on PR open. Confirm or override, then tick this.Pending,Approved by @<reviewer>, orNot required: <reason>(default isPending; "not required" is restricted to bot-authored low-risk PRs).dev, and my PR title and commit messages use Conventional Commits in English.