Skip to main content
. Not present in production builds. Safe no-op in prod. */ body { padding: 0 !important; } /* Colors Used #3CB540 - Jade Green #2b9a66 - Light Green #18794E - Dark Green Complementary Greens See https://coolors.co/004225-1a794e-08a045-3cb540-62ba4f #004225 - Deep Forrest #1A794E - Turf Green #08A045 - Medium Jungle #3CB540 - Jade Green #6BBF59 - Moss Green See https://coolors.co/0c0c0c-073b3a-1a794e-08a045-6bbf59 #0C0C0C - Onyx Black #073B3A - Dark Teal #1A794E - Turf Green #08A045 - Medium Jungle #6BBF59 - Moss Green See https://coolors.co/fffffa-073b3a-1a794e-08a045-6bbf59 #FFFFFA - Porcelain #073B3A - Dark Teal #1A794E - Turf Green #08A045 - Medium Jungle #6BBF59 - Moss Green Pink Offset Colour See https://coolors.co/073b3a-1a794e-f61067-08a045-6bbf59 #F61067 - Razzmatazz Pink #073B3A - Dark Teal #1A794E - Turf Green #08A045 - Medium Jungle #6BBF59 - Moss Green */ /* ============================================ GLOBAL THEME VARIABLES Component governance source of truth ============================================ */ :root { --lp-color-accent: #3cb540; --lp-color-accent-strong: #18794e; --lp-color-accent-soft: #6bbf59; --lp-color-accent-bright: #5dd662; --lp-color-accent-brightest: #a0f0a5; --lp-color-arbitrum: #3ea6f8; --lp-color-text-primary: #181c18; --lp-color-text-secondary: #717571; --lp-color-text-muted: #9ca3af; --lp-color-bg-page: #ffffff; --lp-color-bg-card: #f9fafb; --lp-color-bg-elevated: #f3f6f4; --lp-color-bg-subtle: rgba(24, 28, 24, 0.04); --lp-color-bg-overlay: rgba(12, 12, 12, 0.5); --lp-color-border-default: #e5e7eb; --lp-color-border-strong: rgba(24, 28, 24, 0.18); --lp-color-border-inverse: rgba(255, 255, 255, 0.5); --lp-color-on-accent: #ffffff; --lp-color-link: #18794e; --lp-color-link-hover: #004225; --lp-color-brand-discord: #5865f2; --lp-color-brand-forum: #00aeef; --lp-color-brand-github: #181c18; --lp-color-brand-x: #181c18; --lp-color-brand-globe: #00c0ff; --lp-color-brand-twitch: #9048ff; --lp-color-brand-youtube: #ff0034; --lp-color-brand-instagram: #dc2275; --lp-color-brand-linkedin: #0189df; --lp-color-brand-preview: #b636dd; --lp-color-brand-coming-soon: #ef1a73; --lp-color-brand-linux: #ff9a0e; --lp-color-brand-windows: #14bbf7; --lp-color-brand-macos: #60ba47; --lp-color-status-good: #22c55e; --lp-color-status-warn: #fbbf24; --lp-color-status-bad: #ef4444; --lp-spacing-1: 0.25rem; --lp-spacing-2: 0.5rem; --lp-spacing-3: 0.75rem; --lp-spacing-4: 1rem; --lp-spacing-6: 1.5rem; --lp-spacing-8: 2rem; --lp-spacing-px-3: 3px; --lp-spacing-px-4: 4px; --lp-spacing-px-6: 6px; --lp-spacing-px-8: 8px; --lp-spacing-px-12: 12px; --lp-font-sans: 'Inter', 'Segoe UI', sans-serif; --lp-font-mono: 'SFMono-Regular', 'SF Mono', 'Menlo', monospace; --lp-radius-sm: 0.25rem; --lp-radius-md: 0.5rem; --lp-radius-lg: 0.75rem; --lp-shadow-card: 0 8px 24px rgba(24, 28, 24, 0.08); --lp-z-base: 1; --lp-z-overlay: 10; --lp-z-modal: 50; /* Legacy aliases maintained during migration */ --accent: var(--lp-color-accent); --accent-dark: var(--lp-color-accent-strong); --hero-text: var(--lp-color-text-primary); --text: var(--lp-color-text-secondary); --text-secondary: var(--lp-color-text-secondary); --muted-text: var(--lp-color-text-muted); --background: var(--lp-color-bg-page); --card-background: var(--lp-color-bg-card); --background-highlight: var(--lp-color-bg-subtle); --border: var(--lp-color-border-default); --button-text: var(--lp-color-on-accent); --page-header-description-color: var(--lp-color-text-secondary); --arbitrum: var(--lp-color-arbitrum); } .dark { --lp-color-accent: #2b9a66; --lp-color-accent-strong: #18794e; --lp-color-accent-soft: #3cb540; --lp-color-accent-bright: #5dd662; --lp-color-accent-brightest: #7fe584; --lp-color-text-primary: #e0e4e0; --lp-color-text-secondary: #a0a4a0; --lp-color-text-muted: #6b7280; --lp-color-bg-page: #0d0d0d; --lp-color-bg-card: #1a1a1a; --lp-color-bg-elevated: #141a16; --lp-color-bg-subtle: rgba(255, 255, 255, 0.1); --lp-color-bg-overlay: rgba(0, 0, 0, 0.5); --lp-color-border-default: #333333; --lp-color-border-strong: rgba(255, 255, 255, 0.3); --lp-color-border-inverse: rgba(255, 255, 255, 0.5); --lp-color-on-accent: #ffffff; --lp-color-link: #5dd662; --lp-color-link-hover: #a0f0a5; --lp-color-brand-github: #f0f0f0; /* Legacy aliases maintained during migration */ --accent: var(--lp-color-accent); --accent-dark: var(--lp-color-accent-strong); --hero-text: var(--lp-color-text-primary); --text: var(--lp-color-text-secondary); --text-secondary: var(--lp-color-text-secondary); --muted-text: var(--lp-color-text-muted); --background: var(--lp-color-bg-page); --card-background: var(--lp-color-bg-card); --background-highlight: var(--lp-color-bg-subtle); --border: var(--lp-color-border-default); --button-text: var(--lp-color-on-accent); --page-header-description-color: var(--lp-color-text-secondary); --arbitrum: var(--lp-color-arbitrum); } /* ============================================ */ /* Code block themes hiki codeblock themes: Popular Dark Themes: github-dark (what you have now) github-dark-dimmed github-dark-high-contrast dracula dracula-soft monokai nord one-dark-pro poimandres rose-pine everforest-dark vitesse-dark Popular Light Themes: github-light (what you have now) github-light-high-contrast solarized-light rose-pine-dawn everforest-light vitesse-light */ /* img[alt="dark logo"], img[alt="light logo"] { max-width: 180px; } */ /* V2 TEST */ /* a.nav-tabs-item[href="/pages/resources/resources_hub.mdx"], a.nav-tabs-item[href="/pages/08_help/README"] { color: rgba(255, 90, 90, 0.342) !important; } */ /* Make the nav-tabs container full width */ .nav-tabs { width: 100%; justify-content: flex-start; } /* Fix Mintlify content width and centering. Regular pages: balance padding + widen inner cap. Portal/frame pages: balance padding (smaller) + widen inner cap for full-width hero. */ @media (min-width: 1024px) { /* Regular pages */ #content-container:not(:has(.frame-mode-hero-full)):not( :has(.frame-mode-container) ) { padding-left: 3rem !important; padding-right: 3rem !important; } #content-container:not(:has(.frame-mode-hero-full)):not( :has(.frame-mode-container) ) > .max-w-5xl { max-width: 72rem !important; } /* Portal/frame pages — tighter balanced padding, wider inner cap */ #content-container:has(.frame-mode-hero-full), #content-container:has(.frame-mode-container) { padding-left: 2rem !important; padding-right: 2rem !important; } #content-container:has(.frame-mode-hero-full) > .max-w-5xl, #content-container:has(.frame-mode-container) > .max-w-5xl { max-width: 80rem !important; } } #navbar > div.z-10.mx-auto.relative > div.hidden.lg\:flex.px-12.h-12 > div { column-gap: 2rem !important; } a.nav-tabs-item[href*='/internal/'] { margin-left: 1rem; margin-right: -1rem; padding-right: 0; border-bottom-color: transparent !important; } /* .gap-x-6 { column-gap: 2rem !important; } */ /* .nav-tabs h-full flex text-sm gap-x-6 { column-gap: 2rem !important; } */ /* Push Resource HUB to the right and style as outlined button */ a.nav-tabs-item[href$='/resources/redirect'], a.nav-tabs-item[href$='/resources/portal'], a.nav-tabs-item[href$='/07_resources/redirect'], a.nav-tabs-item[href$='/07_resources/portal'] { margin-left: auto; background-color: transparent; border: 1px solid var(--accent) !important; padding: 4px 8px; border-radius: 4px; font-size: 0.7rem; height: auto !important; align-self: center; margin-right: -2rem; } /* Color the text */ /* a.nav-tabs-item[href="/v2/resources/resources_hub"] { color: #2b9a66 !important; } */ /* Shrink & color the icon */ a.nav-tabs-item[href$='/resources/redirect'] svg, a.nav-tabs-item[href$='/resources/portal'] svg, a.nav-tabs-item[href$='/07_resources/redirect'] svg, a.nav-tabs-item[href$='/07_resources/portal'] svg, a.nav-tabs-item[href$='/07_resources/resources_hub'] svg { height: 0.75rem; width: 0.75rem; /* background-color: #2b9a66 !important; */ } /* Hide the underline on the button */ a.nav-tabs-item[href$='/resources/redirect'] > div:last-child, a.nav-tabs-item[href$='/resources/portal'] > div:last-child, a.nav-tabs-item[href$='/07_resources/redirect'] > div:last-child, a.nav-tabs-item[href$='/07_resources/portal'] > div:last-child, a.nav-tabs-item[href$='/07_resources/resources_hub'] > div:last-child { display: none; } /* Stack footer links vertically */ #footer .flex-col .flex.gap-4 { flex-direction: column !important; gap: 0rem !important; } /* Reduce footer padding */ #footer > div { padding-top: 2rem !important; padding-bottom: 1rem !important; } /* Accessibility: prevent hidden assistant sheet from receiving focus */ #chat-assistant-sheet[aria-hidden='true'] { display: none !important; } /* Accessibility: ensure CTA buttons meet minimum target size */ button.text-left.text-gray-600.text-sm.font-medium { min-height: 24px; padding-top: 4px; padding-bottom: 4px; } /* #footer > div > div:first-child { display: flex; flex-direction: row !important; color: red !important; } #footer > div > div:first-child > div { display: flex; flex-direction: row !important; color: green !important; } */ /* Fix bad styling of cards with arrows */ [data-component-part='card-content-container'] { padding-right: 2.5rem; /* Creates space for the arrow */ } /* Reposition View component dropdown */ /* To find the correct selector: 1. Open your page with View components in the browser 2. Right-click on the dropdown in the top-right corner 3. Select "Inspect Element" 4. Find the class name or data attribute 5. Replace the selector below with the actual one */ /* Common possible selectors - uncomment and adjust the one that works */ /* Option 1: If it has a data attribute */ /* [data-view-dropdown] { position: relative !important; top: 60px !important; right: 20px !important; } */ /* Option 2: If it's in a fixed container */ /* .fixed [class*="view"] { position: relative !important; top: 60px !important; } */ /* Option 3: Target by position (fixed elements in top-right) */ /* .fixed.top-0.right-0 [class*="select"], .fixed.top-0.right-0 [class*="dropdown"] { position: relative !important; top: 60px !important; margin-right: 20px !important; } */ /* Option 4: Move it inline with content instead of fixed position */ /* Replace 'ACTUAL_SELECTOR' with the real class name from browser inspection */ /* ACTUAL_SELECTOR { position: static !important; display: inline-block !important; margin-bottom: 20px !important; } */ .code-block > div > div > svg { background-color: #18794e !important; } /* Error 404 Styling */ #error-description > span > div > div { border: 1px solid #18794e !important; } body > div.relative.antialiased.text-gray-500.dark\:text-gray-400 > div.peer-\[\.is-not-custom\]\:lg\:flex.peer-\[\.is-custom\]\:\[\&\>div\:first-child\]\:\!hidden.peer-\[\.is-custom\]\:\[\&\>div\:first-child\]\:sm\:\!hidden.peer-\[\.is-custom\]\:\[\&\>div\:first-child\]\:md\:\!hidden.peer-\[\.is-custom\]\:\[\&\>div\:first-child\]\:lg\:\!hidden.peer-\[\.is-custom\]\:\[\&\>div\:first-child\]\:xl\:\!hidden > div.flex.flex-col.items-center.justify-center.w-full.max-w-lg.overflow-x-hidden.mx-auto.py-48.px-5.text-center.\*\:text-center.gap-y-8.not-found-container > div { margin-top: -5rem; } #error-description > span > div > div > div.relative.rounded-xl.overflow-hidden.flex.justify-center > img { width: 500px; aspect-ratio: 4 / 3; object-fit: cover; /* border: 1px solid #fff; */ } /* Step List Color Icons Styling */ /* #content > div.steps > div > div.absolute.ml-\[-13px\].py-2 > div { background-color: #18794e !important; } */ /* Step List Color Titles */ #content > div.steps.ml-3\.5.mt-10.mb-6 > div > div.w-full.overflow-hidden.pl-8.pr-px > p { color: #2b9a66 !important; } /* View Dropdown */ /* #radix-_R_5slubt9fen9fdb_ */ /* Turn off bg-white in dark mode for multi-view dropdown (PALM THEME BUG) */ .dark .bg-white\/\[0\.95\].multi-view-dropdown-trigger { background-color: transparent !important; background: none !important; } /* Sidebar collapse button - bigger and easier to click */ /* #sidebar button.absolute { min-width: 2.5rem !important; min-height: 2.5rem !important; padding: 0.75rem !important; z-index: 100 !important; } */ /* Override US flag with UK flag in language selector */ /* Hide the original img and use background-image instead */ /* #localization-select-trigger img[alt="US"], #localization-select-item-en img[alt="US"], img[alt="US"][src*="flags/US.svg"] { opacity: 0 !important; position: relative !important; } #localization-select-trigger img[alt="US"]::before, #localization-select-item-en img[alt="US"]::before, img[alt="US"][src*="flags/US.svg"]::before { content: "" !important; position: absolute !important; top: 0 !important; left: 0 !important; width: 100% !important; height: 100% !important; background-image: url("/snippets/assets/media/images/site/united-kingdom-flag-icon.svg") !important; background-size: cover !important; background-position: center !important; border-radius: 50% !important; opacity: 1 !important; } */ /* Hide the panel on frame mode pages (MINTLIFY SUCKS) */ /* Hide empty table of contents layout only when it's empty */ #table-of-contents-layout:empty, #content-side-layout:has(#table-of-contents-layout:empty) { display: none; } /* DynamicTable: force fixed layout so columnWidths prop values take effect. Mintlify's Tailwind prose resets table-layout to auto — !important required. */ [data-docs-dynamic-table] { table-layout: fixed !important; } /* StyledTable should sit flush inside its own border shell. Mint wraps rendered tables in a scroll container with vertical padding, which creates a false gap above/below the header row. */ [data-docs-styled-table-shell] > div { padding-top: 0 !important; padding-bottom: 0 !important; margin-top: 0 !important; margin-bottom: 0 !important; } /* BorderedBox should own its internal spacing. Trim default block margins on the first/last rendered child so headings and paragraphs do not add a false gap inside the padded shell. */ [data-docs-bordered-box] > :first-child { margin-top: 0 !important; } [data-docs-bordered-box] > :last-child { margin-bottom: 0 !important; } [data-docs-bordered-box][data-accent-bar]::before { content: ""; position: absolute; top: 0; bottom: 0; left: 0; width: 4px; background-color: var(--accent-bar-color); border-radius: inherit; border-top-right-radius: 0; border-bottom-right-radius: 0; } /* Frame mode container - 80% of #content-container width, centered */ /* Breaks out of #content padding to center in full #content-container */ .frame-mode-container { width: calc(100% + 96px + 20px); /* 976px */ margin-left: -96px; margin-right: -20px; margin-bottom: 2rem; padding-left: 15%; /* Adjust this for desired content width */ padding-right: 15%; /* Adjust this for desired content width */ box-sizing: border-box; } /* Frame mode container inside hero - already broken out, so reset */ .frame-mode-hero-full .frame-mode-container { width: 100%; margin-left: 0; margin-right: 0; padding-left: 0%; padding-right: 0%; } /* Pagination on frame mode pages ONLY - match container padding */ [data-page-mode='frame'] #pagination { width: calc(100% + 96px + 20px); margin-left: -96px; margin-right: -20px; padding-left: calc((100% + 96px + 20px) * 0.1 + 96px); padding-right: calc((100% + 96px + 20px) * 0.1 + 20px); box-sizing: border-box; } /* Hero full width - breaks out of #content padding to fill #content-container */ .frame-mode-hero-full { width: calc(100% + 96px + 20px); margin-left: -96px; margin-right: -20px; position: relative; } @media (max-width: 1023px) { .frame-mode-container { width: 100%; margin-left: 0; margin-right: 0; padding-left: 1rem; padding-right: 1rem; } [data-page-mode='frame'] #pagination { width: 100%; margin-left: 0; margin-right: 0; padding-left: 1rem; padding-right: 1rem; } .frame-mode-hero-full { width: 100%; margin-left: 0; margin-right: 0; } } #starfield { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; z-index: 0; } /* Target the card content container */ .frame-mode-hero-full [data-component-part='card-content-container'] { padding-top: 0.5rem; padding-bottom: 0.5rem; padding-left: 1rem; padding-right: 2.5rem; /* Space for arrow icon (0.75rem right + icon width ~1rem + margin) */ } /* Target the arrow icon */ .frame-mode-hero-full #card-link-arrow-icon { top: 0.75rem; right: 0.75rem; } /* #content > div.frame-mode-hero-full > div.frame-mode-container > div > div:nth-child(2) > div > div > div:nth-child(4) > a > div { padding-top: 0.5rem; padding-bottom: 0.5rem; } #content > div.frame-mode-hero-full > div.frame-mode-container > div > div:nth-child(2) > div > div > div:nth-child(4) > a > div > #card-link-arrow-icon { top: 0.75rem; right: 0.75rem; } */ /* ============================================ ACCESSIBILITY — Focus indicators ============================================ */ input:focus-visible, select:focus-visible, textarea:focus-visible, button:focus-visible, a:focus-visible, [tabindex]:focus-visible { outline: 2px solid var(--accent) !important; outline-offset: 2px; } /* ============================================ ACCESSIBILITY — Responsive breakpoints ============================================ */ @media (max-width: 767px) { .frame-mode-hero-full { width: 100%; max-width: 100%; overflow-x: hidden; } } @media (max-width: 480px) { #content { padding-left: 1rem; padding-right: 1rem; } } /* ============================================ UTILITY CLASSES — inline element styling Used where components can't replace inline spans (e.g., inside Mintlify , components) ============================================ */ .lp-inline-flex { display: flex; align-items: center; } .lp-text-muted { color: var(--lp-color-text-secondary); } .lp-text-italic-muted { font-style: italic; color: var(--lp-color-text-secondary); } .lp-inline-flex-gap { display: flex; align-items: center; gap: 0.2rem; } .lp-link-underline { border-bottom: 1.5px solid var(--lp-color-text-primary); color: var(--lp-color-text-primary); padding-bottom: 0.25rem; }

Visual Explainer — Livepeer docs-v2 Implementation Guide

What this is: A practical guide to implementing nicobailon/visual-explainer as a developer/maintainer tooling layer for the livepeer/docs docs-v2 branch. This is not a content authoring tool — it operates alongside the docs, not inside Mintlify.

Pilot Scope (Current)

This workflow is currently an optional, maintainer-focused pilot.
  • It is not a required contributor gate.
  • It is not a Mintlify runtime feature.
  • It is not part of CI or GitHub Actions.
  • Generated diagram/review artifacts should remain out-of-repo during the pilot.

Understanding the Boundary

Visual-explainer outputs standalone HTML files to ~/.agent/diagrams/. It is a Claude Code skill — it runs in your terminal workflow, not inside Mintlify. This means:
  • It does not replace Mermaid diagrams already rendering correctly in MDX pages
  • It does not write to the repo directly
  • It does produce shareable, linked reference pages and maintainer-tooling outputs
  • It does activate automatically when you ask Claude Code for diagrams, architecture overviews, or plan comparisons
  • It uses Claude Code slash commands (for example /diff-review) and should not be treated as a Mintlify or CI command

Installation

# Install into Claude Code skills directory
git clone https://github.com/nicobailon/visual-explainer.git ~/.claude/skills/visual-explainer
That’s it. No restart required. Claude Code reads the SKILL.md on each session.

Priority 1: /plan-review on the AI-First Docs Plan

What it does: Cross-references every claim in a plan document against the actual codebase. Produces a current vs. planned architecture diagram and flags risks and gaps. Why it matters here: The livepeeraifirstdocsplan.pdf is a concrete implementation plan with sprint deliverables. Running /plan-review against docs-v2 gives you a machine-verified gap analysis — which items are landed, which are still outstanding, and where the delta lives in the file system. How to run it:
# From the docs repo root, on the docs-v2 branch
cd ~/path/to/livepeer/docs
git checkout docs-v2

# In Claude Code
/plan-review ~/path/to/livepeeraifirstdocsplan.pdf
What to expect in the output:
  • Every sprint item mapped to a file path in v2/, ai-tools/, or operations/scripts/
  • Items flagged as not yet landed in current docs-v2 coverage (for example quickstart/tutorial gaps, migration docs, accessibility follow-ups)
  • A risk/gap matrix formatted as a visual HTML page you can share directly with stakeholders
Use this output for: Delivery reporting, handover documentation, addressing scope/completion criticism with a verifiable artifact rather than prose claims.

Priority 2: /diff-review on docs-v2 PRs

What it does: Generates a full visual review page for any git diff — before/after architecture diagrams, KPI dashboard, structured code review (Good/Bad/Ugly), and a decision log with confidence indicators. Why it matters here: The docs-v2 branch has deep history and broad surface area. PRs touching docs.json (navigation structure), snippets/components/ (component system), or .github/workflows/ (CI) are structurally complex and hard to reason about in GitHub’s flat diff view. How to run it:
# Default: feature branch vs main
/diff-review

# Specific commit
/diff-review abc123

# Committed changes only (excludes staged/unstaged)
/diff-review main..HEAD

# Pull request by number
/diff-review #42
The highest-value PR types to run this on:
PR TypeWhy Visual Review Helps
docs.json changesNavigation structure changes are invisible in text diff; architecture diagram makes them obvious
snippets/components/ additionsComponent graph changes affect every page that imports them
.github/workflows/ changesCI dependency changes need a flow diagram, not line-by-line YAML review
Large v2/ restructuresSection moves affect redirect chains and cross-links non-obviously
How to integrate into workflow (pilot): Keep this optional and maintainer-led first. For now, use it before opening or reviewing structural PRs and gather evidence on review quality.

Priority 3: Architecture Diagrams for Commented-Out Mermaid

What it does: Generates a full-page, zoom/pan-enabled, dark/light themed diagram using ELK layout — significantly more capable than Mintlify’s inline Mermaid renderer. Why it matters here: Two substantial architecture diagrams are commented out in the existing MDX files, almost certainly because they were too complex to render cleanly in-page:
  • v2/gateways/resources/technical/technical-architecture.mdx — Marketplace Interaction Model (commented out)
  • v2/gateways/resources/technical/technical-architecture.mdx — BYOC Container Architecture (commented out)
These are exactly the diagrams that orchestrator and gateway operator audiences need most. How to rescue them:
# Option A: Ask Claude Code to generate from the commented Mermaid source
# Open the file, then:
> generate a web diagram for the BYOC container architecture from this file

# Option B: Describe the architecture directly
> draw a diagram of the BYOC container runtime flow: developer container → 
  compliant runtime spec gateway intake capability validation 
  orchestrator container runner GPU execution
Where to link the output: The generated HTML files live at ~/.agent/diagrams/. Host them or link to them from the relevant reference pages. In the MDX, replace the commented-out Mermaid block with:
<Note>
  View the interactive [BYOC Architecture Diagram](/path/to/hosted/diagram.html) 
  for a zoomable, full-page version of this flow.
</Note>
Or embed as an iframe if Mintlify supports it in your configuration.

Priority 4: /fact-check on Delivery Reports

What it does: Takes any document that makes claims about code and verifies every claim against the actual codebase. Produces a verification log as a visual HTML page. Why it matters here: The RFP delivery report and retrospective make specific claims about what was built — script/test coverage, component library work, GitHub Actions workflows, CLI tools, AI-first tooling. /fact-check produces a machine-verified evidence log. How to run it:
# Verify the RFP delivery report
/fact-check ~/path/to/Livepeer_Docs_v2_RFP_Delivery_Report_with_Sections.docx

# Verify the retrospective
/fact-check ~/path/to/livepeer_docs_v_2_retrospective.md
What it checks against the repo:
  • Every script claimed → existence in operations/scripts/
  • Every workflow claimed → existence in .github/workflows/
  • Every component claimed → existence in snippets/components/
  • Every page structure claimed → existence in v2/
Use this output for: A timestamped, verifiable evidence artifact that can accompany delivery documentation. Share the HTML file directly with stakeholders as a supplement to the written report.

Priority 5: /project-recap for Contributor Onboarding

What it does: Scans recent git activity and produces an architecture snapshot, decision log, and cognitive debt hotspots — a mental model of the current project state. Why it matters here: The repo has multiple maintainers/contributors and docs-guide/ as the canonical navigation source of truth. /project-recap produces a single visual page that helps reduce orientation time. How to run it:
# From the docs repo root
cd ~/path/to/livepeer/docs
/project-recap
What the output will surface:
  • Which areas of the repo have the most recent churn (for example v2/developers/ and adjacent docs sections)
  • The test suite structure across tests/ and .github/workflows/
  • The automation pipeline map
  • Cognitive debt hotspots — files with high change frequency and high complexity
How to integrate: Add a reference to docs-guide/contributing/contributing.mdx:
## Getting Oriented Quickly

If you're new to the repo or returning after time away, run:

```bash
/project-recap
This generates a visual architecture snapshot of the current project state, including recent decisions and areas of active change.

Regenerate before major handovers or when onboarding new maintainers.

---

## Priority 6: Persona Routing Matrix Table

**What it does:** Visual-explainer's HTML table renderer with KPI badges produces significantly more scannable comparison tables than MDX table syntax.

**The specific table worth generating:** A persona-to-entrypoint routing matrix — the implicit routing logic that lives in `docs.json` and the persona portal pages, surfaced as a single visual reference.

**Ask Claude Code:**

```bash
> generate a data table showing Livepeer documentation persona routing:
  columns: User Type | Primary Question | Entry Point Page | Zero-to-Hero Path | Key Reference
  rows: Developer (AI Jobs), Developer (Transcoding), Gateway Operator, 
        Orchestrator, Delegator, Community Contributor
Where to use it (pilot): Use internally first in docs-guide/frameworks/content-system.mdx and maintainer handoff docs. Delay homepage “Mission Control” placement until pilot usefulness is validated.

What NOT to Use Visual Explainer For

ContextWhy to Skip It
MDX content pages (end-user docs)Not Mintlify-native; breaks inline reading experience; Mermaid already renders for these
ai-tools/ directory (llms.txt, docs-index.json, JSON-LD)Machine-readable formats; visual-explainer produces human-readable HTML — no overlap
Test suite outputlpd CLI and GitHub Actions CI already provide structured output in the right channels
Automated CI pipelineVisual-explainer is interactive/agent-driven, not a headless script runner

4-Week Pilot Rollout

Week 1: Baseline

  • Keep this guide aligned with current repo paths (v2/**, not v2/pages/**).
  • Keep contributor-facing messaging optional.
  • Track pilot scope in docs-guide contributor docs, not as a required contribution gate.

Weeks 1-2: Operational Pilot

  • Run /diff-review on at least five structural PRs touching one or more of:
    • docs.json
    • snippets/components/**
    • .github/workflows/**
  • Run /plan-review once against the AI-first plan.
  • Use artifact naming:
    • YYYY-MM-DD_diff-review_<ref>.html
    • YYYY-MM-DD_plan-review_ai-first-plan.html

Week 2: Diagram Rescue Pilot

  • Generate diagram artifacts for the two commented Mermaid diagrams in:
    • v2/gateways/resources/technical/technical-architecture.mdx
  • Keep links internal during the pilot (do not publish into user-facing pages yet).

Weeks 3-4: Evidence and Onboarding

  • Run /fact-check on delivery and retrospective documents.
  • Run /project-recap for onboarding/handoff context.
  • Generate a persona-routing matrix as an internal artifact only.

End of Week 4: Decision Gate

Promote to contributor-facing recommendation only if all are true:
  • Pilot runs are repeatable by multiple maintainers.
  • Artifact quality is consistently useful.
  • No path drift or command confusion was observed.
If these conditions are not met, keep this workflow internal to maintainers.

Operator Runbook (Planning Only)

Use this checklist after the relocation is complete. Do not execute these commands as part of this migration change.
  1. /diff-review: run for structural PRs (docs.json, snippets/components/**, .github/workflows/**) and capture one artifact per review.
  2. /plan-review: run once against the AI-first plan document and save a single gap-analysis artifact.
  3. /fact-check: run on delivery/retrospective docs before stakeholder circulation.
  4. /project-recap: run once per onboarding/handoff cycle to generate orientation context.
Outputs should remain out-of-repo and follow the naming convention in this guide.

Quick Reference: Commands

CommandBest Use in This Repo
/plan-review <file>Gap analysis of AI-first docs plan vs. actual delivered state
/diff-reviewPR review for structural changes (docs.json, components, workflows)
/generate-web-diagramRescue commented-out architecture diagrams; generate new ones on demand
/project-recapContributor onboarding and maintainer context-switching
/fact-check <file>Verify delivery report claims against codebase before stakeholder communication

Files to Know in docs-v2

FileRelevance to Visual Explainer Use
docs.jsonNavigation structure — primary target for /diff-review on nav PRs
v2/gateways/resources/technical/technical-architecture.mdxContains commented-out BYOC and Marketplace diagrams to rescue
v2/gateways/about/architecture.mdxEnglish gateway architecture page with diagrams that may benefit from full-page outputs
operations/scripts/Target for /fact-check script claim verification
.github/workflows/Target for /fact-check workflow claim verification
docs-guide/contributing/contributing.mdxAdd /project-recap and /diff-review recommendations here
docs-guide/features/architecture-map.mdxSource material for /project-recap output context
Last modified on April 7, 2026