Skip to content

docs: add VuePress documentation website#2096

Merged
Belphemur merged 7 commits into
devfrom
feat/vuepress-docs
May 8, 2026
Merged

docs: add VuePress documentation website#2096
Belphemur merged 7 commits into
devfrom
feat/vuepress-docs

Conversation

@Belphemur

Copy link
Copy Markdown
Owner

Summary

  • Introduces a new VuePress-based documentation website in the website/ directory.
  • Adds GitHub Actions workflow .github/workflows/docs.yml to automatically build and deploy the docs.
  • Includes setup for homepage, components, styles, and various markdown pages documenting app usage, configuration, and advanced features.

Copilot AI review requested due to automatic review settings May 8, 2026 00:10
@coderabbitai

coderabbitai Bot commented May 8, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: cc1f5970-e4c1-4106-bb34-c0f503bf4ccc

📥 Commits

Reviewing files that changed from the base of the PR and between 27a3c4b and 15f9acf.

📒 Files selected for processing (11)
  • .github/workflows/docs.yml
  • docs/banner-manager.md
  • docs/building.md
  • docs/contributing.md
  • website/src/.vuepress/components/HomeHero.vue
  • website/src/advanced/troubleshooting.md
  • website/src/configuration/general.md
  • website/src/configuration/notifications.md
  • website/src/configuration/playback.md
  • website/src/configuration/recording.md
  • website/src/usage/profiles.md

📝 Walkthrough

Summary by CodeRabbit

  • New Features

    • Added comprehensive documentation website with Getting Started, Configuration, Usage, and Advanced guides
    • Automated documentation deployment to GitHub Pages via GitHub Actions
  • Documentation

    • Added developer documentation covering build instructions, contribution guidelines, and architecture overview
    • Includes user guides for profiles, app-specific audio routing, hotkeys, notifications, and troubleshooting

Walkthrough

This PR introduces a complete VuePress-based documentation website for SoundSwitch with GitHub Pages deployment. It adds homepage components (download + donation), site configuration, global styles, many user-facing docs (getting started, configuration, usage, advanced), developer docs, and a GitHub Actions workflow to build and deploy the site.

Changes

Documentation Website with GitHub Pages Deployment

