* 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
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.yamlGitHub Actions workflow, which generates the.mdxfiles, 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, andfunctions/**for changes - Supports manual runs via
workflow_dispatch
What Does It Do?
1. Loads the Data
- Reads
config/tweaks.jsonandconfig/feature.json - Reads all
.ps1function files fromfunctions/public/andfunctions/private/ - Parses
Invoke-WPFButton.ps1to build a mapping of button names to their function names
2. Updates Links in JSON
- 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
.mdxfiles fromdocs/src/content/docs/code-reference/tweaks/anddocs/src/content/docs/code-reference/features/ - This prevents duplicate or orphaned files from previous runs
- No category
index.mdxlanding 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
.mdxfile gets Starlight frontmatter withtitleanddescription(description comes from the entry'sDescriptionfield when present) - A
:::noteaside points back at the source file (JSON config or PowerShell function) it was generated from - Code blocks use Starlight/Expressive Code syntax with a
titleattribute naming the source file - Files are organized into category subdirectories matching the JSON
categoryfield
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
.mdxfiles will be overwritten on the next run - The script only touches
docs/src/content/docs/code-reference/tweaks/and.../features/—architecture.mdxand any other hand-written page undercode-reference/are untouched — if a categoryindex.mdxlanding page is added insidetweaks/orfeatures/, 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
docsworkflow generates the.mdxfiles and commits them back to the repo before the Astro site is built - The
pre-releaseworkflow generates the"link"properties and commits them back to the repo