Repository navigation
Commit 712361b
docs(site): give the core narrative a front door on the home page — a Why link in the hero, '00 · The idea', a Why nav entry, the closing card trimmed (#22974)
Fixes #22951
Clause-②: no
The home page now opens the same door the README and the docs do: the
essay "The Ontology Is the Software" is reachable from the hero, from a
new section 00 and from the top nav. The closing card loses the
long-form line that used to be the page's only link to it.
## What changed
Two files: `apps/docs/app/[lang]/page.tsx` and
`apps/docs/lib/layout.shared.tsx`.
1. **Hero link.** Under the four-promise paragraph and above the button
row: one text link, "Why the ontology is the software", with the arrow
icon the page's other inline links use. No fifth button; the four
buttons are untouched.
2. **`00 · The idea`**, between the hero and `01 · The loop`, in the
01–03 section shape (`border-t` rule, eyebrow in `--l-mono`, `h2` in
`--l-display`). It holds `OntologyRunsFigure` imported from
`@/components/figures` (not copied), the three sentences verbatim from
the ruling, and "Read the essay" with the exact class string of "Browse
the full vocabulary in the docs". Existing section numbers are
unchanged.
3. **Top nav.** `{ text: 'Why', url: ESSAY_URL, active: 'url' }` before
`Blog` in `baseOptions().links`.
4. **Closing card.** "Read the long form:" and its link are gone; the
slogan sentence and the ObjectOS line stay as they were.
The essay's route is one constant, `ESSAY_URL` in
`lib/layout.shared.tsx`, read by the nav entry and by both page links.
`HOME_TITLE`, `HOME_DESCRIPTION` and the metadata blocks are unchanged.
## Measured in the browser
Production build served by `next start`, preinstalled Chromium, `/` in
both themes at 1280 px and 390 px. In each of the four runs the `html`
element carried the expected theme class, and `scrollWidth` equalled the
viewport (no horizontal scroll). Light and dark measured the same sizes;
the rows below differ only by width unless a theme is named.
| | 1280 px | 390 px |
|---|---|---|
| Hero link | 251 × 24 px, centred, 20 px under the paragraph, 33 px
above the buttons; 16 px, arrow present | 251 × 24 px, centred, same
spacing |
| Hero link contrast | light 18.2:1, dark 15.7:1 | same |
| Section order | prose paragraph, then `00 · The idea`, then `01 · The
loop` | same |
| Section 00 type | eyebrow IBM Plex Mono, rule 1 px solid, h2 Bricolage
Grotesque 36 px | h2 30 px |
| Figure | wide drawing: SVG 846 × 341 px in an 896 × 391 px plate |
stacked drawing: SVG 316 × 507 px in a 342 × 533 px plate |
| Figure in each theme | SVG text near-black on the light plate,
near-white on the dark one | same |
| Caption | 14 px italic, 12 px above, muted, one line | two lines |
| Three sentences | three columns, 347 px each, 18 px | stacked, 342 px
each |
| Read the essay | 121 × 20 px, 14 px, arrow | same |
| Nav `Why` | in the bar at x = 170, before `Blog` at x = 222; 14 px,
same colour as `Blog` | inside Toggle Menu: `Why` at y = 72 above `Blog`
at y = 108; 16 px, foreground colour |
| Closing card | no "Read the long form", zero links to the essay; its
only link is "Try ObjectOS" | same |
## Gates
All at head `011e8dfe` unless stated.
- `pnpm turbo run build --filter=@objectstack/docs --concurrency=2`, the
`buildCommand` in `apps/docs/vercel.json` that CI's Build Docs job runs,
under `os-verify-lock`: `Tasks: 2 successful, 2 total`, `Cached: 0
cached, 2 total`, `.next/BUILD_ID` present, `VERDICT command-exit 0`.
- `pnpm --filter @objectstack/docs build` under `os-verify-lock`, at
`ba94665b` (the one later commit removes a single comment line):
`VERDICT command-exit 0`. The tree was still clean after the generators
ran.
- `pnpm --filter @objectstack/docs typecheck`: `VERDICT command-exit 0`;
`tsc --listFilesOnly` lists both touched files.
- `node scripts/pm/dispatch-gates.mjs --commands --repo
objectstack-ai/objectstack` (change set from the merge base, 2 paths):
27 commands, every one run, every one exit 0. The `--ran` reconciliation
reads `27 derived, 27 run, 0 NOT-MEASURED, 0 UNRUN`, with an exit code
recorded for each.
- eslint, narrowed to the two touched files. Both are in the population:
`isPathIgnored` is false, and they fall under the config's
`**/*.{ts,tsx,…}` block. With `--format json` it reports 2 files, 0
errors, 0 warnings. Neither file gets `parserOptions.project` or
`projectService`, so linting is untyped and per-file, and this diff
cannot change any other file's result. The repo-wide `pnpm lint` stays
with CI.
- Not measured locally, left to CI: the workspace-wide type-check lanes,
and the roster and wide-population families that `dispatch-gates` lists
outside its 27.
Changeset: none. `apps/docs` is `private: true`, and nothing under
`packages/**`, `content/**`, `README.md` or `apps/docs/public/**`
changed (`git diff --name-only` over those paths from the base: 0), so
this PR takes `skip-changeset`.
## Acceptance notes
- **Section 00's heading and the figure caption are the essay's own
words.** The ruling named the `h2` slot but not its text. "Why code
recedes" is the essay's heading for the section this figure sits in, and
the caption is the essay's own caption for this figure, verbatim. Either
is a one-line swap if a different wording is wanted.
- **The three sentences are the ruling's, verbatim.** They do not appear
in the essay's text (zero hits under `content/`).
- **The home page styles the figure's caption.** `Figure` gives its
`figcaption` only `text-center italic` and takes spacing, size and
colour from the blog's `prose` wrapper. The home page has no prose
wrapper, so section 00's wrapper sets them (`[&_figcaption]:mt-3`,
`text-sm`, `text-fd-muted-foreground`). Any later consumer outside
`prose` will meet the same thing.
- **In the production build, `Why` does not highlight on the essay's own
page, and `Blog` does not highlight on any post.** Both configs are as
ruled; the cause predates this PR. Blog posts are prerendered under the
internal `/en/blog/SLUG` path (`.next/prerender-manifest.json`). The
nav's active check compares each `url` against that path during
prerender, and hydration does not repaint the attribute. `/blog` itself
renders on demand and does highlight `Blog`. Measured on this branch's
build: `data-active` is `false` for both items on
`/blog/the-ontology-is-the-software` and on
`/blog/context-window-is-the-constraint`, and `true` for `Blog` on
`/blog`. The `Blog` line is unchanged by this diff. Reported to the
seat; nothing is changed here.
- **Light-mode nav contrast** is 4.35:1 at 14 px for both `Why` and
`Blog` (the fumadocs nav token; dark 9.0:1). Unchanged here.
- Screenshots were kept outside the worktree and are not committed.
---
_Generated by [Claude
Code](https://claude.ai/code/session_011hRnra93sK5Q2gTYYTbdJR)_
---------
Co-authored-by: Claude <noreply@anthropic.com>1 parent a2240c4 commit 712361b
2 files changed
Lines changed: 61 additions & 11 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3 | 3 | | |
4 | 4 | | |
5 | 5 | | |
6 | | - | |
| 6 | + | |
7 | 7 | | |
8 | 8 | | |
9 | 9 | | |
| |||
16 | 16 | | |
17 | 17 | | |
18 | 18 | | |
| 19 | + | |
19 | 20 | | |
20 | 21 | | |
21 | 22 | | |
| |||
122 | 123 | | |
123 | 124 | | |
124 | 125 | | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
125 | 133 | | |
126 | 134 | | |
127 | 135 | | |
| |||
223 | 231 | | |
224 | 232 | | |
225 | 233 | | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
226 | 243 | | |
227 | 244 | | |
228 | 245 | | |
| |||
306 | 323 | | |
307 | 324 | | |
308 | 325 | | |
| 326 | + | |
| 327 | + | |
| 328 | + | |
| 329 | + | |
| 330 | + | |
| 331 | + | |
| 332 | + | |
| 333 | + | |
| 334 | + | |
| 335 | + | |
| 336 | + | |
| 337 | + | |
| 338 | + | |
| 339 | + | |
| 340 | + | |
| 341 | + | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
| 346 | + | |
| 347 | + | |
| 348 | + | |
| 349 | + | |
| 350 | + | |
| 351 | + | |
| 352 | + | |
| 353 | + | |
| 354 | + | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
| 358 | + | |
| 359 | + | |
309 | 360 | | |
310 | 361 | | |
311 | 362 | | |
| |||
455 | 506 | | |
456 | 507 | | |
457 | 508 | | |
458 | | - | |
459 | | - | |
460 | | - | |
461 | | - | |
462 | | - | |
463 | | - | |
464 | | - | |
465 | | - | |
| 509 | + | |
466 | 510 | | |
467 | 511 | | |
468 | 512 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
15 | 18 | | |
16 | 19 | | |
17 | 20 | | |
| |||
24 | 27 | | |
25 | 28 | | |
26 | 29 | | |
27 | | - | |
28 | | - | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
29 | 35 | | |
30 | 36 | | |
31 | 37 | | |
0 commit comments