Layer / File(s) Summary
CI/CD and Build Infrastructure
.github/workflows/docs.yml, website/.gitignore, website/package.json
GitHub Actions workflow automates VuePress builds and deploys to GitHub Pages on master pushes. Project dependencies and npm scripts for docs:dev and docs:build are configured. Build artifacts and VuePress cache directories are ignored.
VuePress Configuration and Theming
website/src/.vuepress/config.ts, website/src/.vuepress/styles/palette.scss, website/src/.vuepress/styles/index.scss
VuePress site configuration sets base path (/SoundSwitch/), defines navbar and sidebar navigation, and injects ad/analytics scripts. Sass palette defines SoundSwitch brand colors (#2196F3) with light/dark variants for theme consistency. Global style overrides are reserved.
Global Vue Component Registration
website/src/.vuepress/client.ts
Client configuration registers HomeHero and GoogleAd components for global use throughout the documentation site.
Google AdSense Component
website/src/.vuepress/components/GoogleAd.vue
Component initializes the window.adsbygoogle queue on mount with error handling, renders Google Ads <ins> placeholder with required attributes, and applies scoped styling for centered display.
Interactive Homepage Hero Component
website/src/.vuepress/components/HomeHero.vue
Component fetches the latest SoundSwitch release from GitHub Releases API on mount to populate download URL/label. Implements PayPal donation flow with two modals, UUID-based custom parameter, and tracking events via Piwik/Matomo. Modal states are controlled via URL hash and query parameters.
Homepage Layout
website/src/README.md, website/src/.vuepress/public/images
Homepage frontmatter enables home routing and sets page title. Body composes HomeHero and GoogleAd components with a six-card features grid (instant switching, lightweight, per-app rules, profiles, smart notifications, streamer friendly). Scoped CSS styles the grid, cards, hover effects, and typography.
Getting Started Guide
website/src/getting-started.md
Documents requirements, installation steps, basic hotkey-based usage (playback/recording/mute), and system tray actions for new users.
Configuration Documentation
website/src/configuration/{README.md,general.md,playback.md,recording.md,notifications.md}
Configuration section explains how to access settings via system tray. General tab covers startup, updates, language, audio options, system tray, quick menu, and troubleshooting. Playback and Recording tabs document device selection and hotkey configuration. Notifications tab covers notification types, banner options, sound behavior, and microphone mute handling. Screenshots included.
Usage Documentation
website/src/usage/{README.md,hotkeys.md,app-rules.md,cli.md,communications.md,profiles.md}
Usage section covers default hotkeys (playback/recording/mute), app-specific routing rules, command-line interface (SoundSwitch.CLI), communication device switching, and audio profiles with trigger types (hotkey, application focus, device-change, etc.).
Advanced Features Documentation
website/src/advanced/{README.md,auto-updater.md,multi-language.md,troubleshooting.md}
Advanced section documents 24-hour auto-update checks with three modes (Silent, Notify, Never), support for 20+ languages with Weblate contribution link, and log access/troubleshooting guidance.
Developer & Build Documentation
docs/*, AGENTS.md
Adds developer-facing docs: AGENTS update, docs/README, architecture overview, banner-manager deep-dive, building guide, and contributing guide describing local build/test/release workflows.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

Possibly related PRs

Poem

🐰 Hops and cheers for docs so bright,
VuePress pages dancing into light,
Pipelines build and Pages play,
Downloads, donations, guides today,
SoundSwitch sings—docs lead the way!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The PR title 'docs: add VuePress documentation website' accurately and concisely summarizes the main change: introducing a VuePress-based documentation website. It clearly communicates the primary objective of the changeset.
Description check ✅ Passed The PR description is directly related to the changeset, covering the introduction of the VuePress documentation site, the GitHub Actions workflow, and the included documentation pages and components.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/vuepress-docs

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot wasn't able to review this pull request because it exceeds the maximum number of files (300). Try reducing the number of changed files and requesting a review from Copilot again.

@Belphemur Belphemur changed the base branch from master to dev May 8, 2026 00:12

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🧹 Nitpick comments (2)
website/src/usage/cli.md (1)

12-12: ⚡ Quick win

Use a direct link for the CLI reference.

Line 12 mentions documentation but doesn’t provide a clickable URL/path, which adds friction for readers.

🔧 Suggested edit
-For detailed command reference, see the `SoundSwitch.CLI` documentation.
+For detailed command reference, see the [SoundSwitch.CLI documentation](https://github.com/Belphemur/SoundSwitch.CLI).
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@website/src/usage/cli.md` at line 12, The sentence referencing
SoundSwitch.CLI is not a clickable link; update the text in cli.md by replacing
the plain reference "SoundSwitch.CLI" with a proper Markdown link (e.g.,
[SoundSwitch.CLI](<insert-URL-or-relative-path>)) so readers can click directly
to the CLI documentation, choosing an absolute URL for external docs or a
relative path for internal docs and keeping the display text as
"SoundSwitch.CLI".
website/src/.vuepress/components/HomeHero.vue (1)

180-188: ⚡ Quick win

Add dialog semantics to both modals.

The modal containers should expose dialog semantics (role="dialog", aria-modal="true", and labelled title linkage) for assistive tech.

Proposed fix
-          <div class="donate-modal">
+          <div
+            class="donate-modal"
+            role="dialog"
+            aria-modal="true"
+            aria-labelledby="donate-modal-title"
+          >
...
-            <h3 class="modal-title">Support SoundSwitch</h3>
+            <h3 id="donate-modal-title" class="modal-title">Support SoundSwitch</h3>
-          <div class="donate-modal">
+          <div
+            class="donate-modal"
+            role="dialog"
+            aria-modal="true"
+            aria-labelledby="thanks-modal-title"
+          >
...
-            <h3 class="modal-title">Thank You!</h3>
+            <h3 id="thanks-modal-title" class="modal-title">Thank You!</h3>

Also applies to: 210-218

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@website/src/.vuepress/components/HomeHero.vue` around lines 180 - 188, The
donate modal markup (the <div class="donate-modal"> containing the close button,
<h3 class="modal-title">, etc.) is missing dialog semantics; update that
container to include role="dialog" and aria-modal="true" and add an
aria-labelledby that references the modal title element (give the <h3
class="modal-title"> a unique id and use that id in aria-labelledby). Do the
same change for the other modal block mentioned (the one around lines 210-218)
so both modals expose proper dialog semantics for assistive tech.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/docs.yml:
- Around line 34-36: The workflow references outputs via
steps.deployment.outputs.page_url but the deploy step using
actions/deploy-pages@v4 lacks an id; add the missing id by adding id: deployment
to that step (the step that uses actions/deploy-pages@v4) so
steps.deployment.outputs.page_url can resolve correctly.

In `@website/src/.vuepress/components/HomeHero.vue`:
- Around line 194-195: The external donation anchor in HomeHero.vue currently
uses target="_blank" with rel="noopener"; update the anchor element that opens
the payment/donation link (the <a> in the template that contains
target="_blank") to include noreferrer as well by changing its rel value to
include "noreferrer" (e.g., "noopener noreferrer") so referrer data is not
leaked.

In `@website/src/.vuepress/config.ts`:
- Around line 8-28: The head currently injects Google AdSense and Matomo scripts
unconditionally (see the head array entries that create the script with src
'https://pagead2.googlesyndication.com/...adsbygoogle.js' and the inline script
that initializes window._mtm and window._paq and loads
'https://unami.newmail.app/js/container_dmLA4CEF.js'); change this to defer
injection until explicit user consent by implementing a consent banner/cookie
notice and gating logic: add a consent UI that stores the user's choice (e.g.,
localStorage or a cookie key like "analytics_consent"), move the inline
initialization and external script insertion into a single function (e.g.,
loadAnalyticsAndAds) that programmatically creates and appends those script tags
and initializes window._mtm/_paq, and update page startup to check the consent
key and only call loadAnalyticsAndAds after the user opts in (and call it
immediately if consent already stored). Ensure the AdSense script is only
appended after consent to avoid unconditional network calls.

In `@website/src/.vuepress/public/images`:
- Line 1: The public/images symlink pointing to ../../../../img/Documentation is
brittle across Windows and CI; replace the symlink by adding a build step or
script that copies the contents of img/Documentation into
website/src/.vuepress/public/images (or generates the images at build time), and
update any build or CI config (e.g., npm scripts or the CI pipeline) to run this
copy before the VuePress build; alternatively document the symlink requirement
in README and gate it behind an environment-specific configuration, but prefer
the deterministic copy approach so website/src/.vuepress/public/images contains
actual files at build time.

---

Nitpick comments:
In `@website/src/.vuepress/components/HomeHero.vue`:
- Around line 180-188: The donate modal markup (the <div class="donate-modal">
containing the close button, <h3 class="modal-title">, etc.) is missing dialog
semantics; update that container to include role="dialog" and aria-modal="true"
and add an aria-labelledby that references the modal title element (give the <h3
class="modal-title"> a unique id and use that id in aria-labelledby). Do the
same change for the other modal block mentioned (the one around lines 210-218)
so both modals expose proper dialog semantics for assistive tech.

In `@website/src/usage/cli.md`:
- Line 12: The sentence referencing SoundSwitch.CLI is not a clickable link;
update the text in cli.md by replacing the plain reference "SoundSwitch.CLI"
with a proper Markdown link (e.g.,
[SoundSwitch.CLI](<insert-URL-or-relative-path>)) so readers can click directly
to the CLI documentation, choosing an absolute URL for external docs or a
relative path for internal docs and keeping the display text as
"SoundSwitch.CLI".
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 688fdd3b-d798-4850-9bf6-489d2b368eec

📥 Commits

Reviewing files that changed from the base of the PR and between 84689a4 and 8e130cc.

⛔ Files ignored due to path filters (3)
  • website/package-lock.json is excluded by !**/package-lock.json
  • website/src/.vuepress/public/favicon.ico is excluded by !**/*.ico
  • website/src/.vuepress/public/logo.svg is excluded by !**/*.svg
📒 Files selected for processing (27)
  • .github/workflows/docs.yml
  • website/.gitignore
  • website/package.json
  • website/src/.vuepress/client.ts
  • website/src/.vuepress/components/GoogleAd.vue
  • website/src/.vuepress/components/HomeHero.vue
  • website/src/.vuepress/config.ts
  • website/src/.vuepress/public/images
  • website/src/.vuepress/styles/index.scss
  • website/src/.vuepress/styles/palette.scss
  • website/src/README.md
  • website/src/advanced/README.md
  • website/src/advanced/auto-updater.md
  • website/src/advanced/multi-language.md
  • website/src/advanced/troubleshooting.md
  • website/src/configuration/README.md
  • website/src/configuration/general.md
  • website/src/configuration/notifications.md
  • website/src/configuration/playback.md
  • website/src/configuration/recording.md
  • website/src/getting-started.md
  • website/src/usage/README.md
  • website/src/usage/app-rules.md
  • website/src/usage/cli.md
  • website/src/usage/communications.md
  • website/src/usage/hotkeys.md
  • website/src/usage/profiles.md

Comment thread .github/workflows/docs.yml Outdated
Comment thread website/src/.vuepress/components/HomeHero.vue Outdated
Comment thread website/src/.vuepress/config.ts
@@ -0,0 +1 @@
../../../../img/Documentation No newline at end of file

@coderabbitai coderabbitai Bot May 8, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "Inspecting public/images type..."
if [ -L "website/src/.vuepress/public/images" ]; then
  echo "OK: images is a symlink"
  target="$(readlink "website/src/.vuepress/public/images")"
  echo "Target: $target"
else
  echo "WARN: images is not a symlink"
  ls -ld "website/src/.vuepress/public/images" || true
fi

echo
echo "Checking whether target path resolves from repo root..."
python - <<'PY'
import os
p = "website/src/.vuepress/public/images"
if os.path.islink(p):
    t = os.readlink(p)
    resolved = os.path.normpath(os.path.join(os.path.dirname(p), t))
    print("resolved_target:", resolved)
    print("exists:", os.path.exists(resolved))
else:
    print("not_a_symlink")
PY

Repository: Belphemur/SoundSwitch

Length of output: 265


Symlink portability risk: public/images points to ../../../../img/Documentation.

The symlink resolves correctly in the current environment, but symlinks can cause failures on Windows (where they require admin privileges by default) and in CI/CD systems that don't preserve symlinks during checkout. Ensure this works consistently across all target platforms and CI runners, or consider replacing the symlink with an alternative approach (e.g., build-time copying, documentation, or environment-specific configuration).

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@website/src/.vuepress/public/images` at line 1, The public/images symlink
pointing to ../../../../img/Documentation is brittle across Windows and CI;
replace the symlink by adding a build step or script that copies the contents of
img/Documentation into website/src/.vuepress/public/images (or generates the
images at build time), and update any build or CI config (e.g., npm scripts or
the CI pipeline) to run this copy before the VuePress build; alternatively
document the symlink requirement in README and gate it behind an
environment-specific configuration, but prefer the deterministic copy approach
so website/src/.vuepress/public/images contains actual files at build time.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Symlinks were explicitly requested to ensure assets automatically remain synced with the source without needing manual copy steps. They work correctly in our target environments.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Belphemur, understood — thanks for the context! I'll note this for future reviews so the symlink won't be flagged again.

(´• ω •`) ♡


