1# plyr.fm documentation 2 3organized knowledge base for plyr.fm development. 4 5## quick navigation 6 7### operations 8- **[runbooks/](./runbooks/)** - production incident procedures 9 - [connection-pool-exhaustion](./runbooks/connection-pool-exhaustion.md) - 500s, stuck connections 10 11### backend 12- **[background-tasks.md](./backend/background-tasks.md)** - docket-based task system (copyright scan, export, scrobble) 13- **[configuration.md](./backend/configuration.md)** - environment setup and settings 14- **[database/](./backend/database/)** - connection pooling, neon-specific patterns 15- **[streaming-uploads.md](./backend/streaming-uploads.md)** - SSE progress tracking 16- **[transcoder.md](./backend/transcoder.md)** - rust audio conversion service 17 18### frontend 19- **[state-management.md](./frontend/state-management.md)** - svelte 5 runes patterns 20- **[keyboard-shortcuts.md](./frontend/keyboard-shortcuts.md)** - global shortcuts 21- **[navigation.md](./frontend/navigation.md)** - SvelteKit routing patterns 22- **[search.md](./frontend/search.md)** - unified search with Cmd+K 23 24### deployment 25- **[environments.md](./deployment/environments.md)** - staging vs production 26- **[database-migrations.md](./deployment/database-migrations.md)** - alembic workflow 27 28### tools 29- **[logfire.md](./tools/logfire.md)** - SQL query patterns for observability 30- **[neon.md](./tools/neon.md)** - postgres database management 31- **[pdsx.md](./tools/pdsx.md)** - ATProto PDS explorer 32 33### atproto 34- **[lexicons/](./lexicons/)** - record schemas (track, like, comment, list, profile) 35- **[authentication.md](./authentication.md)** - OAuth 2.1 flow 36 37### moderation 38- **[moderation/](./moderation/)** - copyright detection, sensitive content, labeler 39 40### testing 41- **[testing/](./testing/)** - pytest patterns, parallel execution 42 43### local development 44- **[local-development/setup.md](./local-development/setup.md)** - getting started 45 46## architecture overview 47 48plyr.fm uses a hybrid storage model: 49- **audio files**: cloudflare R2 (CDN-backed, zero egress) 50- **metadata**: ATProto records on user's PDS (decentralized, user-owned) 51- **indexes**: neon postgres for fast queries 52 53key namespaces: 54- `fm.plyr.track` - track metadata 55- `fm.plyr.like` - user likes 56- `fm.plyr.comment` - timed comments 57- `fm.plyr.list` - playlists and albums 58- `fm.plyr.actor.profile` - artist profiles 59 60## quick start 61 62```bash 63# backend 64just backend run 65 66# frontend 67just frontend run 68 69# run tests 70just backend test 71``` 72 73see [local-development/setup.md](./local-development/setup.md) for complete setup. 74 75## contributing 76 771. check docs before researching externally 782. document decisions as you make them 793. keep it simple - MVP over perfection 804. use lowercase aesthetic