crabidy/architecture
Test User bdc961501d architecture: design the /rss subscription provider
Podcast feeds you subscribe to by URL, including premium per-subscriber
URLs, with listings that are never cached.

Two findings shape the design. First, a premium feed URL *is* the
credential, and library paths are displayed, logged, and persisted into
saved queues and bookmarks — so the URL can never appear in one. Paths
therefore carry a slug of the subscription name plus a short blake3 hash of
the episode guid, and subscriptions live in rss.toml rather than being
addressed by URL.

Second, "not cached" has a client-side half: both clients cache library
listings by path and only /crabidy, /fs and /orphans bypass it. Without
adding /rss to those lists, a re-visit answers from the client's cache and
the server's freshness is invisible. A listing always fetches; a
listing-written memo (read only when resolving a track) keeps queueing 40
episodes to one fetch instead of 40, with no TTL to guess at.

Also picks feed-rs over hand-rolled parsing (RSS 2.0/1.0/0.x, Atom and JSON
Feed in one maintained crate — real podcast feeds are not uniform), and
records the risks that cannot be engineered away: publishers who
regenerate guids break bookmarks, and episodes ageing out of a feed cannot
be resolved. Capture rather than bookmark what you want to keep.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-26 12:19:23 +02:00
..
audiobookshelf-provider.md Architecture: audiobookshelf (`/abs`) provider design 2026-07-23 23:09:54 +02:00
bookmarks.md Design the crabidy content store; add wire + fsdy foundations 2026-07-22 10:58:11 +02:00
build-features.md build: put every provider, opus, and the spectrum behind cargo features 2026-07-25 03:15:32 +02:00
capture-deletion.md Design the crabidy content store; add wire + fsdy foundations 2026-07-22 10:58:11 +02:00
captures.md Design the crabidy content store; add wire + fsdy foundations 2026-07-22 10:58:11 +02:00
cbd-bundle.md Give cbd its own config file, separate from cbd-tui 2026-07-21 22:57:43 +02:00
cli.md Design a comprehensive clap-derive CLI (architecture/cli.md) 2026-07-22 11:45:05 +02:00
client-configs.md Give cbd its own config file, separate from cbd-tui 2026-07-21 22:57:43 +02:00
crabidy-store.md Let a same-source W re-capture replace its save in place 2026-07-22 22:35:48 +02:00
fs-provider.md Persist queues as fs-provider folders 2026-07-21 10:41:49 +02:00
fyyd-provider.md Add the fyyd podcast provider (/fyyd) 2026-07-23 17:29:13 +02:00
help-modal.md Add a help modal to cbd-tui behind a declarative binding table 2026-07-20 17:27:12 +02:00
incremental-captures.md Capture local files by copying them; add W to capture the queue 2026-07-22 01:08:29 +02:00
jamendo-provider.md jamendo: send a User-Agent (Jamendo returns empty results without one) 2026-07-24 15:54:31 +02:00
node-editing.md Add rename and delete for modifiable library nodes 2026-07-20 23:34:47 +02:00
orphans.md Add the /orphans provider: a store garbage-collection view 2026-07-22 22:47:23 +02:00
overview.md Document the as-built architecture 2026-07-20 10:34:45 +02:00
progressive-queueing.md Playback: retry the start when a skipped/short head runs the player dry 2026-07-23 19:55:18 +02:00
queue-persistence.md Capture library subtrees as bookmarks 2026-07-21 11:11:27 +02:00
queue-register.md cbd-tui: queue marks, visual mode, and a paste register 2026-07-26 10:24:51 +02:00
roles-auth.md Web client: prompt for login on visit when auth is enabled 2026-07-23 17:51:55 +02:00
rss-provider.md architecture: design the /rss subscription provider 2026-07-26 12:19:23 +02:00
search.md Add Tidal search as creatable library nodes 2026-07-20 17:58:44 +02:00
soundcloud-provider.md soundcloud: prefer the progressive mp3 stream (HLS exchange 404s anonymously) 2026-07-24 02:47:13 +02:00
spectrum.md Add a server-streamed frequency spectrum visualizer 2026-07-21 23:14:03 +02:00
tui-search.md Add a / search filter to the TUI library and queue panes 2026-07-21 22:54:39 +02:00
visual-mode.md cbd-tui: fix visual mode stranding the turnaround row (anchor the range) 2026-07-24 16:29:26 +02:00
web-client.md Web client: prompt for login on visit when auth is enabled 2026-07-23 17:51:55 +02:00
youtube-provider.md Replace the yt-dlp subprocess with the pure-Rust rustypipe client 2026-07-21 17:12:40 +02:00
youtube-rustypipe.md Fetch streams in bounded windows and restore yt-dlp for stream URLs 2026-07-21 18:18:40 +02:00