Split ipx into directory, backend and frontend #207

Closed
opened 2026-10-11 20:01:57 -07:00 by rays · 3 comments
Owner

Split ipx into three pieces in this repo, each its own image and deploy:

  • directory: ipx-directory at https://ipx-dir.sdf1.net, a shared catalogue of public podcasts, metadata only. Access by tokens in its config file, each ro, rw or rwa, revoked one at a time.
  • backend: ipx, everything else: accounts, subscriptions, scans, downloads, playback, the API.
  • frontend: ipx-web, the page as static files behind Caddy, which proxies the API on the same origin.

Why: deploy each on its own, a clean API for other clients, a scan or download never touching the page or the directory, and smaller pieces than today's 3,000-line files.

Phases, each deployable:

  • #202 Cargo workspace, shared feed crate
  • #203 the frontend in its own container behind Caddy
  • #204 the directory service
  • #205 ipx uses the directory service (URL, token, sharing; the local directory goes)
  • #206 directory admin from ipx (rwa tokens; mockups first)

Risk carried throughout: the directory stores feed URLs, and a URL can hold a subscriber's key. looks_private() runs before a snapshot is sent and again when it arrives, a per-feed unlisted flag covers what it misses, and an rwa token can remove and block a feed.

Split ipx into three pieces in this repo, each its own image and deploy: * **directory**: `ipx-directory` at https://ipx-dir.sdf1.net, a shared catalogue of public podcasts, metadata only. Access by tokens in its config file, each `ro`, `rw` or `rwa`, revoked one at a time. * **backend**: `ipx`, everything else: accounts, subscriptions, scans, downloads, playback, the API. * **frontend**: `ipx-web`, the page as static files behind Caddy, which proxies the API on the same origin. Why: deploy each on its own, a clean API for other clients, a scan or download never touching the page or the directory, and smaller pieces than today's 3,000-line files. Phases, each deployable: - [ ] #202 Cargo workspace, shared feed crate - [ ] #203 the frontend in its own container behind Caddy - [ ] #204 the directory service - [ ] #205 ipx uses the directory service (URL, token, sharing; the local directory goes) - [ ] #206 directory admin from ipx (`rwa` tokens; mockups first) Risk carried throughout: the directory stores feed URLs, and a URL can hold a subscriber's key. `looks_private()` runs before a snapshot is sent and again when it arrives, a per-feed unlisted flag covers what it misses, and an `rwa` token can remove and block a feed.
rays added the enhancement label 2026-10-11 20:01:57 -07:00
Author
Owner

Wording: the per-feed flag is private (#205). A private feed is never sent to the directory.

Wording: the per-feed flag is **private** (#205). A private feed is never sent to the directory.
Author
Owner

Split status: #202 workspace, #204 directory, #205 ipx uses it, #203 page in ipx-web, #208 own Arcane project: all done and deployed. Left: #206, directory admin from ipx, mockups first.

Split status: #202 workspace, #204 directory, #205 ipx uses it, #203 page in ipx-web, #208 own Arcane project: all done and deployed. Left: #206, directory admin from ipx, mockups first.
Author
Owner

Done: the split is in production as three services in the Arcane project ipx, each with its own version, changelog and traces: ipx-web (#203, #210, #213), ipx (#202, #205, #211), ipx-directory (#204, #206, #213), with the move to its own project (#208).

Done: the split is in production as three services in the Arcane project ipx, each with its own version, changelog and traces: ipx-web (#203, #210, #213), ipx (#202, #205, #211), ipx-directory (#204, #206, #213), with the move to its own project (#208).
rays closed this issue 2026-10-12 09:56:21 -07:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: rays/ipx#207