Skip to content

fix(site): give the landing page a title, and align the tagline everywhere - #67

Merged
vishr merged 2 commits into
mainfrom
fix/landing-page-title
Aug 17, 2026
Merged

fix(site): give the landing page a title, and align the tagline everywhere#67
vishr merged 2 commits into
mainfrom
fix/landing-page-title

Conversation

@vishr

@vishr vishr commented Aug 17, 2026

Copy link
Copy Markdown
Member

The landing page titled itself Onebox · Onebox. Fixing that turned into settling what the project's one-line description actually is, since the repository had six different phrasings of it.

The title

index.html          Onebox · Plan-before-apply deploys. Zero downtime. One box.
start/install.html  Install · Onebox
reference/cli.html  CLI commands · Onebox
404.html            404 · Onebox

The wording is the three beats the repository already used on itself — the GitHub description read plan-before-apply, zero-downtime deploys for one box. As a single title that is 61 characters and long enough to be cut short in search results, so it is split into clauses rather than trimmed, and every idea survives.

No claim is made that 59 characters is safe from truncation: search engines cut on rendered width, not character count, and this string capitalises three words the original did not. It is shorter, which is the honest claim.

Why the old comment did not catch it

astro.config.mjs already had a note saying titleDelimiter exists because the page otherwise "renders as Onebox | Onebox". That fixed the separator and not the duplication — a delimiter cannot know both halves are the same word. The note read as though the problem were solved, which is probably why it survived. It now describes what the setting actually does: serve every other page.

og:title

Set alongside the title. Starlight defaults it to the bare page title, so without it the link rendered in Slack, X and LinkedIn as a card called "Onebox" — identified by its own name and nothing else, which is the problem this change exists to fix.

Both tags are deduped by Starlight against its defaults rather than appended. Verified in the built output: one <title>, one og:title, and the override is page-scoped — /start/install still gets Starlight's default.

Frontmatter is the mechanism because it is the one that works. Emitting a <title> from the Head component instead produces two title tags with Starlight's own — the wrong one — first. Measured, not assumed.

Alignment elsewhere

Slot Now
astro.config.mjstagline matches the title
GitHub repo description onebox (ob) — plan-before-apply deploys. Zero downtime. One box.
cmd/ob/main.goShort "one host" → "one server"
docs/product.md H1 "one box" → "one server"

The tagline renders nowhere today — Starlight uses it for a splash hero and index.mdx supplies its own. Updated anyway, because the day a second splash page exists is not the day to discover it drifted.

The noun change is deliberately not a sweep. Body prose still says "host" in about five places, and it is right there — those sentences are about the machine, not about the product's scope.

Review

/code-review high raised four findings on the first version. All four are fixed here: a stale duplicate comment I had left behind that contradicted the code above it, the missing og:title, the now-false titleDelimiter note, and the unsupportable truncation claim. The reviewer independently confirmed the mechanism — Starlight 0.41.7 dedupes tag: 'title' at utils/head.ts:150.

Codex was asked to judge the finalists and ranked this wording first, over its own earlier recommendation.

Verified

  • just check — All checks passed
  • go test ./cmd/... ./internal/app/ — pass
  • just docs-generate — no generated page moved
  • Built output re-checked for every claim made in the comments: one <title>, one og:title, page-scoped override, config tagline still absent from <body>

🤖 Generated with Claude Code

@vishr
vishr force-pushed the fix/landing-page-title branch from 9b450e8 to 95e73f2 Compare August 17, 2026 17:06
…the repo

Starlight renders "<page title> <delimiter> <site title>". Every page reads
correctly under that rule — "Install · Onebox", "CLI commands · Onebox" — except
the landing page, whose own title is the site title, so it came out as
"Onebox · Onebox".

astro.config.mjs already carried a note about this, saying titleDelimiter exists
because the page otherwise "renders as Onebox | Onebox". That fixed the
separator and not the duplication: a delimiter cannot know both halves are the
same word. The note read as though the problem were solved, which is probably
why it survived; it now says what the setting actually does, which is serve
every other page.

The wording is the three beats the repository already uses on itself. The GitHub
description reads "plan-before-apply, zero-downtime deploys for one box"; as a
single title that is 61 characters and long enough to be cut short in search
results, so it is split into clauses rather than trimmed and every idea
survives.

    index.html          Onebox · Plan-before-apply deploys. Zero downtime. One box.
    start/install.html  Install · Onebox
    reference/cli.html  CLI commands · Onebox
    404.html            404 · Onebox

og:title is set alongside it. Starlight defaults that to the bare page title, so
without it the link renders in Slack, X and LinkedIn as a card called "Onebox" —
identified by its own name and nothing else, which is the problem this change
exists to fix. Both tags are deduped by Starlight against its defaults rather
than appended, verified in the built output: one <title>, one og:title.

Frontmatter is the mechanism because it is the one that works. Emitting a
<title> from the Head component instead produces two title tags with Starlight's
own — the wrong one — first; that was measured, not assumed.

The `tagline` in astro.config.mjs is brought into step. It renders nowhere
today: Starlight uses it for a splash hero, and index.mdx supplies its own. It
is updated anyway, because the day a second splash page exists is not the day to
discover the tagline drifted.

No claim is made that 59 characters is safe from truncation. Search engines cut
on rendered width, not a character count, and this string capitalises three
words the original did not. It is shorter, which is the honest claim.

`just check` passes.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@vishr
vishr force-pushed the fix/landing-page-title branch from 95e73f2 to be34fe1 Compare August 17, 2026 17:44
The lines that introduce the product described its constraint with three
different nouns. The CLI's one-line summary said "one host", docs/product.md's
title said "one box", and the README, the site description, the CLI's own long
help and llms.txt all said "one server". Nothing was wrong; they just did not
agree, and these are the lines a reader meets first.

The two outliers now say server as well.

This is deliberately not a sweep. Body prose across the documentation still says
"host" in about five places — "one host has one owner", "two Onebox applications
on one host", "side by side on one host" — and it is right there, because those
sentences are about the machine rather than about the product's scope. Renaming
them would trade one inconsistency for a worse one.

"Box" survives where it is the product's name rather than a noun: Onebox, and
the tagline's closing beat "One box."

No generated page moved. The CLI reference publishes the long help, which
already said server; only the short summary changed, and that is not published.
`just docs-generate` confirms it.

`just check` passes, as do the cmd and app test suites.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@vishr
vishr force-pushed the fix/landing-page-title branch from fed3995 to 913c4aa Compare August 17, 2026 17:51
@vishr vishr changed the title fix(site): stop the landing page titling itself "Onebox · Onebox" fix(site): give the landing page a title, and align the tagline everywhere Aug 17, 2026
@vishr
vishr merged commit da4fbf7 into main Aug 17, 2026
5 checks passed
vishr added a commit that referenced this pull request Aug 18, 2026
fix(site): give the landing page a title, and align the tagline everywhere
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant