From abf83fa30a53cc1cd423b5344c8e143bcf2a0ecd Mon Sep 17 00:00:00 2001 From: Michel de Graaf Date: Sun, 26 Jul 2026 11:41:48 +0200 Subject: [PATCH] style(website): cut the padding from the page copy Remove three cross-page duplications: the "what --help cannot say" list appeared on both home and docs, the config precedence rule twice on install, and the soulfind link twice in adjacent community paragraphs. Drop the em dashes, the adverbs, and the rhetorical triads while there. --- website/src/pages/community.tsx | 23 ++++---------- website/src/pages/docs.tsx | 20 ++++++------- website/src/pages/home.tsx | 39 +++++++++++------------- website/src/pages/install.tsx | 53 ++++++++++++++++----------------- 4 files changed, 57 insertions(+), 78 deletions(-) diff --git a/website/src/pages/community.tsx b/website/src/pages/community.tsx index 8092655..9bc36ee 100644 --- a/website/src/pages/community.tsx +++ b/website/src/pages/community.tsx @@ -50,7 +50,7 @@ const CITIZENSHIP = [ title: 'Share, and share real files', body: ( <> - Point shares add at the collection you actually listen to. Full albums, + Point shares add at the collection you listen to. Full albums, honest bitrates, nothing transcoded up from a lossy source and relabelled. ), @@ -146,20 +146,10 @@ export const Community = () => { > soulfind {' '} - run in CI, so a green checkmark means it genuinely built and talked to a - server. + run in CI, so a green checkmark means it built and talked to a server.

- That server is{' '} - - soulfind-dev/soulfind - - , an open-source Soulseek server. Run it locally and you can develop and test + soulfind is an open-source Soulseek server. Run it locally and you develop against a real protocol implementation without touching the public network.

@@ -187,10 +177,9 @@ export const Community = () => { eyebrow="being a good member" title="The network is other people's hard drives." > - Soulseek is a gem for music enthusiasts. Decades of records, live sets, and - pressings that never made it anywhere else, kept online by people who care about - them. It works because someone left their collection up for you. None of this is - enforced. It is just how the network stays worth using. + Decades of records, live sets, and pressings that never made it anywhere else, + kept online by people who care about them. None of this is enforced. It is just + how the network stays worth using.
{CITIZENSHIP.map((item) => ( diff --git a/website/src/pages/docs.tsx b/website/src/pages/docs.tsx index 58d9bb8..5641433 100644 --- a/website/src/pages/docs.tsx +++ b/website/src/pages/docs.tsx @@ -97,13 +97,13 @@ export const Docs = () => { />

- On first run soulseek-rs shows a login screen: sign in with an existing - Soulseek account or register a new one, right in the TUI. Your password is - stored in the OS keychain, not in plain text. + On first run you get a login screen: sign in with an existing Soulseek + account or register a new one. Your password goes to the OS keychain, not a + plain-text file.

- Downloads land in a conventional folder by default, and your TUI state - (searches, downloads, rooms) is saved and restored across restarts. + Downloads land in a conventional folder, and TUI state (searches, downloads, + rooms) is restored across restarts.

@@ -202,7 +202,7 @@ export const Docs = () => {

soulseek-rs skills install writes a SKILL.md into - every coding agent on the machine — Claude Code and opencode today,{' '} + every coding agent on the machine: Claude Code and opencode today,{' '} --dir for anything else. After it lands you describe the outcome instead of the pipeline: “mirror that peer’s FLAC folder”, “watch this room for an hour and save anything @@ -210,9 +210,7 @@ export const Docs = () => {

It carries what --help cannot: the JSON keys of every record, - that exit 4 means widen the query rather than retry it, that remote paths go - back byte-identical, and that --follow never returns so an agent - passes --duration. Run it again after an upgrade to update it;{' '} + and what each exit code means. Rerun it after an upgrade;{' '} skills uninstall takes it back out.

@@ -233,8 +231,8 @@ export const Docs = () => {

- Deeper docs live where they stay current: the full README on GitHub, and the - generated API reference for the library on docs.rs. + The README on GitHub and the library API reference on docs.rs stay current + with the code.

diff --git a/website/src/pages/home.tsx b/website/src/pages/home.tsx index bc9cea8..595eef3 100644 --- a/website/src/pages/home.tsx +++ b/website/src/pages/home.tsx @@ -27,10 +27,10 @@ const FEATURES = [ cmd: 'soulseek-rs skills install', body: ( <> - Run it once and asking beats scripting: your agent knows the record shapes, the - exit codes, and the filters, so “find the 1998 pressing, lossless only” - becomes a pipeline it writes itself. No MCP server, no wrapper — the skill ships - inside the binary and finds Claude Code and opencode on its own. + Run it once and your agent knows the record shapes, the exit codes, and the + filters: “find the 1998 pressing, lossless only” becomes a pipeline it + writes itself. No MCP server, no wrapper. The skill ships in the binary and finds + Claude Code and opencode on its own. ), }, @@ -205,16 +205,15 @@ export const Home = () => {

soulseek-rs speaks that protocol. It’s a third-party client, not the - official app, and not affiliated with the Soulseek project. It shares, - browses, and does rooms and private messages, because a client that only - downloads takes from the network without giving anything back. + official app. It shares, browses, and does rooms and private messages, + because a client that only downloads takes without giving anything back.

Reach for soulseek-rs-lib to build a custom client or an agent - on the protocol directly.{' '} + on the protocol.{' '} Use the library @@ -224,8 +223,8 @@ export const Home = () => {

Every command runs as a one-off from the shell. Point cron, a script, or an agent at them and read JSON records back off stdout. No daemon, no API to - stand up — and skills install teaches the agent the surface - for you.{' '} + stand up. skills install teaches the agent the surface for + you.{' '} See the commands @@ -238,8 +237,7 @@ export const Home = () => {

Everything happens in the TUI, and every command also runs as a one-off from the - shell, so the same client works for scripting, cron jobs, and agents driving it - programmatically. + shell.
{FEATURES.map((feature, i) => ( @@ -259,8 +257,8 @@ export const Home = () => {
- A CLI an agent can drive is not the same as a CLI an agent knows how to drive. - skills install closes that gap in one command. + An agent can run any CLI. skills install teaches it to run this one + well. {

--help lists flags. It cannot say which JSON keys a record - carries, that exit 4 means widen the query rather than retry it, that a - remote path is backslash-separated and has to go back byte-identical, or - that --follow never returns so an agent passes{' '} - --duration. An agent without that guesses, and guessing against - a stranger’s file server hangs the job. + carries, or that exit 4 means widen the query rather than retry it. An agent + without that guesses, and guessing against a stranger’s file server + hangs the job.

skills install fills that in. The requests stop being pipelines - you write: mirror a peer’s FLAC folder overnight, watch a room and save - anything that mentions a label, check whether a user is worth queueing behind - before a 2 GB transfer. + you write: mirror a peer’s FLAC folder overnight, or check whether a + user is worth queueing behind before a 2 GB transfer.

It stays a CLI: no daemon, no MCP server, no API key. Upgrading the binary diff --git a/website/src/pages/install.tsx b/website/src/pages/install.tsx index c7d31dc..3623195 100644 --- a/website/src/pages/install.tsx +++ b/website/src/pages/install.tsx @@ -58,8 +58,8 @@ const INSTALLS: readonly InstallRoute[] = [ ], alt: ( <> - A prebuilt binary for both Apple silicon and Intel, so no Rust toolchain. With one - installed, cargo install soulseek-rs builds it from crates.io instead. + A prebuilt binary for Apple silicon and Intel, no Rust toolchain needed. With a + toolchain, cargo install soulseek-rs builds from crates.io instead. ), }, @@ -116,7 +116,7 @@ const PLATFORMS: readonly PlatformNote[] = [ config: '~/.config/soulseek-rs/config.toml', state: '~/.local/share/soulseek-rs/state', downloads: '~/Downloads/Soulseek', - note: 'macOS deliberately follows the XDG layout rather than Application Support, so config sits beside your other dotfile config.', + note: 'Follows the XDG layout rather than Application Support.', }, { id: 'linux', @@ -185,9 +185,9 @@ const SETTINGS: readonly Setting[] = [ fallback: 'the download folder', body: ( <> - Folders offered to the network, as a list. An explicitly empty list shares - nothing. shared_dir is the older single-folder spelling and still - reads; shares add writes the list form. + Folders offered to the network. An empty list shares nothing.{' '} + shares add writes this; the older shared_dir spelling + still reads. ), }, @@ -388,9 +388,10 @@ export const Install = () => {

The port is your --listener-port (env{' '} - SOULSEEK_LISTENER_PORT, default 2234); it’s - renewed automatically and removed on exit. Pass --no-listener to - turn it off. Check your own network without launching the client: + SOULSEEK_LISTENER_PORT, default 2234); soulseek-rs + renews it while it runs and removes it on exit. Pass{' '} + --no-listener to turn it off. Check your own network without + launching the client:

{ - Your password goes to the OS keychain, never a plain-text file. If you would - rather it never be stored at all, have password_cmd shell out to - your own password manager and print it on demand. For CI and containers,{' '} + Your password goes to the OS keychain, never a plain-text file. Point{' '} + password_cmd at your own password manager and it is never stored + at all. For CI and containers,{' '} --password-stdin reads it off a pipe so it never reaches{' '} ps or the environment. config.toml is layered: flags beat environment variables, which - beat the file, which beats the defaults. config get and{' '} - config set read and write that file without opening an editor. - State (searches, downloads, rooms) is versioned JSON and restores on restart; - anything unreadable is set aside as .bak instead of being - overwritten. + beat the file, which beats the defaults. State (searches, downloads, rooms) is + versioned JSON and restores on restart; soulseek-rs sets anything unreadable + aside as .bak rather than overwriting it.
- Every one has a working default, so an empty file — or no file — is valid. Flags - beat environment variables, which beat this file, which beats the defaults.{' '} + Every one has a working default, so an empty file, or no file at all, is valid.{' '} config list prints the effective value of each. @@ -509,10 +507,10 @@ export const Install = () => {

config path prints the file in use, config get{' '} - reads one setting and config set writes one. Unknown keys are - rejected rather than silently ignored, so a typo fails loudly instead of - quietly doing nothing. --no-config ignores the file entirely - and --config FILE points at another one. + reads one setting and config set writes one. It rejects + unknown keys, so a typo fails instead of doing nothing.{' '} + --no-config ignores the file entirely and{' '} + --config FILE points at another one.

@@ -521,9 +519,8 @@ export const Install = () => {
- Three things exist on disk: the binary, the config, and the state. Nothing else is - written unless you pointed --log-file at a file, and there is no - telemetry to opt out of. + Three things exist on disk: the binary, the config, and the state. Nothing else, + unless you point --log-file somewhere. No telemetry to opt out of. {

- Your downloads and your shared directories are yours: they stay exactly where - they are. On macOS, delete the keychain entry for soulseek-rs in + Your downloads and your shared directories are yours: they stay where they + are. On macOS, delete the keychain entry for soulseek-rs in Keychain Access if you saved a password.