Skip to content

Commit f0dd598

Browse files
feat: Sprint 5 — Astro native i18n, sub-pages, nav redesign (#12)
* feat(tokens): add calm-mode spacing, card-muted, pill, eyebrow tokens * feat(styles): add .section-calm, .card-muted, .pill-neutral, .eyebrow utilities * feat(hero): compress stats, collapse SEO paragraph into details toggle Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat(landing): add CompatibilityStrip — 'Works with' AI tool pill row * feat(landing): add Capabilities section — Context Forge suite frame (RTK/ICM/Vox) * feat(landing): wire CompatibilityStrip + Capabilities into landing section order * refactor(problem): neutral cards, colored evidence in terminal blocks only * feat(landing): add Eyebrow component, wire into Problem/Install/CTA/Capabilities * refactor(cta): viewport-height section, gradient headline, viking background at 12% opacity * feat(install): persona tabs for Claude Code / Cursor / Other AI CLI Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat(whitespace): section padding 80px → 144px (--space-13) Apply --space-13 (9rem/144px) to all landing sections for breathing room. Mobile breakpoint uses --space-10 (5rem/80px) to stay proportional. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat(i18n): add translations for Capabilities and Install persona tabs New keys: caps.*, install.tab.*, install.note.* for all 6 languages. Capabilities and Install now use data-i18n attributes for proper translation. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(ci): fail build when docs source is missing in CI Exit with code 1 in CI when RTK docs repo is absent, while keeping exit 0 for local dev stubs. Prevents silent deployment failures with empty documentation. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * perf: remove 380KB orphaned PNG screenshots (WebP versions are used) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * perf(icm): convert hero image to WebP + fetchpriority (LCP improvement) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * perf: add fetchpriority=high + decoding=async on hero image Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(a11y): sync <html lang> attribute with language switcher Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(a11y): add aria-label to main nav Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * ux: remove unsourced 'Starred by' carousel Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(a11y): slideshow pause/play + respect prefers-reduced-motion (WCAG 2.2.2) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(a11y): touch targets minimum 44x44px on nav-icon-btn, copy-btn, lang-btn (WCAG 2.5.5) - .nav-icon-btn: 30px → 44px (width/height) - .copy-btn: 4px → 10px padding, added min-width/min-height 44px + flex centering - .lang-btn: 3px 8px → 10px 12px padding, added min-height 44px + flex centering Meets WCAG 2.1 Level AA target touch size requirement (44×44 CSS pixels minimum). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * perf: replace transition:all with targeted properties in landing.css (INP improvement) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(tokens): replace hardcoded hex with CSS custom properties in docs Header Replaces #1a2344, #0f1629, #0c1225, #8294ab, and #e2e8f0 with their corresponding CSS custom properties (--border, --bg-card, --bg-alt, --text-muted, --text) for consistent design token usage. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * ux: use global SiteFooter on /vox/ and /icm/ for cross-product nav Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * copy: shorten hero-context + remove em dashes (anti-AI markers) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * docs: sync CLAUDE.md — SiteHeader replaces Nav.astro/ProductNav.astro Updated Nav architecture sections in both CLAUDE.md files to reference the actual SiteHeader component with variant prop, instead of non-existent Nav.astro and ProductNav.astro files. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * chore: remove Tailwind — zero utility classes used, pure CSS design system Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * refactor(css): scope Hero styles into component Move all Hero-exclusive CSS from landing.css into a scoped <style> block in Hero.astro — includes hero layout, badges, stats, terminal demo, viking layout, and responsive overrides. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * refactor(css): scope Nav/Header styles into SiteHeader component * refactor(css): scope Install styles into component Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * refactor(css): scope Problem styles into component * refactor(css): scope ToolComparison styles into component * refactor(css): scope DemoSlideshow styles into component Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * refactor(css): scope Proof styles into component * refactor(css): scope ShareGain styles into component * refactor(css): scope CloudWaitlist styles into component * refactor(css): scope Cta styles into component * refactor(css): scope Footer styles into component Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat(layout): create ProductLayout.astro shared shell for product pages Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * refactor(vox): migrate to ProductLayout + @graph JSON-LD schema Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * refactor(icm): migrate to ProductLayout + @graph JSON-LD schema * fix(ci): allow pinning RTK docs to a specific tag via RTK_DOCS_REF * feat(i18n): add missing UI/aria keys to translations (S5-B1) Audited all .astro files in components/landing/, components/global/SiteHeader.astro, and pages/index.astro, vox/index.astro, icm/index.astro. Added 35 new keys across 3 namespaces: - eyebrow.* (4 keys): Eyebrow label props previously passed as hardcoded strings - ui.* (9 keys): terminal title, hero "stars" suffix, works-with label, nav links, search label, install docs link - aria.* (14 keys): copy, prev/next, pause/resume slideshow, choose-ai-tool tablist, main-nav, open/close menu, search, ko-fi, discord, compat-tools, share_x/bsky/linkedin All 6 locales covered (en, fr, es, de, zh, ja). HTML_KEYS set and existing 142 keys are untouched. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat(i18n): add i18n helper, Astro i18n config, sitemap integration (S5-B2) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * refactor(pages): extract shared page templates for i18n routing (S5-B3) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat(i18n): migrate landing components to server-side t() (S5-B4) Replace all data-i18n / data-i18n-html DOM attributes with server-side t(key, lang) calls at build time across 11 landing components + SiteHeader. LandingPage.astro now propagates lang prop to every child component. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat(i18n): add [locale] catch-all routes for 5 non-EN locales (S5-B5) Creates dynamic [locale] pages for fr/es/de/zh/ja: landing (/fr/), Vox (/fr/vox/), ICM (/fr/icm/). Threads lang prop through ProductLayout to SiteHeader so nav text renders in the correct locale. Build: 139 pages (15 new vs baseline 124). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat(i18n): rewrite lang switcher to nav links, add hreflang to Layout (S5-B6) Replace localStorage-based button switcher with proper <a> navigation links using getRelativeLocaleUrl. Add 7 hreflang alternate tags to Layout.astro head and dynamic html[lang] from Astro.currentLocale for all locale pages. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat(i18n): remove I18nScript, complete server-side i18n migration (S5-B7) Delete client-side I18nScript.astro (data-i18n DOM engine) and remove all imports from LandingPage.astro and ProductLayout.astro. All translations are now rendered server-side at build time via locale routes — no runtime JS needed. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat(landing): split landing into focused sub-pages (/savings, /vs, /cloud) Slim /: keeps Hero, Problem, DemoSlideshow, Install, FAQ, CTA. Proof moves to /savings/, ToolComparison to /vs/, CloudWaitlist + ShareGain to /cloud/. Hash-redirect script on / handles old anchors (#proof, #compare, #cloud, #share-gain). Landing nav /#compare link updated to /vs/. 3 RSS entries added for the new pages. Each sub-page has compact hero breadcrumb, the relevant component, footer CTA → /#install. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(nav): add /cloud/ link to landing nav (desktop + mobile drawer) Cloud page was unreachable from the main navigation. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(cloud): add initReveal() + nav Option B cleanup Cloud page: - Add initReveal() so .reveal elements animate in instead of staying invisible Landing nav (Option B): - Drop Ko-fi icon - Drop Cloud from desktop nav (stays in mobile drawer) - "Tools" → "Compare" (clearer intent) - Replace 6 lang buttons with globe icon → dropdown panel (details/summary, no-JS toggle) - Close on outside click and after lang selection Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(nav): lang dropdown vertical layout * fix(footer): fix dead links + add new sub-pages - `#install` → `/#install` (absolute) in pre-footer CTA and Install column - `/guide/features/` (404) → `/savings/` (Token Savings page) - `#cloud` → `/cloud/` (RTK Cloud page) - Add Vox/ICM sub-page links: how-it-works + ICM compare - Add "Explore" section with /savings/ and /vs/ - Add .footer-sub-link CSS for indented sub-page items Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * seo: add JSON-LD breadcrumbs, fix dates, and enrich sub-page schemas - /savings/ : BreadcrumbList + Dataset (6 variableMeasured), datePublished fixed, ogType=article - /vs/ : BreadcrumbList + ItemList (6 compatible tools), datePublished fixed, ogType=article - /cloud/ : SoftwareApplication (PreOrder) + BreadcrumbList — zero schema → proper markup - /icm/ : BreadcrumbList prepended + SpeakableSpecification on SoftwareApplication Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * seo: fix OG image, datePublished, and add BreadcrumbList to /vox/ - og-icm-banner.png: 1024×254 → 1200×630 (proper OG card with title, subtitle, illustration) - /: datePublished 2025-01-01 → 2026-01-29 (earliest verifiable CHANGELOG entry) - /vox/: add BreadcrumbList schema (RTK → Vox) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * seo: dedicated OG images, BreadcrumbLists, SpeakableSpec, real dates OG images (1200×630, new): - og-savings.png — 89% stat + command breakdown - og-vs.png — RTK vs 6 AI coding tools - og-cloud.png — coming soon + feature list - og-icm-how-it-works.png — 3 memory systems - og-icm-vs.png — comparison table vs Mem0/Zep/mcp-memory Schemas: - /icm/how-it-works: BreadcrumbList (3-level) + datePublished 2026-04-29 - /icm/vs: BreadcrumbList (3-level) + datePublished 2026-04-29 - /vox: SpeakableSpecification + datePublished 2026-04-16 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(subpages): replace scoped .hero/.hero-sub/.hero-cta with standalone .subpage-* classes * feat(nav): add 'soon' badge to Cloud nav link --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 5f30f0e commit f0dd598

83 files changed

Lines changed: 9821 additions & 3101 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.claude/CLAUDE.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,11 +102,11 @@ CI clones `rtk/main` at `./rtk-repo`. Once `feat-refac-doc` is merged into main,
102102

103103
| Page type | Nav component |
104104
|-----------|--------------|
105-
| Landing (`/`) | `src/components/landing/Nav.astro` |
106-
| Product pages (`/vox/`, `/icm/`) | `src/components/landing/ProductNav.astro` |
105+
| Landing (`/`) | `src/components/global/SiteHeader.astro` (variant="landing") |
106+
| Product pages (`/vox/`, `/icm/`) | `src/components/global/SiteHeader.astro` (variant="product") |
107107
| Docs (`/guide/**`) | `src/components/global/Header.astro` (via Starlight override) |
108108

109-
Anchor links in Nav.astro use absolute paths (`/#problem`, `/#install`) so they work from any page.
109+
Anchor links in SiteHeader.astro use absolute paths (`/#problem`, `/#install`) so they work from any page.
110110

111111
## Workflow before push to main
112112

.claude/commands/review.md

Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
---
2+
name: review
3+
description: Code review for rtk-ldp — Astro components, CSS token compliance, design system rules, generated file integrity, and build correctness.
4+
---
5+
6+
Run a thorough code review of the current changes against the RTK Landing standards.
7+
8+
## Step 1 — Diff scope
9+
10+
```bash
11+
git diff --name-only HEAD
12+
git diff HEAD --stat
13+
```
14+
15+
If no staged/unstaged changes, review the last commit: `git diff HEAD~1 HEAD --name-only`.
16+
17+
## Step 2 — Read changed files
18+
19+
Read every changed `.astro`, `.css`, `.ts`, `.mjs`, `.md` file in full before issuing findings.
20+
21+
## Step 3 — Checklist
22+
23+
### 3a. CSS Token Compliance (BLOCKER)
24+
25+
Check every changed `.astro` and `.css` file:
26+
27+
- No inline `color:`, `background:`, `border-color:`, `fill:` using raw hex values that match a design token
28+
- Tokens to enforce (source: `src/styles/global.css`):
29+
- `--bg: #060b18`, `--bg-alt: #0c1225`, `--bg-card: #0f1629`
30+
- `--text: #e2e8f0`, `--text-muted: #8294ab`, `--text-dim: #64748b`
31+
- `--accent: #00e599`, `--cyan: #38bdf8`, `--violet: #a78bfa`, `--border: #1a2344`
32+
- No duplicate token declarations in `src/styles/landing.css` (tokens defined in `global.css` must not be redefined)
33+
- New color values must be added to `global.css` as tokens, not hardcoded
34+
35+
### 3b. Generated Files Integrity
36+
37+
These files must NEVER be manually edited:
38+
39+
| File | Generator |
40+
| --------------------------------- | -------------------------------- |
41+
| `src/content/docs/guide/**` | `scripts/prepare-docs.mjs` |
42+
| `src/data/docs-search-entries.ts` | `scripts/build-search-index.mjs` |
43+
| `src/data/docs-anchor-map.json` | `scripts/prepare-docs.mjs` |
44+
45+
Flag any manual edits to these files.
46+
47+
### 3c. Source of Truth Compliance
48+
49+
| Data | Must be in | Never in |
50+
| ---------------- | ------------------------------------------------------------------ | ------------------------- |
51+
| RSS entries | `src/data/rss-entries.ts` | `src/pages/rss.xml.ts` |
52+
| Nav anchor links | `Nav.astro` / `ProductNav.astro` with absolute paths (`/#section`) | Inline in pages |
53+
| Docs content | `rtk/docs/guide/` (external repo) | `src/content/docs/guide/` |
54+
55+
### 3d. Astro Component Quality
56+
57+
- No inline styles for anything covered by a design token
58+
- Component props typed with TypeScript interfaces
59+
- No `<style>` blocks using magic hex values
60+
- Imports cleaned up (no unused imports)
61+
- No hardcoded URLs in components — use constants or config
62+
63+
### 3e. Nav Architecture
64+
65+
- Landing (`/`): uses `Nav.astro`
66+
- Product pages (`/vox/`, `/icm/`): uses `ProductNav.astro`
67+
- Docs (`/guide/**`): uses `Header.astro` via Starlight override
68+
69+
Anchor links must use absolute paths (`/#problem`, not `#problem`) so they work from any page.
70+
71+
### 3f. Build Readiness
72+
73+
If `.astro`, `.ts`, or `.mjs` files were changed, run:
74+
75+
```bash
76+
rtk pnpm build 2>&1 | head -80
77+
```
78+
79+
Report: pass/fail, error count, pages generated.
80+
81+
## Step 4 — Report
82+
83+
```
84+
## Code Review — RTK Landing
85+
86+
**Files reviewed**: [list]
87+
**Date**: [YYYY-MM-DD]
88+
89+
### Blockers
90+
[BLOCKER] file.astro:42 — Hardcoded `#00e599` — use `var(--accent)` instead
91+
...
92+
93+
### Warnings
94+
[WARN] landing.css:15 — Duplicates `--text` token already in global.css
95+
...
96+
97+
### Token violations
98+
| File | Line | Value | Token to use |
99+
|------|------|-------|-------------|
100+
| ... | ... | ... | ... |
101+
102+
### Generated files
103+
[OK] No manual edits detected
104+
or
105+
[BLOCKER] src/content/docs/guide/commands.md edited manually — regenerate via prepare-docs.mjs
106+
107+
### Build
108+
[PASS] 12 pages generated, 0 errors
109+
or
110+
[FAIL] Build errors: [list]
111+
112+
### Summary
113+
- Blockers: X
114+
- Warnings: Y
115+
- Token violations: Z
116+
- Build: PASS/FAIL
117+
118+
Verdict: [READY / NEEDS FIXES]
119+
```
120+
121+
## Post-review
122+
123+
If blockers exist: do not proceed until fixed.
124+
If only warnings: propose fixes and let user decide.
125+
If READY: suggest `pnpm build && git push` (never run push automatically).

0 commit comments

Comments
 (0)