This is the snapshot the production landing site (nibiru-framework.com) is deployed from. Brings together the recent splash + docs migration to the v4 "Cosmos" design system, the new in-framework AI module, and the framework groundwork that backs the framework-reference extraction. What lands: - docs/: Astro + Starlight site with the v4 dark cosmic palette, GalaxyHero canvas constellation, Mission Control chat (wired to /api/oracle → api.neuronetz.ai via providers.mjs Ollama), 5-panel MMVC stage (Model · AI · Module · Controller · View), translated EN/DE/JA/ES/FR content, PWA + sitemap + llms.txt + Umami analytics. - docs/design-system/: canonical mockup bundle (source/index-v2.html for splash, source/docs-system.html + preview/ for docs, SPEC.md, tokens). - docs/scripts/extraction/framework-reference-v2.md: deep framework reference (~1.6k lines, file:line citations, every public factory and idiom — basis for the LoRA training corpus. - application/module/ai/: AI module with chat / embed / RAG / agent plugins, plus pdoQuery / httpGet / fileRead tools and Modelfile + smoke-test in training/. - application/module/users/: user / ACL / form-factory traits used as the reference plugin pattern for the framework docs. - application/settings/config/database/: schema + seed migrations including the AI module tables (200–203). - Form factory + autogenerator changes the framework-reference-v2 covers. Production secrets stay out: docs/.env, settings.production.ini and ai.production.ini are all gitignored (.example files are in tree). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
21 KiB
Handoff: Nibiru Docs Design System
Overview
This handoff covers the Nibiru documentation site redesign — a cosmic-themed, dark-primary design system for the framework's docs portal. It includes a complete component library (navigation, code blocks, callouts, tables, API references, search modal, 404, etc.) plus a working full-page preview of the "What is Nibiru?" article styled with the new system.
The metaphor carried throughout: Nibiru is a star map. The framework's MMVC architecture (Model · Module · View · Controller) is a constellation, and the docs adopt the same atmospheric vocabulary — deep cosmic plum backgrounds, magenta/cyan/amber accents echoing nebula colors, terminal-aesthetic code blocks, and subtle galaxy textures behind content.
A companion start page (index-v2.html) is included for context — it's the marketing site this docs design extends.
About the Design Files
The files in this bundle are design references created in HTML — interactive prototypes showing intended look, behavior, and layout. They are not production code to copy directly.
Your task is to recreate these designs in the Nibiru docs site's actual environment (likely a static-site generator like Nextra, Mintlify, Docusaurus, or VitePress, given the original screenshot's nav structure), using whatever templating, theming, and component patterns that environment provides. The HTML/JSX in this bundle uses React + Babel inline as a fast prototyping medium — your real implementation should use your stack's idioms.
If no docs framework has been chosen yet, Nextra (with the docs theme) or Mintlify are good fits — both support exactly this kind of three-column layout (sidebar + content + on-this-page TOC) with custom theming hooks.
Fidelity
High-fidelity. All colors, typography, spacing, border radii, shadows, and component states are final. Treat the hex values, font sizes, and CSS tokens in tokens.css as the source of truth.
The single open question is how dark/light theme switching is wired — the prototype uses a .theme-light class on a wrapper element, but your stack may prefer data-theme attributes or CSS color-scheme.
Screens / Views
The design canvas in source/docs-system.html shows every component grouped into reviewable sections. The full-page preview is the most important reference — it shows how everything composes.
1. Full Page Preview ("What is Nibiru?")
Purpose: Recreate the documentation article from the original screenshot in the new design system.
Layout: Three-column grid, full viewport height.
- Top nav: 60px tall, sticky,
backdrop-filter: blur(16px), semi-transparent background. - Main grid:
grid-template-columns: 280px 1fr 240px(sidebar / content / TOC). - Content column:
max-width: 760px, centered within its track, padding32px 48px.
Components used: TopNav · Sidebar · PageHeader · Prose body · DocTable · Callout · Pagination · RightTOC
2. Top Nav
Purpose: Brand mark, search, GitHub link, theme toggle, locale picker.
Layout: grid-template-columns: 240px 1fr auto, gap 32px, padding 0 24px, height 60px.
Components:
- Brand: Lotus PNG (36px tall) + "Nibiru" (17px / 600) + "Create, Invent, Impress" tagline (10px muted, lowercase).
- Search button: Pill-shaped, 420px max-width, centered.
background: var(--space-2),border: 1px solid var(--line), contains search icon + "Search" placeholder +⌘ Kkbd badge. Hover: brighten background. - Right cluster: GitHub icon (36×36), theme toggle (sun/moon), locale dropdown ("EN ▾"). All 36×36 with hover background
var(--space-2).
3. Sidebar
Purpose: Sectioned navigation with collapsible groups and active-page indication.
Layout: 280px wide, padding 24px 12px 24px 24px, border-right: 1px solid var(--line), faint background tint rgba(11,4,16,0.4).
Sections: "Get Started" / "The Framework" / "CLI" / "Advanced" — each a collapsible group with a chevron that rotates 0deg/-90deg.
Section heading: 11px JetBrains Mono, 0.12em letter-spacing, uppercase, muted color.
Items: 13.5px, padding 6px 10px, border-radius 8px. Hover: background var(--space-2). Active state has a magenta gradient background (linear-gradient(90deg, rgba(184,107,255,0.18), rgba(184,107,255,0.04))) and a 3px magenta indicator bar with a glow shadow on the left edge.
Badges: core (magenta tint) and new (green tint), 9px JetBrains Mono uppercase.
4. Right TOC ("On this page")
Layout: 240px wide, padding 24px 16px 24px 24px.
Heading: 11px JetBrains Mono uppercase muted.
List: border-left: 1px solid var(--line), items 13px with 12px padding-left. Active item: magenta text + magenta 2px left border (replacing the 1px line border at that position).
Sub-items (level 2): Indented 24px, 12.5px, more muted.
Footer: "Edit this page" link with pencil icon.
5. Page Header
Layout: margin-bottom: 32px, padding-bottom: 24px, border-bottom: 1px solid var(--line).
Breadcrumbs: 11px JetBrains Mono uppercase, separated by /. Last crumb is brighter.
Title: 36px / 600 / -0.025em letter-spacing.
Summary: 18px, color var(--star-soft), max-width 60ch.
Last-updated meta: 11px JetBrains Mono with a 6px green dot (with green glow shadow).
6. Body Prose
Base: 16px / 1.7 line-height, color var(--star-soft).
h2: 28px / 600, with a 24px magenta gradient line above it (width: 24px; height: 1px; background: linear-gradient(90deg, var(--nebula-mag), transparent)). 40px top margin, 16px bottom margin.
h3: 22px / 600. 32px top, 12px bottom.
em: Restyled — color var(--nebula-mag-2), NOT italic.
Inline code: Monospace 0.86em, magenta-2 text on var(--space-2) with 1px line border, 4px radius, 1px 6px padding.
Blockquote: 2px magenta left border, 16px left padding, magenta gradient fade background.
ul markers: Magenta accent.
7. Code Block
Aesthetic: Mission-Control terminal — background: #0a0210, 12px radius, magenta gradient overlay (4% opacity, 135deg from top-left).
Header: padding: 8px 14px, border-bottom: 1px solid rgba(244,238,219,0.06), background: rgba(0,0,0,0.3).
- Three colored dots (rose, amber, green at 50% alpha — like macOS traffic lights but recolored to nebula palette).
- Filename in JetBrains Mono 11px.
- Language badge (10px JetBrains Mono uppercase, magenta text on transparent background with magenta border).
- Copy button on the right (changes to "Copied ✓" for 1.4s on click).
Body: 13px JetBrains Mono, 1.7 line-height, padding 16px 20px.
Syntax tokens (CSS classes already defined):
| Token | Class | Color |
|---|---|---|
| Keyword | .tk-kw |
#ff7ab8 rose |
| Class/type | .tk-cn |
#ffb574 amber |
| Function | .tk-fn |
#6ad9ff cyan |
| Variable | .tk-var |
#d8a8ff magenta |
| String | .tk-str |
#6ee7b0 green |
| Number | .tk-num |
#ffb574 amber |
| Namespace | .tk-ns |
muted cream |
| Comment | .tk-cm |
very muted, italic |
In production, hook these classes up to your syntax highlighter (Shiki, Prism, etc.) via a custom token theme.
8. Callouts (Note / Tip / Warning / Danger)
Layout: Flex row with 14px gap, 14px×18px padding, 8px radius, 1px colored border, tinted background (~6% alpha of the accent), radial gradient overlay at 5% opacity from top-left.
Glyph: 24×24 rounded with filter: drop-shadow(0 0 6px currentColor) for the cosmic glow.
Color mapping:
| Kind | Color | Hex |
|---|---|---|
| Note | Cyan | #6ad9ff |
| Tip | Green | #6ee7b0 |
| Warning | Amber | #ffb574 |
| Danger | Rose | #ff7ab8 |
Title: 13px / 600 in the accent color.
Body: 15px in var(--star-soft).
9. Tables
Layout: border: 1px solid var(--line), 8px radius, overflow: hidden.
Header: background: var(--space-2), padding 10px 16px, 11px JetBrains Mono uppercase muted.
Rows: padding: 12px 16px, 13.5px, dashed bottom border. Hover: background: rgba(184,107,255,0.04).
First column: Brighter (var(--star)), 500 weight, white-space: nowrap.
Inline <code>: Magenta-2 on var(--space-2).
10. Tabs
List: background: var(--space-2), padding 4px, 4px gap.
Trigger: 6px×14px padding, 13px / 500. Inactive: muted text. Active: bright text on var(--space-3), 1px magenta inset shadow at the top, sm shadow.
Use case: "PHP / SQL / YAML" code variants, "macOS / Linux / Windows" install instructions.
11. API Block
Container: padding: 18px 20px, 12px radius, gradient background (linear-gradient(180deg, var(--space-2), transparent)).
Signature: 14px JetBrains Mono on rgba(0,0,0,0.3) with line border, 8px radius. Highlights function name (cyan), arg names (magenta-2), types (amber). Punctuation muted.
Section labels: "Parameters" / "Returns" — 10px JetBrains Mono uppercase muted.
Param row:
- Name (13px JetBrains Mono magenta-2 / 500)
- Type pill (11px JetBrains Mono amber on amber-tinted bg)
- Optional
requiredpill (rose tint) - Optional
default: <code>...</code>(muted, with brighter code value) - Description (13.5px star-soft)
- Dashed bottom border between params
12. Cards / Feature Grid
Layout: grid-template-columns: repeat(2, 1fr), 14px gap.
Card: background: var(--space-2), 1px line border, 12px radius, 18px padding. Hover: border becomes magenta-tinted, lifts 2px, background brightens, top-right arrow icon fades in & slides into place.
Icon block: 36×36 rounded square with a custom gradient background per card (mag→rose, cyan→mag, amber→rose, green→cyan).
Title: 15px / 600. Description: 13px star-soft.
13. Search Modal (⌘K)
Container: 580px wide, 16px radius, background: var(--space-2), glow shadow (0 0 60px rgba(184,107,255,0.1)).
Sections:
- Input row (16px placeholder text, search icon,
esckbd badge). - "Recent" — pills (rounded,
var(--space-3)background). - "Results" — list with kind badges (page=magenta, section=cyan, api=amber), title with breadcrumb prefix, excerpt,
→indicator. Active result has a magenta left border and tinted bg. - Footer — kbd hints (
↑↓navigate ·↵open ·⌘Kclose) + "Powered by Nibiru Search".
Highlight matches: <mark> element gets background: rgba(184,107,255,0.3), no padding.
14. Pagination
Layout: Two-column grid, top border, 48px top margin.
Link card: background: var(--space-2), 1px border, 12px radius, padding 14px 18px. Two-line content: small "Previous"/"Next" label (10px JetBrains Mono uppercase muted) + 14px / 500 page title.
Hover: Border picks up magenta glow, bg brightens, chevron arrow translates ±3px.
15. Floating Action Button (Help)
Button: 52px circle, gradient linear-gradient(135deg, magenta, rose), 12px×32px shadow + inner white highlight.
Pulse ring: ::after pseudo-element animating from scale(1) → scale(1.4), opacity 0.7 → 0, infinite 2.4s.
Tooltip: Pops out to the left on hover (kept in DOM for review).
16. 404 / "Off-orbit"
Layout: Centered, 520px max-width.
Hero illustration: SVG with two dashed orbital ellipses around a bright central star (radial gradient white→amber→magenta-fade), and a cyan probe drifting off-orbit at the top-right with a "PROBE-404" callout label and a dashed line connecting it back to the star.
Code label: "404 / off-orbit" in 11px JetBrains Mono cyan.
Title: "This page drifted away from Nibiru." 28px / 600.
Actions: Primary button (magenta solid) + ghost button (line border).
17. Mobile Drawer
Container: 320px wide, 640px tall in the prototype (in real life: full viewport with slide-in animation).
Structure: Header (brand + close X) → search button → sidebar (full nav) → footer (Theme / EN / GitHub pills).
Interactions & Behavior
| Interaction | Trigger | Behavior |
|---|---|---|
| Theme toggle | Click sun/moon icon in nav | Add/remove .theme-light on root. Persist to localStorage. |
| Sidebar collapse | Click section heading | Toggle children visibility, rotate chevron 90°. Animate transform: rotate() 200ms ease. |
| Sidebar active | Current page | Apply .active class — magenta gradient bg + 3px magenta glowing left bar. |
| TOC active | Scroll position | Use IntersectionObserver on .prose h2[id] elements. Highlight matching TOC item. |
| Search open | ⌘K / Ctrl+K / click search button |
Open modal, focus input. Esc closes. ↑↓ navigates results, ↵ opens. |
| Code copy | Click "Copy" button | Copy to clipboard, swap to "Copied ✓" for 1400ms, then revert. |
| Tab switch | Click trigger | Update aria-selected, swap panel. No transition — instant. |
| Card hover | Pointer enter | transform: translateY(-2px), border magenta-tint, arrow fades in & translates. 200ms transitions. |
| Pagination hover | Pointer enter | Chevron translates ±3px in the direction of travel, border magenta. |
| FAB pulse | Always | 2.4s infinite ring animation. |
State Management
This is a docs site — most state is URL-driven (current page, anchor, search query). The minimum client state needed:
theme: "dark" | "light"(persisted tolocalStorage)sidebarOpen: boolean(mobile drawer)searchOpen: boolean(⌘K modal)expandedSections: Record<string, boolean>(sidebar collapse — defaults to "current section open")activeTocId: string(driven by IntersectionObserver, not user input)copyStateByBlock: Record<string, boolean>(per-block "Copied" flash — local component state is fine)
Design Tokens
All tokens live in source/docs-system/tokens.css. Copy this file into your codebase verbatim — it's the source of truth.
Colors (dark theme)
| Name | Hex | Use |
|---|---|---|
--space |
#0b0410 |
Page background |
--space-2 |
#120822 |
Panel surfaces |
--space-3 |
#1a0c2e |
Raised surfaces |
--plum |
#2a1545 |
Deep accents |
--plum-2 |
#3a1d5e |
Hover plum |
--star |
#f4eedb |
Primary text |
--star-soft |
#d8d2c0 |
Secondary text |
--muted |
#8b85a3 |
Tertiary / labels |
--muted-2 |
#5e5878 |
Very muted |
--nebula-mag |
#b86bff |
Primary accent · links |
--nebula-mag-2 |
#d8a8ff |
Hover / em |
--nebula-cyan |
#6ad9ff |
Note callout |
--nebula-amber |
#ffb574 |
Warning callout / numbers |
--nebula-rose |
#ff7ab8 |
Danger callout / keywords |
--nebula-green |
#6ee7b0 |
Tip callout / strings |
Light theme overrides
Defined under .theme-light in tokens.css — accent colors shift to higher-contrast equivalents (purple replaces magenta, teal replaces cyan) against a parchment #faf6ec background.
Type scale
| Token | px | Use |
|---|---|---|
--fs-xs |
12 | Tiny meta |
--fs-sm |
13 | UI |
--fs-base |
15 | Default |
--fs-md |
16 | Body prose |
--fs-lg |
18 | Page summary |
--fs-xl |
22 | h3 |
--fs-2xl |
28 | h2 |
--fs-3xl |
36 | Page title |
--fs-4xl |
48 | Page hero |
Spacing
4 / 8 / 12 / 16 / 20 / 24 / 32 / 40 / 48 / 64 — exposed as --space-1 through --space-16 (note: var name pun with the cosmic palette --space; see comment in tokens.css).
Radii
4 / 8 / 12 / 16 / 20 / 999px (pill).
Shadows
--shadow-sm:0 1px 2px rgba(0,0,0,0.3)--shadow-md:0 8px 24px -8px rgba(0,0,0,0.5)--shadow-lg:0 24px 48px -16px rgba(0,0,0,0.6)--shadow-glow:0 0 24px rgba(184,107,255,0.25)
Fonts
- Sans:
Inter Tight(400/500/600/700) — fall back to Inter, system sans - Mono:
JetBrains Mono(400/500/600) - No display serif — explicitly all-sans for density and clarity.
Load via Google Fonts:
<link href="https://fonts.googleapis.com/css2?family=Inter+Tight:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600&display=swap" rel="stylesheet">
Or self-host for performance.
Assets
source/docs-system/assets/lotus.png— The Nibiru lotus mark, cropped from the supplied logo. 861×569. Use at 36px height in the nav (auto width). For a smaller mark icon variant, ask the brand owner for a square crop.source/docs-system/assets/nibiru-full.png— The full logo with "Nibiru" wordmark and "Create, Invent, Impress" tagline. Use on a marketing splash or auth page; not the docs nav.
The docs nav uses lotus + typeset wordmark separately so we get crisper text than scaling a PNG, and so the tagline can use our --muted token color.
Files
source/
├── docs-system.html # Main design canvas — every component side-by-side
├── design-canvas.jsx # The canvas component itself (pan/zoom shell, you can ignore this)
├── index-v2.html # Companion: the marketing start page (for brand context)
└── docs-system/
├── tokens.css # ★ DESIGN TOKENS — copy into your codebase
├── components.css # ★ COMPONENT STYLES — copy or port to your styling system
├── assets/
│ ├── lotus.png # Brand mark
│ └── nibiru-full.png # Full logo
└── components/
├── navigation.jsx # TopNav, Sidebar, RightTOC, LotusMark
├── typography-and-code.jsx # PageHeader, Prose, CodeBlock, Callout, DocTable
└── extras.jsx # Tabs, ApiBlock, CardGrid, SearchModal, FAB, Pagination,
# MobileDrawer, NotFound
preview/
└── nibiru-docs-system.html # Single-file bundled preview (all assets inlined,
# works offline, just open in a browser)
Where to start
- Open
preview/nibiru-docs-system.htmlin a browser to see the full design canvas. This file works offline — everything is inlined, just double-click it. - Read
source/docs-system/tokens.cssend-to-end — these tokens drive everything. - Read
source/docs-system/components.css— every visual decision is here, organized by component with/* ====== COMPONENT ====== */headers. - Check the JSX components for structure (don't port React verbatim — just use them as a reference for DOM hierarchy and class names).
- Pick a target stack (Nextra / Mintlify / VitePress / your own React app) and start porting. The CSS will land cleanly because it's plain CSS variables + class selectors — no framework lock-in.
⚠️ Running the source HTML locally
The files in source/ use external <script src="...jsx"> imports. They will NOT work if you double-click docs-system.html directly — browsers block cross-origin requests on file:// URLs, so the JSX modules fail to load and you'll see ReferenceError: TopNav is not defined in the console.
You need a local HTTP server. From the project root:
# Python (pre-installed on macOS / Linux)
cd design_handoff_nibiru_docs_system/source
python3 -m http.server 8000
# then open http://localhost:8000/docs-system.html
# OR: Node
npx serve design_handoff_nibiru_docs_system/source
# follow the printed URL
# OR: PHP (since this is a PHP project)
cd design_handoff_nibiru_docs_system/source
php -S localhost:8000
# then open http://localhost:8000/docs-system.html
If you just want to look at the design without a server, use preview/nibiru-docs-system.html — it's a single self-contained file with everything bundled in.
Migration tips
- If using Nextra: Override the theme via
theme.config.tsxand injecttokens.css+components.cssas global styles. Use Nextra's MDX components (<Callout>,<Tabs>, etc.) and re-skin them with our class names. - If using Mintlify: Customize via
mint.jsoncolorssection + a custom CSS file. Most components in this design map 1:1 to Mintlify primitives. - If using VitePress: Override default theme components in
.vitepress/theme/. The sidebar/TOC layout maps directly. - If rolling your own: Copy both CSS files into
app/globals.css(or equivalent), build React/Vue/Svelte components matching the structure in the JSX files, render MDX with a custom component map.
Open Questions for the Developer
- Theme persistence: How should we remember the user's theme choice?
localStorageis the prototype's assumption. - Search backend: The modal is a UI shell — needs a search index. Algolia DocSearch / Mintlify Search / a local index (FlexSearch, Pagefind) all work.
- Syntax highlighting: We define the token classes; you wire them up. Shiki with a custom theme matching our
.tk-*classes is recommended. - i18n: The locale dropdown is decorative in the prototype. Wire it up if/when translations exist.
- Mobile breakpoints: Not heavily specified. Suggested: hide right TOC below 1100px, swap left sidebar for the mobile drawer below 768px.