✏️ Learnings added
Learnt from: Belphemur
Repo: Belphemur/SoundSwitch PR: 2096
File: website/src/.vuepress/public/images:1-1
Timestamp: 2026-05-08T01:03:36.604Z
Learning: In the SoundSwitch repository (Belphemur/SoundSwitch), `website/src/.vuepress/public/images` is an intentional symlink pointing to `../../../../img/Documentation`. This is a deliberate design decision to keep documentation assets automatically in sync with the source. Do not flag this symlink as a portability concern in future reviews, as it works correctly in all target environments used by this project.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces several infrastructure and installer improvements, including support for ARM64 architecture, migration to .NET 10, and the addition of a new 'App Sound Lock' feature. Key changes include updating project dependencies, enhancing the installer with .NET runtime detection and uninstallation logic, and adding a process monitor for audio rule matching. I have reviewed the changes and identified a few areas for improvement: the .NET runtime detection logic in the installer needs to check both 32-bit and 64-bit registry views to avoid redundant downloads, the Markdig package version change appears to be an accidental downgrade, and the uninstaller command execution logic needs more robust quote handling.

I am having trouble creating individual review comments. Click here to see my feedback.

Installer/scripts/CodeDependencies.iss (273-275)

high

The Dependency_IsNetCoreInstalled function checks for the .NET runtime installation path only in the 32-bit registry view (HKLM32). On a 64-bit system, this will not find a 64-bit-only .NET runtime, which is typically registered in the native 64-bit registry view (HKLM). This could lead to the installer unnecessarily downloading and installing a runtime that is already present.

