contributing
plyr.fm is open source. development happens on GitHub (mirrored to tangled.org). contributions welcome — fork the repo and open a PR.
using a coding assistant?
Section titled “using a coding assistant?”if you’re using Claude Code, Cursor, Codex, or similar — copy the prompt below into your assistant to get oriented:
i want to contribute to plyr.fm. the repo is at https://github.com/zzstoatzz/plyr.fm
read the CLAUDE.md at the repo root for project context, then read STATUS.mdfor active tasks. fork the repo, make your change on a branch, run linting(just backend lint / just frontend check), add tests for bug fixes, and open a PR.
the stack is FastAPI + SvelteKit + Postgres + Redis. use `uv` for Python, `bun`for frontend, and `just` as the task runner. see backend/.env.example for allenvironment variables.or install the contribute skill for richer agent context.
prerequisites
Section titled “prerequisites”quickstart
Section titled “quickstart”# fork on github, then clone your forkgh repo fork zzstoatzz/plyr.fm --clonecd plyr.fm
# install dependenciesuv synccd frontend && bun install && cd ..
# configure environmentcp backend/.env.example backend/.env# edit backend/.env — see the setup guide linked below for detailsrunning the stack
Section titled “running the stack”# start redis (required for background tasks)just dev-services
# terminal 1 — backend (port 8001, hot reloads)just backend run
# terminal 2 — frontend (port 5173, hot reloads)just frontend runthe backend needs a Postgres connection. you can use the Neon dev instance or a local Postgres — set DATABASE_URL in your .env. see backend/.env.example for all configuration options and the local development setup guide for detailed walkthrough.
workflow
Section titled “workflow”- check
STATUS.mdfor active tasks - open an issue describing the change
- fork the repo, branch from
main, make your changes - open a PR from your fork
useful commands
Section titled “useful commands”just backend run # start backendjust frontend run # start frontendjust dev-services # start redisjust backend test # run tests (spins up isolated postgres + redis)just backend lint # type check + ruffjust frontend check # svelte type checkjust backend migrate-up # apply database migrationsconventions
Section titled “conventions”- type hints required everywhere (Python and TypeScript)
- async everywhere — never block the event loop
- lowercase aesthetic in naming, docs, and commits
- SvelteKit with Svelte 5 Runes (
$state,$derived,$effect) - use
uvfor Python (neverpip) - add regression tests when fixing bugs
detailed internal documentation (environment setup, deployment, architecture) is in docs-internal/.