Skip to content

feat(docs): override Starlight header with a top-level site nav - #368

Merged
taitelee merged 27 commits into
mainfrom
page-header
Jul 9, 2026
Merged

feat(docs): override Starlight header with a top-level site nav#368
taitelee merged 27 commits into
mainfrom
page-header

Conversation

@taitelee

@taitelee taitelee commented Jul 3, 2026

Copy link
Copy Markdown
Member

Summary

Adds a curated top-level Docs link to the docs site header, with a custom header layout for the sidebar-less splash homepage. Starlight has no config hook for header links, so this overrides its Header component through the sanctioned
components map. The override is our own layout — brand + primary nav pinned left, controls pinned right — rather than a copy of Starlight's default row: doc pages stay full-bleed to the edges, while the splash homepage (the only page with a hero) holds the inner content in a centered 68rem column — deliberately narrower than the hero's 80rem band.

Every control (SiteTitle, Search, ThemeSelect, SocialIcons, LanguageSelect) is still Starlight's own built-in, re-rendered through its virtual:starlight/components/* import, so their overrides and Pagefind search keep working untouched. Search keeps Starlight's expanded "Search … ⌘K" box on every page at ≥50rem (including the splash) so the keyboard shortcut stays discoverable; below 50rem — where the nav and controls are hidden (doc pages' sidebar drawer carries navigation there; the splash's hero CTAs do) — it collapses to its icon.

The single Docs link (→ /getting-started) lives in headerNav in sidebar.ts, colocated with the sidebar so the header and sidebar share one navigation source of truth. It's the way into the doc tree from the splash homepage, which hides the sidebar; every doc page already carries the full sidebar, so the nav is hidden below the md breakpoint (50rem) there. The footer brand block reuses the same (labelled via a title prop mirroring WaveMark's API) so header and footer render one wordmark; the inline lockup is decorative inside the labelled home link, SSR and client normalize nav hrefs identically, and headerNav documents that component-rendered links sit outside starlight-links-validator's scope. env.d.ts gains type declarations for the built-in components the override re-renders so astro check passes.

Related Issues

None

@taitelee
taitelee requested review from a team and EricAndrechek July 3, 2026 16:38
@github-actions github-actions Bot added documentation Improvements or additions to documentation area/docs Documentation, site/, README labels Jul 3, 2026
@coderabbitai

coderabbitai Bot commented Jul 3, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@taitelee, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 38 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: cac9bda2-4a93-44f0-b74a-cdff8679af24

📥 Commits

Reviewing files that changed from the base of the PR and between 305951c and fb4ba11.

📒 Files selected for processing (2)
  • CHANGELOG.md
  • docs/src/components/Header.astro
📝 Walkthrough

Walkthrough

This PR adds a custom Starlight header and related branding updates, updates shared navigation and component typings, and bumps the Go toolchain version.

Changes

Docs header and branding

Layer / File(s) Summary
Themed lockup and logo
docs/scripts/branding/generate.sh, docs/src/components/Logo.astro, docs/src/components/SiteTitle.astro
Adds themed lockup generation, a new Logo component, and updates SiteTitle to render it.
Header navigation and rendering
docs/src/config/sidebar.ts, docs/astro.config.mjs, docs/src/components/Header.astro, docs/src/styles/global.css
Adds shared header nav data, wires Starlight to the custom header, renders active nav and controls, and adds header layout styling.
Footer branding update
docs/src/components/Footer.astro
Replaces footer brand markup with the shared Logo component and adjusts footer layout styling.
Header wiring, typings, and changelog
docs/src/env.d.ts, CHANGELOG.md
Adds virtual component typings, updates typing guidance, and records the header change in the changelog.

Go toolchain bump

Layer / File(s) Summary
Go version update
go.mod, CHANGELOG.md
Bumps the Go directive to 1.26.5 and notes the version change in the changelog.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Possibly related PRs

  • Wave-RF/WaveHouse#142: Also touches the same docs Starlight component override surfaces, including docs/src/components/SiteTitle.astro, docs/src/components/Footer.astro, and docs/astro.config.mjs.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main change: a docs-site Starlight header override with top-level navigation.
Description check ✅ Passed The description is directly about the same header override and navigation changes described in the changeset.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch page-header
✨ Simplify code
  • Create PR with simplified code
  • Commit simplified code in branch page-header

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Jul 3, 2026

Copy link
Copy Markdown

📚 Docs preview is livehttps://a2968f8d-wavehouse-docs.wave-rf.workers.dev

  • Commitfb4ba11: fix(docs): valid standalone lockup SVG, full lockup on mobile
  • Author@taitelee
  • Committed — 2026-07-09 10:55 (UTC-04:00)
  • Deployed — 2026-07-09 11:04 EDT

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1


ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: b37afca5-448b-414c-955c-078e506b497f

