Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion cmd/ob/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ func newRootCmd() *cobra.Command {
g := &globalFlags{}
root := &cobra.Command{
Use: "ob",
Short: "onebox — one application, one host",
Short: "onebox — one application, one server",
Long: "onebox (ob) — plan-before-apply production operations for one application on one server.\n\nYou describe what the application is in ob.yml (or ob.yaml); Onebox generates\nthe Compose runtime, the names, the routing and the supporting services.\nAgentless over SSH, health-gated, journaled and fenced.",
Version: version,
SilenceUsage: true,
Expand Down
2 changes: 1 addition & 1 deletion docs/product.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Onebox — production operations for one application on one box
# Onebox — production operations for one application on one server

> Status: product direction
>
Expand Down
15 changes: 12 additions & 3 deletions site/astro.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,21 @@ export default defineConfig({
integrations: [
starlight({
title: "Onebox",
// Without this the landing page, whose own title is also "Onebox",
// renders as "Onebox | Onebox".
// The separator between a page's title and the site's: "Install · Onebox".
// It was added for the landing page, which is titled "Onebox" like the
// site and so read as "Onebox | Onebox" — that it still read as
// "Onebox · Onebox" afterwards is the part the original note missed. The
// landing page now sets its own title outright and does not pass through
// here at all; every other page does, which is what this is for.
titleDelimiter: "·",
description:
"Production operations for an application intentionally running on one server.",
tagline: "One application. One box. Evidence-backed operations.",
// The project tagline, in the same words as the GitHub description and the
// landing page's title. Starlight renders this only on a splash page that
// does not supply its own hero tagline; index.mdx supplies one, so today
// this has no output. It is kept in step anyway, because the day a second
// splash page exists is not the day to discover the tagline drifted.
tagline: "Plan-before-apply deploys. Zero downtime. One box.",
social: [
{
icon: "github",
Expand Down
28 changes: 28 additions & 0 deletions site/src/content/docs/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,34 @@ title: Onebox
description: Production operations for an application intentionally running on one server.
summary: Landing page. What Onebox is, who it is for, and the fastest path into it.
template: splash
# This page's own title is the site title, so Starlight's
# "<page title> <delimiter> <site title>" pattern rendered it as "Onebox ·
# Onebox". titleDelimiter in astro.config.mjs chose the separator; it cannot
# know both halves are the same word.
#
# Overriding here is the mechanism that works. Emitting a <title> from the Head
# component instead produces two of them, with Starlight's own — the wrong one —
# first; that was measured, not assumed. Starlight dedupes a frontmatter `title`
# tag against its default, so this one replaces it rather than joining it.
#
# og:title is set too. Starlight defaults it to the bare page title, so without
# this 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 block
# exists to fix.
#
# 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 one sentence that is 61 characters and long enough to be cut short in
# search results, so it is split into clauses rather than trimmed — every idea
# survives. Search engines cut on rendered width rather than a character count,
# so 59 is shorter, not guaranteed safe.
head:
- tag: title
content: "Onebox · Plan-before-apply deploys. Zero downtime. One box."
- tag: meta
attrs:
property: og:title
content: "Onebox · Plan-before-apply deploys. Zero downtime. One box."
hero:
tagline: |
Production operations for an application intentionally running on one server.
Expand Down