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>
407 lines
21 KiB
Markdown
407 lines
21 KiB
Markdown
# 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, padding `32px 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 + `⌘ K` kbd 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 `required` pill (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, `esc` kbd 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 · `⌘K` close) + "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 to `localStorage`)
|
||
- `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:
|
||
```html
|
||
<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
|
||
|
||
1. Open `preview/nibiru-docs-system.html` in a browser to see the full design canvas. **This file works offline** — everything is inlined, just double-click it.
|
||
2. Read `source/docs-system/tokens.css` end-to-end — these tokens drive everything.
|
||
3. Read `source/docs-system/components.css` — every visual decision is here, organized by component with `/* ====== COMPONENT ====== */` headers.
|
||
4. Check the JSX components for structure (don't port React verbatim — just use them as a reference for DOM hierarchy and class names).
|
||
5. 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:
|
||
|
||
```bash
|
||
# 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.tsx` and inject `tokens.css` + `components.css` as global styles. Use Nextra's MDX components (`<Callout>`, `<Tabs>`, etc.) and re-skin them with our class names.
|
||
- **If using Mintlify**: Customize via `mint.json` `colors` section + 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
|
||
|
||
1. **Theme persistence**: How should we remember the user's theme choice? `localStorage` is the prototype's assumption.
|
||
2. **Search backend**: The modal is a UI shell — needs a search index. Algolia DocSearch / Mintlify Search / a local index (FlexSearch, Pagefind) all work.
|
||
3. **Syntax highlighting**: We define the token classes; you wire them up. Shiki with a custom theme matching our `.tk-*` classes is recommended.
|
||
4. **i18n**: The locale dropdown is decorative in the prototype. Wire it up if/when translations exist.
|
||
5. **Mobile breakpoints**: Not heavily specified. Suggested: hide right TOC below 1100px, swap left sidebar for the mobile drawer below 768px.
|