The Shed is a browser-based practice workbench for musicians.
It is not just a generic practice timer anymore. The current product is built around sessions: each session holds the songs, charts, reference audio, licks, takes, notes, BPM, metronome/tuner context, and practice material for a piece of work you want to come back to.
Status: active beta / tester-ready work in progress. The app is usable, but broader production launch still needs durable media storage, a live smoke test, onboarding polish, and observability.
- Create named practice sessions.
- Add ordered tracks to a session.
- Supported track sources:
- YouTube links
- MP3/audio uploads
- PDF charts/sheet music
- Image charts/screenshots
- Reorder tracks inside a session.
- Edit track name, BPM, and notes.
- Keep each session's practice material together instead of scattering links and files.
- Built-in metronome with BPM, tap tempo, time signature, volume, and beat display.
- Built-in tuner using the browser microphone and Web Audio pitch detection.
- Standalone metronome and tuner pages are also available.
- Session tools read the selected track BPM so the workbench stays contextual.
- Normalizes common YouTube URLs before saving.
- Embedded YouTube practice player for YouTube tracks.
- MP3/audio player for uploaded audio tracks.
- Lick/loop support for audio-style practice sections.
- PDF/image tracks render in the workbench.
- Uploaded media is attached to the track it belongs to.
- Upload validation is enforced on the backend by source type and file extension.
- Record and save takes against a track.
- Supports audio, video, and video+audio capture modes where the browser supports them.
- Takes can be renamed; recorded files stay attached to the track.
- Django/allauth-backed registration and login.
- Email verification flow.
- Password reset flow.
- Account settings and self-delete support.
- Staff/admin user management page for removing test users.
- Auth routes are proxied through Next.js so the frontend can work with the Django API cleanly.
- Environment-driven Django settings.
DEBUG=Falseby default outside development.- Configurable
ALLOWED_HOSTS, CORS, and CSRF trusted origins. - Secure cookie settings for production.
- Login/register/password-reset/email-verification rate limiting.
- Upload size/type validation for tracks and takes.
- Django deployment checks.
- CI workflows for backend and frontend tests.
The main app surfaces are:
/sessions— The Shed practice workbench and session list/sessions/[id]— session detail with tracks, players, sheets, takes, metronome, and tuner/metronome— standalone metronome/tuner— standalone tuner/account— account settings/admin— staff-only test user/admin management/login,/register,/password-reset,/auth/verify/...— auth flows
Older routes such as /dashboard, /practice-timer, /profilepage, /recommendations, and /youtube-practice now redirect back to /sessions. Some legacy components still exist in the repo, but the current product loop is the session workbench.
- Python 3.10+
- Django 5.1
- Django REST Framework
- dj-rest-auth + django-allauth
- PostgreSQL in production / configurable local database
- Gunicorn + WhiteNoise for production serving
- drf-spectacular for OpenAPI/Swagger docs
- Next.js 15 App Router
- React 19
- TypeScript
- Tailwind CSS 4
- Radix/shadcn-style UI primitives
- Phosphor icons
- Web Audio API for metronome and tuner
- Jest + React Testing Library
- Playwright for e2e coverage
- Docker / Docker Compose support
- Railway-oriented deployment files
- GitHub Actions workflows
- Next.js standalone build output
MusiciansPracticeApp/
├── accounts/ # users, auth, email verification, rate limiting, self-delete
├── django_project/ # Django settings, URLs, startup/deploy checks
├── session/ # sessions, tracks, licks, takes API and tests
├── frontend/next-app/ # Next.js app
│ ├── src/app/ # app routes
│ ├── src/components/ # session workbench, auth, admin, tools, UI
│ ├── src/hooks/ # transport/loop hooks
│ ├── src/lib/ # API clients, audio engines, utilities
│ └── e2e/ # Playwright tests
├── docs/ # plans, TODOs, deployment + security notes, API schema
├── docker-compose.yml
├── Dockerfile
└── requirements.txt
All app API routes sit under /api/v1/.
Current core endpoints:
GET/POST /api/v1/sessions/GET/PATCH/DELETE /api/v1/sessions/<id>/POST /api/v1/sessions/<id>/reorder-tracks/GET/POST /api/v1/tracks/GET/PATCH/DELETE /api/v1/tracks/<id>/POST /api/v1/tracks/<id>/reorder-licks/GET/POST /api/v1/licks/GET/PATCH/DELETE /api/v1/licks/<id>/GET/POST /api/v1/takes/GET/PATCH/DELETE /api/v1/takes/<id>/GET /api/v1/takes/<id>/file/GET /api/v1/current-user/DELETE /api/v1/account/GET /api/schema/swagger-ui/
Auth is provided through dj-rest-auth/allauth routes under /api/v1/dj-rest-auth/, with custom throttled wrappers for login, registration, email verification resend, and password reset.
- Python 3.10+
- Node.js 20+ recommended
- PostgreSQL if you are not using SQLite/local defaults
- Docker optional
cd MusiciansPracticeApp
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python manage.py migrate
python manage.py runserverBackend defaults to http://localhost:8000.
cd frontend/next-app
npm install
npm run devFrontend defaults to http://localhost:3000.
For local frontend-to-backend calls, set the frontend environment to point at Django if needed:
NEXT_PUBLIC_API_URL=http://localhost:8000Use .env.example as the backend environment template.
Backend:
python manage.py test
python manage.py check --deployFrontend:
cd frontend/next-app
npm test
npm run build
npm run test:e2eThe current test suite covers backend session/track/lick/take/auth behavior plus frontend auth, session workbench, account, admin, API proxy, and selected e2e flows.
Before a broader public launch:
- Move uploaded tracks/takes/charts to durable storage or confirm a persistent Railway volume is enough for the beta.
- Run a live smoke test on the deployed domain: register, verify email, login, reset password, create session, upload media, record take, delete account, admin delete.
- Add basic observability/error tracking.
- Improve first-run onboarding so a new musician knows what to add first.
- Add a proper public landing page, screenshots, domain, and social preview metadata.
- Expand e2e coverage around uploads, recording, account settings, admin, email verification, and password reset.
See docs/TODOS.md for the current follow-up list.
Older docs and component names still reference a broad analytics dashboard, standalone practice timer, AI recommendations page, and profile page. Those are not the current product centre. The current direction is The Shed: a musician's session workbench for saving practice material, drilling sections, using built-in tools, and reviewing takes.
No license file is currently committed. Add one before treating this as reusable open-source software.
Built by Dandiggas.