To ensure all installations are detected, you should iterate over both HKLM and HKLM32 registry roots, as is done in uninstall_dotnet.iss.

References
  1. When searching for registry keys (such as uninstallation strings) in an installer, iterate over both native (HKLM) and 32-bit (HKLM32) registry roots to ensure all potential cross-architecture installations or leftovers are identified.

Directory.Packages.props (12)

medium

The version for the Markdig package has been changed from 0.42.0 to 1.1.3. This appears to be a significant version downgrade, as Markdig's versioning scheme is typically 0.x.y. This could reintroduce old bugs or remove features. Please verify if this version change is intentional. If it's a typo, it should be corrected to the intended version.

Installer/scripts/uninstall_dotnet.iss (47)

medium

The command to execute the uninstaller wraps QuietUninstallString in an extra set of double quotes (""...""). This might cause issues if the QuietUninstallString from the registry already contains quotes, which is common for paths with spaces. For example, a command like cmd /c """"C:\Path\uninstaller.exe" /args""" would likely fail. It would be safer to handle quoting more carefully, perhaps by checking if the path is already quoted before adding more.

Belphemur added 2 commits May 7, 2026 20:22
- Enhance website documentation for advanced features, App Rules, Profiles, configuration, and CLI usage.
- Add developer guides in `docs/` for architecture, building, contributing, and internal components.
- Update AGENTS.md to link to the new development documentation structure.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 7

