Dashboard
Where things stand today. Every box opens the page behind it.
Loading…
Feature access
What each account type can use. Off means hidden in the app and refused by the server. Live is the master switch: off turns a feature off for everyone, whatever the account type. Super admins always have everything. A new feature is Super admin only until you switch it on here. Each feature's ⋮ renames or deletes it.
Release tests
Back-test registry for ML-29 - ask Claude Code to add coverage for a feature or run the suite (.claude/skills/backtest); results land here.
Test cases
← Back to Release testsAccounts
Every account and its account type (ML-77). Only Super admins can change it.
Email + password login is off - switch Email and password login on in Feature access to invite people.
Bands
The shared band directory (ML-89) - accounts join these from their own Account page.
Metadata lists
System-wide reference lists the app itself depends on (ML-109).
Session/timer duration presets - a value typed at the moment it's used, never stored by reference, so there's nothing to check usage against before deleting one.
The public time signature catalog - a signature still used by any saved block is archived rather than deleted.
Metronome Blocks' play-speed presets - a live playback setting, never stored against a saved block, so there's nothing to check usage against before deleting one.
What a brand new Flow starts out as (ML-179 follow-up) - every "Create your own" gets this name pre-filled (a collision with an existing personal flow of the same name gets an incrementing number appended, e.g. "Untitled 1") and always gets exactly one block, seeded with the values below, same idea as Quick Play's own single default bar. Time signature must match a label in the Time signatures list above; note value must be one of semiquaver, quaver, dotted-quaver, crotchet, dotted-crotchet, minim, dotted-minim, semibreve. An invalid or missing value here falls back to 4/4, 100bpm, 1 bar, crotchet rather than breaking flow creation.
Default name
Loading…
Time signature
Loading…
BPM
Loading…
Bar count
Loading…
Note value (beat note)
Loading…
Usage
Stats-only views, not management - see Metadata lists for adding/editing/deleting the lists themselves.
Feature-click analytics
Loading…
How long saved sessions are (sessions.total_duration_minutes, every session type). The first chart is the 5-minute steps from 5 to 120 minutes; the second is every other length people have typed in, most common first - a length that keeps coming up there may be worth adding as a preset. Hover a bar for its count.
Practice time by instrument. A session is recorded against the instrument picked when it was added, or the player's main instrument (My account → My instruments). Sessions from before instruments existed, or from players with none set, are counted as no instrument. Players = accounts with that instrument on their list (main = as their main one).
Read-only - these five values are fixed by musical notation itself, not app data, so there's nothing to add/edit/delete here, just how many saved blocks currently use each. A block only counts once it's actually been opened and saved since this was added - see ML-109 for the historic-data caveat.
ML-199 - how long building a Flow by hand actually takes, so a redesigned Bars tab has something measured to be compared against rather than an impression that it feels quicker. Active time is wall clock with idle trimmed out: the stopwatch stops after 60s without input and whenever the page is hidden, so a session left open while the phone rang doesn't inflate the figure. Bars time is the part of that spent on the Bars tab (including the per-block inspector) - the bit the redesign is aimed at.
Per bar and per block are both shown because they answer different questions. One 16-bar block and sixteen 1-bar blocks are the same music but very different data entry: per block measures the cost of the card UI, per bar measures the cost per unit of actual music, which is the only fair way to compare flows of different lengths. Per bar is blank for edit sessions on purpose - an edit touches an unknown subset of the flow's bars, so any per-bar figure there would be arithmetic rather than a measurement.
Median leads, with min/max beside it. One interrupted run visibly moves a mean at this sample size. If min and max are miles apart, the median isn't describing anything stable yet - collect more runs before drawing a conclusion. Statistics cover completed, non-excluded sessions only; import-assisted (“Create from file”) runs are kept out of the headline and the breakdowns, and shown separately under Create vs edit.
Theory grades
What each grade in the Theory tool asks when a quiz is set to "Grade 1-5" (feature theory_grades). A draft from the ABRSM Music Theory syllabus, Grades 1-5, for checking. Grades are cumulative: Grade 3 asks everything in Grades 1-3. Each grade below lists only what it adds. The player still picks the clef (from the grade's clefs), and whether Keys shows key signatures, scales or both, and whether Notation asks names, meanings or both. Changes are made in public/theoryEngine.js. The reasoning and sources are in docs/theory-grades.md.
Not asked yet (new quiz types, ML-309 C): intervals, triads and chords, cadences, transposition, the chromatic scale, technical names of scale degrees, triplets and irregular groupings, grouping and beaming, and instruments and voices.
Warm-ups
The exercises in the Warm-ups tool, in the order it plays them. Written for treble-clef brass (brass band parts); the tool shows bass and tenor clef by moving the same notes down a major 9th, so lip slurs stay on the same harmonics. Switched-off exercises stay here but aren't shown in the tool.
App name
"The Music Ledger" is a working title. Pick the name the app goes by on screen, to live with a candidate before deciding. It changes what everyone sees, straight away - the next time they open the app, signed in or not.
Loading…
Shared music
Everything one member can show another: recordings and videos, documents, and the pieces a band shares or that are public. It is where you deal with a member's report, and where you take something down - because someone in a recording asked (the privacy policy says they can), or it is not theirs to share, or it breaks the terms. Remove takes it off every piece and deletes its file. The people it belonged to are told what happened, why and what to do next, in the app and by email; you see the message before it goes. This can't be undone.
Reports from members
What members have reported from a piece's menu. Look at it, remove it below if it should go, then close the report with a line saying what you did. Nobody in the band is told who reported it.
Recordings and videos
Loading…
Shared pieces and documents
Removed
The record of each removal. Nothing about the person who asked is kept.
Rest messages
What the 30-second rest between practice-session blocks shows - one message at a time, with its icon (breathing ones show a breathing circle instead). Every player gets them in their own shuffled order, each once before any comes round again, never the same kind twice running, and a breathing one at least every third rest. For picks who sees it: everyone, brass players (lip messages) or brass and woodwind players (breath and air). Keep them short enough to read in a few seconds, and written for a ten-year-old. Icons are Material Symbols names. Changes show straight away - no release needed.
Notifications
Announcements shown to every account under ☰ → Notifications, with a red dot on ☰ until they've read it. Publish now or schedule a time - anyone with the app open sees it within about a minute, everyone else next time they open it. Urgent ones also pop up over whatever they're doing until they tap "Got it". Optional expiry hides it from everyone afterwards. Plain text; line breaks are kept. The "update available - reload" notice after a release is automatic and doesn't need a notification here.
Flows
Export flows from this environment as MusicXML and import them into another - e.g. production → dev or sandbox for testing. One flow exports as a .musicxml file, several as a .zip. Imports always arrive as your own private flow (no band, not public) until you publish or move them yourself. Uploaded audio/video and document files aren't copied; YouTube links are. The same files open in MuseScore and other notation software.
Security
Loading…
Retention
Information about people who have stopped using the app shouldn't be kept for ever. An account nobody has used for a set time gets an email, then a second, and is then deleted - exactly as "Delete my account" does it, so the practice history stays as anonymous statistics. Using the app at any point starts the clock again. Super admin accounts are never touched. The same run clears used and expired invites after 30 days and resolved feedback after 12 months. It runs once a day; nothing happens until it is switched on here.
Loading…
Costs and usage
What the app costs to run, and how close each service is to the limit of the plan we're on (ML-429). Costs are the ones you enter, in pounds with dollars underneath. Usage is read every morning from the app or the provider, or typed in; an email goes out at 75% and 90%. Who each service is and what their terms ask is on Third parties.
Loading…
Third parties
Every person and company The Music Ledger depends on: what they provide, which plan we're on, their terms and what those terms ask of us (ML-267). What each one costs and how close its plan's limit is are on Costs and usage. The list itself is kept with the code, so it changes with a release. A release is blocked if the app uses something that isn't listed here (npm run third-party-audit). How to add or re-check one: docs/third-party-providers.md.
Loading…
Business case
What each way of rolling the app out costs and could earn, month by month, for up to five years, and when the money comes back (ML-443). Change any figure and everything redraws; nothing is kept until you press Save. The starting figures were read from each provider's own page: docs/business-case.md says what each one rests on. It is a model to help you decide, not legal or tax advice.
Loading…
Design
Read-only catalogue of every design element in the app, rendered with the real stylesheets. Each example lists the tokens it resolves to (spacing, radius, type, colour). A ⚠ marks a value that isn't a token. The rules behind each example are in specs/. This page updates with every release: a new component can't reach sandbox without an entry here (npm run design-gate).
Loading…
Feedback
Submitted from the app's hamburger menu (ML-170). The form is a plain text box on purpose - category is set here, at triage, not by whoever sent it, so nothing stands between spotting a problem and writing it down. The screen, device and app version are captured automatically, which is what makes a one-line note still actionable a fortnight later.