feat(cli): atradio terminal TUI radio player
A native Rust client for atradio.fm in cli/ (workspace member `atradio`):
- clap CLI with a synthwave-styled help; default launches the TUI.
Subcommands: search, play, trending, login (app-password + --oauth),
logout, whoami.
- ratatui TUI inspired by the web app: trending/popular/favorites lists,
player bar, fzf-style fuzzy search (/), equalizer + full Rockbox DSP
panel (e), comments (c/a), notifications (n), help (?).
- Audio via rockbox-playback (>=0.4.1) with the full DSP chain (10-band
EQ, tone, crossfeed, PBE, surround, compressor, channel/width).
- atproto via jacquard: password + OAuth login (reads env), PDS writes
for favorites/comments/play-status.
- Public AppView reads + radio-browser search over reqwest.
- Typed fm.atradio.* bindings generated from packages/lexicons via
jacquard-codegen (src/fm_atradio, scripts/gen-lexicons.sh).
- TOML settings persistence (volume + DSP) under ~/.config/atradio.
- Linux-only MPRIS (D-Bus) integration for media keys / desktop panels.
Also: sync the Clojure console (bb.edn + console.clj) with cli:* tasks,
and ignore Rust target/ output.
Note: linking rockbox-playback (GPL-2.0) makes the binary GPL-2.0-or-later.
feat: AT Proto social platform — OAuth, PDS-backed data, Jetstream AppView
Turn atradio.fm into a social, AT-Protocol-native app.
Web (apps/web):
- Browser OAuth login (@atcute/oauth-browser-client), Atmosphere login modal
- Gate favoriting/add/remove behind login; public browse/search/playback
- Favorites + user stations stored as fm.atradio.* records in the user's PDS
(optimistic writes, loaded on login)
- Profile shows real display name/handle/avatar; public /profile/:did|:handle
Lexicons (packages/lexicons):
- fm.atradio.{station,favorite,getFavorites,getStations} authored in Pkl
(pkl eval -> JSON) + TS types/zod/mappers
API (apps/api) — Express + Drizzle + Postgres AppView:
- Jetstream consumer across all 4 official hosts, idempotent upserts, cursor
- XRPC getFavorites/getStations (+ discovery), open CORS
- Production TuneIn + ICY media proxies (moved off Vite dev middleware)
Ops & tooling:
- systemd units (api + jetstream)
- tools/console: Babashka + Clojure + rebel REPL command hub, root ./console
- mise pins java/clojure/babashka; consola logging throughout