chore(docs): redesign homepage + merge Quick Start into Installation#457
Conversation
Replaces the stock Starlight splash + CardGrid with a custom hero, stat strip, and aligned feature grid carrying the existing OKLCH theme. Fixes the oversized hero title, makes feature cards uniform height with a hover highlight (no movement), hides the redundant auto-generated h1, demotes OCX to a single supporting line, and adds a header tagline under "Systematic" that hides gracefully on narrow screens. All homepage CSS uses valid selectors (the prior :global() wrappers were invalid in an MDX style tag and were silently dropped, which is why the auto-h1 stayed visible).
generate-stats.ts resolves the version via `git describe --tags` when package.json carries the semantic-release placeholder. The deploy used a shallow checkout (fetch-tags only), so describe could not resolve and the stats banner rendered "unreleased" on the live site. Use fetch-depth: 0.
Folds the Quick Start content (install steps + first-workflow walkthrough) into a single Installation page so there is one short, canonical getting-started page instead of two overlapping ones. The old /getting-started/quick-start/ URL redirects to the merged page (redirect added in astro.config.mjs).
Biome only parses Astro frontmatter, not the template body, so identifiers used only in the markup (siteTitle, Icon, component props) are flagged as unused. The existing "!**/.astro" ignore matched a directory, not the source files. Add "!**/*.astro" so Biome stops linting files it cannot analyze correctly. Astro source is type-checked via the build instead.
fro-bot
left a comment
There was a problem hiding this comment.
Verdict: PASS
Clean, well-scoped docs redesign. Changes are confined to the docs workspace plus two low-risk tooling tweaks (biome.json, docs.yaml). No plugin API surface (config/tool/system.transform hooks), system-prompt injection, or skill-loading code is touched, so the published-package risk is effectively zero. The three fixes are correctly reasoned and the redirect/links resolve to existing pages (guides/philosophy, guides/with-without-systematic, guides/main-loop, reference/configuration).
The items below are all non-blocking — none warrant holding the merge for a docs-only PR from a collaborator.
Blocking issues
None
Non-blocking concerns
-
docs/src/components/FeatureCard.astro:16—icon as any. This violates the repo's no-anyconvention. Since this PR also excludes*.astrofrom Biome (biome.json:9), this cast is now invisible to lint and won't be flagged in future. Prefer typing against Starlight's icon name union, e.g.import type { StarlightIcon } from '@astrojs/starlight/types'andicon as StarlightIcon, or accept theIconcomponent's ownnameprop type. Minor, but worth fixing before the convention erodes in.astrofiles now that they're lint-exempt. -
docs/src/content/docs/index.mdx— duplicated CSS in the<style>block..content-panel:first-of-type { padding: 0 }and.content-panel:nth-of-type(2) { padding-top: 0 }are each declared twice, and the comment/* Make sure children stretch */is repeated back-to-back above.feature-grid > article. Harmless but looks like a copy/paste leftover; collapsing them keeps the override block readable. -
StatsBanner— droppedcomponentsstat vs.generate-stats.ts. The banner no longer rendersstats.components, butdocs/scripts/generate-stats.tsstill computes and writescomponentsintostats.json(and the OCX registry count is the only consumer that's now gone). Not a bug — the generated field is simply unused — but if OCX-count display isn't coming back, consider trimming the generator +Statstype in a follow-up to avoid a dangling field. The PR notes a follow-up banner/logo sweep, so this can ride along. -
Reliance on Starlight internal DOM in
index.mdx. The hero-gap fix hangs CSS off.content-panel:nth-of-type(2)andh1#_top, which are Starlight-internal structures, not public API. This is the pragmatic fix and the PR description explains why the prior:global()approach failed, but flag it as a known Starlight-upgrade fragility point — a future Starlight version could rename these and silently reintroduce the gap. Low likelihood, easy to re-spot visually.
Missing tests
None required. This is presentational MDX/CSS plus CI config; the existing build (docs build → 111 pages) and content-integrity checks are the appropriate gates, and the description confirms they pass. No unit-testable logic was added.
Risk assessment: LOW
- Regression likelihood: LOW. No runtime plugin code changed.
StatsBannernow calls.toString()onstats.skills/stats.agents; both are numbers in the generatedstats.json, so this is safe. Worst realistic regression is a visual gap if Starlight internals shift. - Security exposure: NONE. No prompt injection, skill-loading, or input-handling paths touched. The hand-rolled hero anchors/SVGs are static markup with no interpolated user data.
- Blast radius: contained to the docs site.
fetch-depth: 0only affects the docs deploy job's checkout (more history, slightly slower clone — acceptable). Thebiome.jsonglob fix (!**/.astromatched a dir,!**/*.astromatches files) is correct and only relaxes linting on template files Biome can't parse anyway; it does not loosen rules on real.tssource.
Run Summary
| Field | Value |
|---|---|
| Event | pull_request |
| Repository | marcusrbrown/systematic |
| Run ID | 26672332721 |
| Cache | hit |
| Session | ses_1893ab695ffelHwLpc99ZnbbtG |
Summary
Redesigns the docs homepage off the stock Starlight splash onto a custom, faithful three-flatland-style layout, merges the Quick Start page into Installation, and fixes the "unreleased" stats banner. Reviewed live throughout; this is the first round, with a follow-up sweep planned (banner/logo treatment).
Homepage redesign
CardGrid stagger.h1is hidden (kept in the DOM as the skip-link target).:global()wrappers were invalid inside an MDX<style>tag and were silently dropped, which is why the auto-h1stayed visible and an empty gap sat above the hero.Getting started
/getting-started/quick-start/URL redirects to it.Fixes
generate-stats.tscould not resolve the version viagit describe --tags. Now usesfetch-depth: 0..astrosource files, which Biome cannot analyze correctly (it parses only frontmatter, not the template), so identifiers used only in markup are no longer flagged as unused. The previous!**/.astroignore matched a directory, not the files.Testing
bun run typecheckcleanbun run lintclean (no errors)bun scripts/content-integrity.tscleanbun run --cwd docs buildbuilds 111 pagesbun test tests/unit927 pass / 0 failRelease impact
chore(docs)/ci(docs)/build(biome)only. No published-package surface change, so no version bump. The docs site picks up the redesign on the next release or a manual deploy.Follow-up (next round)
Re-add or transform the banner into a proper logo (the three connected dots), plus a broader consistency sweep across the other pages.