diff --git a/apps/docs/.ghost/anti-goal.generated-docs-site.md b/apps/docs/.ghost/anti-goal.generated-docs-site.md deleted file mode 100644 index 4096d470..00000000 --- a/apps/docs/.ghost/anti-goal.generated-docs-site.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -description: The generic generated docs and AI-product defaults this site rejects — read before adding any UI, visual section, landing page, or marketing copy. -materials: - - apps/docs/src/app/page.tsx - - apps/docs/src/components/docs/hero.tsx - - apps/docs/src/components/docs/doc-prose.tsx ---- - -ghost is not the generated AI SaaS docs site. - -Reject these defaults even when they are easy to build: - -- Gradient hero text, purple/blue glows, aurora backgrounds, particle fields, - blurred blobs, and "AI sparkle" ornament. -- Rounded-xl feature-card grids on gray-50 with three benefit icons and a fake - dashboard screenshot. -- Mascots, emoji headings, playful empty-state illustrations, or robot metaphors. -- Overpromising copy: "ship on-brand every time," "brand autopilot," "AI that - understands your design system," or any claim that makes ghost sound like it - replaces taste, review, or human curation. -- Decorative motion that exists only because the page felt static. -- Dense nav chrome, sidebars on landing pages, or tool-index pages that feel like - enterprise documentation portals. - -A technically correct output can still be off-brand if it looks like any AI tool -could ship it. ghost's docs win by being severe, specific, and a little haunted: -black-and-white, exact language, spectral geometry, and enough restraint that the -one strange gesture actually lands. diff --git a/apps/docs/.ghost/anti-goal.generic-ai-product.md b/apps/docs/.ghost/anti-goal.generic-ai-product.md new file mode 100644 index 00000000..0edc2fa5 --- /dev/null +++ b/apps/docs/.ghost/anti-goal.generic-ai-product.md @@ -0,0 +1,16 @@ +--- +description: "Replacement for the generic AI-product visual median: spectacle and generic card chrome become an inspectable marked document with a specific flat squircle card language." +materials: + - apps/docs/src/app/page.tsx + - apps/docs/src/styles/marked-doc.css +--- + +Not: gradient hero text, purple or blue glows, aurora fields, blurred blobs, particle systems, giant claims, fake dashboards, benefit-icon grids, floating rounded tiles on tinted gray, pill clusters, mascots, robot metaphors, or ambient animation. + +Instead: a left-anchored mono composition, quiet title, numbered structure, narrow prose, literal specimens, warm rules, active empty space, one yellow mark that records choice, and flat squircle cards whose borders and internal divisions carry the structure. + +Not: sterile terminal cosplay with neon syntax, scan lines, dense command chrome, or every sentence rendered as code. + +Instead: a document that happens to use monospace. Preserve editorial pacing, readable prose, captions, annotation, and material hierarchy. + +Recognize the replacement: removing the logo should still leave a distinct relationship between marginal structure, columnar reading, wider evidence, and marked state. If only the palette distinguishes it from an AI SaaS template or developer-tool landing page, the expression has failed. diff --git a/apps/docs/.ghost/asset.docs-materials.md b/apps/docs/.ghost/asset.docs-materials.md deleted file mode 100644 index 6d65626b..00000000 --- a/apps/docs/.ghost/asset.docs-materials.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -description: Concrete docs-site materials — inspect before inventing tokens, components, typography, navigation, motion, routes, or command examples. -materials: - - apps/docs/src/App.tsx - - apps/docs/src/main.tsx - - apps/docs/src/styles/docs.css - - apps/docs/src/styles/marked-doc.css - - apps/docs/src/components/docs/** - - apps/docs/src/app/**/*.tsx - - apps/docs/src/content/docs/*.mdx - - apps/docs/src/generated/cli-manifest.json - - packages/vessel-react/src/styles/main.css - - packages/vessel-react/src/components/** ---- - -Do not invent docs-site vocabulary before inspecting the materials already in -place. - -Material contract: - -- **Tokens and primitives** come from `@design-intelligence/vessel-react/styles.css`, - backed by `packages/vessel-react/src/styles/main.css`. Author with semantic roles - (`bg-background`, `text-foreground`, `text-muted-foreground`, `border-border`, - `bg-card`) and the named docs typography variables (`--heading-*`, - `--label-*`). Avoid raw palette utilities unless they are already part of a - documented semantic exception. -- **Typography** uses the docs styles and Vessel's semantic type roles. Preserve - the compact monospace labels, lowercase headings, and restrained body rhythm. -- **Navigation** is the bottom floating `Dock`. New top nav, side nav, or - secondary persistent chrome should be treated as a product decision, not a - routine addition. -- **Page structure** lives in `PageHeader`, `SectionWrapper`, `DocsPageLayout`, - `DocSection`, and `DocProse`. Use these before making a new layout primitive. -- **Docs content** is MDX under `apps/docs/src/content/docs/` with frontmatter - wired through the docs manifest and routes. Do not hard-code a one-off article - route unless the content model cannot express it. -- **CLI examples** should be checked against `apps/docs/src/generated/cli-manifest.json` - or regenerated with `pnpm dump:cli-help` after CLI command/flag changes. - -The materials locate facts; this node does not make every existing choice a -brand guidance. If a component repeats a weak or legacy pattern, fix the pattern -instead of canonizing it here. diff --git a/apps/docs/.ghost/brand.md b/apps/docs/.ghost/brand.md new file mode 100644 index 00000000..d3b3242c --- /dev/null +++ b/apps/docs/.ghost/brand.md @@ -0,0 +1,20 @@ +--- +description: "The ghost visual expression in one screen: an exact, quiet, visibly structured document with one meaningful mark." +materials: + - apps/docs/src/styles/marked-doc.css + - apps/docs/src/app/page.tsx +--- + +ghost is exact, quiet, and visibly structured. It does not perform futurism. + +## Non-negotiables + +- Monospace type is the single voice. Hierarchy comes from placement, measure, weight, and space rather than dramatic changes of face or scale. +- The main reading path is narrow and column-oriented. Labels occupy the margin. Rules expose the sequence. Empty space remains active structure. +- Rich material may break wider than prose when comparison or inspection requires room. Width is earned by content, not used to make a page feel full. +- A pure white field in light mode and a near-black field in dark mode form the ground. Warmth comes from the ink, annotation, rules, and yellow mark, not a tinted background. +- Yellow is a mark left by selection or active choice. It is never ambient brand decoration. +- The card language is a flat, outlined squircle: no shadow, no tonal lift, and no ornamental shell. Cards frame statements, specimens, and controls; internal rules organize richer content. +- Motion reveals order, selection, or state. Nothing moves merely to animate the brand. + +Ask before adding a second accent, display typeface, conventional product chrome, decorative imagery, or a composition that fills available width by default. diff --git a/apps/docs/.ghost/checks/cli-examples-match-manifest.md b/apps/docs/.ghost/checks/cli-examples-match-manifest.md deleted file mode 100644 index 2a81e81e..00000000 --- a/apps/docs/.ghost/checks/cli-examples-match-manifest.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -name: cli-examples-match-manifest -description: CLI examples and generated docs stay synchronized with the real ghost command surface. -severity: high -references: - - condition.cli-reference-exactness - - asset.docs-materials ---- - -When a change touches CLI docs, generated command help, command implementation, -or examples in MDX, verify that documented command names and flags exist in the -current CLI manifest or command help. If command metadata changed, require -`pnpm dump:cli-help` so `apps/docs/src/generated/cli-manifest.json` is updated. - -Flag speculative flags, obsolete command names, or examples that describe a skill -workflow as though it were a CLI command. diff --git a/apps/docs/.ghost/checks/no-generic-ai-ornament.md b/apps/docs/.ghost/checks/no-generic-ai-ornament.md deleted file mode 100644 index 0e1057e1..00000000 --- a/apps/docs/.ghost/checks/no-generic-ai-ornament.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -name: no-generic-ai-ornament -description: Docs UI avoids generic AI SaaS ornament and preserves ghost's restrained monochrome visual stance. -severity: medium -references: - - anti-goal.generated-docs-site - - principle.visual-composition ---- - -Review changes to docs UI surfaces for generic AI-product decoration. Flag newly -introduced gradient hero text, purple or blue glows, aurora backgrounds, -particle fields, blurred blobs, emoji headings, mascot or robot metaphors, fake -product screenshots, or decorative motion that does not clarify reading order or -state. - -This check should not block legitimate semantic color in docs prose or existing -Vessel component behavior. The issue is generic ornament that weakens the severe, -monochrome, typographic ghost stance. diff --git a/apps/docs/.ghost/checks/review-stays-advisory.md b/apps/docs/.ghost/checks/review-stays-advisory.md deleted file mode 100644 index 53f53324..00000000 --- a/apps/docs/.ghost/checks/review-stays-advisory.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -name: review-stays-advisory -description: Docs keep checks and review advisory and after generation, never a brand verdict or generation input. -severity: high -references: - - principle.product-model - - decision.feed-forward-over-review ---- - -Review docs copy for claims that ghost review grades, approves, blocks, judges, -or guarantees brand fit. Flag wording that treats checks as generation input or -turns advisory review packets into CI gates. - -Accept wording that says checks are optional review assertions, `ghost review` -supplies evidence, agents judge, and teams may enforce separate CI around -their own automated checks. diff --git a/apps/docs/.ghost/checks/visual-expression-fidelity.md b/apps/docs/.ghost/checks/visual-expression-fidelity.md new file mode 100644 index 00000000..c9c183e4 --- /dev/null +++ b/apps/docs/.ghost/checks/visual-expression-fidelity.md @@ -0,0 +1,23 @@ +--- +name: visual-expression-fidelity +description: Visual work preserves ghost's global principles and the conditional patterns that apply to the changed surface. +severity: high +references: + - principles + - composition + - visual-system + - mark + - pattern.specimen + - pattern.motion + - anti-goal.generic-ai-product +--- + +Review relationships rather than superficial token matching. + +Flag body text that fills available width, centered compositions that erase the marginal relationship, rich material constrained to unreadable prose width, or ordinary content widened only for visual balance. Flag a new display typeface, giant headline, generic floating-card grid, shadow system, decorative yellow, ambient motion, or cards that abandon the flat outlined squircle without establishing a deliberate replacement. + +When exact visual roles are changed, compare them with `visual-system`: palette and contrast, type roles, reading measure, label/content columns, section rhythm, radius, hairlines, control states, focus, semantic state communication, and reduced-motion behavior. Flag new values or states presented as ghost-backed when the chapter marks them `TBD` or leaves them unspecified. + +Apply `pattern.specimen` only when the work presents material for inspection. Apply `pattern.motion` only when something moves or transitions. + +Accept a different medium, component structure, or exact dimension when it preserves the governing relationships: margin identifies, column explains, wider material proves, yellow records state, and empty space remains structural. diff --git a/apps/docs/.ghost/composition.md b/apps/docs/.ghost/composition.md new file mode 100644 index 00000000..90d99e37 --- /dev/null +++ b/apps/docs/.ghost/composition.md @@ -0,0 +1,19 @@ +--- +description: Global composition model for margin, reading column, wider evidence, responsive collapse, and active empty space. +materials: + - apps/docs/src/components/docs/docs-page-layout.tsx + - apps/docs/src/components/docs/wrappers.tsx + - apps/docs/src/styles/marked-doc.css + - apps/docs/src/app/page.tsx +--- + +The main reading path is column-oriented and anchored to one side rather than centered in the viewport. + +- Put a compact title, number, state, or annotation in the margin and the explanation in one adjacent reading column. +- Keep prose narrow enough to read as a continuous argument. The reference measure is `54ch`; do not expand body text because more width is available. +- Divide major steps with hairline rules and substantial vertical space. Rules reveal sequence; whitespace gives each step its own field. +- Let richer content extend beyond the reading column when simultaneous comparison, code legibility, a diagram, or dense evidence requires room. After it, return the eye to the column. +- On compact screens, move marginal information above the content and retain its sequence or role. Do not compress both columns until neither reads well. +- Leave unused space empty. It does not require visual balance through ornament, navigation, or a second content rail. + +The recognizable reading path is: margin identifies, column explains, wider material proves, then the eye returns to the column. diff --git a/apps/docs/.ghost/condition.cli-reference-exactness.md b/apps/docs/.ghost/condition.cli-reference-exactness.md deleted file mode 100644 index ee83923d..00000000 --- a/apps/docs/.ghost/condition.cli-reference-exactness.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -description: CLI exactness condition — gather when editing command docs, generated CLI help, examples, flags, exit codes, or install instructions. -materials: - - apps/docs/src/content/docs/cli-reference.mdx - - apps/docs/src/generated/cli-manifest.json - - packages/ghost/src/commands/** - - scripts/dump-cli-help.mjs ---- - -This condition applies whenever docs mention command names, flags, exit codes, -JSON shape, install commands, or generated help output. - -When it applies: - -- Treat the CLI as the source of truth. Check `ghost --help`, command-specific - help, or `apps/docs/src/generated/cli-manifest.json` before editing examples. -- If a command or flag changed, run `pnpm dump:cli-help` so the docs manifest - matches the CLI. -- Keep examples minimal and copy-pastable. Prefer one direct command over a - shell story with hidden setup. -- Do not document speculative flags, adapter behavior, or workflow aliases that - are only in the skill. If it is not in the CLI, call it an agent workflow, not - a command. - -This condition is narrower than the general docs voice. It optimizes for exact -mechanics over rhetorical smoothness. diff --git a/apps/docs/.ghost/decision.feed-forward-over-review.md b/apps/docs/.ghost/decision.feed-forward-over-review.md deleted file mode 100644 index 67d06f07..00000000 --- a/apps/docs/.ghost/decision.feed-forward-over-review.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -description: Tradeoff behind leading with gather/pull before review — gather when docs positioning could overemphasize drift, checks, gates, or scoring. -materials: - - apps/docs/src/content/docs/getting-started.mdx - - apps/docs/src/content/docs/checks-and-review.mdx - - apps/docs/src/content/docs/cli-reference.mdx ---- - -Decision trace: ghost could have led with review because drift detection is easy -to understand. We lead with authoring, gather, and pull because the agent should -receive the decision before it builds. - -What review is good for: - -- It makes drift visible after a diff. -- It routes changed files to material-backed nodes and checks. -- It gives the agent grounded evidence for critique. - -Why review does not lead: - -- If the right guidance was never gathered, review catches the failure late. -- Calling review a gate makes ghost sound like it judges brand fit - deterministically, which it does not. -- Teams adopt faster when the first win is one repeated decision written down and - reused before generation. - -The decision reverses only for a page whose explicit job is `ghost review`, the -checks directory, or CI-style integration. Even there, repeat the boundary: -review happens after a change exists and remains advisory; checks do not enter -generation context. diff --git a/apps/docs/.ghost/exemplar.docs-site.md b/apps/docs/.ghost/exemplar.docs-site.md new file mode 100644 index 00000000..db28687f --- /dev/null +++ b/apps/docs/.ghost/exemplar.docs-site.md @@ -0,0 +1,15 @@ +--- +description: Gather when translating the ghost visual expression into another surface or medium and inspect the complete source expression. +materials: + - apps/docs/src/app/page.tsx + - apps/docs/src/components/docs/hero.tsx + - apps/docs/src/components/docs/docs-page-layout.tsx + - apps/docs/src/components/docs/gather-demo.tsx + - apps/docs/src/styles/marked-doc.css +--- + +The current docs site is the complete source expression for this package. Read it for the relationships stated in `principles`, `composition`, `visual-system`, and `mark`, not for content to copy. Treat `marked-doc.css` and the rendered components as authoritative for this expression; Vessel supplies underlying utilities but its default palette, typography, radius, and elevation are deliberately overridden. + +Incidental qualities include the exact thesis, section names, section count, examples, commands, product claims, route count, React component boundaries, and the precise content of the triptych and gather demonstration. Unused components and visual experiments are not evidence. + +A new expression need not resemble a documentation page. Preserve the relationship between margin and column, quiet type and explicit structure, neutral field and meaningful mark, prose width and evidence width, and square internal divisions inside flat squircle cards. diff --git a/apps/docs/.ghost/exemplar.home-thesis.md b/apps/docs/.ghost/exemplar.home-thesis.md deleted file mode 100644 index d9bac5e6..00000000 --- a/apps/docs/.ghost/exemplar.home-thesis.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -description: Annotated home-page thesis exemplar — match this form when writing high-level ghost narrative or landing copy. -materials: - - apps/docs/src/app/page.tsx - - apps/docs/src/components/docs/hero.tsx ---- - -The current home page is normative for argument shape, restraint, and visual -pace. - -What to match: - -- **Tiny hero, huge word.** The hero does not explain the whole product. It says - "ghost" at wordmark scale and gives one sentence of context. That restraint is - the brand move. -- **Editorial thesis cadence.** The thesis unfolds in paragraphs, not a grid of - benefits. It trusts the reader to follow a serious idea. -- **Interaction over architecture.** The copy shows the agent finding and using - applicable guidance. Name commands when they clarify that interaction, not to - make the CLI the protagonist. -- **Selective emphasis.** Foreground text highlights only the load-bearing model - phrase. Do not bold every important sentence. -- **Haunted restraint.** The concentric circles are spectral and low-opacity; - they make the page feel like ghost without becoming decoration the prose must - fight. - -Do not copy incidentals: the exact paragraph count, current CLI ordering, and the -word "UI" in the opening line can change as the product positioning evolves. -Preserve the structure: one stark sign, one serious argument, then routes into -the docs. diff --git a/apps/docs/.ghost/glossary.md b/apps/docs/.ghost/glossary.md index 5459ea02..5c2c1e15 100644 --- a/apps/docs/.ghost/glossary.md +++ b/apps/docs/.ghost/glossary.md @@ -1,53 +1,20 @@ --- kinds: - - name: principle - - name: condition - name: pattern - name: exemplar - name: anti-goal - - name: asset - - name: decision - - name: voice --- -# principle - -Durable stance, tradeoff, or invariant. Principles are always-on unless a -narrower condition explicitly limits them; patterns may narrow principles, never -loosen them. - -# condition - -Situational guidance. Use only when the stated situation holds, and do not treat the -condition as a destination bucket. - # pattern -Reusable page, component, motion, or content composition. A pattern says when it -applies, what is bound, what is open, and which principle it refines. +Conditional composition or behavior. Pull it only when the description names a situation present in the task. A pattern states what is bound and what remains open. # exemplar -Concrete reference for form, rhythm, quality, code shape, voice, or behavior. -Match the annotated qualities; do not copy incidental details. +Concrete source expression to inspect when translating the brand. Match annotated relationships; do not copy incidental content or implementation. # anti-goal -Rejected default, neighboring style, generic generated pattern, or plausible -wrong answer. Always-on like a principle, but phrased as the thing to steer away -from. - -# asset - -Material guidance about concrete tokens, components, type, motion, canvases, docs, -copy, code, or files. `materials` locates; prose explains what the files mean. - -# decision - -Worked tradeoff trace: what was chosen, what was rejected, why, and when that -choice would reverse. - -# voice +Rejected visual default paired with its replacement and a way to recognize the difference. Pull before creating or substantially changing a visual expression. -Language and naming guidance: the product vocabulary, cadence, metaphor, and copy -boundaries that make the docs sound like ghost rather than generic SaaS docs. +Bare nodes hold global guidance. Their lack of a kind prefix does not make them automatically selected; their descriptions state their universal scope. The manifest cover remains the only node placed into context automatically. diff --git a/apps/docs/.ghost/index.md b/apps/docs/.ghost/index.md deleted file mode 100644 index 5d2cfe2d..00000000 --- a/apps/docs/.ghost/index.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -description: Always read first for docs-site work — non-negotiables, coverage, and silence posture for the ghost docs surface. -materials: - - apps/docs/src/app/page.tsx - - apps/docs/src/content/docs/*.mdx - - apps/docs/src/components/docs/** ---- - -This ghost package governs ghost's public explanation: the root and package -READMEs, landing page, documentation index, MDX docs pages, and the small -components that carry them. -It does not govern Vessel as a reference component registry; Vessel has its own -ghost package under `packages/vessel-react/.ghost/`. When the docs consume Vessel -materials, this package decides the docs' product stance and Vessel decides -the component-system contract. - -## Non-negotiables - -- ghost is **brand context for agents**, not a component library, lifecycle - manager, design archive, or autonomous judge. Keep the docs centered on the - main interaction: the agent reads repo-local brand guidance before it builds. -- Preserve the flat corpus model: `.ghost/` is a package of prose nodes; - `manifest.yml`, `glossary.md`, and `checks/` are reserved; everything else is - a node whose id comes from its filename. No hierarchy, inheritance, graph, or - edge language. -- The page should feel like a serious tool, not a SaaS explainer template: - monochrome, restrained, typographic, with precise motion and only one - memorable visual gesture at a time. -- Concrete command names matter. Use `ghost init`, `ghost validate`, - `ghost gather`, `ghost pull`, `ghost pulse`, `ghost checks init`, and - `ghost review` exactly unless the CLI changes and the generated manifest has - been updated. -- Do not let optional review language obscure the main interaction: checks and - review happen after a change exists, remain advisory, and never become - generation input. - -## How to read the corpus - -Read `principle.product-model`, `principle.visual-composition`, and -`voice.docs-language` for broad docs work. Pull `asset.docs-materials` before -changing UI, tokens, routes, MDX layouts, or command examples. Pull -`pattern.docs-index-card-grid` for card-index pages and `pattern.doc-article` -for MDX documentation pages. Pull `anti-goal.generated-docs-site` before any new -visual or marketing surface. - -The `decision.*` nodes explain tradeoffs; they are not permanent rules unless a -principle or pattern repeats them. `exemplar.*` nodes show how an existing page -pulls off the stance; match the annotated qualities, not every literal detail. - -## Silence posture - -When this package is silent, proceed provisionally from nearby docs pages and -Vessel's token/component contract for routine implementation. Ask before -changing product model vocabulary, introducing new visual metaphors, adding a new -agent workflow, or making the docs sound more like marketing than instruction. diff --git a/apps/docs/.ghost/manifest.yml b/apps/docs/.ghost/manifest.yml index 266b52ab..6e5300d0 100644 --- a/apps/docs/.ghost/manifest.yml +++ b/apps/docs/.ghost/manifest.yml @@ -1,2 +1,3 @@ schema: ghost.package/v1 -id: local +id: ghost-visual-brand +cover: brand diff --git a/apps/docs/.ghost/mark.md b/apps/docs/.ghost/mark.md new file mode 100644 index 00000000..10b08343 --- /dev/null +++ b/apps/docs/.ghost/mark.md @@ -0,0 +1,16 @@ +--- +description: "Global rule for the yellow mark: it records selection, intervention, or active choice and never acts as general decoration." +materials: + - apps/docs/src/styles/marked-doc.css + - apps/docs/src/components/docs/gather-demo.tsx +--- + +Yellow behaves like a highlighter touching the document. It appears where a person or system has selected, picked, or actively changed something. + +Use the full mark for committed state: selected text, a pressed choice, or a picked row. Use the soft mark only as a preview of that same action, such as hover. Keep ordinary titles, links, rules, diagrams, and large background fields in the neutral system. + +The mark must remain scarce enough that each occurrence reads as evidence of an action. If yellow can be removed without losing state meaning, its use was decorative. + +**Do:** mark the exact row or control whose state changed. + +**Don't:** use yellow to make a hero louder, color an arbitrary keyword, fill an illustration, or establish a second background theme. diff --git a/apps/docs/.ghost/pattern.doc-article.md b/apps/docs/.ghost/pattern.doc-article.md deleted file mode 100644 index 7d0b52a0..00000000 --- a/apps/docs/.ghost/pattern.doc-article.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -description: MDX documentation article structure — use for guide pages, conceptual docs, CLI docs, authoring docs, and checks/review docs. -materials: - - apps/docs/src/content/docs/*.mdx - - apps/docs/src/components/docs/docs-page-layout.tsx - - apps/docs/src/components/docs/doc-prose.tsx - - apps/docs/src/mdx-components.tsx ---- - -This pattern applies when the surface teaches a workflow or model in MDX. - -**Bound:** - -- The page is organized as `DocSection` rows, not a freeform prose blob. Section - titles sit in the left column on large screens; the content column carries the - explanation. -- Each section should answer one job: problem, action, model, validation, or - caveat. Do not make section titles decorative. -- Code examples are short and runnable-looking. Prefer exact commands over - pseudo-code; if a command is illustrative, say so in prose. -- Frontmatter carries the route-level promise: title, description, kicker, - section, order, slug. The visible body should satisfy that promise quickly. -- `Callout` is reserved for adoption shortcuts, beta caveats, warnings, or - boundaries that change user behavior. It is not a decoration block. -- Long conceptual paragraphs are allowed, but every abstract claim should be - anchored soon after with a filename, command, or node example. - -**Open:** - -- A page may start with a first-win shortcut when the full model is too heavy for - a new user. -- Tables are appropriate for matrices, command summaries, and property - definitions; lists are better for workflow steps and invariants. -- Exact section order may vary, but the path should move from user's pain to - concrete action before deep model explanation. - -**Refines:** `principle.product-model`, `principle.visual-composition`, and -`voice.docs-language`. If an article explains the schema accurately but does not -make the user's next agent instruction obvious, it has missed the docs product. diff --git a/apps/docs/.ghost/pattern.docs-index-card-grid.md b/apps/docs/.ghost/pattern.docs-index-card-grid.md deleted file mode 100644 index c97d9565..00000000 --- a/apps/docs/.ghost/pattern.docs-index-card-grid.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -description: Docs index rows — use for /docs and other routing pages that point users to a small set of next reads. -materials: - - apps/docs/src/app/docs/page.tsx - - apps/docs/src/components/docs/doc-index.tsx - - apps/docs/src/components/docs/page-header.tsx ---- - -This pattern applies when a page routes readers to a small set of next steps. - -**Bound:** - -- Start with `PageHeader`: a blunt title and only the description needed to - orient the reader. -- Use low-count `DocIndex` rows with numbered names and one short description. -- Route copy explains what the reader can do at the destination. Prefer "Exact - commands, flags, outputs, and exit behavior" over feature language. -- Keep rows typographic. Do not add icons, screenshots, badges, or decorative - cards to make a short index feel fuller. - -**Open:** - -- Row count and ordering may change with the docs IA. -- Sections may split the index when they reflect a real difference in reader - intent, such as learning versus reference. - -**Refines:** `principle.visual-composition` and `voice.docs-language`. If the -index needs ornament or paragraph-long descriptions to feel useful, improve the -information structure. diff --git a/apps/docs/.ghost/pattern.landing-thesis.md b/apps/docs/.ghost/pattern.landing-thesis.md deleted file mode 100644 index 9d71f33f..00000000 --- a/apps/docs/.ghost/pattern.landing-thesis.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -description: Home-page thesis structure — use when editing the landing page, hero, thesis section, or product narrative above the docs index. -materials: - - apps/docs/src/app/page.tsx - - apps/docs/src/components/docs/hero.tsx - - apps/docs/src/components/docs/cycloid-canvas.tsx ---- - -The home page is an argument, not a feature tour. It should make one memorable -claim about why ghost exists and then let the docs carry the details. - -**Bound:** - -- Hero: one wordmark-scale title, one restrained sentence. The ghost rings can - supply atmosphere; do not add a second hero illustration or product screenshot. -- Thesis: centered longform column around `62ch`, muted body copy, with only a - few foreground highlights for key model words. The rhythm is editorial, not - sales-led. -- The story moves from problem to model to loop to payoff: agents can assemble - UI, but not preserve brand guidance; ghost captures flat prose nodes; the agent - gathers and pulls them; review makes drift visible. -- Lists should clarify the model. If a list reads like benefits marketing, - rewrite it as artifacts and mechanics. -- End with a transfer claim: a brand guidance that cannot be recalled or reviewed - against cannot be delegated. - -**Open:** - -- The exact thesis paragraphs may evolve with the product language. -- A single additional visual system can be introduced only if it sharpens the - argument and displaces an existing gesture rather than stacking on top. - -**Refines:** `principle.product-model`, `principle.visual-composition`, and -`voice.docs-language`. diff --git a/apps/docs/.ghost/pattern.motion.md b/apps/docs/.ghost/pattern.motion.md new file mode 100644 index 00000000..5190c607 --- /dev/null +++ b/apps/docs/.ghost/pattern.motion.md @@ -0,0 +1,16 @@ +--- +description: Gather when anything moves, transitions, reveals in sequence, or changes position or emphasis. +materials: + - apps/docs/src/components/docs/gather-demo.tsx + - apps/docs/src/styles/marked-doc.css +--- + +Motion must leave the reader with more evidence than they had before it began. The current expression has no shared duration or easing scale, so do not infer one from an incidental component interval or framework default. + +Reveal a sequence when order matters. Change emphasis when a choice has been made. Move an element only when its new position explains a structural change. Prefer short, direct transitions without spring, bounce, drift, or theatrical easing. + +The static composition must remain complete. Under `prefers-reduced-motion`, reveal the final state immediately and preserve every distinction through text, weight, border, or color. + +**Do:** reveal selected and skipped rows in reading order after a person chooses a task. + +**Don't:** animate rules, headings, backgrounds, or decorative geometry to keep a quiet surface in motion. diff --git a/apps/docs/.ghost/pattern.specimen.md b/apps/docs/.ghost/pattern.specimen.md new file mode 100644 index 00000000..005a2041 --- /dev/null +++ b/apps/docs/.ghost/pattern.specimen.md @@ -0,0 +1,33 @@ +--- +description: Gather when a reader needs to inspect an example, table, code sample, comparison, palette, diagnostic, or interactive result. +materials: + - apps/docs/src/app/page.tsx + - apps/docs/src/components/docs/gather-demo.tsx + - apps/docs/src/styles/marked-doc.css +--- + +Use a specimen when the reader needs to inspect the thing itself rather than receive another paragraph about it. + +## Anatomy + +1. **Shell:** one flat outlined squircle, normally no wider than `76ch`. +2. **Caption:** annotation-colored context with `0.5rem` vertical and `2ch` horizontal inset, divided from the body by one hairline. +3. **Rows:** a bold key beside primary evidence. The key column ranges from `14ch` to `20ch`; the value column takes the remaining width. Use a `2ch` gutter and `0.625rem 2ch` row inset. +4. **Divisions:** square hairlines separate rows inside the shared squircle. Internal content does not repeat the outer radius. +5. **State:** apply the mark to the exact row or control that changed. Supporting explanations may use annotation color, but the state must remain explicit in text. + +## Bound + +- Let literal material remain literal: filenames look like filenames, code like code, values like values, and state labels like state labels. +- Use bold for keys, ink for primary evidence, and annotation color for captions or supporting explanation. +- Keep one shell around one inspectable object. Avoid nested cards, decorative headers, tonal lift, and shadow. +- If the specimen is interactive, state both the available choice and its result. Follow the state roles in `visual-system` and the meaning of yellow in `mark`. + +## Open + +- A specimen may stay within the reading column, widen to a comparison field, or become a responsive stack. +- Rows may become a single vertical flow when key and value no longer remain legible side by side. +- Related specimens may form a three-column comparison with a `1ch` gap. The group may expand to `120ch` or the viewport minus `4ch`, whichever is smaller, then collapse to one column when simultaneous comparison stops helping. +- A palette may subdivide a specimen into equal swatches, but the swatches demonstrate material; they do not introduce extra brand colors. + +Width is earned when side-by-side inspection reduces cognitive work. A single short fact should not break the prose measure just to create visual variety. After a wide specimen, return the eye to the main column. diff --git a/apps/docs/.ghost/principle.product-model.md b/apps/docs/.ghost/principle.product-model.md deleted file mode 100644 index f904f9db..00000000 --- a/apps/docs/.ghost/principle.product-model.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -description: Core ghost product model — gather for docs copy, IA, onboarding, diagrams, workflow explanations, or any statement of what ghost is. -materials: - - README.md - - packages/ghost/README.md - - apps/docs/src/app/page.tsx - - apps/docs/src/content/docs/getting-started.mdx - - apps/docs/src/content/docs/authoring.mdx - - apps/docs/src/content/docs/checks-and-review.mdx - - packages/ghost/src/commands/** ---- - -ghost gives agents applicable, repo-local brand guidance before they make. The -docs should keep three roles clear: - -- **The `.ghost/` package holds the guidance.** It keeps brand decisions and - concrete materials with the work. -- **The agent authors and uses it.** The agent reads, selects, interprets, - applies, and judges. ghost is BYOA, not an autonomous designer. -- **The CLI supports the interaction.** It performs repeatable work: scaffold, - validate, gather the menu, pull selected nodes, summarize local events, and - assemble review evidence. -- **Guidance before review.** Give the agent applicable guidance before it - builds. Review is useful after a change exists, but it is not the headline. -- **Flat node corpus.** A ghost package is a flat `.ghost/` package of markdown - prose nodes. Kinds come from filename prefixes declared in `glossary.md`. - Altitude lives in prose; narrower guidance names their condition. Do not describe - folders, inheritance, edge traversal, or schema fields as the conceptual model. -- **Guidance matters through use.** A node helps only when an agent can find it, - read it, and apply it. Keep descriptions and command examples close to - abstract claims. -- **Git is the approval boundary.** Uncommitted ghost package edits are drafts; - checked-in node prose is canonical through normal review. - -When the docs must choose between theoretical completeness and a simple first -win, the first win wins. The canonical onboarding story is: write the decision -you keep repeating once, put it in `.ghost/`, gather it before generation, and -review drift after the diff. diff --git a/apps/docs/.ghost/principle.visual-composition.md b/apps/docs/.ghost/principle.visual-composition.md deleted file mode 100644 index f338d2bc..00000000 --- a/apps/docs/.ghost/principle.visual-composition.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -description: Visual composition floor for the docs site — gather before changing landing pages, headers, cards, navigation, motion, or layout rhythm. -materials: - - apps/docs/src/app/page.tsx - - apps/docs/src/app/docs/page.tsx - - apps/docs/src/components/docs/** - - packages/vessel-react/src/styles/main.css ---- - -The ghost docs site should render like a stark technical artifact with one -controlled spectral move, not a generic docs template. - -Hard floor: - -- **Monochrome carries authority.** Default to background, foreground, muted, - border, and card roles. Color is rare and semantic; never invent a product - accent for excitement. -- **Typography is the hero.** Large display type, tight tracking, uppercase - kickers, and generous line-height do most of the branding. If a page needs - impact, increase type hierarchy or negative space before adding illustration. -- **One memorable visual gesture per surface.** The landing page can have the - concentric ghost rings. A docs index can have card underlines. A prose page can - have sticky section labels. Do not stack rings, gradients, decorative blobs, - screenshots, and animated cards on the same surface. -- **Flat before elevated.** Reach for whitespace, alignment, rule lines, and - border-card before shadows or heavy containers. The floating dock is the main - elevated object; new elevation must earn its presence. -- **Motion reveals structure.** Use motion to stage reading order or clarify a - state change. Avoid ambient decoration, bounce, springiness, or motion that - competes with the text. -- **Density is editorial.** Docs pages should feel sparse at the frame level but - precise inside the prose. Long text belongs in the MDX article system; landing - pages should have short thesis blocks and strong scannable routes. - -When a pattern conflicts with this floor, the floor wins and the pattern is -wrong. When Vessel tokens make a choice available but this floor rejects the -output, choose the docs package. diff --git a/apps/docs/.ghost/principles.md b/apps/docs/.ghost/principles.md new file mode 100644 index 00000000..26b750c7 --- /dev/null +++ b/apps/docs/.ghost/principles.md @@ -0,0 +1,31 @@ +--- +description: Global visual principles for every ghost expression, independent of surface, medium, or implementation. +materials: + - apps/docs/src/app/page.tsx + - apps/docs/src/components/docs/docs-page-layout.tsx + - apps/docs/src/styles/marked-doc.css +--- + +## Make structure visible + +Expose organization through placement, numbering, labels, captions, rules, and material hierarchy. Do not hide the reading path inside decorative containers or conventional product chrome. + +When a familiar UI device competes with a document device, choose the document device: a label can orient without a tab; a rule can divide without another card; a caption can establish context without a toolbar; a marked row can show state without a badge. + +## Establish hierarchy quietly + +Use position, measure, whitespace, weight, and rules before increasing type scale or adding another typeface. Titles name the surface; they do not need to dominate it. Bold is structural punctuation, not general emphasis. + +## Keep evidence close to the claim + +Prefer the literal material over an illustration of the idea. Show the value, file, comparison, state, or result where a reader can inspect it. Ornament does not substitute for evidence. + +## Leave the field active + +Open space is part of the composition, not an unfinished region. Do not balance a quiet field with ornamental imagery, extra navigation, or content added only to fill it. + +## Keep objects flat and inspectable + +Let borders and internal divisions organize content. Do not use shadow, tonal lift, nested shells, or mixed radius families to manufacture hierarchy. + +These principles are global. The docs site is their current source expression, not their boundary. diff --git a/apps/docs/.ghost/visual-system.md b/apps/docs/.ghost/visual-system.md new file mode 100644 index 00000000..3c473810 --- /dev/null +++ b/apps/docs/.ghost/visual-system.md @@ -0,0 +1,93 @@ +--- +description: Global visual foundation for color, typography, spacing, shape, elevation, interaction, and accessibility. +materials: + - apps/docs/src/styles/marked-doc.css + - apps/docs/src/styles/docs.css + - apps/docs/src/components/docs/docs-page-layout.tsx + - apps/docs/src/components/docs/gather-demo.tsx +--- + +The docs site is the living source for these values. Preserve their roles when translating the expression to another medium. The docs-local roles override Vessel's type, color, radius, and shadow defaults; do not inherit those underlying defaults back into this expression. + +## Color + +| Role | Token | Light | Dark | Use | +| --- | --- | --- | --- | --- | +| field | `--doc-bg` | `#FFFFFF` | `#121210` | primary background | +| ink | `--doc-text` | `#16150F` | `#E8E6DD` | text, strong borders, and active controls | +| annotation | `--doc-middle` | `#6F6D64` | `#A4A196` | captions, numbers, and secondary explanation | +| rule | `--doc-line` | `#D9D7CF` | `#3A3932` | hairlines, frames, and inactive control borders | +| mark | `--doc-mark` | `#F4E97B` | `#D8CC4F` | committed selection or active choice | +| soft mark | `--doc-mark-soft` | `#FAF5C8` | `#3A3722` | hover preview or selected field background | +| on mark | `--doc-on-mark` | `#16150F` | `#16150F` | text on the full mark | + +Ink on the field is `18.29:1` in light mode and `15.00:1` in dark. Annotation on the field is `5.19:1` and `7.25:1`. On-mark text against the full mark is `14.62:1` in light mode and `11.03:1` in dark. Preserve at least WCAG AA contrast when adapting the roles. + +Do not promote unused inherited semantic values into the brand palette. A token becomes part of this system when a rendered expression gives it an intentional role. + +## Typography + +Use `ui-monospace, "SF Mono", "Cascadia Code", Menlo, Consolas, monospace` for every role. Tracking remains normal unless literal material requires otherwise. + +| Role | Size / line height | Weight | Treatment | +| --- | --- | --- | --- | +| product sign or page title | `24px / 32px` | `400` | lowercase, isolated at the opening, never a billboard | +| section title | `13px / 20px` | `700` | lowercase, paired with a muted number or annotation in the margin | +| body | `13px / 20px` | `400` | one narrow reading column, normally no wider than `54ch` | +| subhead | `13px / 20px` | `700` | lowercase, within the reading column with space above | +| annotation or caption | `13px / 20px` | `400` | muted and attached closely to what it explains | +| row key | `13px / 20px` | `700` | names the evidence in the adjacent value column | +| code, path, or literal value | `13px / 20px` | role-dependent | remains in the mono register rather than becoming a separate visual genre | + +The body does not become secondary through low contrast. Annotation is muted but readable. Bold is structural punctuation, not general emphasis. When stronger hierarchy is needed, first change position, measure, whitespace, weight, or rule placement. Increase type scale only after those moves fail. + +## Composition and spacing + +| Role | Reference value | Behavior | +| --- | --- | --- | +| minimum viewport | `320px` | preserve legibility and horizontal containment at and above this width | +| page opening | `4rem` | space from the viewport top to the product sign | +| horizontal inset | `2ch`; `4ch` from `40rem` | follows the monospace rhythm | +| prose measure | `54ch` maximum | keeps the main argument narrow even when more width exists | +| label column | `9rem`; `12rem` from `64rem` | becomes the left marginal column on wide screens | +| section content column | `27rem`; `36rem` from `64rem` | carries prose and ordinary figures | +| label/content gap | `2rem` | separates marginal orientation from the reading path | +| major section padding | `3rem` vertical | gives each numbered step its own field | +| paragraph stack | `1rem` | maintains a compact but readable prose rhythm | +| ordinary figure margin | `2rem` vertical | separates evidence from the surrounding argument | + +At `64rem` and above, labels occupy the left column and may remain sticky while the adjacent content scrolls. Below that point, labels return to normal flow above the content. Rich material may exceed the content column only when the additional width improves inspection; responsive collapse should happen when the content no longer sustains simultaneous columns, not to satisfy a generic device taxonomy. + +Use character units where spacing should follow the mono rhythm and rem units where spacing describes the larger composition. + +## Shape and elevation + +Page structure and internal divisions remain square. Cards and self-contained controls use a `12px` radius, or `14px` with `corner-shape: squircle` where supported. All inherited radius roles outside this explicit squircle are reset to `0` and all shadows to `none`. Rules are `1px`. + +The squircle is the card silhouette. Do not mix it with pill cards, floating tiles, tonal lift, nested shells, or competing radius families. + +## Control states + +The prompt control is the reference state model for selectable controls. + +| State | Border | Text | Background | +| --- | --- | --- | --- | +| default | rule | ink | transparent | +| hover or choice preview | ink | ink | soft mark | +| pressed or selected | ink | on mark | full mark | +| focus-visible | retain current state, then add a `1px` current-color outline with `2px` offset | unchanged | unchanged | +| disabled, error, destructive | `TBD` | `TBD` | `TBD` | + +Do not invent unspecified states from Vessel defaults. When a new state is needed, design and ratify it before adding it to the closed set. + +## Accessibility + +- Selection uses on-mark text against the full mark. +- State is never communicated by color alone. Selected and skipped rows also carry explicit text. +- Toggle-like choices expose pressed state semantically; changing result regions announce updates without interrupting the reader. +- Focus remains visible on every background and stacks over hover or selected state rather than replacing it. +- Under reduced-motion preference, CSS transitions collapse and sequential reveals present their final state immediately. + +**Do:** distinguish title, section, state, and evidence through composition and semantic roles. + +**Don't:** introduce a display serif, giant headline, uppercase kicker, gradient text, shadow hierarchy, or undocumented state color to manufacture distinction. diff --git a/apps/docs/.ghost/voice.docs-language.md b/apps/docs/.ghost/voice.docs-language.md deleted file mode 100644 index f0c239f7..00000000 --- a/apps/docs/.ghost/voice.docs-language.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -description: ghost docs voice and vocabulary — gather before writing docs copy, headings, onboarding text, CLI examples, or product explanations. -materials: - - apps/docs/src/content/docs/*.mdx - - apps/docs/src/app/page.tsx - - apps/docs/src/app/docs/page.tsx - - README.md - - packages/ghost/README.md ---- - -ghost docs should sound like an opinionated tool builder explaining a sharp -model, not like a launch page selling a platform. - -Voice rules: - -- Lead with the user's repeated pain: the same review comment, the same drift, - the same missing decision. Then show the small move ghost makes possible. -- Put the agent interaction first: the `.ghost/` package holds guidance, the - agent selects and applies it, and the CLI handles repeatable support work. - Name CLI mechanics only when they help someone use or understand a command. -- Use concrete artifact names: `.ghost/`, `manifest.yml`, `glossary.md`, the - manifest-declared cover, `checks/`, `ghost gather`, `ghost pull`. The docs earn - trust by naming the files and commands agents actually touch. -- Say **ghost**, **`.ghost/` package**, **brand guidance**, **node**, - **kind**, and **materials** consistently. Use **review evidence** when the - packet format itself is not relevant. Do not introduce synonyms such as brand - DNA, style cache, design brain, magic layer, or guardrail engine. -- Prefer direct explanations of what happens before and after making. Reserve - terms such as **feed-forward**, **feed-back**, and **deterministic** for - technical passages where the distinction changes behavior. -- Keep the claim plain when the idea is abstract. A good ghost sentence should - make a wrong implementation less likely, not merely sound clever. -- Use contrast only when it prevents a real misunderstanding. Do not stack - "X, not Y" constructions or end sections by restating the point as an - aphorism. -- Name the actor. Humans author and approve guidance; agents interpret and make; - CLI commands return menus, nodes, validation results, and review evidence. -- Do not use em dashes. - -Copy anti-patterns: - -- Do not turn architecture into a slogan. Avoid declaring that the package, - packet, CLI, or ghost itself "is the product," and avoid courier, machinery, - engine, or layer metaphors in user-facing explanations. -- Do not leak implementation names such as Skeletons, event tapes, cliche floors, - or signature dials before the docs define them. -- No "unlock," "supercharge," "seamless," "delightful," "AI-powered," or - "world-class" filler. -- No exclamation points in instructional copy. -- No anthropomorphizing ghost as the judge, designer, or author. The agent - interprets the guidance and makes the work; CLI commands supply menus, nodes, - validation results, and review evidence. -- No broad promises that ghost preserves a whole brand automatically. It only - preserves what the selected guidance makes readable and reviewable.