diff --git a/.github/markdown-link-check.json b/.github/markdown-link-check.json
index fa4e79b..b7db2f9 100644
--- a/.github/markdown-link-check.json
+++ b/.github/markdown-link-check.json
@@ -27,7 +27,7 @@
"pattern": "^https://pkg.go.dev.*badge"
},
{
- "pattern": "^\\.\\./images/(dashboard-home|account-creation|account-dashboard|usb-remote-services|device-discovery|device-registration|account-migration|migration-setup|migration-progress|migration-health|migration-complete|backup-setup)\\.png$"
+ "pattern": "^/images/(dashboard-home|account-creation|account-dashboard|usb-remote-services|device-discovery|device-registration|account-migration|migration-setup|migration-progress|migration-health|migration-complete|backup-setup)\\.png$"
},
{
"pattern": "https://www.contributor-covenant.org/version/2/0/code_of_conduct.html"
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index a5a360b..88fd72e 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -215,8 +215,8 @@ jobs:
)
for img in "${IMAGES[@]}"; do
- if [ ! -f "docs/images/$img" ]; then
- echo "::warning file=docs/guides/MIGRATION-GUIDE.md::Pending image '$img' is missing from docs/images/"
+ if [ ! -f "docs/static/images/$img" ]; then
+ echo "::warning file=docs/content/docs/guides/MIGRATION-GUIDE.md::Pending image '$img' is missing from docs/static/images/"
fi
done
@@ -226,7 +226,7 @@ jobs:
echo "Validating API documentation consistency..."
# Check API cookbook
- if [ -f "docs/reference/API-COOKBOOK.md" ]; then
+ if [ -f "docs/content/docs/reference/API-COOKBOOK.md" ]; then
echo "✓ API Cookbook exists"
else
echo "✗ API Cookbook missing"
@@ -234,7 +234,7 @@ jobs:
fi
# Check getting started guide
- if [ -f "docs/guides/GETTING-STARTED.md" ]; then
+ if [ -f "docs/content/docs/guides/GETTING-STARTED.md" ]; then
echo "✓ Getting Started guide exists"
else
echo "✗ Getting Started guide missing"
diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
index 5de4ee1..b8485e2 100644
--- a/.github/workflows/docs.yml
+++ b/.github/workflows/docs.yml
@@ -23,11 +23,15 @@ jobs:
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Setup Pages
uses: actions/configure-pages@45bfe0192ca1faeb007ade9deae92b16b8254a0d # v6.0.0
- - name: Build with Jekyll
- uses: actions/jekyll-build-pages@44a6e6beabd48582f863aeeb6cb2151cc1716697 # v1.0.13
+ - name: Setup Hugo
+ uses: peaceiris/actions-hugo@75d2a84ef14cf28a37009d2a8f1d0d6e67eb56e8 # v3.0.0
with:
- source: 'docs/'
- destination: '_site'
+ hugo-version: 'latest'
+ extended: true
+ - name: Build with Hugo
+ run: hugo --source docs/ --minify --destination ../_site
+ env:
+ HUGO_ENVIRONMENT: production
- name: Upload artifact
uses: actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9 # v5.0.0
with:
diff --git a/Makefile b/Makefile
index 0a60fe5..d0bce7f 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-.PHONY: all build build-cli test test-coverage test-http-client test-http-client-rotate check fmt vet lint clean dev help screenshots build-stockholm-image prepare-stockholm update-static-deps
+.PHONY: all build build-cli test test-coverage test-http-client test-http-client-rotate check fmt vet lint clean dev help screenshots build-stockholm-image prepare-stockholm update-static-deps dev-docs dev-docs-tidy hugo
# Load .env if present (simple KEY=VALUE format, no shell quoting)
-include .env
@@ -454,6 +454,22 @@ screenshots:
@echo "Capturing documentation screenshots..."
@bash scripts/screenshots/run.sh
+# Documentation site (Hugo + Hextra via Docker)
+# First run: make dev-docs-tidy (downloads Hextra, writes docs/go.sum)
+# Then: make dev-docs (http://localhost:1313, live reload)
+dev-docs:
+ docker compose -f docker-compose.docs.yml up
+
+dev-docs-tidy:
+ docker compose -f docker-compose.docs.yml run --rm hugo mod tidy --source docs/
+
+# Run any hugo CLI command inside the docs container:
+# make hugo ARGS="version"
+# make hugo ARGS="new content/docs/guides/my-guide.md"
+ARGS ?=
+hugo:
+ docker compose -f docker-compose.docs.yml run --rm hugo --source docs/ $(ARGS)
+
help:
@echo "Available targets:"
@echo " build - Build the CLI tool, service, and examples"
@@ -478,6 +494,9 @@ help:
@echo " dev-service-proxy - Build and run service with proxy (PROXY_URL=url required)"
@echo " dev-service-stockholm - Build and run service with Stockholm frontend (requires prior 'make prepare-stockholm')"
@echo " screenshots - Capture documentation screenshots (headless Chrome via chromedp)"
+ @echo " dev-docs - Serve documentation site locally via Docker (http://localhost:1313)"
+ @echo " dev-docs-tidy - Run hugo mod tidy (first run, or after hugo.toml module changes)"
+ @echo " hugo ARGS=... - Run any hugo CLI command via Docker (e.g. make hugo ARGS=version)"
@echo " dev-discover - Build and run device discovery"
@echo " dev-info - Build and get device info (HOST=ip required)"
@echo " dev-mdns - Build and run mDNS discovery example"
diff --git a/docker-compose.docs.yml b/docker-compose.docs.yml
new file mode 100644
index 0000000..09a6961
--- /dev/null
+++ b/docker-compose.docs.yml
@@ -0,0 +1,30 @@
+# Local Hugo/Hextra documentation server.
+#
+# Usage:
+# make dev-docs # start the live-reload server (http://localhost:1313)
+# make dev-docs-tidy # run hugo mod tidy (required on first run, or after
+# # changing hugo.toml module imports)
+# make hugo ARGS="..." # run any other hugo CLI command, e.g.
+# # make hugo ARGS="version"
+# # make hugo ARGS="new content/blog/my-post.md"
+#
+# The hugomods/hugo:exts image bundles Hugo extended + Go so Hugo modules
+# (Hextra) work without any extra tooling on the host.
+
+services:
+ hugo:
+ image: hugomods/hugo:exts
+ # --source docs/ because docs/ is the Hugo root inside the repo.
+ # The full repo is mounted so enableGitInfo can read git history.
+ command: server --source docs/ --bind 0.0.0.0 --buildDrafts --navigateToChanged
+ ports:
+ - "1313:1313"
+ volumes:
+ - .:/src
+ # Persist the Hugo module cache across runs so 'hugo mod tidy' only
+ # downloads Hextra once.
+ - hugo-mod-cache:/root/.cache/hugo_cache
+ working_dir: /src
+
+volumes:
+ hugo-mod-cache:
diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md
deleted file mode 100644
index 192c564..0000000
--- a/docs/SUMMARY.md
+++ /dev/null
@@ -1,119 +0,0 @@
-# Table of Contents
-
-* [Introduction](README.md)
-
-## User Guides
-* [Deployment Overview](guides/DEPLOYMENT-OVERVIEW.md)
- * [Local Network Host Walkthrough](guides/EXTERNAL-HOST-WALKTHROUGH.md)
- * [Cloud / VPS Walkthrough](guides/CLOUD-DEPLOY-WALKTHROUGH.md)
- * [On-Device Install Walkthrough](guides/ON-DEVICE-INSTALL-WALKTHROUGH.md)
-* [Cloud Shutdown Survival Guide](guides/SURVIVAL-GUIDE.md)
-* [Self-Hosting AfterTouch](guides/SELF-HOSTING.md)
-* [Connecting Music Services](guides/MUSIC-SERVICES.md)
-* [Migration & Safety Guide](guides/MIGRATION-SAFETY.md)
-* [CLI Reference](guides/CLI-REFERENCE.md)
-* [Backup Tool](../cmd/soundtouch-backup/README.md)
-* [Getting Started](guides/GETTING-STARTED.md)
-* [SoundTouch Service](guides/SOUNDTOUCH-SERVICE.md)
-* [Initial Device Setup](guides/DEVICE-INITIAL-SETUP.md)
-* [Capture Device Pairing Traffic](guides/CAPTURE-DEVICE-PAIRING.md)
-* [Capture Migration Traffic](guides/CAPTURE-MIGRATION-TRAFFIC.md)
-* [Device Setup Flow](DEVICE-SETUP.md)
-* [MAC Address Mapping](guides/MAC-ADDRESS-MAPPING.md)
-* [HTTPS Setup](guides/HTTPS-SETUP.md)
-* [Deployment](guides/DEPLOYMENT.md)
-* [Raspberry Pi Guide](guides/RASPBERRY-PI.md)
-* [Troubleshooting](guides/TROUBLESHOOTING.md)
-* [IoT Implementation Guide](guides/IOT-IMPLEMENTATION-GUIDE.md)
-* [Migration Guide](guides/MIGRATION-GUIDE.md)
-* [MQTT Integration Design](guides/MQTT-INTEGRATION-DESIGN.md)
-* [Useful Links](#useful-links)
-
-### Useful Links
-* [Cloud Shutdown Survival Guide](guides/SURVIVAL-GUIDE.md)
-* [Raspberry Pi Installer](../scripts/raspberry-pi/README.md)
-* [Updating the Service](../scripts/raspberry-pi/README.md#updating-to-a-new-version)
-* [CLI Reference](guides/CLI-REFERENCE.md)
-
-## Technical Reference
-* [API Cookbook](reference/API-COOKBOOK.md)
-* [API Endpoints](reference/API-ENDPOINTS.md)
-* [Spotify Account Addition](reference/spotify-account-addition.md)
-* [Cloud API Emulation](reference/CLOUD-API.md)
-* [System Endpoints](reference/SYSTEM-ENDPOINTS.md)
-* [Speaker Endpoint](reference/SPEAKER-ENDPOINT.md)
-* [WebSocket Events](reference/WEBSOCKET-EVENTS.md)
-* [Device Pairing Flow](reference/DEVICE-PAIRING-FLOW.md)
-* [Discovery](reference/DISCOVERY.md)
-* [Zone Management](reference/ZONE-MANAGEMENT.md)
-* [Preset Management](reference/PRESET-MANAGEMENT.md)
-* [Source Selection](reference/SOURCE-SELECTION.md)
-* [Volume Controls](reference/VOLUME-CONTROLS.md)
-* [RadioBrowser](reference/radio-browser.md)
-* [Bass Controls](reference/BASS-CONTROLS.md)
-* [Key Controls](reference/KEY-CONTROLS.md)
-* [Feature Mapping](reference/FEATURE-MAPPING.md)
-
-## Concepts
-* [Request Recording](REQUEST_RECORDING_CONCEPT.md)
-* [Spotify Overview](concepts/spotify-overview.md)
-* [Spotify Priming Strategy](concepts/spotify-priming-strategy.md)
-* [Spotify OAuth](concepts/spotify-oauth.md)
-* [Amazon Music OAuth](concepts/amazon-music-oauth.md)
-* [Encrypted Export](concepts/ENCRYPTED-EXPORT.md)
-* [Diagnostic Export (Maintainer Setup)](DIAGNOSTIC-EXPORT.md)
-* [soundtouch-web Roadmap](soundtouch-web-roadmap.md)
-
-## Architecture
-* [Device-Local Install Journeys](architecture/DEVICE-LOCAL-INSTALL.md)
-
-## Analysis & Research
-* [API Coverage Analysis](analysis/API-COVERAGE.md)
-* [Supported URLs](analysis/SUPPORTED-URLS.md)
-* [Upstream URLs](analysis/UPSTREAM-URLS.md)
-* [Anonymization Summary](analysis/ANONYMIZATION-SUMMARY.md)
-* [Device Redirect Methods](analysis/DEVICE-REDIRECT-METHODS.md)
-* [Telnet (Port 17000) Migration Method](analysis/TELNET-MIGRATION-METHOD.md)
-* [Telnet Command Reference](analysis/TELNET-COMMAND-REFERENCE.md)
-* [Setup WebSocket Experiment](analysis/SETUP-WEBSOCKET-EXPERIMENT.md)
-* [Factory Reset Protocol](analysis/FACTORY-RESET-PROTOCOL.md)
-* [Wiki API Comparison](analysis/WIKI-COMPARISON.md)
-* [IoT Config Summary](analysis/IOT-CONFIG-SUMMARY.md)
-* [IoT Configuration Analysis](analysis/IOT-CONFIGURATION-ANALYSIS.md)
-* [Bose Lab Runbook](analysis/BOSE-LAB-RUNBOOK.md)
-* [Missing Routes Spotify](analysis/MISSING-ROUTES-SPOTIFY.md)
-* [Bose App ADB Emulator](analysis/BOSE-APP-ADB-Emulator.md)
-* [Community Tools](analysis/bose-soundtouch-community-tools.md)
-
-## Parity Analysis
-* [Parity Improvements](PARITY-IMPROVEMENTS.md)
-* [Parity SoundCork](PARITY-SOUNDCORK.md)
-* [Parity OpenCloudTouch](PARITY-OPENCLOUDTOUCH.md)
-
-## Appendix (Other Documents)
-* [External Services Abstraction](EXTERNAL-SERVICES-ABSTRACTION.md)
-* [API Navigation Reference](API-NAVIGATION-REFERENCE.md)
-* [Claude Instructions](CLAUDE.md)
-* [Content Selection Implementation](CONTENT-SELECTION-IMPLEMENTATION.md)
-* [Device Customization Setup](DEVICE-CUSTOMIZATION-SETUP.md)
-* [Device Logging](DEVICE-LOGGING.md)
-* [Feature History](FEATURE_HISTORY.md)
-* [Host/Port Parsing](HOST-PORT-PARSING.md)
-* [Manual Network Discovery](MANUAL-NETWORK-DISCOVERY.md)
-* [Navigation Guide](NAVIGATION-GUIDE.md)
-* [Official API Verification](OFFICIAL-API-VERIFICATION.md)
-* [Preset Quickstart](PRESET-QUICKSTART.md)
-* [Project Patterns](PROJECT-PATTERNS.md)
-* [Service Availability Implementation](SERVICE-AVAILABILITY-IMPLEMENTATION.md)
-* [SoundTouch Service Announcement](SOUNDTOUCH-SERVICE-ANNOUNCEMENT.md)
-* [Undocumented Community Features](UNDOCUMENTED-COMMUNITY-FEATURES.md)
-* [Unimplemented Endpoints](UNIMPLEMENTED-ENDPOINTS.md)
-* [Preset Store](preset-store.md)
-* [SCMUDC Enrichment Implementation](SCMUDC-ENRICHMENT-IMPLEMENTATION.md)
-* [Device Lifecycle and Power On Enhancement](device-lifecycle-and-power-on-enhancement.md)
-* [Device Lifecycle Summary](device-lifecycle-summary.md)
-* [Power On Implementation Guide](power-on-implementation-guide.md)
-* [SCMUDC Events Analysis](scmudc-events-analysis.md)
-* [Parity Improvements](PARITY-IMPROVEMENTS.md)
-* [Parity SoundCork](PARITY-SOUNDCORK.md)
-* [Stockholm Port Guide](stockholm-port-guide.md)
diff --git a/docs/_config.yml b/docs/_config.yml
deleted file mode 100644
index db19c33..0000000
--- a/docs/_config.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-title: Bose SoundTouch Toolkit
-description: Documentation for controlling and preserving Bose SoundTouch devices
-remote_theme: pages-themes/minimal@v0.2.0
-plugins:
- - jekyll-remote-theme
- - jekyll-relative-links
-relative_links:
- enabled: true
- collections: true
-include:
- - SUMMARY.md
diff --git a/docs/content/_index.md b/docs/content/_index.md
new file mode 100644
index 0000000..b5d9477
--- /dev/null
+++ b/docs/content/_index.md
@@ -0,0 +1,65 @@
+---
+title: AfterTouch
+layout: hextra-home
+---
+
+{{< hextra/hero-badge >}}
+
+ Free, open source
+ {{< icon name="arrow-circle-right" attributes="height=14" >}}
+{{< /hextra/hero-badge >}}
+
+
+{{< hextra/hero-headline >}}
+ Keep Your Bose SoundTouch Speakers Alive
+{{< /hextra/hero-headline >}}
+
+
+
+{{< hextra/hero-subtitle >}}
+ Bose shut down SoundTouch cloud services on May 6, 2026.
AfterTouch replaces the cloud — presets, music browsing, stereo pairing, all restored.
+{{< /hextra/hero-subtitle >}}
+
+
+
+{{< hextra/hero-button text="Get Started" link="/docs/guides/GETTING-STARTED" >}}
+{{< hextra/hero-button text="Survival Guide" link="/docs/guides/SURVIVAL-GUIDE" style="outline" >}}
+
+
+
+{{< hextra/feature-grid >}}
+ {{< hextra/feature-card
+ title="Presets Restored"
+ subtitle="Preset buttons, long-press assignment, and recently-played sync — fully working."
+ icon="star"
+ >}}
+ {{< hextra/feature-card
+ title="Music Browsing"
+ subtitle="TuneIn, Internet Radio, RadioBrowser, and Spotify via soundtouch-web and soundtouch-cli."
+ icon="speakerphone"
+ >}}
+ {{< hextra/feature-card
+ title="Stereo Pairing"
+ subtitle="SoundTouch 10 stereo pairing via soundtouch-cli, no Bose cloud required."
+ icon="adjustments"
+ >}}
+ {{< hextra/feature-card
+ title="Three Deployment Options"
+ subtitle="Run on a Raspberry Pi, a VPS, or directly on the speaker itself."
+ icon="server"
+ link="/docs/guides/DEPLOYMENT-OVERVIEW"
+ >}}
+ {{< hextra/feature-card
+ title="CLI Control"
+ subtitle="soundtouch-cli for scripting, home automation, and direct device control."
+ icon="terminal"
+ link="/docs/guides/CLI-REFERENCE"
+ >}}
+ {{< hextra/feature-card
+ title="Open Source"
+ subtitle="MIT licensed. Not affiliated with Bose Corporation."
+ icon="shield-check"
+ link="https://github.com/gesellix/Bose-SoundTouch"
+ >}}
+{{< /hextra/feature-grid >}}
+
diff --git a/docs/content/blog/_index.md b/docs/content/blog/_index.md
new file mode 100644
index 0000000..dd75b9b
--- /dev/null
+++ b/docs/content/blog/_index.md
@@ -0,0 +1,3 @@
+---
+title: News & Updates
+---
diff --git a/docs/API-NAVIGATION-REFERENCE.md b/docs/content/docs/API-NAVIGATION-REFERENCE.md
similarity index 99%
rename from docs/API-NAVIGATION-REFERENCE.md
rename to docs/content/docs/API-NAVIGATION-REFERENCE.md
index c97d220..f95970e 100644
--- a/docs/API-NAVIGATION-REFERENCE.md
+++ b/docs/content/docs/API-NAVIGATION-REFERENCE.md
@@ -1,3 +1,7 @@
+---
+title: "Navigation API Reference"
+---
+
# Navigation API Reference
## Overview
diff --git a/docs/CLAUDE.md b/docs/content/docs/CLAUDE.md
similarity index 98%
rename from docs/CLAUDE.md
rename to docs/content/docs/CLAUDE.md
index 41e7e38..4050876 100644
--- a/docs/CLAUDE.md
+++ b/docs/content/docs/CLAUDE.md
@@ -1,3 +1,7 @@
+---
+title: "CLAUDE.md - Development Guidelines for Bose SoundTouch Project"
+---
+
# CLAUDE.md - Development Guidelines for Bose SoundTouch Project
## Documentation Overview
diff --git a/docs/CONTENT-SELECTION-IMPLEMENTATION.md b/docs/content/docs/CONTENT-SELECTION-IMPLEMENTATION.md
similarity index 99%
rename from docs/CONTENT-SELECTION-IMPLEMENTATION.md
rename to docs/content/docs/CONTENT-SELECTION-IMPLEMENTATION.md
index 71f018a..d5c1112 100644
--- a/docs/CONTENT-SELECTION-IMPLEMENTATION.md
+++ b/docs/content/docs/CONTENT-SELECTION-IMPLEMENTATION.md
@@ -1,3 +1,7 @@
+---
+title: "Content Selection Implementation Summary"
+---
+
# Content Selection Implementation Summary
This document summarizes the implementation of advanced content selection features for the Bose SoundTouch Go client, including full support for the LOCAL_INTERNET_RADIO streamUrl format and LOCAL_MUSIC/STORED_MUSIC content selection.
diff --git a/docs/DEVICE-CUSTOMIZATION-SETUP.md b/docs/content/docs/DEVICE-CUSTOMIZATION-SETUP.md
similarity index 98%
rename from docs/DEVICE-CUSTOMIZATION-SETUP.md
rename to docs/content/docs/DEVICE-CUSTOMIZATION-SETUP.md
index 275c564..646bcf5 100644
--- a/docs/DEVICE-CUSTOMIZATION-SETUP.md
+++ b/docs/content/docs/DEVICE-CUSTOMIZATION-SETUP.md
@@ -1,3 +1,7 @@
+---
+title: "Device Customization Setup Guide"
+---
+
# Device Customization Setup Guide
This guide documents the manual steps required to configure your Bose SoundTouch device for customization using the SoundCork approach.
diff --git a/docs/DEVICE-LOGGING.md b/docs/content/docs/DEVICE-LOGGING.md
similarity index 99%
rename from docs/DEVICE-LOGGING.md
rename to docs/content/docs/DEVICE-LOGGING.md
index f17a98f..9509ef5 100644
--- a/docs/DEVICE-LOGGING.md
+++ b/docs/content/docs/DEVICE-LOGGING.md
@@ -1,3 +1,7 @@
+---
+title: "Device Logging & Troubleshooting"
+---
+
# Device Logging & Troubleshooting
Accessing logs from SoundTouch devices is critical for debugging custom service integrations and understanding internal device behavior. This document outlines the methods for collecting logs, as discovered by the **SoundCork** and **ÜberBöse API** communities.
diff --git a/docs/DEVICE-SETUP.md b/docs/content/docs/DEVICE-SETUP.md
similarity index 99%
rename from docs/DEVICE-SETUP.md
rename to docs/content/docs/DEVICE-SETUP.md
index cc85416..7dbd2a8 100644
--- a/docs/DEVICE-SETUP.md
+++ b/docs/content/docs/DEVICE-SETUP.md
@@ -1,3 +1,7 @@
+---
+title: "Bose SoundTouch Device Setup Flow"
+---
+
# Bose SoundTouch Device Setup Flow
This document details the multi-step process required to fully set up a Bose SoundTouch device, as derived from the Stockholm firmware (`setup/js/`) analysis.
diff --git a/docs/DIAGNOSTIC-EXPORT.md b/docs/content/docs/DIAGNOSTIC-EXPORT.md
similarity index 98%
rename from docs/DIAGNOSTIC-EXPORT.md
rename to docs/content/docs/DIAGNOSTIC-EXPORT.md
index 73b73ae..fee72ab 100644
--- a/docs/DIAGNOSTIC-EXPORT.md
+++ b/docs/content/docs/DIAGNOSTIC-EXPORT.md
@@ -1,3 +1,7 @@
+---
+title: "Encrypted Diagnostic Export"
+---
+
# Encrypted Diagnostic Export
AfterTouch can produce an encrypted diagnostic report that users can download and
diff --git a/docs/EXTERNAL-SERVICES-ABSTRACTION.md b/docs/content/docs/EXTERNAL-SERVICES-ABSTRACTION.md
similarity index 97%
rename from docs/EXTERNAL-SERVICES-ABSTRACTION.md
rename to docs/content/docs/EXTERNAL-SERVICES-ABSTRACTION.md
index e8843fa..ff7834c 100644
--- a/docs/EXTERNAL-SERVICES-ABSTRACTION.md
+++ b/docs/content/docs/EXTERNAL-SERVICES-ABSTRACTION.md
@@ -1,3 +1,7 @@
+---
+title: "Technical Proposal: External Service Provider Abstraction"
+---
+
# Technical Proposal: External Service Provider Abstraction
This document outlines a strategy to refactor the SoundTouch Service's content handling into a modular provider-based system.
diff --git a/docs/FEATURE_HISTORY.md b/docs/content/docs/FEATURE_HISTORY.md
similarity index 99%
rename from docs/FEATURE_HISTORY.md
rename to docs/content/docs/FEATURE_HISTORY.md
index fbc5c16..4f91867 100644
--- a/docs/FEATURE_HISTORY.md
+++ b/docs/content/docs/FEATURE_HISTORY.md
@@ -1,3 +1,7 @@
+---
+title: "Feature Development History"
+---
+
# Feature Development History
This document tracks the detailed evolution of features and capabilities in the Bose SoundTouch API client library.
diff --git a/docs/HOST-PORT-PARSING.md b/docs/content/docs/HOST-PORT-PARSING.md
similarity index 99%
rename from docs/HOST-PORT-PARSING.md
rename to docs/content/docs/HOST-PORT-PARSING.md
index b664de4..f3a6136 100644
--- a/docs/HOST-PORT-PARSING.md
+++ b/docs/content/docs/HOST-PORT-PARSING.md
@@ -1,3 +1,7 @@
+---
+title: "Host:Port Parsing Feature"
+---
+
# Host:Port Parsing Feature
This document describes the automatic host:port parsing functionality added to the SoundTouch CLI, which allows users to specify both host and port in a single `-host` flag.
diff --git a/docs/MANUAL-NETWORK-DISCOVERY.md b/docs/content/docs/MANUAL-NETWORK-DISCOVERY.md
similarity index 99%
rename from docs/MANUAL-NETWORK-DISCOVERY.md
rename to docs/content/docs/MANUAL-NETWORK-DISCOVERY.md
index 84bb889..3ab044c 100644
--- a/docs/MANUAL-NETWORK-DISCOVERY.md
+++ b/docs/content/docs/MANUAL-NETWORK-DISCOVERY.md
@@ -1,3 +1,7 @@
+---
+title: "Manual Network Discovery on macOS"
+---
+
# Manual Network Discovery on macOS
This document provides comprehensive guidance for manually discovering network services and devices using built-in macOS tools and command-line utilities. This is particularly useful for troubleshooting network discovery issues or understanding what services are available on your local network.
diff --git a/docs/NAVIGATION-GUIDE.md b/docs/content/docs/NAVIGATION-GUIDE.md
similarity index 99%
rename from docs/NAVIGATION-GUIDE.md
rename to docs/content/docs/NAVIGATION-GUIDE.md
index 3d5f1dc..23bcd6d 100644
--- a/docs/NAVIGATION-GUIDE.md
+++ b/docs/content/docs/NAVIGATION-GUIDE.md
@@ -1,3 +1,7 @@
+---
+title: "Navigation and Station Management Guide"
+---
+
# Navigation and Station Management Guide
## Overview
diff --git a/docs/OFFICIAL-API-VERIFICATION.md b/docs/content/docs/OFFICIAL-API-VERIFICATION.md
similarity index 99%
rename from docs/OFFICIAL-API-VERIFICATION.md
rename to docs/content/docs/OFFICIAL-API-VERIFICATION.md
index 0f612c4..f9f142b 100644
--- a/docs/OFFICIAL-API-VERIFICATION.md
+++ b/docs/content/docs/OFFICIAL-API-VERIFICATION.md
@@ -1,3 +1,7 @@
+---
+title: "Official SoundTouch Web API Verification"
+---
+
# Official SoundTouch Web API Verification
**Source**: Official Bose SoundTouch Web API v1.0 Documentation (January 7, 2026)
diff --git a/docs/PARITY-IMPROVEMENTS.md b/docs/content/docs/PARITY-IMPROVEMENTS.md
similarity index 99%
rename from docs/PARITY-IMPROVEMENTS.md
rename to docs/content/docs/PARITY-IMPROVEMENTS.md
index a102e24..7e43889 100644
--- a/docs/PARITY-IMPROVEMENTS.md
+++ b/docs/content/docs/PARITY-IMPROVEMENTS.md
@@ -1,3 +1,7 @@
+---
+title: "Parity Improvements"
+---
+
### Overview of Recent Improvements and Next Steps
This document summarizes the improvements made to the **Marge service** to improve parity with the upstream Bose SoundTouch service, along with open issues and proposed next steps.
diff --git a/docs/PARITY-OPENCLOUDTOUCH.md b/docs/content/docs/PARITY-OPENCLOUDTOUCH.md
similarity index 97%
rename from docs/PARITY-OPENCLOUDTOUCH.md
rename to docs/content/docs/PARITY-OPENCLOUDTOUCH.md
index fa1cd02..b488cb3 100644
--- a/docs/PARITY-OPENCLOUDTOUCH.md
+++ b/docs/content/docs/PARITY-OPENCLOUDTOUCH.md
@@ -1,3 +1,7 @@
+---
+title: "Parity Analysis: Bose-SoundTouch (Go) vs. OpenCloudTouch (Python)"
+---
+
# Parity Analysis: Bose-SoundTouch (Go) vs. OpenCloudTouch (Python)
This document provides a comparative analysis of the current Go implementation and the `scheilch/opencloudtouch` project, identifying functional gaps and potential improvements.
diff --git a/docs/PARITY-SOUNDCORK.md b/docs/content/docs/PARITY-SOUNDCORK.md
similarity index 98%
rename from docs/PARITY-SOUNDCORK.md
rename to docs/content/docs/PARITY-SOUNDCORK.md
index 4764a15..1a15112 100644
--- a/docs/PARITY-SOUNDCORK.md
+++ b/docs/content/docs/PARITY-SOUNDCORK.md
@@ -1,3 +1,7 @@
+---
+title: "Parity Analysis: Bose-SoundTouch (Go) vs. SoundCork (Python)"
+---
+
# Parity Analysis: Bose-SoundTouch (Go) vs. SoundCork (Python)
This document provides a comparative analysis of the current Go implementation and the `deborahgu/soundcork` project, identifying functional gaps and potential improvements.
diff --git a/docs/PRESET-QUICKSTART.md b/docs/content/docs/PRESET-QUICKSTART.md
similarity index 99%
rename from docs/PRESET-QUICKSTART.md
rename to docs/content/docs/PRESET-QUICKSTART.md
index 4b5d011..dc8401d 100644
--- a/docs/PRESET-QUICKSTART.md
+++ b/docs/content/docs/PRESET-QUICKSTART.md
@@ -1,3 +1,7 @@
+---
+title: "Preset Management Quick Start Guide"
+---
+
# Preset Management Quick Start Guide
**Save your favorite music, radio stations, and playlists as 1-6 presets for instant access.**
diff --git a/docs/PROJECT-PATTERNS.md b/docs/content/docs/PROJECT-PATTERNS.md
similarity index 99%
rename from docs/PROJECT-PATTERNS.md
rename to docs/content/docs/PROJECT-PATTERNS.md
index f45237e..b098df8 100644
--- a/docs/PROJECT-PATTERNS.md
+++ b/docs/content/docs/PROJECT-PATTERNS.md
@@ -1,3 +1,7 @@
+---
+title: "Project Structure Patterns: Bose SoundTouch API Client"
+---
+
# Project Structure Patterns: Bose SoundTouch API Client
## Summary for Reuse in API Client Projects
diff --git a/docs/REQUEST_RECORDING_CONCEPT.md b/docs/content/docs/REQUEST_RECORDING_CONCEPT.md
similarity index 99%
rename from docs/REQUEST_RECORDING_CONCEPT.md
rename to docs/content/docs/REQUEST_RECORDING_CONCEPT.md
index 3641708..cadb1ea 100644
--- a/docs/REQUEST_RECORDING_CONCEPT.md
+++ b/docs/content/docs/REQUEST_RECORDING_CONCEPT.md
@@ -1,3 +1,7 @@
+---
+title: "Request Recording Concept"
+---
+
# Request Recording Concept
## Problem Statement
diff --git a/docs/SCMUDC-ENRICHMENT-IMPLEMENTATION.md b/docs/content/docs/SCMUDC-ENRICHMENT-IMPLEMENTATION.md
similarity index 99%
rename from docs/SCMUDC-ENRICHMENT-IMPLEMENTATION.md
rename to docs/content/docs/SCMUDC-ENRICHMENT-IMPLEMENTATION.md
index 07fba48..f11635d 100644
--- a/docs/SCMUDC-ENRICHMENT-IMPLEMENTATION.md
+++ b/docs/content/docs/SCMUDC-ENRICHMENT-IMPLEMENTATION.md
@@ -1,3 +1,7 @@
+---
+title: "SCMUDC Enrichment Implementation Summary"
+---
+
# SCMUDC Enrichment Implementation Summary
## Overview
diff --git a/docs/SERVICE-AVAILABILITY-IMPLEMENTATION.md b/docs/content/docs/SERVICE-AVAILABILITY-IMPLEMENTATION.md
similarity index 99%
rename from docs/SERVICE-AVAILABILITY-IMPLEMENTATION.md
rename to docs/content/docs/SERVICE-AVAILABILITY-IMPLEMENTATION.md
index 01d439e..22ed32b 100644
--- a/docs/SERVICE-AVAILABILITY-IMPLEMENTATION.md
+++ b/docs/content/docs/SERVICE-AVAILABILITY-IMPLEMENTATION.md
@@ -1,3 +1,7 @@
+---
+title: "Service Availability Implementation Summary"
+---
+
# Service Availability Implementation Summary
## Overview
diff --git a/docs/SOUNDTOUCH-SERVICE-ANNOUNCEMENT.md b/docs/content/docs/SOUNDTOUCH-SERVICE-ANNOUNCEMENT.md
similarity index 98%
rename from docs/SOUNDTOUCH-SERVICE-ANNOUNCEMENT.md
rename to docs/content/docs/SOUNDTOUCH-SERVICE-ANNOUNCEMENT.md
index a3824a1..a2bb715 100644
--- a/docs/SOUNDTOUCH-SERVICE-ANNOUNCEMENT.md
+++ b/docs/content/docs/SOUNDTOUCH-SERVICE-ANNOUNCEMENT.md
@@ -1,3 +1,7 @@
+---
+title: "🎉 Introducing SoundTouch Service: Local Cloud Service Emulation"
+---
+
# 🎉 Introducing SoundTouch Service: Local Cloud Service Emulation
**Date**: February 2026
diff --git a/docs/UNDOCUMENTED-COMMUNITY-FEATURES.md b/docs/content/docs/UNDOCUMENTED-COMMUNITY-FEATURES.md
similarity index 98%
rename from docs/UNDOCUMENTED-COMMUNITY-FEATURES.md
rename to docs/content/docs/UNDOCUMENTED-COMMUNITY-FEATURES.md
index 4412dba..7b17d28 100644
--- a/docs/UNDOCUMENTED-COMMUNITY-FEATURES.md
+++ b/docs/content/docs/UNDOCUMENTED-COMMUNITY-FEATURES.md
@@ -1,3 +1,7 @@
+---
+title: "Undocumented Community Features & API Discoveries"
+---
+
# Undocumented Community Features & API Discoveries
This document captures advanced API endpoints and device behaviors discovered by the SoundTouch community through reverse engineering projects like **SoundCork** and **ÜberBöse API**. These features are not documented in the official Bose SoundTouch Web API v1.0 but are crucial for full device emulation and offline operation.
## Cloud Emulation (Marge/BMX) Discoveries
diff --git a/docs/UNIMPLEMENTED-ENDPOINTS.md b/docs/content/docs/UNIMPLEMENTED-ENDPOINTS.md
similarity index 99%
rename from docs/UNIMPLEMENTED-ENDPOINTS.md
rename to docs/content/docs/UNIMPLEMENTED-ENDPOINTS.md
index dfc9206..e8e2941 100644
--- a/docs/UNIMPLEMENTED-ENDPOINTS.md
+++ b/docs/content/docs/UNIMPLEMENTED-ENDPOINTS.md
@@ -1,3 +1,7 @@
+---
+title: "Unimplemented SoundTouch API Endpoints"
+---
+
# Unimplemented SoundTouch API Endpoints
**Last Updated:** January 2026
diff --git a/docs/README.md b/docs/content/docs/_index.md
similarity index 93%
rename from docs/README.md
rename to docs/content/docs/_index.md
index 4a61eda..d31cfe5 100644
--- a/docs/README.md
+++ b/docs/content/docs/_index.md
@@ -1,3 +1,9 @@
+---
+title: Introduction
+sidebar:
+ open: true
+---
+
# Bose SoundTouch Toolkit Documentation
Welcome to the documentation for the Bose SoundTouch Toolkit. This comprehensive toolkit helps you keep your Bose SoundTouch speakers functional even after the Bose Cloud shutdown in May 2026, with enhanced local management and monitoring capabilities.
@@ -10,7 +16,7 @@ Welcome to the documentation for the Bose SoundTouch Toolkit. This comprehensive
### For Existing Users
- **[Cloud Shutdown Survival Guide](guides/SURVIVAL-GUIDE.md)** - Prepare for the May 2026 shutdown
-- **[Backup Tool](../cmd/soundtouch-backup/README.md)** - Back up your cloud account and speaker data before shutdown
+- **[Backup Tool](https://github.com/gesellix/Bose-SoundTouch/blob/main/cmd/soundtouch-backup/README.md)** - Back up your cloud account and speaker data before shutdown
- **[SoundTouch Service Guide](guides/SOUNDTOUCH-SERVICE.md)** - Advanced service configuration
## 📋 Essential Documentation
@@ -41,7 +47,7 @@ The documentation is organized into three main categories:
### Advanced Features
- [MAC Address Mapping](guides/MAC-ADDRESS-MAPPING.md) - Device identification
- [CLI Reference](guides/CLI-REFERENCE.md) - Command-line tools
-- [Backup Tool](../cmd/soundtouch-backup/README.md) - Cloud account and speaker data backup
+- [Backup Tool](https://github.com/gesellix/Bose-SoundTouch/blob/main/cmd/soundtouch-backup/README.md) - Cloud account and speaker data backup
- [IoT Implementation Guide](guides/IOT-IMPLEMENTATION-GUIDE.md) - IoT integrations
- [MQTT Integration Design](guides/MQTT-INTEGRATION-DESIGN.md) - MQTT setup
diff --git a/docs/analysis/ANONYMIZATION-SUMMARY.md b/docs/content/docs/analysis/ANONYMIZATION-SUMMARY.md
similarity index 98%
rename from docs/analysis/ANONYMIZATION-SUMMARY.md
rename to docs/content/docs/analysis/ANONYMIZATION-SUMMARY.md
index 694a80c..db97e07 100644
--- a/docs/analysis/ANONYMIZATION-SUMMARY.md
+++ b/docs/content/docs/analysis/ANONYMIZATION-SUMMARY.md
@@ -1,3 +1,7 @@
+---
+title: "Placeholder values for examples"
+---
+
# Placeholder values for examples
This repo is public. Documentation, READMEs, example configs, and test
diff --git a/docs/analysis/API-COVERAGE.md b/docs/content/docs/analysis/API-COVERAGE.md
similarity index 99%
rename from docs/analysis/API-COVERAGE.md
rename to docs/content/docs/analysis/API-COVERAGE.md
index cf56e8f..ecf5ddf 100644
--- a/docs/analysis/API-COVERAGE.md
+++ b/docs/content/docs/analysis/API-COVERAGE.md
@@ -1,3 +1,7 @@
+---
+title: "Bose SoundTouch API Coverage Analysis"
+---
+
# Bose SoundTouch API Coverage Analysis
**Last Updated:** February 2026
diff --git a/docs/analysis/BOSE-APP-ADB-Emulator.md b/docs/content/docs/analysis/BOSE-APP-ADB-Emulator.md
similarity index 99%
rename from docs/analysis/BOSE-APP-ADB-Emulator.md
rename to docs/content/docs/analysis/BOSE-APP-ADB-Emulator.md
index aafaa09..dbdb37e 100644
--- a/docs/analysis/BOSE-APP-ADB-Emulator.md
+++ b/docs/content/docs/analysis/BOSE-APP-ADB-Emulator.md
@@ -1,3 +1,7 @@
+---
+title: "Bose SoundTouch Traffic Interception Runbook"
+---
+
# Bose SoundTouch Traffic Interception Runbook
Intercept HTTPS/WebSocket traffic from the Bose SoundTouch Android app using an Android emulator, mitmproxy, and Frida. Tested on Apple Silicon (ARM64) Mac.
diff --git a/docs/analysis/BOSE-LAB-RUNBOOK.md b/docs/content/docs/analysis/BOSE-LAB-RUNBOOK.md
similarity index 99%
rename from docs/analysis/BOSE-LAB-RUNBOOK.md
rename to docs/content/docs/analysis/BOSE-LAB-RUNBOOK.md
index 8059e88..d40f16b 100644
--- a/docs/analysis/BOSE-LAB-RUNBOOK.md
+++ b/docs/content/docs/analysis/BOSE-LAB-RUNBOOK.md
@@ -1,3 +1,7 @@
+---
+title: "Bose SoundTouch – Traffic Analysis Runbook"
+---
+
# Bose SoundTouch – Traffic Analysis Runbook
> **Goal:** Set up a Raspberry Pi as a transparent access point to fully observe the traffic of the Bose SoundTouch app – specifically the pairing flow with the Bose Cloud. This serves as a basis for later reverse engineering / simulation of the cloud endpoints.
diff --git a/docs/analysis/DEVICE-REDIRECT-METHODS.md b/docs/content/docs/analysis/DEVICE-REDIRECT-METHODS.md
similarity index 99%
rename from docs/analysis/DEVICE-REDIRECT-METHODS.md
rename to docs/content/docs/analysis/DEVICE-REDIRECT-METHODS.md
index 6a98cb0..cc40c0b 100644
--- a/docs/analysis/DEVICE-REDIRECT-METHODS.md
+++ b/docs/content/docs/analysis/DEVICE-REDIRECT-METHODS.md
@@ -1,3 +1,7 @@
+---
+title: "Device Redirect Methods & Custom Service Setup"
+---
+
# Device Redirect Methods & Custom Service Setup
To enable offline operation or use custom services like **SoundCork** or **ÜberBöse API**, SoundTouch devices must be redirected from Bose's official cloud endpoints to a local or custom server. This document outlines the three known methods to achieve this, gathered from community reverse-engineering efforts in the **SoundCork** and **ÜberBöse API** projects.
diff --git a/docs/analysis/FACTORY-RESET-PROTOCOL.md b/docs/content/docs/analysis/FACTORY-RESET-PROTOCOL.md
similarity index 99%
rename from docs/analysis/FACTORY-RESET-PROTOCOL.md
rename to docs/content/docs/analysis/FACTORY-RESET-PROTOCOL.md
index b91f10e..6109a9a 100644
--- a/docs/analysis/FACTORY-RESET-PROTOCOL.md
+++ b/docs/content/docs/analysis/FACTORY-RESET-PROTOCOL.md
@@ -1,3 +1,7 @@
+---
+title: "What a SoundTouch speaker does during factory reset"
+---
+
# What a SoundTouch speaker does during factory reset
Observed live on ST10 firmware `27.0.6.46330.5043500` (build `epdbuild.trunk.hepdswbld04.2022-08-04`) on 2026-05-12, by running `soundtouch-cli setup factory-reset` and tailing the speaker's `logread` over SSH. The trace is preserved at `_/logs/factory-reset.txt` for reference.
diff --git a/docs/analysis/IOT-CONFIG-SUMMARY.md b/docs/content/docs/analysis/IOT-CONFIG-SUMMARY.md
similarity index 99%
rename from docs/analysis/IOT-CONFIG-SUMMARY.md
rename to docs/content/docs/analysis/IOT-CONFIG-SUMMARY.md
index bf8322b..62a14d3 100644
--- a/docs/analysis/IOT-CONFIG-SUMMARY.md
+++ b/docs/content/docs/analysis/IOT-CONFIG-SUMMARY.md
@@ -1,3 +1,7 @@
+---
+title: "IoT Configuration Quick Reference"
+---
+
# IoT Configuration Quick Reference
## Key Files and Locations
diff --git a/docs/analysis/IOT-CONFIGURATION-ANALYSIS.md b/docs/content/docs/analysis/IOT-CONFIGURATION-ANALYSIS.md
similarity index 99%
rename from docs/analysis/IOT-CONFIGURATION-ANALYSIS.md
rename to docs/content/docs/analysis/IOT-CONFIGURATION-ANALYSIS.md
index 0b515df..34c1f34 100644
--- a/docs/analysis/IOT-CONFIGURATION-ANALYSIS.md
+++ b/docs/content/docs/analysis/IOT-CONFIGURATION-ANALYSIS.md
@@ -1,3 +1,7 @@
+---
+title: "IoT Configuration Analysis"
+---
+
# IoT Configuration Analysis
## Overview
diff --git a/docs/analysis/MISSING-ROUTES-SPOTIFY.md b/docs/content/docs/analysis/MISSING-ROUTES-SPOTIFY.md
similarity index 97%
rename from docs/analysis/MISSING-ROUTES-SPOTIFY.md
rename to docs/content/docs/analysis/MISSING-ROUTES-SPOTIFY.md
index 4183b91..61a0c91 100644
--- a/docs/analysis/MISSING-ROUTES-SPOTIFY.md
+++ b/docs/content/docs/analysis/MISSING-ROUTES-SPOTIFY.md
@@ -1,3 +1,7 @@
+---
+title: "Spotify Account Addition Implementation Status"
+---
+
# Spotify Account Addition Implementation Status
To fully replace Bose cloud services for the Spotify account addition flow in the "Stockholm" SoundTouch application, the following routes have been implemented in the `soundtouch-service`:
diff --git a/docs/analysis/SETUP-WEBSOCKET-EXPERIMENT.md b/docs/content/docs/analysis/SETUP-WEBSOCKET-EXPERIMENT.md
similarity index 99%
rename from docs/analysis/SETUP-WEBSOCKET-EXPERIMENT.md
rename to docs/content/docs/analysis/SETUP-WEBSOCKET-EXPERIMENT.md
index 2ddea3e..dc533cc 100644
--- a/docs/analysis/SETUP-WEBSOCKET-EXPERIMENT.md
+++ b/docs/content/docs/analysis/SETUP-WEBSOCKET-EXPERIMENT.md
@@ -1,3 +1,7 @@
+---
+title: "Experiment: Does bare `setMargeAccount` work outside the SETUP bracket?"
+---
+
# Experiment: Does bare `setMargeAccount` work outside the SETUP bracket?
## Why we are doing this
diff --git a/docs/analysis/SUPPORTED-URLS.md b/docs/content/docs/analysis/SUPPORTED-URLS.md
similarity index 99%
rename from docs/analysis/SUPPORTED-URLS.md
rename to docs/content/docs/analysis/SUPPORTED-URLS.md
index 8e83735..c207d2b 100644
--- a/docs/analysis/SUPPORTED-URLS.md
+++ b/docs/content/docs/analysis/SUPPORTED-URLS.md
@@ -1,3 +1,7 @@
+---
+title: "SoundTouch supportedURLs Endpoint Analysis"
+---
+
# SoundTouch supportedURLs Endpoint Analysis
This document provides a comprehensive analysis of the `/supportedURLs` endpoint response from real Bose SoundTouch devices and compares it with our current implementation.
diff --git a/docs/analysis/TELNET-COMMAND-REFERENCE.md b/docs/content/docs/analysis/TELNET-COMMAND-REFERENCE.md
similarity index 99%
rename from docs/analysis/TELNET-COMMAND-REFERENCE.md
rename to docs/content/docs/analysis/TELNET-COMMAND-REFERENCE.md
index 188f6a4..b0d7bfd 100644
--- a/docs/analysis/TELNET-COMMAND-REFERENCE.md
+++ b/docs/content/docs/analysis/TELNET-COMMAND-REFERENCE.md
@@ -1,3 +1,7 @@
+---
+title: "Bose SoundTouch Telnet (Port 17000) Command Reference"
+---
+
# Bose SoundTouch Telnet (Port 17000) Command Reference
A consolidated reference for the diagnostic shell that listens on TCP port
diff --git a/docs/analysis/TELNET-MIGRATION-METHOD.md b/docs/content/docs/analysis/TELNET-MIGRATION-METHOD.md
similarity index 99%
rename from docs/analysis/TELNET-MIGRATION-METHOD.md
rename to docs/content/docs/analysis/TELNET-MIGRATION-METHOD.md
index 1b8e571..b4e3a47 100644
--- a/docs/analysis/TELNET-MIGRATION-METHOD.md
+++ b/docs/content/docs/analysis/TELNET-MIGRATION-METHOD.md
@@ -1,3 +1,7 @@
+---
+title: "Telnet (Port 17000) Migration Method — Analysis"
+---
+
# Telnet (Port 17000) Migration Method — Analysis
This document captures the use cases, community findings, and feasibility analysis
diff --git a/docs/analysis/UPSTREAM-URLS.md b/docs/content/docs/analysis/UPSTREAM-URLS.md
similarity index 98%
rename from docs/analysis/UPSTREAM-URLS.md
rename to docs/content/docs/analysis/UPSTREAM-URLS.md
index 8198b2b..c1e47d8 100644
--- a/docs/analysis/UPSTREAM-URLS.md
+++ b/docs/content/docs/analysis/UPSTREAM-URLS.md
@@ -1,3 +1,7 @@
+---
+title: "Upstream URLs & Domains Analysis"
+---
+
# Upstream URLs & Domains Analysis
This document provides a comprehensive overview of the upstream Bose cloud services and domains that SoundTouch devices communicate with. These details were gathered from firmware analysis of ST10/ST20 devices, binary string extraction, and community research from the **SoundCork** project (Issue #128).
diff --git a/docs/analysis/WIKI-COMPARISON.md b/docs/content/docs/analysis/WIKI-COMPARISON.md
similarity index 99%
rename from docs/analysis/WIKI-COMPARISON.md
rename to docs/content/docs/analysis/WIKI-COMPARISON.md
index ab5514f..7f602ac 100644
--- a/docs/analysis/WIKI-COMPARISON.md
+++ b/docs/content/docs/analysis/WIKI-COMPARISON.md
@@ -1,3 +1,7 @@
+---
+title: "SoundTouch API Comparison: Community Wiki vs Current Implementation"
+---
+
# SoundTouch API Comparison: Community Wiki vs Current Implementation
**Date:** January 2026
diff --git a/docs/analysis/bose-soundtouch-community-tools.md b/docs/content/docs/analysis/bose-soundtouch-community-tools.md
similarity index 99%
rename from docs/analysis/bose-soundtouch-community-tools.md
rename to docs/content/docs/analysis/bose-soundtouch-community-tools.md
index 2de2b6f..f49ce58 100644
--- a/docs/analysis/bose-soundtouch-community-tools.md
+++ b/docs/content/docs/analysis/bose-soundtouch-community-tools.md
@@ -1,3 +1,7 @@
+---
+title: "Bose SoundTouch — Community Tools for Post-EOL Preservation"
+---
+
# Bose SoundTouch — Community Tools for Post-EOL Preservation
> **Context:** Bose announced the shutdown of SoundTouch cloud services, extended to **May 6, 2026**. On that date the official SoundTouch app will update to a local-only version. Bose has released the [SoundTouch Web API documentation](https://assets.bosecreative.com/m/496577402d128874/original/SoundTouch-Web-API.pdf) as open-source to enable community-driven development. This document surveys the active community projects, their feature coverage, and open development opportunities.
diff --git a/docs/architecture/DEVICE-LOCAL-INSTALL.md b/docs/content/docs/architecture/DEVICE-LOCAL-INSTALL.md
similarity index 99%
rename from docs/architecture/DEVICE-LOCAL-INSTALL.md
rename to docs/content/docs/architecture/DEVICE-LOCAL-INSTALL.md
index 35b526f..16ac3da 100644
--- a/docs/architecture/DEVICE-LOCAL-INSTALL.md
+++ b/docs/content/docs/architecture/DEVICE-LOCAL-INSTALL.md
@@ -1,3 +1,7 @@
+---
+title: "Device-Local Install: Four User Journeys"
+---
+
# Device-Local Install: Four User Journeys
> **Looking for how to actually install AfterTouch?**
diff --git a/docs/concepts/ENCRYPTED-EXPORT.md b/docs/content/docs/concepts/ENCRYPTED-EXPORT.md
similarity index 99%
rename from docs/concepts/ENCRYPTED-EXPORT.md
rename to docs/content/docs/concepts/ENCRYPTED-EXPORT.md
index dd0241c..dc8cb89 100644
--- a/docs/concepts/ENCRYPTED-EXPORT.md
+++ b/docs/content/docs/concepts/ENCRYPTED-EXPORT.md
@@ -1,3 +1,7 @@
+---
+title: "Encrypting Sensitive Data Exports with SSH/age or GPG"
+---
+
# Encrypting Sensitive Data Exports with SSH/age or GPG
## Problem
diff --git a/docs/concepts/amazon-music-oauth.md b/docs/content/docs/concepts/amazon-music-oauth.md
similarity index 99%
rename from docs/concepts/amazon-music-oauth.md
rename to docs/content/docs/concepts/amazon-music-oauth.md
index 9b7a60c..f638148 100644
--- a/docs/concepts/amazon-music-oauth.md
+++ b/docs/content/docs/concepts/amazon-music-oauth.md
@@ -1,3 +1,7 @@
+---
+title: "Amazon Music OAuth Integration"
+---
+
# Amazon Music OAuth Integration
This document describes the plan and specification for adding Amazon Music OAuth support to the SoundTouch service, enabling continued Amazon Music playback after the Bose cloud shutdown (May 2026).
diff --git a/docs/concepts/spotify-oauth.md b/docs/content/docs/concepts/spotify-oauth.md
similarity index 99%
rename from docs/concepts/spotify-oauth.md
rename to docs/content/docs/concepts/spotify-oauth.md
index 216da5e..693ac91 100644
--- a/docs/concepts/spotify-oauth.md
+++ b/docs/content/docs/concepts/spotify-oauth.md
@@ -1,3 +1,7 @@
+---
+title: "Spotify OAuth Integration"
+---
+
# Spotify OAuth Integration
> **New here?** Start with [spotify-overview.md](spotify-overview.md) for the
diff --git a/docs/concepts/spotify-overview.md b/docs/content/docs/concepts/spotify-overview.md
similarity index 99%
rename from docs/concepts/spotify-overview.md
rename to docs/content/docs/concepts/spotify-overview.md
index 1f3b264..443499a 100644
--- a/docs/concepts/spotify-overview.md
+++ b/docs/content/docs/concepts/spotify-overview.md
@@ -1,3 +1,7 @@
+---
+title: "Spotify on SoundTouch — Overview"
+---
+
# Spotify on SoundTouch — Overview
This is the entry point for understanding how Spotify works on a SoundTouch
diff --git a/docs/concepts/spotify-priming-strategy.md b/docs/content/docs/concepts/spotify-priming-strategy.md
similarity index 99%
rename from docs/concepts/spotify-priming-strategy.md
rename to docs/content/docs/concepts/spotify-priming-strategy.md
index ebf22d2..824d9e3 100644
--- a/docs/concepts/spotify-priming-strategy.md
+++ b/docs/content/docs/concepts/spotify-priming-strategy.md
@@ -1,3 +1,7 @@
+---
+title: "Spotify Priming Strategy"
+---
+
# Spotify Priming Strategy
> **New here?** Start with [spotify-overview.md](spotify-overview.md) for the
diff --git a/docs/device-lifecycle-and-power-on-enhancement.md b/docs/content/docs/device-lifecycle-and-power-on-enhancement.md
similarity index 99%
rename from docs/device-lifecycle-and-power-on-enhancement.md
rename to docs/content/docs/device-lifecycle-and-power-on-enhancement.md
index 3ce6cac..2777f2b 100644
--- a/docs/device-lifecycle-and-power-on-enhancement.md
+++ b/docs/content/docs/device-lifecycle-and-power-on-enhancement.md
@@ -1,3 +1,7 @@
+---
+title: "Device Lifecycle and /power_on Enhancement"
+---
+
# Device Lifecycle and /power_on Enhancement
## Overview
diff --git a/docs/device-lifecycle-summary.md b/docs/content/docs/device-lifecycle-summary.md
similarity index 99%
rename from docs/device-lifecycle-summary.md
rename to docs/content/docs/device-lifecycle-summary.md
index 947f6a6..e7cb605 100644
--- a/docs/device-lifecycle-summary.md
+++ b/docs/content/docs/device-lifecycle-summary.md
@@ -1,3 +1,7 @@
+---
+title: "Device Lifecycle Analysis - Executive Summary"
+---
+
# Device Lifecycle Analysis - Executive Summary
## Current State Assessment
diff --git a/docs/diagrams/migration-flow.md b/docs/content/docs/diagrams/migration-flow.md
similarity index 99%
rename from docs/diagrams/migration-flow.md
rename to docs/content/docs/diagrams/migration-flow.md
index 5565921..93f56b1 100644
--- a/docs/diagrams/migration-flow.md
+++ b/docs/content/docs/diagrams/migration-flow.md
@@ -1,3 +1,7 @@
+---
+title: "Migration Flow Diagrams"
+---
+
# Migration Flow Diagrams
This document specifies the diagrams needed for the migration guide, with descriptions that can be used to create actual visual diagrams.
diff --git a/docs/guides/CAPTURE-DEVICE-PAIRING.md b/docs/content/docs/guides/CAPTURE-DEVICE-PAIRING.md
similarity index 99%
rename from docs/guides/CAPTURE-DEVICE-PAIRING.md
rename to docs/content/docs/guides/CAPTURE-DEVICE-PAIRING.md
index bbf9191..bcac421 100644
--- a/docs/guides/CAPTURE-DEVICE-PAIRING.md
+++ b/docs/content/docs/guides/CAPTURE-DEVICE-PAIRING.md
@@ -1,3 +1,7 @@
+---
+title: "Capture Device Pairing Traffic"
+---
+
# Capture Device Pairing Traffic
Step-by-step runbook for factory-resetting a SoundTouch speaker, pairing it to a Bose cloud account, and capturing every cloud request via mitmproxy. Tested on Apple Silicon Mac.
diff --git a/docs/guides/CAPTURE-MIGRATION-TRAFFIC.md b/docs/content/docs/guides/CAPTURE-MIGRATION-TRAFFIC.md
similarity index 99%
rename from docs/guides/CAPTURE-MIGRATION-TRAFFIC.md
rename to docs/content/docs/guides/CAPTURE-MIGRATION-TRAFFIC.md
index d7c0a7f..43d3698 100644
--- a/docs/guides/CAPTURE-MIGRATION-TRAFFIC.md
+++ b/docs/content/docs/guides/CAPTURE-MIGRATION-TRAFFIC.md
@@ -1,3 +1,7 @@
+---
+title: "Capture Speaker Migration Traffic"
+---
+
# Capture Speaker Migration Traffic
Runbook for migrating a SoundTouch speaker to `soundtouch-service` and capturing
diff --git a/docs/guides/CLI-REFERENCE.md b/docs/content/docs/guides/CLI-REFERENCE.md
similarity index 99%
rename from docs/guides/CLI-REFERENCE.md
rename to docs/content/docs/guides/CLI-REFERENCE.md
index 4e26df6..a079b76 100644
--- a/docs/guides/CLI-REFERENCE.md
+++ b/docs/content/docs/guides/CLI-REFERENCE.md
@@ -1,3 +1,7 @@
+---
+title: "SoundTouch CLI Reference"
+---
+
# SoundTouch CLI Reference
**Complete command reference for the soundtouch-cli tool**
diff --git a/docs/guides/CLOUD-DEPLOY-WALKTHROUGH.md b/docs/content/docs/guides/CLOUD-DEPLOY-WALKTHROUGH.md
similarity index 99%
rename from docs/guides/CLOUD-DEPLOY-WALKTHROUGH.md
rename to docs/content/docs/guides/CLOUD-DEPLOY-WALKTHROUGH.md
index 9cd7a44..0e77180 100644
--- a/docs/guides/CLOUD-DEPLOY-WALKTHROUGH.md
+++ b/docs/content/docs/guides/CLOUD-DEPLOY-WALKTHROUGH.md
@@ -1,3 +1,7 @@
+---
+title: "Cloud Deployment Walkthrough"
+---
+
# Cloud Deployment Walkthrough
A step-by-step guide to running AfterTouch on a VPS or cloud server and
diff --git a/docs/guides/DEPLOYMENT-OVERVIEW.md b/docs/content/docs/guides/DEPLOYMENT-OVERVIEW.md
similarity index 96%
rename from docs/guides/DEPLOYMENT-OVERVIEW.md
rename to docs/content/docs/guides/DEPLOYMENT-OVERVIEW.md
index 67ff2c0..9d75c3c 100644
--- a/docs/guides/DEPLOYMENT-OVERVIEW.md
+++ b/docs/content/docs/guides/DEPLOYMENT-OVERVIEW.md
@@ -1,3 +1,7 @@
+---
+title: "AfterTouch Deployment Overview"
+---
+
# AfterTouch Deployment Overview
AfterTouch replaces the Bose SoundTouch cloud, which shut down on 2026-05-06. There are
@@ -56,7 +60,7 @@ feature set** without any extra hardware.
| | Link |
|-------------------------------|---------------------------------------------------------------------------------------------------------------------------|
| **User-friendly walkthrough** | [On-Device Install Walkthrough](ON-DEVICE-INSTALL-WALKTHROUGH.md) — SSH connection through verified radio preset playback |
-| **Installer reference** | [On-Device Installer README](../../scripts/on-device-install/README.md) — flags, paths, VERSION override, update/rollback |
+| **Installer reference** | [On-Device Installer README](https://github.com/gesellix/Bose-SoundTouch/blob/main/scripts/on-device-install/README.md) — flags, paths, VERSION override, update/rollback |
---
diff --git a/docs/guides/DEPLOYMENT.md b/docs/content/docs/guides/DEPLOYMENT.md
similarity index 99%
rename from docs/guides/DEPLOYMENT.md
rename to docs/content/docs/guides/DEPLOYMENT.md
index 8b4e647..5bc75e6 100644
--- a/docs/guides/DEPLOYMENT.md
+++ b/docs/content/docs/guides/DEPLOYMENT.md
@@ -1,3 +1,7 @@
+---
+title: "SoundTouch Production Deployment Guide"
+---
+
# SoundTouch Production Deployment Guide
**Best practices for deploying SoundTouch Go applications in production environments**
diff --git a/docs/guides/DEVICE-INITIAL-SETUP.md b/docs/content/docs/guides/DEVICE-INITIAL-SETUP.md
similarity index 98%
rename from docs/guides/DEVICE-INITIAL-SETUP.md
rename to docs/content/docs/guides/DEVICE-INITIAL-SETUP.md
index 5484357..52c3f94 100644
--- a/docs/guides/DEVICE-INITIAL-SETUP.md
+++ b/docs/content/docs/guides/DEVICE-INITIAL-SETUP.md
@@ -1,3 +1,7 @@
+---
+title: "SoundTouch Device Initial Setup Variants"
+---
+
# SoundTouch Device Initial Setup Variants
Based on community research from the **SoundCork** and **ÜberBöse API** projects, as well as analysis of the Stockholm firmware (`firmware/Stockholm/.../setup/`), this document outlines the methods used for the "out-of-the-box" setup of SoundTouch devices.
@@ -33,7 +37,7 @@ The classic "failover" or "alternate" setup method.
3. The device serves a Wi-Fi setup form — enter your home network SSID and password and click Submit.
4. The device disconnects from AP mode and joins your home network within ~15–30 seconds.
-
+
For command-line provisioning (without a browser), see §6 below.
diff --git a/docs/guides/EXTERNAL-HOST-WALKTHROUGH.md b/docs/content/docs/guides/EXTERNAL-HOST-WALKTHROUGH.md
similarity index 99%
rename from docs/guides/EXTERNAL-HOST-WALKTHROUGH.md
rename to docs/content/docs/guides/EXTERNAL-HOST-WALKTHROUGH.md
index ac9b8b7..b3438fa 100644
--- a/docs/guides/EXTERNAL-HOST-WALKTHROUGH.md
+++ b/docs/content/docs/guides/EXTERNAL-HOST-WALKTHROUGH.md
@@ -1,3 +1,7 @@
+---
+title: "External Host Walkthrough"
+---
+
# External Host Walkthrough
A step-by-step guide to running AfterTouch on a Raspberry Pi (or any always-on
diff --git a/docs/guides/GETTING-STARTED.md b/docs/content/docs/guides/GETTING-STARTED.md
similarity index 99%
rename from docs/guides/GETTING-STARTED.md
rename to docs/content/docs/guides/GETTING-STARTED.md
index 2074f65..13291d1 100644
--- a/docs/guides/GETTING-STARTED.md
+++ b/docs/content/docs/guides/GETTING-STARTED.md
@@ -1,3 +1,7 @@
+---
+title: "Getting Started with SoundTouch Go Client"
+---
+
# Getting Started with SoundTouch Go Client
**A complete guide to controlling your Bose SoundTouch devices with Go**
diff --git a/docs/guides/HTTPS-SETUP.md b/docs/content/docs/guides/HTTPS-SETUP.md
similarity index 99%
rename from docs/guides/HTTPS-SETUP.md
rename to docs/content/docs/guides/HTTPS-SETUP.md
index 1ec3854..2c0ea9e 100644
--- a/docs/guides/HTTPS-SETUP.md
+++ b/docs/content/docs/guides/HTTPS-SETUP.md
@@ -1,3 +1,7 @@
+---
+title: "HTTPS & Custom CA Certificate"
+---
+
# HTTPS & Custom CA Certificate
SoundTouch speakers communicate with cloud services over HTTPS. For the local service to work over HTTPS, speakers must trust the AfterTouch Root CA. The service manages this automatically — it generates a CA on first start and the web UI guides you through installing it on each speaker as part of the migration flow.
diff --git a/docs/guides/IOT-IMPLEMENTATION-GUIDE.md b/docs/content/docs/guides/IOT-IMPLEMENTATION-GUIDE.md
similarity index 99%
rename from docs/guides/IOT-IMPLEMENTATION-GUIDE.md
rename to docs/content/docs/guides/IOT-IMPLEMENTATION-GUIDE.md
index aa2e287..a79aa66 100644
--- a/docs/guides/IOT-IMPLEMENTATION-GUIDE.md
+++ b/docs/content/docs/guides/IOT-IMPLEMENTATION-GUIDE.md
@@ -1,3 +1,7 @@
+---
+title: "IoT Implementation Guide"
+---
+
# IoT Implementation Guide
## Overview
diff --git a/docs/guides/MAC-ADDRESS-MAPPING.md b/docs/content/docs/guides/MAC-ADDRESS-MAPPING.md
similarity index 99%
rename from docs/guides/MAC-ADDRESS-MAPPING.md
rename to docs/content/docs/guides/MAC-ADDRESS-MAPPING.md
index d9aa82e..11e30d6 100644
--- a/docs/guides/MAC-ADDRESS-MAPPING.md
+++ b/docs/content/docs/guides/MAC-ADDRESS-MAPPING.md
@@ -1,3 +1,7 @@
+---
+title: "MAC Address to Serial Number Mapping"
+---
+
# MAC Address to Serial Number Mapping
**Understanding and troubleshooting device identification in SoundTouch service**
diff --git a/docs/guides/MIGRATION-GUIDE.md b/docs/content/docs/guides/MIGRATION-GUIDE.md
similarity index 98%
rename from docs/guides/MIGRATION-GUIDE.md
rename to docs/content/docs/guides/MIGRATION-GUIDE.md
index ffd1316..f5d50fe 100644
--- a/docs/guides/MIGRATION-GUIDE.md
+++ b/docs/content/docs/guides/MIGRATION-GUIDE.md
@@ -1,3 +1,7 @@
+---
+title: "Migration Guide: From Bose Cloud to AfterTouch"
+---
+
# Migration Guide: From Bose Cloud to AfterTouch
This guide walks through the complete process of migrating your SoundTouch speakers from Bose's cloud services to **AfterTouch**, the replacement provided by `soundtouch-service`. By the end, your speakers will work fully independently of Bose's servers.
@@ -80,7 +84,7 @@ See [Raspberry Pi Setup](RASPBERRY-PI.md) and the [SoundTouch Service Guide](SOU
Open `http://:8000` and go to the **Settings** tab.
-
+
Set the **Target Domain** to the address your speakers can reach — for example `https://soundtouch.fritz.box` or `http://192.0.2.100:8000`. This must be the host's address on your local network, not `localhost`.
@@ -120,13 +124,13 @@ Telnet-only migrations are limited to HTTP (no CA install possible without SSH).
The service scans for SoundTouch devices automatically every few minutes. Check the **Devices** tab in the web UI. If your speaker doesn't appear, click **Scan Again** to trigger an immediate scan, or enter the IP address manually and click **Add Device**.
-
+
### Sync
Once the speaker appears, click **Sync Data**. This connects to the speaker and pulls its current presets, recently played items, and configured sources into the local service's datastore. It also creates an off-device backup of the speaker's configuration.
-
+
Sync pulls the speaker's local state into AfterTouch's datastore, creating an off-device backup of its configuration. If you ran this before May 6, 2026, your account data from Bose's servers was also captured at that time.
@@ -136,7 +140,7 @@ Sync pulls the speaker's local state into AfterTouch's datastore, creating an of
Click **Migrate** next to a device on the Devices tab to open the Migration tab. The tab opens with a **Migration Summary** that shows where your speaker currently stands, then offers a one-click suggested plan and a fully customizable form underneath.
-
+
### What you see at the top — the state card
diff --git a/docs/guides/MIGRATION-SAFETY.md b/docs/content/docs/guides/MIGRATION-SAFETY.md
similarity index 99%
rename from docs/guides/MIGRATION-SAFETY.md
rename to docs/content/docs/guides/MIGRATION-SAFETY.md
index 54d944f..516eaed 100644
--- a/docs/guides/MIGRATION-SAFETY.md
+++ b/docs/content/docs/guides/MIGRATION-SAFETY.md
@@ -1,3 +1,7 @@
+---
+title: "Migration & Safety Guide"
+---
+
# Migration & Safety Guide
Starting a migration on real hardware requires a "Safety First" approach. This guide outlines the safety features implemented in the `soundtouch-service` and provides a checklist for a successful migration.
diff --git a/docs/guides/MQTT-INTEGRATION-DESIGN.md b/docs/content/docs/guides/MQTT-INTEGRATION-DESIGN.md
similarity index 99%
rename from docs/guides/MQTT-INTEGRATION-DESIGN.md
rename to docs/content/docs/guides/MQTT-INTEGRATION-DESIGN.md
index 3f220aa..50f938a 100644
--- a/docs/guides/MQTT-INTEGRATION-DESIGN.md
+++ b/docs/content/docs/guides/MQTT-INTEGRATION-DESIGN.md
@@ -1,3 +1,7 @@
+---
+title: "MQTT Integration Design for SoundTouch Service"
+---
+
# MQTT Integration Design for SoundTouch Service
## Overview
diff --git a/docs/guides/MUSIC-SERVICES.md b/docs/content/docs/guides/MUSIC-SERVICES.md
similarity index 98%
rename from docs/guides/MUSIC-SERVICES.md
rename to docs/content/docs/guides/MUSIC-SERVICES.md
index 7114a9b..1129933 100644
--- a/docs/guides/MUSIC-SERVICES.md
+++ b/docs/content/docs/guides/MUSIC-SERVICES.md
@@ -1,3 +1,7 @@
+---
+title: "Connecting Music Services (Spotify & Amazon Music)"
+---
+
# Connecting Music Services (Spotify & Amazon Music)
This guide explains how to link your Spotify or Amazon Music account to AfterTouch so your speakers can stream music from those services.
diff --git a/docs/guides/ON-DEVICE-INSTALL-WALKTHROUGH.md b/docs/content/docs/guides/ON-DEVICE-INSTALL-WALKTHROUGH.md
similarity index 96%
rename from docs/guides/ON-DEVICE-INSTALL-WALKTHROUGH.md
rename to docs/content/docs/guides/ON-DEVICE-INSTALL-WALKTHROUGH.md
index 71da29a..2f42658 100644
--- a/docs/guides/ON-DEVICE-INSTALL-WALKTHROUGH.md
+++ b/docs/content/docs/guides/ON-DEVICE-INSTALL-WALKTHROUGH.md
@@ -1,3 +1,7 @@
+---
+title: "On-Device Install Walkthrough"
+---
+
# On-Device Install Walkthrough
A complete end-to-end runbook for installing AfterTouch directly on a
@@ -10,7 +14,7 @@ by [weissigera](https://github.com/weissigera) in
documenting a successful fresh installation on a SoundTouch 20 Series I.
For the installer reference and troubleshooting tips see
-[scripts/on-device-install/README.md](../../scripts/on-device-install/README.md).
+[scripts/on-device-install/README.md](https://github.com/gesellix/Bose-SoundTouch/blob/main/scripts/on-device-install/README.md).
---
@@ -293,4 +297,4 @@ should start playing the corresponding stream.
For more detail on any of these, see
[TROUBLESHOOTING.md](./TROUBLESHOOTING.md) and the
-[on-device installer README](../../scripts/on-device-install/README.md).
+[on-device installer README](https://github.com/gesellix/Bose-SoundTouch/blob/main/scripts/on-device-install/README.md).
diff --git a/docs/guides/RASPBERRY-PI.md b/docs/content/docs/guides/RASPBERRY-PI.md
similarity index 91%
rename from docs/guides/RASPBERRY-PI.md
rename to docs/content/docs/guides/RASPBERRY-PI.md
index cbdb606..ab56d43 100644
--- a/docs/guides/RASPBERRY-PI.md
+++ b/docs/content/docs/guides/RASPBERRY-PI.md
@@ -1,3 +1,7 @@
+---
+title: "Raspberry Pi Installation Guide"
+---
+
# Raspberry Pi Installation Guide
This guide explains how to install the `soundtouch-service` as a persistent systemd service on a Raspberry Pi (tested on Raspberry Pi Zero 2W, 3, and 4).
@@ -71,4 +75,4 @@ sudo systemctl restart soundtouch-service
Configuration is stored in `/etc/soundtouch-service/soundtouch-service.env`. Note that settings saved via the Web UI (in `settings.json`) will take precedence over these environment variables once the service is running.
-For more details, see the [scripts/raspberry-pi/README.md](../../scripts/raspberry-pi/README.md) in the repository.
+For more details, see the [scripts/raspberry-pi/README.md](../https://github.com/gesellix/Bose-SoundTouch/blob/main/scripts/raspberry-pi/README.md) in the repository.
diff --git a/docs/guides/SELF-HOSTING.md b/docs/content/docs/guides/SELF-HOSTING.md
similarity index 99%
rename from docs/guides/SELF-HOSTING.md
rename to docs/content/docs/guides/SELF-HOSTING.md
index a55af1a..5cf3def 100644
--- a/docs/guides/SELF-HOSTING.md
+++ b/docs/content/docs/guides/SELF-HOSTING.md
@@ -1,3 +1,7 @@
+---
+title: "Self-Hosting AfterTouch"
+---
+
# Self-Hosting AfterTouch
This guide walks you through running AfterTouch on your own computer or server. No programming knowledge required.
diff --git a/docs/guides/SOUNDTOUCH-SERVICE.md b/docs/content/docs/guides/SOUNDTOUCH-SERVICE.md
similarity index 99%
rename from docs/guides/SOUNDTOUCH-SERVICE.md
rename to docs/content/docs/guides/SOUNDTOUCH-SERVICE.md
index 291af1c..28c7166 100644
--- a/docs/guides/SOUNDTOUCH-SERVICE.md
+++ b/docs/content/docs/guides/SOUNDTOUCH-SERVICE.md
@@ -1,3 +1,7 @@
+---
+title: "SoundTouch Service"
+---
+
# SoundTouch Service
The `soundtouch-service` is a comprehensive local server that emulates Bose's cloud services, enabling offline SoundTouch device operation and advanced debugging capabilities. This service is particularly valuable given Bose's announcement that cloud support will end in May 2026.
diff --git a/docs/guides/SURVIVAL-GUIDE.md b/docs/content/docs/guides/SURVIVAL-GUIDE.md
similarity index 98%
rename from docs/guides/SURVIVAL-GUIDE.md
rename to docs/content/docs/guides/SURVIVAL-GUIDE.md
index aa72843..dc76608 100644
--- a/docs/guides/SURVIVAL-GUIDE.md
+++ b/docs/content/docs/guides/SURVIVAL-GUIDE.md
@@ -1,3 +1,7 @@
+---
+title: "Keeping Your Speakers Alive After the Bose Cloud Shutdown"
+---
+
# Keeping Your Speakers Alive After the Bose Cloud Shutdown
Bose shut down SoundTouch cloud services on **May 6, 2026**. Per the [official end-of-life page](https://www.bose.com/soundtouch-end-of-life), the following no longer work:
diff --git a/docs/guides/TROUBLESHOOTING.md b/docs/content/docs/guides/TROUBLESHOOTING.md
similarity index 99%
rename from docs/guides/TROUBLESHOOTING.md
rename to docs/content/docs/guides/TROUBLESHOOTING.md
index d178d28..40c97f7 100644
--- a/docs/guides/TROUBLESHOOTING.md
+++ b/docs/content/docs/guides/TROUBLESHOOTING.md
@@ -1,3 +1,7 @@
+---
+title: "SoundTouch Troubleshooting Guide"
+---
+
# SoundTouch Troubleshooting Guide
**Complete guide to diagnosing and fixing common SoundTouch Go client issues**
diff --git a/docs/power-on-implementation-guide.md b/docs/content/docs/power-on-implementation-guide.md
similarity index 99%
rename from docs/power-on-implementation-guide.md
rename to docs/content/docs/power-on-implementation-guide.md
index 514421e..e7f0bce 100644
--- a/docs/power-on-implementation-guide.md
+++ b/docs/content/docs/power-on-implementation-guide.md
@@ -1,3 +1,7 @@
+---
+title: "/power_on Implementation Guide"
+---
+
# /power_on Implementation Guide
## Overview
diff --git a/docs/preset-store.md b/docs/content/docs/preset-store.md
similarity index 99%
rename from docs/preset-store.md
rename to docs/content/docs/preset-store.md
index 8d53c33..d49c744 100644
--- a/docs/preset-store.md
+++ b/docs/content/docs/preset-store.md
@@ -1,3 +1,7 @@
+---
+title: "SoundTouch `/storePreset` Implementation Guide"
+---
+
# SoundTouch `/storePreset` Implementation Guide
## Overview
diff --git a/docs/reference/API-COOKBOOK.md b/docs/content/docs/reference/API-COOKBOOK.md
similarity index 99%
rename from docs/reference/API-COOKBOOK.md
rename to docs/content/docs/reference/API-COOKBOOK.md
index 0a5fe05..77d331d 100644
--- a/docs/reference/API-COOKBOOK.md
+++ b/docs/content/docs/reference/API-COOKBOOK.md
@@ -1,3 +1,7 @@
+---
+title: "SoundTouch API Cookbook"
+---
+
# SoundTouch API Cookbook
**Real-world patterns, recipes, and best practices for the SoundTouch Go client**
diff --git a/docs/reference/API-ENDPOINTS.md b/docs/content/docs/reference/API-ENDPOINTS.md
similarity index 99%
rename from docs/reference/API-ENDPOINTS.md
rename to docs/content/docs/reference/API-ENDPOINTS.md
index 0f604d9..d68fe02 100644
--- a/docs/reference/API-ENDPOINTS.md
+++ b/docs/content/docs/reference/API-ENDPOINTS.md
@@ -1,3 +1,7 @@
+---
+title: "Bose SoundTouch Web API - Endpoints Overview"
+---
+
# Bose SoundTouch Web API - Endpoints Overview
This document provides a comprehensive overview of the available API endpoints verified against the official Bose SoundTouch Web API v1.0 specification (January 7, 2026).
diff --git a/docs/reference/BASS-CONTROLS.md b/docs/content/docs/reference/BASS-CONTROLS.md
similarity index 98%
rename from docs/reference/BASS-CONTROLS.md
rename to docs/content/docs/reference/BASS-CONTROLS.md
index 801a83f..79d066d 100644
--- a/docs/reference/BASS-CONTROLS.md
+++ b/docs/content/docs/reference/BASS-CONTROLS.md
@@ -1,3 +1,7 @@
+---
+title: "Bass Control Guide"
+---
+
# Bass Control Guide
## Overview
@@ -420,7 +424,7 @@ soundtouch-cli -host -bass # Verify final state
- **[API Endpoints Overview](API-ENDPOINTS.md)** - Complete API reference
- **[Volume Controls](VOLUME-CONTROLS.md)** - Related audio control documentation
-- **[Client Usage Examples](../../cmd/soundtouch-cli/main.go)** - CLI implementation reference
+- **[Client Usage Examples](https://github.com/gesellix/Bose-SoundTouch/blob/main/cmd/soundtouch-cli/main.go)** - CLI implementation reference
- **[Models](../../pkg/models/bass.go)** - Bass model implementation
## API Compliance
diff --git a/docs/reference/CLOUD-API.md b/docs/content/docs/reference/CLOUD-API.md
similarity index 97%
rename from docs/reference/CLOUD-API.md
rename to docs/content/docs/reference/CLOUD-API.md
index 1b6be4f..5a55300 100644
--- a/docs/reference/CLOUD-API.md
+++ b/docs/content/docs/reference/CLOUD-API.md
@@ -1,3 +1,7 @@
+---
+title: "Bose SoundTouch Cloud API Emulation (Marge/BMX/Stats)"
+---
+
# Bose SoundTouch Cloud API Emulation (Marge/BMX/Stats)
This document describes the cloud-emulation APIs provided by the SoundTouch service. These APIs mimic the Bose cloud services (Marge, BMX, Stats) that SoundTouch devices and the SoundTouch controller application (Stockholm) interact with.
diff --git a/docs/reference/DEVICE-PAIRING-FLOW.md b/docs/content/docs/reference/DEVICE-PAIRING-FLOW.md
similarity index 99%
rename from docs/reference/DEVICE-PAIRING-FLOW.md
rename to docs/content/docs/reference/DEVICE-PAIRING-FLOW.md
index 79bac2d..ffa40cd 100644
--- a/docs/reference/DEVICE-PAIRING-FLOW.md
+++ b/docs/content/docs/reference/DEVICE-PAIRING-FLOW.md
@@ -1,3 +1,7 @@
+---
+title: "SoundTouch Device WebSocket API — Pairing & Operation Flow"
+---
+
# SoundTouch Device WebSocket API — Pairing & Operation Flow
Reference document derived from mitmproxy captures of the Bose SoundTouch Android app
diff --git a/docs/reference/DISCOVERY.md b/docs/content/docs/reference/DISCOVERY.md
similarity index 99%
rename from docs/reference/DISCOVERY.md
rename to docs/content/docs/reference/DISCOVERY.md
index a27fa4e..c2da103 100644
--- a/docs/reference/DISCOVERY.md
+++ b/docs/content/docs/reference/DISCOVERY.md
@@ -1,3 +1,7 @@
+---
+title: "SoundTouch Device Discovery"
+---
+
# SoundTouch Device Discovery
This document describes the various methods available for discovering Bose SoundTouch devices on your network.
diff --git a/docs/reference/FEATURE-MAPPING.md b/docs/content/docs/reference/FEATURE-MAPPING.md
similarity index 99%
rename from docs/reference/FEATURE-MAPPING.md
rename to docs/content/docs/reference/FEATURE-MAPPING.md
index 347bc95..3bed44e 100644
--- a/docs/reference/FEATURE-MAPPING.md
+++ b/docs/content/docs/reference/FEATURE-MAPPING.md
@@ -1,3 +1,7 @@
+---
+title: "Feature Mapping Guide"
+---
+
# Feature Mapping Guide
This guide demonstrates the comprehensive endpoint-to-feature mapping system that helps you understand exactly what your SoundTouch device can do and how to use it effectively.
diff --git a/docs/reference/KEY-CONTROLS.md b/docs/content/docs/reference/KEY-CONTROLS.md
similarity index 99%
rename from docs/reference/KEY-CONTROLS.md
rename to docs/content/docs/reference/KEY-CONTROLS.md
index fabf11c..d2d691e 100644
--- a/docs/reference/KEY-CONTROLS.md
+++ b/docs/content/docs/reference/KEY-CONTROLS.md
@@ -1,3 +1,7 @@
+---
+title: "Key Control Implementation"
+---
+
# Key Control Implementation
This document describes the implementation of the POST `/key` endpoint for media control commands in the Bose SoundTouch API client.
diff --git a/docs/reference/PRESET-MANAGEMENT.md b/docs/content/docs/reference/PRESET-MANAGEMENT.md
similarity index 99%
rename from docs/reference/PRESET-MANAGEMENT.md
rename to docs/content/docs/reference/PRESET-MANAGEMENT.md
index 6808531..c27eb5a 100644
--- a/docs/reference/PRESET-MANAGEMENT.md
+++ b/docs/content/docs/reference/PRESET-MANAGEMENT.md
@@ -1,3 +1,7 @@
+---
+title: "Preset Management - Bose SoundTouch API"
+---
+
# Preset Management - Bose SoundTouch API
This document covers preset management functionality in the Bose SoundTouch API client.
diff --git a/docs/reference/SOURCE-SELECTION.md b/docs/content/docs/reference/SOURCE-SELECTION.md
similarity index 98%
rename from docs/reference/SOURCE-SELECTION.md
rename to docs/content/docs/reference/SOURCE-SELECTION.md
index a97b595..b3d3994 100644
--- a/docs/reference/SOURCE-SELECTION.md
+++ b/docs/content/docs/reference/SOURCE-SELECTION.md
@@ -1,3 +1,7 @@
+---
+title: "Source Selection Guide"
+---
+
# Source Selection Guide
## Overview
@@ -349,7 +353,7 @@ The implementation follows the official SoundTouch API:
- **[API Endpoints Overview](API-ENDPOINTS.md)** - Complete API reference
- **[Sources](../../pkg/models/sources.go)** - Source model implementation
- **[Now Playing](../../pkg/models/nowplaying.go)** - ContentItem model
-- **[Client Usage Examples](../../cmd/soundtouch-cli/main.go)** - CLI implementation reference
+- **[Client Usage Examples](https://github.com/gesellix/Bose-SoundTouch/blob/main/cmd/soundtouch-cli/main.go)** - CLI implementation reference
---
diff --git a/docs/reference/SPEAKER-ENDPOINT.md b/docs/content/docs/reference/SPEAKER-ENDPOINT.md
similarity index 99%
rename from docs/reference/SPEAKER-ENDPOINT.md
rename to docs/content/docs/reference/SPEAKER-ENDPOINT.md
index 6947556..0daeba6 100644
--- a/docs/reference/SPEAKER-ENDPOINT.md
+++ b/docs/content/docs/reference/SPEAKER-ENDPOINT.md
@@ -1,3 +1,7 @@
+---
+title: "SoundTouch Speaker Endpoint Documentation"
+---
+
# SoundTouch Speaker Endpoint Documentation
This document describes the implementation of the `/speaker` endpoint for Bose SoundTouch devices, which enables Text-To-Speech (TTS) notifications and URL content playback.
diff --git a/docs/reference/SYSTEM-ENDPOINTS.md b/docs/content/docs/reference/SYSTEM-ENDPOINTS.md
similarity index 99%
rename from docs/reference/SYSTEM-ENDPOINTS.md
rename to docs/content/docs/reference/SYSTEM-ENDPOINTS.md
index dff1c6a..86732b7 100644
--- a/docs/reference/SYSTEM-ENDPOINTS.md
+++ b/docs/content/docs/reference/SYSTEM-ENDPOINTS.md
@@ -1,3 +1,7 @@
+---
+title: "System Endpoints Documentation"
+---
+
# System Endpoints Documentation
This document provides comprehensive documentation for the system management endpoints in the Bose SoundTouch Go client library.
diff --git a/docs/reference/VOLUME-CONTROLS.md b/docs/content/docs/reference/VOLUME-CONTROLS.md
similarity index 99%
rename from docs/reference/VOLUME-CONTROLS.md
rename to docs/content/docs/reference/VOLUME-CONTROLS.md
index 87748cc..c5ed60e 100644
--- a/docs/reference/VOLUME-CONTROLS.md
+++ b/docs/content/docs/reference/VOLUME-CONTROLS.md
@@ -1,3 +1,7 @@
+---
+title: "Volume Control Implementation"
+---
+
# Volume Control Implementation
This document describes the implementation of the GET/POST `/volume` endpoints for volume management in the Bose SoundTouch API client.
diff --git a/docs/reference/WEBSOCKET-EVENTS.md b/docs/content/docs/reference/WEBSOCKET-EVENTS.md
similarity index 99%
rename from docs/reference/WEBSOCKET-EVENTS.md
rename to docs/content/docs/reference/WEBSOCKET-EVENTS.md
index c0bcc71..fe2530c 100644
--- a/docs/reference/WEBSOCKET-EVENTS.md
+++ b/docs/content/docs/reference/WEBSOCKET-EVENTS.md
@@ -1,3 +1,7 @@
+---
+title: "WebSocket Events - Real-time SoundTouch Monitoring"
+---
+
# WebSocket Events - Real-time SoundTouch Monitoring
This document describes the WebSocket event functionality for real-time monitoring of Bose SoundTouch devices.
diff --git a/docs/reference/ZONE-MANAGEMENT.md b/docs/content/docs/reference/ZONE-MANAGEMENT.md
similarity index 99%
rename from docs/reference/ZONE-MANAGEMENT.md
rename to docs/content/docs/reference/ZONE-MANAGEMENT.md
index 74dab06..e5271cb 100644
--- a/docs/reference/ZONE-MANAGEMENT.md
+++ b/docs/content/docs/reference/ZONE-MANAGEMENT.md
@@ -1,3 +1,7 @@
+---
+title: "Zone Management - Multiroom SoundTouch Control"
+---
+
# Zone Management - Multiroom SoundTouch Control
This document describes the comprehensive zone management functionality for controlling multiroom setups with Bose SoundTouch devices.
diff --git a/docs/reference/radio-browser.md b/docs/content/docs/reference/radio-browser.md
similarity index 99%
rename from docs/reference/radio-browser.md
rename to docs/content/docs/reference/radio-browser.md
index e8fca8b..dfbb896 100644
--- a/docs/reference/radio-browser.md
+++ b/docs/content/docs/reference/radio-browser.md
@@ -1,3 +1,7 @@
+---
+title: "Radio Browser"
+---
+
## radio-browser.info
- https://www.radio-browser.info is a community driven radio station database.
diff --git a/docs/reference/spotify-account-addition.md b/docs/content/docs/reference/spotify-account-addition.md
similarity index 99%
rename from docs/reference/spotify-account-addition.md
rename to docs/content/docs/reference/spotify-account-addition.md
index 7392f37..e0b27c2 100644
--- a/docs/reference/spotify-account-addition.md
+++ b/docs/content/docs/reference/spotify-account-addition.md
@@ -1,3 +1,7 @@
+---
+title: "Spotify Account Addition Technical Reference"
+---
+
# Spotify Account Addition Technical Reference
This document details the exact network requests performed by the Bose SoundTouch "Stockholm" application and the SoundTouch speaker when adding a new Spotify account. This information is based on analysis of the Stockholm firmware version `27.0.13-4277-8963611`.
diff --git a/docs/scmudc-events-analysis.md b/docs/content/docs/scmudc-events-analysis.md
similarity index 99%
rename from docs/scmudc-events-analysis.md
rename to docs/content/docs/scmudc-events-analysis.md
index c5fec7d..2a291aa 100644
--- a/docs/scmudc-events-analysis.md
+++ b/docs/content/docs/scmudc-events-analysis.md
@@ -1,3 +1,7 @@
+---
+title: "SCMUDC Events Analysis"
+---
+
# SCMUDC Events Analysis
## Overview
diff --git a/docs/soundtouch-web-roadmap.md b/docs/content/docs/soundtouch-web-roadmap.md
similarity index 99%
rename from docs/soundtouch-web-roadmap.md
rename to docs/content/docs/soundtouch-web-roadmap.md
index 07effad..42c4db2 100644
--- a/docs/soundtouch-web-roadmap.md
+++ b/docs/content/docs/soundtouch-web-roadmap.md
@@ -1,3 +1,7 @@
+---
+title: "soundtouch-web: remaining features"
+---
+
# soundtouch-web: remaining features
Four features complete the parity gap between soundtouch-web and the Stockholm
diff --git a/docs/stockholm-port-guide.md b/docs/content/docs/stockholm-port-guide.md
similarity index 99%
rename from docs/stockholm-port-guide.md
rename to docs/content/docs/stockholm-port-guide.md
index 836baf7..8f78640 100644
--- a/docs/stockholm-port-guide.md
+++ b/docs/content/docs/stockholm-port-guide.md
@@ -1,3 +1,7 @@
+---
+title: "Stockholm Backend — Port Guide for Bose-SoundTouch (Go)"
+---
+
# Stockholm Backend — Port Guide for Bose-SoundTouch (Go)
This document describes everything needed to integrate the
diff --git a/docs/go.mod b/docs/go.mod
new file mode 100644
index 0000000..5231a53
--- /dev/null
+++ b/docs/go.mod
@@ -0,0 +1,3 @@
+module github.com/gesellix/bose-soundtouch/docs
+
+go 1.22.0
diff --git a/docs/hugo.toml b/docs/hugo.toml
new file mode 100644
index 0000000..2565c3d
--- /dev/null
+++ b/docs/hugo.toml
@@ -0,0 +1,55 @@
+baseURL = "https://gesellix.github.io/Bose-SoundTouch/"
+languageCode = "en-us"
+title = "AfterTouch"
+
+enableRobotsTXT = true
+enableGitInfo = true
+
+[module]
+ [module.hugoVersion]
+ extended = true
+ min = "0.112.0"
+ [[module.imports]]
+ path = "github.com/imfing/hextra"
+
+[markup]
+ [markup.goldmark]
+ [markup.goldmark.renderer]
+ unsafe = true
+ [markup.highlight]
+ noClasses = false
+
+[params]
+ description = "Keep your Bose SoundTouch speakers alive after the cloud shutdown"
+ displayUpdatedDate = true
+ dateFormat = "January 2, 2006"
+
+ [params.navbar]
+ displayTitle = true
+ displayLogo = false
+
+ [params.footer]
+ enable = true
+ displayCopyright = true
+ displayPoweredBy = false
+
+[[menu.main]]
+ identifier = "docs"
+ name = "Docs"
+ pageRef = "/docs"
+ weight = 1
+
+[[menu.main]]
+ identifier = "blog"
+ name = "Blog"
+ pageRef = "/blog"
+ weight = 2
+
+[[menu.main]]
+ identifier = "github"
+ name = "GitHub"
+ url = "https://github.com/gesellix/Bose-SoundTouch"
+ weight = 3
+ [menu.main.params]
+ type = "icon"
+ icon = "github"
diff --git a/docs/images/README.md b/docs/static/images/README.md
similarity index 100%
rename from docs/images/README.md
rename to docs/static/images/README.md
diff --git a/docs/images/speaker-ap-wifi-setup.png b/docs/static/images/speaker-ap-wifi-setup.png
similarity index 100%
rename from docs/images/speaker-ap-wifi-setup.png
rename to docs/static/images/speaker-ap-wifi-setup.png
diff --git a/docs/images/ui-devices.png b/docs/static/images/ui-devices.png
similarity index 100%
rename from docs/images/ui-devices.png
rename to docs/static/images/ui-devices.png
diff --git a/docs/images/ui-migration.png b/docs/static/images/ui-migration.png
similarity index 100%
rename from docs/images/ui-migration.png
rename to docs/static/images/ui-migration.png
diff --git a/docs/images/ui-settings.png b/docs/static/images/ui-settings.png
similarity index 100%
rename from docs/images/ui-settings.png
rename to docs/static/images/ui-settings.png
diff --git a/docs/images/ui-sync.png b/docs/static/images/ui-sync.png
similarity index 100%
rename from docs/images/ui-sync.png
rename to docs/static/images/ui-sync.png
diff --git a/pkg/service/handlers/docs_consistency_test.go b/pkg/service/handlers/docs_consistency_test.go
index cb31928..186865c 100644
--- a/pkg/service/handlers/docs_consistency_test.go
+++ b/pkg/service/handlers/docs_consistency_test.go
@@ -9,70 +9,34 @@ import (
"testing"
)
-// dirsToSkip names docs/ subdirectories whose contents are not meant
-// to appear in SUMMARY.md. These are asset / partial / archive trees,
-// not narrative documentation:
-//
-// - _includes : HTML partials consumed by the docs site renderer
-// - archive : superseded plans / status reports kept for the
-// record but deliberately unlinked
-// - diagrams : Mermaid sources for embedded diagrams
-// - images : binary assets + a directory README that explains them
-//
-// Adding a new top-level dir under docs/ does NOT require touching
-// this list — only add the dir name here when its contents should
-// stay out of SUMMARY.md by design. Individual file exclusions live
-// in .docsignore instead.
+// dirsToSkip names docs/content/ subdirectories whose contents are not
+// required to have Hugo front matter. These are asset or infrastructure
+// trees, not narrative documentation.
var dirsToSkip = map[string]bool{
- "_includes": true,
- "archive": true,
- "diagrams": true,
- "images": true,
+ "archive": true, // superseded plans kept for the record
}
func TestDocsConsistency(t *testing.T) {
- // Root of the project relative to this test file
- // The test runs in the directory of the package
projectRoot := "../../.."
- docsDir := filepath.Join(projectRoot, "docs")
- summaryPath := filepath.Join(docsDir, "SUMMARY.md")
+ contentDir := filepath.Join(projectRoot, "docs", "content")
- summaryContent, err := os.ReadFile(summaryPath)
- if err != nil {
- t.Fatalf("Failed to read SUMMARY.md: %v", err)
- }
-
- summaryText := string(summaryContent)
- docsIgnore := readDocsIgnore(t, filepath.Join(projectRoot, ".docsignore"))
-
- // Walk the entire docs tree. Directory-level exclusions live in
- // dirsToSkip above (asset / archive trees); file-level exclusions
- // live in .docsignore (individual narrative docs that are
- // intentionally unlinked). New subdirectories are picked up
- // automatically — this is the behaviour amazon-music-oauth.md
- // surprised us by lacking.
- err = filepath.WalkDir(docsDir, func(path string, d fs.DirEntry, err error) error {
+ err := filepath.WalkDir(contentDir, func(path string, d fs.DirEntry, err error) error {
if err != nil {
return err
}
if d.IsDir() {
- if path == docsDir {
+ if path == contentDir {
return nil
}
-
- rel, relErr := filepath.Rel(docsDir, path)
+ rel, relErr := filepath.Rel(contentDir, path)
if relErr != nil {
return relErr
}
-
- // Skip only top-level asset / archive directories. Nested
- // directories inside narrative trees (e.g. docs/guides/foo/)
- // would still be walked.
+ // Skip only top-level excluded directories.
if !strings.ContainsRune(rel, filepath.Separator) && dirsToSkip[d.Name()] {
return filepath.SkipDir
}
-
return nil
}
@@ -80,63 +44,55 @@ func TestDocsConsistency(t *testing.T) {
return nil
}
- // Skip SUMMARY.md itself
- if d.Name() == "SUMMARY.md" {
- return nil
- }
-
- // Skip files listed in .docsignore at the project root
- for _, skip := range docsIgnore {
- if strings.HasSuffix(path, filepath.FromSlash(skip)) {
- return nil
- }
- }
-
- // Get relative path from docs/
- relPath, err := filepath.Rel(docsDir, path)
- if err != nil {
- return err
- }
-
- // Check if this file is linked in SUMMARY.md
- // We look for [Label](relPath)
- linkPattern := "(" + relPath + ")"
- if !strings.Contains(summaryText, linkPattern) {
- t.Errorf("Documentation file %s is not linked in docs/SUMMARY.md", relPath)
+ if !hasTitleFrontMatter(t, path) {
+ rel, _ := filepath.Rel(contentDir, path)
+ t.Errorf("docs/content/%s: missing 'title:' in front matter (Hugo requires it for correct rendering)", rel)
}
return nil
})
if err != nil {
- t.Errorf("Error walking docs directory: %v", err)
+ t.Errorf("Error walking docs/content directory: %v", err)
}
}
-// readDocsIgnore reads a .docsignore file and returns the non-empty, non-comment lines.
-// If the file does not exist it returns nil without failing the test.
-func readDocsIgnore(t *testing.T, path string) []string {
+// hasTitleFrontMatter returns true if the file has a YAML front matter block
+// containing a non-empty title: field.
+func hasTitleFrontMatter(t *testing.T, path string) bool {
t.Helper()
f, err := os.Open(path)
- if os.IsNotExist(err) {
- return nil
- }
if err != nil {
- t.Fatalf("Failed to read %s: %v", path, err)
+ t.Errorf("cannot open %s: %v", path, err)
+ return true // don't double-report
}
defer func() { _ = f.Close() }()
- var patterns []string
scanner := bufio.NewScanner(f)
+
+ // First non-empty line must be "---"
for scanner.Scan() {
line := strings.TrimSpace(scanner.Text())
- if line == "" || strings.HasPrefix(line, "#") {
+ if line == "" {
continue
}
- patterns = append(patterns, line)
+ if line != "---" {
+ return false
+ }
+ break
}
- if err := scanner.Err(); err != nil {
- t.Fatalf("Error reading %s: %v", path, err)
+
+ // Scan until closing "---", looking for title:
+ for scanner.Scan() {
+ line := scanner.Text()
+ if strings.TrimSpace(line) == "---" {
+ return false // closed without finding title
+ }
+ if strings.HasPrefix(line, "title:") {
+ value := strings.TrimSpace(strings.TrimPrefix(line, "title:"))
+ value = strings.Trim(value, `"'`)
+ return value != ""
+ }
}
- return patterns
+ return false
}
diff --git a/scripts/screenshots/run.sh b/scripts/screenshots/run.sh
index 3185d8a..2c7517b 100755
--- a/scripts/screenshots/run.sh
+++ b/scripts/screenshots/run.sh
@@ -3,14 +3,14 @@
# soundtouch-service + dummy-speaker, drives the web UI in headless
# Chrome via the chromedp runner, then tears everything down.
#
-# Outputs to docs/images/ by default. Override with OUT_DIR=/some/path.
+# Outputs to docs/static/images/ by default. Override with OUT_DIR=/some/path.
set -euo pipefail
REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
cd "$REPO_ROOT"
-OUT_DIR="${OUT_DIR:-docs/images}"
+OUT_DIR="${OUT_DIR:-docs/static/images}"
SERVICE_PORT="${SERVICE_PORT:-8000}"
SPEAKER_PORT="${SPEAKER_PORT:-8090}"
DATA_DIR="$(mktemp -d -t soundtouch-screenshots-XXXXXX)"