🧹 Nitpick comments (1)
website/src/advanced/troubleshooting.md (1)

7-7: ⚡ Quick win

Use hyphenation for compound adjectives.

"Per App Audio" should be hyphenated as "Per-App Audio" when used as a compound adjective. This applies to both the section heading and line 9 where "per-app routing" is mentioned.

✏️ Proposed fix
-## Reset Per App Audio
+## Reset Per-App Audio

-Resets all audio device assignments that were made to specific programs. If audio devices are not being reassigned to programs when switching devices, click **Reset** to clear all per-app routing state. Windows will then reassign applications to their default devices, and App Sound Lock rules will reapply on the next process or window event.
+Resets all audio device assignments that were made to specific programs. If audio devices are not being reassigned to programs when switching devices, click **Reset** to clear all per-app routing state. Windows will then reassign applications to their default devices, and App Sound Lock rules will reapply on the next process or window event.

Note: Line 9 already correctly uses "per-app" with a hyphen in "per-app routing state," so only the heading needs updating.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@website/src/advanced/troubleshooting.md` at line 7, The heading "## Reset Per
App Audio" should be updated to use hyphenation for the compound adjective;
change the heading text (the line containing "## Reset Per App Audio") to "##
Reset Per-App Audio" to match the already-correct "per-app routing" usage and
ensure consistent hyphenation across the document.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/banner-manager.md`:
- Line 44: The sentence about manually removing a banner is a fragment—make it
an explicit, grammatical sentence by adding a subject and verb; update the
sentence that references RemovePersistentMuteBanner(microphoneId) to read
something like "You can call RemovePersistentMuteBanner(microphoneId) to
immediately remove a specific microphone's persistent banner and rearrange the
remaining ones," ensuring the function name
RemovePersistentMuteBanner(microphoneId) is kept exactly as shown.

