Python 54.8%
Svelte 34.1%
Rust 4.9%
TypeScript 4.2%
CSS 0.6%
JavaScript 0.5%
Just 0.2%
Dockerfile 0.2%
Shell 0.2%
HTML 0.1%
Mako 0.1%
Other 0.2%
601 3 50

Clone this repository

https://tangled.org/zzstoatzz.io/plyr.fm
git@tangled.org:zzstoatzz.io/plyr.fm

For self-hosted knots, clone URLs may differ based on your setup.

README.md

plyr.fm#

music on atproto

check the plyr.fm artist page for the latest auto-generated development podcast!

tech stack

backend#

frontend#

local development

prerequisites#

  • uv for Python package management
  • bun for frontend development
  • just for task running (recommended)

quick start#

using just:

# install dependencies (uv handles backend venv automatically)
uv sync # For root-level deps, if any, and initializes uv
just frontend install

# run backend (hot reloads at http://localhost:8001)
just backend run

# run frontend (hot reloads at http://localhost:5173)
just frontend dev

# run transcoder (hot reloads at http://localhost:8082)
just transcoder run
features

listening#

  • audio playback with persistent queue across tabs/devices
  • like tracks with counts visible to all listeners
  • browse artist profiles and discographies
  • share tracks and albums with nice link previews

creating#

  • well-scoped OAuth authentication via ATProto (bluesky accounts)
  • upload tracks with title, artwork, and featured artists
  • organize tracks into albums with cover art
  • edit metadata and replace artwork anytime
  • track play counts and like analytics
  • publish ATProto track and like records to your PDS
project structure
plyr.fm/
โ”œโ”€โ”€ backend/              # FastAPI app & Python tooling
โ”‚   โ”œโ”€โ”€ src/backend/      # application code
โ”‚   โ”‚   โ”œโ”€โ”€ api/          # public endpoints
โ”‚   โ”‚   โ”œโ”€โ”€ _internal/    # internal services
โ”‚   โ”‚   โ”œโ”€โ”€ models/       # database schemas
โ”‚   โ”‚   โ””โ”€โ”€ storage/      # storage adapters
โ”‚   โ”œโ”€โ”€ tests/            # pytest suite
โ”‚   โ””โ”€โ”€ alembic/          # database migrations
โ”œโ”€โ”€ frontend/             # SvelteKit app
โ”‚   โ”œโ”€โ”€ src/lib/          # components & state
โ”‚   โ””โ”€โ”€ src/routes/       # pages
โ”œโ”€โ”€ transcoder/           # Rust audio service
โ”œโ”€โ”€ docs/                 # documentation
โ””โ”€โ”€ justfile              # task runner
costs

~$35-40/month:

  • fly.io backend (production): ~$5/month (shared-cpu-1x, 256MB RAM)
  • fly.io backend (staging): ~$5/month (shared-cpu-1x, 256MB RAM)
  • fly.io transcoder: ~$0-5/month (auto-scales to zero when idle)
  • neon postgres: $5/month (starter plan)
  • audd audio fingerprinting: ~$10/month (enterprise API for copyright detection)
  • cloudflare pages: free (frontend hosting)
  • cloudflare r2: ~$0.16/month (6 buckets across dev/staging/prod)

documentation#