atradio.fm/atradio at main · Tangled
atradio.fm
atradio
Star
Fork
Atom
Configure Feed
Issues
Pull Requests
Commits
Tags
Feed URL
Select the types of activity you want to include in your feed.
A social internet radio platform built on AT Protocol.
atradio.fm
atproto
radio
Star
Fork
Atom
Configure Feed
Issues
Pull Requests
Commits
Tags
Feed URL
Select the types of activity you want to include in your feed.
TypeScript
88.7%
Pkl
6.8%
Clojure
1.5%
CSS
1.4%
JavaScript
0.9%
HTML
0.4%
Shell
0.1%
main
No tags found
26
Code
Clone this repository
Use permalink
HTTPS
https://tangled.org/atradio.fm/atradio<br>https://tangled.org/did:plc:435ozdblpbscwvuzz3npqll5<br>getComputedStyle(s).display !== 'none').textContent)"<br>class="px-3 py-2 text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200"<br>title="Copy to clipboard"
SSH
git@tangled.org:atradio.fm/atradio<br>git@tangled.org:did:plc:435ozdblpbscwvuzz3npqll5<br>getComputedStyle(s).display !== 'none').textContent)"<br>class="px-3 py-2 text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200"<br>title="Copy to clipboard"
For self-hosted knots, clone URLs may differ based on your setup.
Download tar.gz
Download .zip
apps
38 minutes ago
brand
9 hours ago
deploy
11 hours ago
packages
1 hour ago
systemd
12 hours ago
tools
11 hours ago
.gitignore
7 hours ago
LICENSE
25 minutes ago
README.md
11 hours ago
bun.lock
6 hours ago
compose.yml
6 hours ago
console
12 hours ago
mise.toml
12 hours ago
package.json
13 hours ago
preview.png
11 hours ago
tsconfig.base.json
13 hours ago
turbo.json
13 hours ago
Commits<br>26
update LICENSE
18f48b8c
tsiry-sandratraina.com
25 minutes ago
main
style(listeners): use purple for the headphones/listener count, not green
synth-magenta resolves to green (#64e882); switch the listener-count badge<br>on StationCard and the miniplayer to synth-purple so it reads distinct from<br>the cyan/pink/green already in the card.
a935eb66
tsiry-sandratraina.com
38 minutes ago
fix(feed): dedupe global recently-played by actor (story-style)
The "Recently played on atradio" row now shows one entry per listener —<br>their most recent play — instead of repeating a busy user many times.<br>getGlobalRecentlyPlayed groups by actor, taking max(played_at) and that<br>play's station; cursor paginates on the per-actor latest-play time.
089c3a96
tsiry-sandratraina.com
43 minutes ago
fix(playback): proxy http streams through the api to avoid mixed content
Serving the app over https blocks http:// station streams as mixed content.<br>Add GET /api/stream?url= which reverse-proxies audio (bytes piped straight<br>through, ICY metadata + Range forwarded, upstream aborted on client<br>disconnect).
Only http:// stream URLs are rewritten, and only when the page itself is<br>https — https streams and dev keep playing directly. The Player routes<br>playback (rockbox engine, native , HLS fallback) through the proxy<br>while ICY "now playing" polling stays on the original url (runs server-side).<br>HLS manifests are never proxied (would break relative segment URIs).
32702cbe
tsiry-sandratraina.com
58 minutes ago
feat: listening status, recently-played feeds & unique listener counts
Introduce fm.atradio.actor.status (singleton `self` record) written whenever<br>a station reaches "on air", plus shared defs actorInfo/playView/listenerCount.
API:<br>- new recently_played history table (one row per status update) + migration<br>- jetstream indexes actor.status plays; refactor commit handling into explicit<br>per-collection handlers (fixes the not-favorite => station fallthrough)<br>- XRPC: getRecentlyPlayed (per-actor, distinct), getGlobalRecentlyPlayed<br>(platform events + actor), getListenerCounts (count distinct did per station)
Web:<br>- PlayStatusSync writes the status record on play (keyed on station id)<br>- profile "Recently played" tab; home horizontal row of global plays<br>- unique-listener badge on StationCard and the miniplayer (useListenerCount)<br>- request repo:fm.atradio.actor.status OAuth scope
53b1d0fb
tsiry-sandratraina.com
1 hour ago
refactor(lexicons): rename fm.atradio.audioSettings to fm.atradio.audio.settings
Rename the audio settings lexicon NSID and move its pkl/json to the<br>audio/settings path mirroring the NSID. Update all usages: NSID map,<br>zod schema $type, comments, tests, and the OAuth scope in<br>client-metadata.json (repo:fm.atradio.audio.settings).
fd78bc11
tsiry-sandratraina.com
1 hour ago
cache proxy responses
85268c90
tsiry-sandratraina.com
6 hours ago
Branches
main
25 minutes ago
Default
README.md
atradio.fm#
A social internet radio platform built on the AT Protocol . Search stations<br>from radio-browser.info and TuneIn, stream<br>them in the browser, and save favorites + your own stations to your own PDS<br>(portable, user-owned data). Installable as a PWA.
Architecture#
OAuth + reads/writes (in the browser, via atcute)<br>apps/web (React SPA) ───────────────────────────────►...