Files
winutil/tools/devdocs-generator.md
T
Sean (ANGRYxScotsman)andGitHub 6f0629207a Gave the docs steroids. sorry for the big pr. (#4892)
* Scaffold Astro + Starlight docs site

Bootstraps a new docs-astro project to replace the Hugo-based docs,
using Astro's Starlight framework with the content collection schema
and sidebar navigation configured for WinUtil's docs structure.

* Add WinUtil-branded Starlight theme

Restyles Starlight's default look with a dark-by-default grayscale
palette and WinUtil's brand blue (#0567ff, from the app logo) as the
single accent, Geist for UI text, and JetBrains Mono for code. Also
overrides the default theme provider so first-time visitors land on
dark mode instead of following OS preference.

* Add custom Hero and CornerCard components

Hero overrides Starlight's default hero with a full-bleed grid/glow
background, a browser-chrome-framed screenshot, and a badge row driven
by frontmatter data. CornerCard is a bordered feature card with corner
brackets, used for the landing page's feature grid.

* Migrate docs content from Hugo to Astro/Starlight

Ports the landing page, user guide sections, FAQ, known issues,
contributing guide, and a sample generated tweak reference page from
the Hugo site, converting Hugo shortcodes and GFM alert syntax to
their Starlight/MDX equivalents.

* Use Windows-style caption buttons in hero window chrome

Swap the macOS traffic-light dots for a minimize/maximize/close
button group, since WinUtil is a Windows tool.

* Use Windows-style caption glyph for terminal code blocks

Replace Expressive Code's default macOS dots on terminal-framed code
blocks with a right-aligned Windows minimize/maximize/close icon,
matching the hero window chrome.

* Archive the Hugo docs site as docs-old

* Promote Astro/Starlight docs from docs-astro to docs

* Show the launch command as a copyable code block on the docs homepage

* Add docs codeowner for seanh1995

* Register custom Header component for Starlight docs site

* Add custom navbar links to Astro docs, matching the old Hugo site's top nav

* Point dev docs generator at the Astro/Starlight docs site

Output moves from docs/content/dev (Hugo) to
docs/src/content/docs/code-reference (Astro/Starlight): .mdx instead
of .md, Starlight-style title="..." code fence labels instead of
Hugo's filename/linenos shortcode, and a ":::note" aside linking back
to each entry's source file. Frontmatter description is now pulled
from the JSON Description field. Also fixes a pre-existing bug where
the embedded JSON snippets were always missing their own closing
brace.

* Add seanh1995 as codeowner for the dev docs generator

* Wire up Code Reference section in docs sidebar

Adds an Architecture & Design page plus autogenerated Tweaks/Features
Reference groups pointing at docs/src/content/docs/code-reference, and
fixes the editLink base URL to the promoted docs/ path.

* Port architecture doc to code-reference and drop stale hyperv sample

Moves the Hugo-era architecture doc into
docs/src/content/docs/code-reference/architecture.mdx: drops the
Hugo-only weight/toc frontmatter, converts the embedded code fences to
Starlight's title="..." syntax, and repoints the "Related
Documentation" links at this site's actual slugs. Also removes the
hand-written reference/tweaks/hyperv.mdx placeholder now that the
generator produces the real page under code-reference/features.

* Keep pre-conversion backup of devdocs-generator.ps1

Snapshot of the script before it was pointed at the Astro/Starlight
docs site, for reference.

* updated workflow

* Update CODEOWNERS

* Hide edit-page link on the docs landing page

The splash-template landing page isn't a source doc meant to be edited
via GitHub like the rest of the guides, so skip showing the link.

* Add site footer with copyright line, matching the old Hugo docs

The Hugo site rendered "© {year} Chris Titus Tech. All rights
reserved." in its footer; Starlight's default footer had no
equivalent. Override it to append the same copyright line below the
existing edit-link/pagination row, and collapse that row entirely
when it has nothing in it (e.g. pages with editUrl disabled and no
prev/next) instead of leaving an empty gap.

* Fix vertical alignment and size of the arrow icon in hero/CTA buttons

The right-arrow icon read as floating above the button label's
baseline. Root cause was partly a genuine optical mismatch (fixed with
a small position nudge scoped to just the arrow icon, so it doesn't
also shift the unaffected GitHub icon) and partly the final CTA's copy
getting wrapped in a <p> by MDX's markdown parser, which behaved
slightly differently under the flex layout than the Hero component's
plain text node. Switching the CTA button's label to a JS string
expression avoids the wrapper and keeps both buttons' markup, and
rendering, identical.

* Use the dark fork-button screenshot in the contributing guide

Drop the unused light-mode variant and point the guide at
Fork-Button-Dark.png instead.

* Remove old Hugo docs site and pre-conversion backup files

The docs have moved to the Astro/Starlight site; the Hugo site
(docs-old/), its workflow backup, and the devdocs-generator.ps1
pre-conversion snapshot are no longer needed.

* keeping ai happy

* Bump sharp to 0.35.3 in docs site
2026-07-31 15:29:00 -05:00

4.8 KiB

title, description
title description
Dev Docs Generator How the devdocs-generator.ps1 script works

Dev Docs Generator

The devdocs-generator.ps1 script automatically generates Astro/Starlight markdown (.mdx) files for the development documentation. It pulls content directly from the JSON config files and PowerShell function files so the docs never go out of sync.

When Does it Run?

  • Automatically triggered by the docs.yaml GitHub Actions workflow, which generates the .mdx files, commits them back to the repo, and then triggers the Astro build to build the site
  • Automatically runs during the pre-release workflow, committing the updated "link" properties back to the JSON config files
  • Watches docs/**, config/tweaks.json, config/feature.json, and functions/** for changes
  • Supports manual runs via workflow_dispatch

What Does It Do?

1. Loads the Data

  • Reads config/tweaks.json and config/feature.json
  • Reads all .ps1 function files from functions/public/ and functions/private/
  • Parses Invoke-WPFButton.ps1 to build a mapping of button names to their function names
  • Adds or updates a "link" property on every entry in both JSON config files
  • Each link points to that entry's documentation page on the Hugo site
  • The updated links are automatically committed back to the JSON config files as part of the pre-release workflow

3. Cleans Up Old Docs

  • Deletes all .mdx files from docs/src/content/docs/code-reference/tweaks/ and docs/src/content/docs/code-reference/features/
  • This prevents duplicate or orphaned files from previous runs
  • No category index.mdx landing pages exist yet; if one is added later, the matching exclusion in the script is left commented out ready to re-enable

4. Generates Tweak Documentation

For each entry in tweaks.json that belongs to a documented category:

  • Button type entries get the mapped PowerShell function file embedded
  • All other types get the raw JSON snippet embedded with correct line numbers from the source file
  • Entries with registry changes get a Registry Changes section added

5. Generates Feature Documentation

For each entry in feature.json that belongs to a documented category:

  • Fixes and Legacy Windows Panels get the mapped PowerShell function file embedded
  • Features get the raw JSON snippet embedded with correct line numbers

6. Output Format

  • Every .mdx file gets Starlight frontmatter with title and description (description comes from the entry's Description field when present)
  • A :::note aside points back at the source file (JSON config or PowerShell function) it was generated from
  • Code blocks use Starlight/Expressive Code syntax with a title attribute naming the source file
  • Files are organized into category subdirectories matching the JSON category field

Documented Categories

The script generates docs for entries in these categories:

  • Essential Tweaks
  • z--Advanced-Tweaks---CAUTION
  • Customize Preferences
  • Performance Plans
  • Features
  • Fixes
  • Legacy Windows Panels

File Structure

docs/src/content/docs/code-reference/
  tweaks/
    Essential-Tweaks/
    z--Advanced-Tweaks---CAUTION/
    Customize-Preferences/
    Performance-Plans/
  features/
    Features/
    Fixes/
    Legacy-Windows-Panels/

The Starlight sidebar picks these up automatically via autogenerate entries in docs/astro.config.mjs for the code-reference/tweaks and code-reference/features directories, so no sidebar edits are needed when new entries are added.

How File Names Are Derived

The script strips common prefixes from the JSON key names using the pattern WPF(WinUtil|Toggle|Features?|Tweaks?|Panel|Fix(es)?)?. For example:

JSON Key Generated File
WPFTweaksHiber Hiber.mdx
WPFTweaksDeBloat DeBloat.mdx
WPFFeatureshyperv hyperv.mdx
WPFPanelDISM DISM.mdx

Key Points

  • The JSON config files are the single source of truth
  • Manual edits to generated .mdx files will be overwritten on the next run
  • The script only touches docs/src/content/docs/code-reference/tweaks/ and .../features/architecture.mdx and any other hand-written page under code-reference/ are untouched — if a category index.mdx landing page is added inside tweaks/ or features/, uncomment the exclusion in the cleanup step first, or it will be deleted on the next run
  • Category directories are created automatically if they don't exist
  • The "link" property added to JSON entries is excluded from the displayed code blocks
  • The docs workflow generates the .mdx files and commits them back to the repo before the Astro site is built
  • The pre-release workflow generates the "link" properties and commits them back to the repo