From 8482c47149c86e21027091432b7434822b5cd507 Mon Sep 17 00:00:00 2001 From: Michel de Graaf Date: Sun, 26 Jul 2026 16:17:22 +0200 Subject: [PATCH] fix(website): give Homebrew users an uninstall command, share the link markup The macOS install route recommends Homebrew, but the uninstall section only ever offered `cargo uninstall`, so anyone who followed the recommended route had no documented way to remove the binary. Adds `brew uninstall`. install.tsx also had ReleasesLink defined to wrap an external anchor, then inlined that same anchor four more times anyway - including one that rebuilt the releases link by hand, byte for byte, 290 lines below the component that already rendered it. ExtLink takes the href and covers all six sites here and in community.tsx. Rendered markup is unchanged. --- website/src/components/ui/ext-link.tsx | 15 +++++++ website/src/pages/community.tsx | 10 +---- website/src/pages/install.tsx | 60 +++++--------------------- 3 files changed, 27 insertions(+), 58 deletions(-) create mode 100644 website/src/components/ui/ext-link.tsx diff --git a/website/src/components/ui/ext-link.tsx b/website/src/components/ui/ext-link.tsx new file mode 100644 index 0000000..dcbd27a --- /dev/null +++ b/website/src/components/ui/ext-link.tsx @@ -0,0 +1,15 @@ +interface ExtLinkProps { + href: string + children: React.ReactNode +} + +export const ExtLink = ({ href, children }: ExtLinkProps) => ( + + {children} + +) diff --git a/website/src/pages/community.tsx b/website/src/pages/community.tsx index 9bc36ee..689b1a1 100644 --- a/website/src/pages/community.tsx +++ b/website/src/pages/community.tsx @@ -1,4 +1,5 @@ import { Button } from '@/components/ui/button' +import { ExtLink } from '@/components/ui/ext-link' import { FeatureCard } from '@/components/ui/feature-card' import { Code } from '@/components/ui/inline-code' import { Cols, Eyebrow, PageHead, Prose, Section, SectionHead } from '@/components/ui/layout' @@ -138,14 +139,7 @@ export const Community = () => {

Format and Clippy run clean on every push, and unit tests plus an end-to-end suite against{' '} - - soulfind - {' '} + soulfind{' '} run in CI, so a green checkmark means it built and talked to a server.

diff --git a/website/src/pages/install.tsx b/website/src/pages/install.tsx index 9e5b4dd..c01a5fa 100644 --- a/website/src/pages/install.tsx +++ b/website/src/pages/install.tsx @@ -1,5 +1,6 @@ import { Button } from '@/components/ui/button' import { FeatureCard } from '@/components/ui/feature-card' +import { ExtLink } from '@/components/ui/ext-link' import { Code } from '@/components/ui/inline-code' import { Cols, PageHead, Prose, Section, SectionHead } from '@/components/ui/layout' import { OsIcon, type OsName } from '@/components/ui/os-icon' @@ -28,17 +29,6 @@ const LIB_LINES: TermLine[] = LIB_SRC.split('\n').map((text) => ({ text, })) -const ReleasesLink = ({ children }: { children: React.ReactNode }) => ( - - {children} - -) - interface InstallRoute { id: string os: OsName @@ -75,7 +65,7 @@ const INSTALLS: readonly InstallRoute[] = [ alt: ( <> Homebrew on Linux works the same as on macOS. Without either, the{' '} - releases page has static musl archives for x86-64 and + releases page has static musl archives for x86-64 and arm64 that run on any distribution. ), @@ -92,7 +82,7 @@ const INSTALLS: readonly InstallRoute[] = [ <> Cargo needs the MSVC build tools. To skip both, take the{' '} pc-windows-msvc zip from the{' '} - releases page, unpack it, and put{' '} + releases page, unpack it, and put{' '} soulseek-rs.exe on your PATH. ), @@ -257,15 +247,7 @@ const Steps = () => (

One command per platform. Cargo needs a Rust toolchain from{' '} - - rustup.rs - - ; the other routes don’t. + rustup.rs; the other routes don’t.

{INSTALLS.map((route) => ( @@ -320,15 +302,7 @@ const Steps = () => (

You’ll find the binary at target/release/soulseek-rs. Prebuilt archives for tagged releases are on the{' '} - - releases page - - . + releases page.

@@ -347,25 +321,9 @@ const Steps = () => ( />

- Full API reference on{' '} - - docs.rs - - . The lib API changes between majors, so check the{' '} - - changelog - {' '} - when you upgrade. + Full API reference on docs.rs. The lib API + changes between majors, so check the{' '} + changelog when you upgrade.

@@ -534,6 +492,8 @@ const Uninstall = () => ( { t: 'cm', text: '# while the binary is still there' }, { t: 'cmd', text: 'soulseek-rs completions uninstall' }, { t: 'cmd', text: 'soulseek-rs skills uninstall' }, + { t: 'cm', text: '# whichever way you installed it' }, + { t: 'cmd', text: 'brew uninstall soulseek-rs' }, { t: 'cmd', text: 'cargo uninstall soulseek-rs' }, { t: 'cm', text: '# config and state: searches, downloads, rooms, messages' }, {