📥 Commits

Reviewing files that changed from the base of the PR and between 029fe1f and 7cc9584.

📒 Files selected for processing (4)
  • docs/astro.config.mjs
  • docs/src/components/Header.astro
  • docs/src/config/sidebar.ts
  • docs/src/env.d.ts
📜 Review details
⏰ Context from checks skipped due to timeout. (5)
  • GitHub Check: Docs build
  • GitHub Check: Lint
  • GitHub Check: Analyze (go)
  • GitHub Check: Analyze (javascript-typescript)
  • GitHub Check: Analyze (go)
⚠️ CI failures not shown inline (2)

GitHub Actions: PR housekeeping / PR housekeeping: feat(docs): override Starlight header with a top-level site nav

Conclusion: failure

View job details

##[group]Run # Single source of truth for the rule: scripts/lint-pr-title.sh — the
 �[36;1m# Single source of truth for the rule: scripts/lint-pr-title.sh — the�[0m
 �[36;1m# SAME validator the local agent gate runs (.claude/hooks/agent-bash-gate.sh),�[0m
 �[36;1m# so CI and local can't drift. The checkout above is ref: main, so this is�[0m
 �[36;1m# always the default-branch script. Dependabot's grouped-update titles�[0m
 �[36;1m# routinely exceed the 72-char subject cap and the format isn't�[0m
 �[36;1m# configurable, so Dependabot PRs are exempt from the length check�[0m
 �[36;1m# (the format check still applies).�[0m
 �[36;1mif [[ "$PR_AUTHOR" == "dependabot[bot]" || "$PR_AUTHOR" == "app/dependabot" ]]; then�[0m
 �[36;1m  export PR_TITLE_SKIP_LENGTH=1�[0m
 �[36;1mfi�[0m
 �[36;1m�[0m
 �[36;1mif reason=$(bash scripts/lint-pr-title.sh "$PR_TITLE" 2>&1); then�[0m
 �[36;1m  echo "passed=true" >> "$GITHUB_OUTPUT"�[0m
 �[36;1m  echo "PR title OK: $PR_TITLE"�[0m
 �[36;1melse�[0m
 �[36;1m  echo "passed=false" >> "$GITHUB_OUTPUT"�[0m
 �[36;1m  printf '%s\n' "$reason"�[0m
 �[36;1m  echo "::error::$(printf '%s' "$reason" | head -1)"�[0m

GitHub Actions: PR housekeeping / 0_PR housekeeping.txt: feat(docs): override Starlight header with a top-level site nav

Conclusion: failure

View job details

##[group]Run # Single source of truth for the rule: scripts/lint-pr-title.sh — the
 �[36;1m# Single source of truth for the rule: scripts/lint-pr-title.sh — the�[0m
 �[36;1m# SAME validator the local agent gate runs (.claude/hooks/agent-bash-gate.sh),�[0m
 �[36;1m# so CI and local can't drift. The checkout above is ref: main, so this is�[0m
 �[36;1m# always the default-branch script. Dependabot's grouped-update titles�[0m
 �[36;1m# routinely exceed the 72-char subject cap and the format isn't�[0m
 �[36;1m# configurable, so Dependabot PRs are exempt from the length check�[0m
 �[36;1m# (the format check still applies).�[0m
 �[36;1mif [[ "$PR_AUTHOR" == "dependabot[bot]" || "$PR_AUTHOR" == "app/dependabot" ]]; then�[0m
 �[36;1m  export PR_TITLE_SKIP_LENGTH=1�[0m
 �[36;1mfi�[0m
 �[36;1m�[0m
 �[36;1mif reason=$(bash scripts/lint-pr-title.sh "$PR_TITLE" 2>&1); then�[0m
 �[36;1m  echo "passed=true" >> "$GITHUB_OUTPUT"�[0m
 �[36;1m  echo "PR title OK: $PR_TITLE"�[0m
 �[36;1melse�[0m
 �[36;1m  echo "passed=false" >> "$GITHUB_OUTPUT"�[0m
 �[36;1m  printf '%s\n' "$reason"�[0m
 �[36;1m  echo "::error::$(printf '%s' "$reason" | head -1)"�[0m
🔇 Additional comments (5)
docs/src/config/sidebar.ts (1)

86-98: LGTM!

docs/src/components/Header.astro (2)

1-24: LGTM!

Also applies to: 55-143


25-25: 🎯 Functional Correctness

Header nav links are fine as-is. docs/astro.config.mjs doesn’t define Starlight locales, so the root-absolute headerNav links and the aria-current comparison match this single-locale setup.

			> Likely an incorrect or invalid review comment.
docs/astro.config.mjs (1)

149-149: LGTM!

docs/src/env.d.ts (1)

6-7: LGTM!

Also applies to: 20-39

Comment thread docs/src/components/Header.astro Outdated
@github-project-automation github-project-automation Bot moved this from Backlog to In review in WaveHouse Task Board Jul 3, 2026
@taitelee taitelee moved this from In review to In progress in WaveHouse Task Board Jul 3, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1


ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 7113524a-83cc-4c07-8965-ee81a2ab6b14

📥 Commits

Reviewing files that changed from the base of the PR and between 7cc9584 and 4b304fc.

📒 Files selected for processing (2)
  • docs/src/components/Header.astro
  • docs/src/config/sidebar.ts
📜 Review details
⏰ Context from checks skipped due to timeout. (5)
  • GitHub Check: Docs build
  • GitHub Check: Lint
  • GitHub Check: Analyze (go)
  • GitHub Check: Analyze (go)
  • GitHub Check: Analyze (javascript-typescript)
⚠️ CI failures not shown inline (2)

GitHub Actions: PR housekeeping / PR housekeeping: feat(docs): override Starlight header with a top-level site nav

Conclusion: failure

View job details

##[group]Run # Single source of truth for the rule: scripts/lint-pr-title.sh — the
 �[36;1m# Single source of truth for the rule: scripts/lint-pr-title.sh — the�[0m
 �[36;1m# SAME validator the local agent gate runs (.claude/hooks/agent-bash-gate.sh),�[0m
 �[36;1m# so CI and local can't drift. The checkout above is ref: main, so this is�[0m
 �[36;1m# always the default-branch script. Dependabot's grouped-update titles�[0m
 �[36;1m# routinely exceed the 72-char subject cap and the format isn't�[0m
 �[36;1m# configurable, so Dependabot PRs are exempt from the length check�[0m
 �[36;1m# (the format check still applies).�[0m
 �[36;1mif [[ "$PR_AUTHOR" == "dependabot[bot]" || "$PR_AUTHOR" == "app/dependabot" ]]; then�[0m
 �[36;1m  export PR_TITLE_SKIP_LENGTH=1�[0m
 �[36;1mfi�[0m
 �[36;1m�[0m
 �[36;1mif reason=$(bash scripts/lint-pr-title.sh "$PR_TITLE" 2>&1); then�[0m
 �[36;1m  echo "passed=true" >> "$GITHUB_OUTPUT"�[0m
 �[36;1m  echo "PR title OK: $PR_TITLE"�[0m
 �[36;1melse�[0m
 �[36;1m  echo "passed=false" >> "$GITHUB_OUTPUT"�[0m
 �[36;1m  printf '%s\n' "$reason"�[0m
 �[36;1m  echo "::error::$(printf '%s' "$reason" | head -1)"�[0m

GitHub Actions: PR housekeeping / 0_PR housekeeping.txt: feat(docs): override Starlight header with a top-level site nav

Conclusion: failure

View job details

##[group]Run # Single source of truth for the rule: scripts/lint-pr-title.sh — the
 �[36;1m# Single source of truth for the rule: scripts/lint-pr-title.sh — the�[0m
 �[36;1m# SAME validator the local agent gate runs (.claude/hooks/agent-bash-gate.sh),�[0m
 �[36;1m# so CI and local can't drift. The checkout above is ref: main, so this is�[0m
 �[36;1m# always the default-branch script. Dependabot's grouped-update titles�[0m
 �[36;1m# routinely exceed the 72-char subject cap and the format isn't�[0m
 �[36;1m# configurable, so Dependabot PRs are exempt from the length check�[0m
 �[36;1m# (the format check still applies).�[0m
 �[36;1mif [[ "$PR_AUTHOR" == "dependabot[bot]" || "$PR_AUTHOR" == "app/dependabot" ]]; then�[0m
 �[36;1m  export PR_TITLE_SKIP_LENGTH=1�[0m
 �[36;1mfi�[0m
 �[36;1m�[0m
 �[36;1mif reason=$(bash scripts/lint-pr-title.sh "$PR_TITLE" 2>&1); then�[0m
 �[36;1m  echo "passed=true" >> "$GITHUB_OUTPUT"�[0m
 �[36;1m  echo "PR title OK: $PR_TITLE"�[0m
 �[36;1melse�[0m
 �[36;1m  echo "passed=false" >> "$GITHUB_OUTPUT"�[0m
 �[36;1m  printf '%s\n' "$reason"�[0m
 �[36;1m  echo "::error::$(printf '%s' "$reason" | head -1)"�[0m
🔇 Additional comments (7)
docs/src/config/sidebar.ts (1)

87-94: 🎯 Functional Correctness

Confirm the intended header navigation entries.

headerNav currently exposes only Docs, and Header.astro renders this array verbatim. The PR objective describes separate Getting Started, Why WaveHouse?, Architecture, API, and SDK links; if that requirement is still current, add those entries here so the header matches the product spec.

docs/src/components/Header.astro (6)

20-42: LGTM!


54-68: LGTM!


80-86: LGTM!


91-159: LGTM!

Also applies to: 179-236


46-49: 🎯 Functional Correctness

Mobile drawer toggle is still present. PageFrame.astro renders MobileMenuToggle for sidebar pages, so this override doesn’t remove the mobile sidebar entry point.

			> Likely an incorrect or invalid review comment.

168-170: 🎯 Functional Correctness

No issue: the search button keeps its accessible name. The span is already aria-hidden, and the button’s aria-label provides the label, so hiding the span here does not make the splash icon button unlabeled.

			> Likely an incorrect or invalid review comment.

Comment thread docs/src/components/Header.astro Outdated
@github-project-automation github-project-automation Bot moved this from In progress to In review in WaveHouse Task Board Jul 3, 2026
coderabbitai[bot]
coderabbitai Bot previously approved these changes Jul 3, 2026
@taitelee taitelee moved this from In review to Ready in WaveHouse Task Board Jul 3, 2026
@taitelee taitelee moved this from Ready to In review in WaveHouse Task Board Jul 6, 2026
@taitelee taitelee moved this from In review to Ready in WaveHouse Task Board Jul 6, 2026
@EricAndrechek

Copy link
Copy Markdown
Member

The docs label in the header isn't immediately clear to me that it's a link, and it also isn't vertically centered well against the wavehouse logo:
image

Also, in the old version,
image
the search bar shows large and that I can keyboard shortcut to access it quickly, which now isn't as clear
image

Also, with the header narrower now it introduces a new little UI thing: when it was full width, switching pages to the docs meant the header didn't need to re-render or change, it was the same width and stuff, but now the width changes which looks strange, but at the same time I agree the narrower looks nice on the landing page, so unsure how we should do it.

@EricAndrechek

EricAndrechek commented Jul 8, 2026

Copy link
Copy Markdown
Member

Would love to see some changes, including:

  • Abstracting out the logo stuff into its own component (do we still use the WordMark or whatever it was one, or can we replace it?) for easier re-use elsewhere outside the header (ie anywhere we need to load the logo and have it properly show based on theme preferences) and to help make the header component more concise.
  • Removing magic numbers across the board, especially in aligning the docs/header links to the logo, so that future changes to fonts, font sizes, logo sizes/fonts, etc. don't break the alignment and the styles become easier to maintain
  • Figure out how to make the header width change from narrow on the homescreen to wide on the docs pages smoother (the logo moves from indented to left-aligned, which is abrupt when switching to docs pages compared to how it was before always left-aligned)

@github-actions github-actions Bot added dependencies Pull requests that update a dependency file area/infra CI, build, deploy, Docker, release labels Jul 8, 2026
@github-code-quality

github-code-quality Bot commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Overview

Languages: Go

Go

The overall coverage remains at 90%, unchanged from the main branch.


Updated July 09, 2026 15:06 UTC
Code Coverage is in Public Preview. Learn more and provide us with your feedback.

coderabbitai[bot]
coderabbitai Bot previously approved these changes Jul 8, 2026
coderabbitai[bot]
coderabbitai Bot previously approved these changes Jul 9, 2026
Comment thread docs/src/assets/branding/lockup-themed.svg
Comment thread docs/scripts/branding/generate.sh Outdated
Comment thread docs/src/components/Logo.astro
@github-project-automation github-project-automation Bot moved this from Ready to In review in WaveHouse Task Board Jul 9, 2026
coderabbitai[bot]
coderabbitai Bot previously approved these changes Jul 9, 2026
@github-project-automation github-project-automation Bot moved this from Ready to In progress in WaveHouse Task Board Jul 9, 2026
@taitelee
taitelee added this pull request to the merge queue Jul 9, 2026
Merged via the queue into main with commit c816e34 Jul 9, 2026
30 of 33 checks passed
@taitelee
taitelee deleted the page-header branch July 9, 2026 15:19
@github-project-automation github-project-automation Bot moved this from In progress to Done in WaveHouse Task Board Jul 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/docs Documentation, site/, README area/infra CI, build, deploy, Docker, release dependencies Pull requests that update a dependency file documentation Improvements or additions to documentation

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

2 participants