In `@docs/contributing.md`:
- Around line 137-150: Add an explicit build step before running tests: update
the Testing section to instruct contributors to run "dotnet build
SoundSwitch.sln -c Debug" (to ensure compilation succeeds) and then run "dotnet
test SoundSwitch.sln -c Debug"; make sure the guidance references the solution
name SoundSwitch.sln and the Debug configuration so the build verification
precedes the test command.
- Around line 104-108: The fenced code block containing "feat(api)!: change
device switching API signature" and the "BREAKING CHANGE: The `SwitchDevice`
method now requires a `DeviceType` enum parameter." message lacks a language
identifier; update the opening fence from ``` to ```text (or another appropriate
language) so the block is rendered and linted correctly, ensuring the rest of
the block (including the closing ```) remains unchanged.
- Around line 30-37: Update the "Code Contributions" section so contributors
build the solution before running tests: insert a new step before the existing
test step that runs the build command `dotnet build SoundSwitch.sln -c Debug`,
then renumber the subsequent steps (so the test step becomes the next one) and
ensure the test instruction remains `dotnet test SoundSwitch.sln`; modify the
"Code Contributions" block header and list accordingly to reflect the added
build step and keep the descriptive branch naming guidance intact.
- Around line 68-74: The fenced code block example in contributing.md lacks a
language identifier; update the opening triple backticks for the snippet shown
(the block containing "type(scope): description" and the optional body/footer)
to include a language token (e.g., change ``` to ```text) so the block renders
and passes markdown linting, leaving the block contents and closing backticks
unchanged.

In `@website/src/advanced/troubleshooting.md`:
- Line 28: Remove the duplicate image markdown reference "!
[Troubleshoot](/images/Troubleshoot.png)" found at the end of the
troubleshooting.md content (it duplicates the screenshot already included
earlier); open the file, locate the line containing that exact image tag and
delete it so the file only contains the single original screenshot reference.

In `@website/src/configuration/general.md`:
- Line 24: Change the heading text "Double Click Action" to use standard
hyphenation: update the heading string to "Double-click Action" in the document
(the header line currently containing Double Click Action) unless it must
exactly match a UI label; ensure any references or links that rely on the exact
heading are updated accordingly.

---

Nitpick comments:
In `@website/src/advanced/troubleshooting.md`:
- Line 7: The heading "## Reset Per App Audio" should be updated to use
hyphenation for the compound adjective; change the heading text (the line
containing "## Reset Per App Audio") to "## Reset Per-App Audio" to match the
already-correct "per-app routing" usage and ensure consistent hyphenation across
the document.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 4c785148-90db-43bb-9f09-13219208a016

📥 Commits

Reviewing files that changed from the base of the PR and between 94876e0 and 27a3c4b.

📒 Files selected for processing (22)
  • AGENTS.md
  • docs/README.md
  • docs/architecture.md
  • docs/banner-manager.md
  • docs/building.md
  • docs/contributing.md
  • website/src/advanced/README.md
  • website/src/advanced/auto-updater.md
  • website/src/advanced/multi-language.md
  • website/src/advanced/troubleshooting.md
  • website/src/configuration/README.md
  • website/src/configuration/general.md
  • website/src/configuration/notifications.md
  • website/src/configuration/playback.md
  • website/src/configuration/recording.md
  • website/src/getting-started.md
  • website/src/usage/README.md
  • website/src/usage/app-rules.md
  • website/src/usage/cli.md
  • website/src/usage/communications.md
  • website/src/usage/hotkeys.md
  • website/src/usage/profiles.md
✅ Files skipped from review due to trivial changes (17)
  • website/src/advanced/README.md
  • docs/architecture.md
  • AGENTS.md
  • docs/README.md
  • website/src/configuration/README.md
  • website/src/usage/communications.md
  • website/src/advanced/auto-updater.md
  • website/src/usage/hotkeys.md
  • website/src/configuration/playback.md
  • website/src/getting-started.md
  • website/src/advanced/multi-language.md
  • website/src/usage/app-rules.md
  • website/src/configuration/recording.md
  • website/src/usage/cli.md
  • docs/building.md
  • website/src/configuration/notifications.md
  • website/src/usage/profiles.md
🚧 Files skipped from review as they are similar to previous changes (1)
  • website/src/usage/README.md

Comment thread docs/banner-manager.md Outdated
Comment thread docs/contributing.md
Comment thread docs/contributing.md Outdated
Comment thread docs/contributing.md Outdated
Comment thread docs/contributing.md
Comment thread website/src/advanced/troubleshooting.md Outdated
Comment thread website/src/configuration/general.md Outdated
@Belphemur Belphemur merged commit 78a58f0 into dev May 8, 2026
10 checks passed
@Belphemur Belphemur deleted the feat/vuepress-docs branch May 8, 2026 01:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants