# Docs site config — Material for MkDocs. Renders docs/ as a navigable, # searchable site at the Pages root. Each page lives in the folder naming its # Diátaxis type, so the `nav:` below follows the tree rather than imposing an # order over it (docs/contributing/documentation-standards.md § The hierarchy). # # Built in CI (release.yml deploy-pages job) into pages/ root; the web # installer keeps its /install/ path untouched. Build locally with # uv run moondeck/docs/build_docs.py --strict site_name: MoonLight site_description: High-performance LED & DMX lighting control for ESP32 and beyond. # Canonical deployed URL: the custom domain, with the /MoonLight/ repo subpath # kept (GitHub Pages serves the project site under that path even on the custom # domain: every existing link uses moonmodules.org/MoonLight/…, e.g. the # installer at /MoonLight/install/). Drives the sitemap, canonical tags, # and the base for absolute URLs. site_url: https://moonmodules.org/MoonLight/ repo_url: https://github.com/MoonModules/MoonLight repo_name: MoonModules/MoonLight edit_uri: edit/main/docs/ # Flat output (foo.md → foo.html), NOT MkDocs' default directory URLs # (foo.md → foo/index.html). The docs' relative links (image ``, source # links) were hand-authored with `../` counts that match the FLAT layout — the # same counts GitHub uses when viewing the raw .md. Directory URLs add one path # level and break every relative asset link by one hop (a `../../../assets/…` # preview resolves to `/moonmodules/assets/…` and 404s). Keeping flat URLs makes # the same links resolve in BOTH the rendered site and GitHub's raw view — one # link that works everywhere, no per-file rewrite. use_directory_urls: false theme: name: material # System fonts, not Material's default Roboto. The default loads from fonts.googleapis.com, which # sends every docs reader's IP to Google for a typeface nobody chose. Our privacy policy says # GitHub is who receives requests for these pages, and this is what keeps that true. font: false # Momo, the MoonModules mascot: browser-tab favicon and the header logo (same PNG # the web installer uses, copied into docs/assets/). Paths are relative to docs/. favicon: assets/favicon.png logo: assets/favicon.png palette: # Dark theme matching the retired landing page's accent (#a78bfa). scheme: slate primary: deep purple accent: deep purple features: - navigation.instant # SPA-style nav, no full reload # The address keeps the anchor a link opened, since MoonWalk reads it as the process to show; scroll tracking would rewrite it. - navigation.top # back-to-top button # The ten top-level groups ride in a bar UNDER THE HEADER rather than stacking down the left # edge. Expanded in the sidebar they ran past a screen height, so the reader scrolled a menu to # find out what the site holds: the shape of the documentation was the thing hardest to see. # As tabs the ten are visible at once, and the sidebar narrows to the section being read. - navigation.tabs # Only the ACTIVE tab's pages in the sidebar, so its length follows one section rather than # the whole site. Needs navigation.tabs above to mean anything. - navigation.sections # top-level nav groups render as sections - search.suggest - search.highlight - content.code.copy # copy button on code blocks (matters once snippets land) markdown_extensions: - admonition - attr_list - md_in_html - toc: permalink: true - pymdownx.highlight: anchor_linenums: true # superfences also renders ```mermaid blocks as diagrams rather than code, via the # custom fence below: Material ships the mermaid runtime, so no extra dependency. - pymdownx.superfences: custom_fences: - name: mermaid class: mermaid format: !!python/name:pymdownx.superfences.fence_code_format - pymdownx.inlinehilite # Renders Material icon shortcodes (`:material-flash:` → the ⚡ glyph) used on # the landing page's buttons and card grid. Without this they show as literal # text. The emoji_index/generator pair is Material's documented icon setup. - pymdownx.emoji: emoji_index: !!python/name:material.extensions.emoji.twemoji emoji_generator: !!python/name:material.extensions.emoji.to_svg # Snippets is the Phase-3 de-duplication mechanism: `--8<--` pulls real # source lines into a doc so a fact lives once (in the .h) and renders in # the .md. Enabled now (harmless with no snippets yet) so later phases need # no config change. base_path lets a snippet reference src/ from the repo root. - pymdownx.snippets: base_path: [!relative $config_dir] check_paths: true # The stage files and their schema are not under docs/, and the map the docs serve is built from them: a change there rebuilds the site. watch: - moonwalk plugins: - search # A page MoonWalk took over keeps its address: each old URL forwards to its process in the live view, so links from the installer, the README and the help still land. - redirects: redirect_maps: work/past/lessons.md: contributing/lessons.md work/future/analysis-code-hosting.md: design/code-hosting.md work/future/analysis-effects-power-functions-inventory.md: design/effects-power-functions-inventory.md work/future/analysis-input-mapping.md: design/input-mapping.md work/future/analysis-leddriver.md: design/leddriver.md work/future/analysis-moonlive.md: design/moonlive.md work/future/analysis-small-boards.md: design/small-boards.md work/future/analysis-ui-extensibility.md: design/ui-extensibility.md work/future/analysis-virtual-layer-downscale.md: design/virtual-layer-downscale.md reference/tests/unit-tests.md: reference/tests.md reference/tests/scenario-tests.md: reference/tests.md reference/metrics/code.md: reference/tests.md#check_code reference/metrics/docgen.md: reference/tests.md#check_docgen reference/metrics/prose.md: reference/tests.md#check_prose tutorials/first-light-show.md: moonwalk.md#first-light-show how-to/installing-to-desktop.md: moonwalk.md#install how-to/building.md: moonwalk.md#desktop-build-test gettingstarted.md: getting-started.md moonmodules/light/index.md: explanation/how-moonlight-works.md reference/hardware/small-boards.md: design/small-boards.md tutorials/how-moonlight-works.md: explanation/how-moonlight-works.md tutorials/generative-effects.md: explanation/generative-effects.md how-to/updating-firmware.md: moonwalk.md#update-firmware # The how-to folder became MoonWalk's processes; each page's facts moved to reference/, and its old address keeps working. how-to/installing-on-linux.md: reference/installing-on-linux.md how-to/adding-a-stream-source.md: reference/adding-a-stream-source.md how-to/audio-input.md: reference/audio-input.md how-to/watching-the-output.md: reference/watching-the-output.md how-to/control-surface.md: reference/control-surface.md how-to/home-automation.md: reference/home-automation.md how-to/presets.md: reference/presets.md how-to/migrating-over-the-air.md: reference/migrating-over-the-air.md how-to/backup-and-restore.md: reference/backup-and-restore.md how-to/troubleshooting.md: reference/troubleshooting.md how-to/faq.md: reference/faq.md how-to/logging-an-issue.md: reference/logging-an-issue.md how-to/panel-cards.md: reference/hardware/panel-cards.md how-to/led-drivers.md: reference/hardware/led-drivers.md how-to/hub75-panels.md: reference/hardware/hub75-panels.md how-to/hold-to-play.md: reference/examples/hold-to-play.md how-to/multi-board-installation.md: reference/examples/multi-board-installation.md how-to/led-signal-integrity.md: reference/troubleshooting.md#stray-pixels-or-wrong-colors-on-lights-that-should-be-off explanation/led-signal-integrity.md: reference/troubleshooting.md#stray-pixels-or-wrong-colors-on-lights-that-should-be-off # The site's styles: colored headings, the card deck, the clips. extra_css: - assets/extra.css # The card deck (assets/help-deck.js), a module that mounts on any page holding a .mm-deck. extra_javascript: - path: assets/help-deck.js type: module # MoonWalk's journey map (assets/moonwalk.js): its button on every page, and the map on moonwalk.md. - path: assets/moonwalk.js type: module # The test page (assets/tests.js): a module that mounts on the page holding #mm-tests. - path: assets/tests.js type: module # Build-time hooks (moondeck/docs/mkdocs_hooks.py): publish the test registry # from the test files (never committed, so it cannot drift), render each catalog page's # prose ### blocks as a 4-column table, and rewrite out-of-docs source links to # GitHub URLs. See the module docstring. hooks: - moondeck/docs/mkdocs_hooks.py # docs/work/ is internal (agent-facing, transient) — kept OFF the top # nav (they're not in the `nav:` tree) but still BUILT into the site, so the many # doc-to-doc links into them (a spec citing a design study, a decision record) # resolve as normal relative links instead of 404ing. Reachable by following a # link, not by browsing the menu. They're already public on GitHub. One build # mechanism, no exclusion special-case, no dangling internal links. # (The web installer is a separate top-level app outside docs_dir — MkDocs never # sees it, so it needs no exclusion.) # Link validation: warn (don't fail) on cross-doc anchors. The existing docs # carry a backlog of links to renamed/removed section anchors — surfacing them # is useful, but fixing ~400 of them is its own cleanup, not this additive # site-standup. Phase 0 fails the build only on missing *files* / bad nav, not # stale anchors. (A later phase can flip anchors to `error` once swept.) validation: nav: omitted_files: ignore # docs/work/ intentionally absent from nav links: not_found: warn anchors: warn absolute_links: ignore # Top-down navigation over the existing files. Two audiences, in order: # a user path first (what it is → install → use → effects), then the developer # reference (architecture → modules → source-level). docs/work/ is # internal and deliberately absent from the published site. nav: - Home: index.md # A top-level tab. Installers already shipped link gettingstarted.html for help, a contract the redirect above keeps. - Getting started: - Getting started: getting-started.md # What a new user reads after the first install: the cards, the pipeline, live changes. - How MoonLight works: explanation/how-moonlight-works.md # Every clip of the series in watching order, each linking the page it plays on. - Videos: videos.md # The web installer is a separate app deployed at /install/ (staged verbatim by the # release workflow, not built by MkDocs). A full URL (not a site-relative path) so # MkDocs treats it as the external resource it is. - Web installer: https://moonmodules.org/MoonLight/install/ # Answers to what people hit on a first run, each from someone's bench: the first hour's reader asks. - FAQ: reference/faq.md - Troubleshooting: reference/troubleshooting.md - Log an issue: reference/logging-an-issue.md - Contributing: contributing/index.md # The two tutorials: a first MoonLive script, typed into the browser, and a first C++ effect for a developer new to the code. - Write your first script: tutorials/first-script.md - Build your own MoonModules: tutorials/build-your-own-moonmodules.md - Security: explanation/security.md - Privacy policy: legal/privacy-policy.md # The pages drawn from the code and the tests rather than written, each a tab of its own and so page-wide (mkdocs_hooks.on_page_markdown): the catalogs, the processes, the tests and the credits. - Effects: moonmodules/light/effects.md - Modifiers: moonmodules/light/modifiers.md - Layouts: moonmodules/light/layouts.md - Drivers: moonmodules/light/drivers.md - Services: moonmodules/core/services.md - System: moonmodules/core/system.md - MoonWalk: moonwalk.md - Tests: reference/tests.md - Attributions: reference/attributions.md # The FOLDER under docs/ is the Diataxis type: tutorials/, explanation/ and reference/, with the how-tos as MoonWalk's processes. The nav labels stay reader-facing, so the path tells a writer where a page belongs while a reader never meets the word "explanation". The rules (contributing/) and legal/ sit outside the grid on purpose: contributing/documentation-standards.md. # Users and integrators: running it, connecting it, the hardware it runs on. - Reference: # What the steps of MoonWalk's processes rest on, grouped by what the reader is doing: running it, connecting it, keeping it working. - Using it: - Running on a Linux machine: reference/installing-on-linux.md - Presets: reference/presets.md - Back up and restore: reference/backup-and-restore.md - Migrating over the air: reference/migrating-over-the-air.md - Control surfaces: reference/control-surface.md - Home automation: reference/home-automation.md - Audio input: reference/audio-input.md - Watching the output as video: reference/watching-the-output.md # What MoonCloud IS to a user, kept apart from how it is built (Developers > Architecture > MoonCloud). The device card deep-links this one from its consent prompt (app.js, mooncloud.html#why-you-might-like-this), so its URL is a shipped contract. - MoonCloud: explanation/mooncloud.md # Its reader is a user upgrading: the action to take per break. - Migrating (breaking changes): reference/MIGRATING.md # The question a user arrives with: how do I drive this from my own code rather than from the page. - Scripting and integrating: - MoonLive: moonmodules/light/moonlive.md - Making beautiful effects: explanation/generative-effects.md - Integrating: reference/integrating.md - REST API: reference/api.md - Light pipeline modules: moonmodules/light/supporting.md - Examples: - Playing an effect while a button is held: reference/examples/hold-to-play.md - The StadBeest, a multi-device installation: reference/examples/multi-board-installation.md - Hardware: - Firmware variants and memory: reference/hardware/firmware-variants.md - GPIO usage per MCU: reference/hardware/gpio-usage.md - ESP32-S31 coreboard: reference/hardware/esp32-s31-coreboard.md - LightCrafter 16: reference/hardware/lightcrafter-16.md - MHC-WLED ESP32-P4 shield: reference/hardware/mhc-wled-esp32-p4-shield.md - Waveshare ESP32-P4-ETH: reference/hardware/esp32-p4-eth.md - Teensy 4.1: reference/hardware/teensy-4-1.md - Light fixtures and DMX nodes: reference/hardware/light-fixtures.md - Control surfaces: reference/hardware/control-surfaces.md - LED drivers: reference/hardware/led-drivers.md - HUB75 panels: reference/hardware/hub75-panels.md - Receiving cards for LED panels: reference/hardware/panel-cards.md - TV backlight: reference/hardware/tv-backlight.md # Contributors: how it is built, the rules, and the references a change needs. - Developers: - Architecture: # "Overview", not the section's own name: a first child repeating the section reads as a page about it rather than the way in. - Overview: explanation/architecture/index.md - MoonModule: explanation/architecture/moonmodule.md - MoonCore: explanation/architecture/mooncore.md # The reference half of MoonCore's platform abstraction, beside it. - Platform: moonmodules/platform/index.md - Core internals: moonmodules/core/supporting.md - MoonLight: explanation/architecture/moonlight.md - MoonLive: explanation/architecture/moonlive.md - MoonBase: explanation/architecture/moonbase.md - MoonInstaller: explanation/architecture/mooninstaller.md - MoonCloud: explanation/architecture/mooncloud.md - MoonDeck: explanation/architecture/moondeck.md - MoonWalk: explanation/architecture/moonwalk.md - Web UI: moonmodules/core/ui.md - Why we write our own code: explanation/why-we-write-our-own.md # Pre-decision surveys, each cited by the card or plan it informs; a study leaves once its topic ships. - Design studies: - Overview: design/index.md - Code hosting: design/code-hosting.md - Effects on the power functions: design/effects-power-functions-inventory.md - Input mapping: design/input-mapping.md - LED drivers: design/leddriver.md - MoonLive roadmap: design/moonlive.md - Small boards: design/small-boards.md - UI extensibility: design/ui-extensibility.md - Render larger, pool down: design/virtual-layer-downscale.md # The bugs and fixes MoonLight waits on in the projects it builds on, each with its workaround and when it goes. - Issues in other projects: reference/issues-in-other-projects.md - Power functions: moonmodules/light/power-functions.md - Picture and channel-data sources: reference/adding-a-stream-source.md - Testing strategy: reference/testing.md - Performance: reference/performance.md # The CMake layout: a tree to look up, not a step to follow. - Build system: reference/build-system.md # Generated by moondeck/check/repo_health.py on every KPI-gate run, next to Performance because both are measured state. - Repo health: reference/metrics/repo-health.md - MoonWalk reference: reference/moonwalk.md # The rules bind a contributor rather than serving a reader need (contributing/documentation-standards.md § The hierarchy); the way in is Getting started > Contributing. - Rules: - Principles & process: contributing/principles-and-process.md - Coding standards: contributing/coding-standards.md - Documentation standards: contributing/documentation-standards.md # The catalog pages above are drawn from the module headers through docs/help/help.json, and each card links its header on GitHub, the technical reference.