Oxford Music Academy
The user manual
Everything the front desk, the teachers, and the owner need — organised by how often you'll need it. Each task is a short list of steps. Nothing here assumes you are technical.
Starting the system
The system is one program running on the school computer. Everyone — the web browser and the teachers' iPhones — connects to it.
- Open the Terminal application.
- Paste this line and press return:
npm --prefix app start
- Open a browser to
http://localhost:7070/welcome.html— the front page. The brass button opens the system itself.
Signing in
Everyone has their own account, and the books record who did what — a mark made on Ruth's phone lands in the audit trail as Ruth, and nobody can act as someone else.
| Who | Username | Password (demo) | Where |
|---|---|---|---|
| The owner | owner | oxford-owner-26 | Web |
| Front desk | frontdesk | oxford-desk-26 | Web |
| Each teacher | first name, e.g. ruth | ruth-key-26 | iPhone (and web) |
Sign out is at the bottom of the sidebar, under your name. Sessions last 30 days on a device you keep using.
Setting up the iPhone app
- Open Oxford Teacher on the phone.
- Sign in with your own username and password (e.g.
ruth/ruth-key-26). Only teacher accounts work here — the owner and front desk use the web. - That's it. The app remembers you for 30 days; Sign out is in Settings (the circle icon, top right).
http://127.0.0.1:7070.The Today screen
This is the first screen every morning. Four numbers, left to right:
| Number | What it means |
|---|---|
| Lessons today | How many lessons are on today's calendar, and who is next. |
| Needs attention | Things worth a minute today, listed underneath — most urgent first. Click any line and it takes you to the place where you can act on it. |
| Month so far | Revenue this month, with teacher pay right under it. The difference is your margin. |
| Quietly leaving | Students showing exit signs — nothing booked, weeks of silence, mounting cancellations — and the monthly revenue that leaves with them. |
The chart below is two years of monthly revenue. The dips are term breaks; they are supposed to be there.
The schedule
The Schedule view shows one week. Move between weeks with the ‹ › arrows; This week brings you home.
- Each lesson card shows the time, the student, and the teacher. The dot is the teacher's colour — the legend above the grid lists every teacher. Click a teacher's name in the legend (or use the dropdown) to see only their lessons.
- The card's left edge is its status: attended · no-show · cancelled · grey means not yet marked.
- Makeup lessons say so on the card — they are lessons taught against a credit.
- Click any lesson to open it. Everything you can do to a lesson happens there.
Taking attendance
- Click the lesson (web) — or, on the phone, swipe it right.
- Choose Attended or No-show. On the phone: swipe right for attended, left for no-show.
The mark lands in payroll immediately and is written to the activity log under your name.
Cancelling a lesson
- Open the lesson and choose Cancel…
- Say who is cancelling — the family or the school. This matters: school cancellations always credit the family; family cancellations follow the policy.
- Read the decision. The system shows its reasoning as numbered steps — the notice hours compared against the cutoff, the family's cancellation count against the cap — and then what happened: a credit was issued, the lesson was forfeited, or the cancellation was blocked.
That reasoning is stored with the lesson forever. When a parent asks in July why March went the way it did, open the lesson: it answers with March's rules, not today's.
Undoing a cancellation
Open the cancelled lesson and choose Reinstate. The lesson returns to the calendar and any credit it created is voided — not deleted; the books remember everything.
Credits & makeups
A credit is a lesson the school owes a family — usually from a timely cancellation. The Credits view is the whole ledger: outstanding, booked, used, expired, voided.
Booking a makeup against a credit
- In Credits, find the outstanding credit and choose Book makeup.
- Pick the teacher and time. The system refuses slots that clash.
- The new lesson appears on the schedule marked makeup. When it's taught, the credit is used up.
Issuing a goodwill credit by hand
In Credits, choose Issue credit. A reason is required — it goes in the books and the family may one day read it.
Students & enrolment
The Students view is the roster. The filter switches between current students and those who have left (with when and why).
Enrolling a new student
- Click Add a student.
- Choose the family — an existing one, or type a new family's name and contact.
- Pick the lesson type, teacher, weekday, time, and how many weeks.
- Read the result: "11 lessons booked — 0 clashed, 1 fell in a school holiday." The system books only real, term-time, clash-free lessons and tells you exactly what it skipped and why.
Retention — who to call this week
The Retention view exists to catch families who leave without telling you. Most do.
- The risk cards name each drifting student, the evidence in plain words ("Nothing on the calendar. The last lesson taught was June 19."), and what they are worth per month. Red cards are urgent; amber cards are worth watching.
- The cohort table reads left to right: of the students who started in a given month, how many were still attending one month later, two months later, and so on. The bottom row is the school's blended survival curve.
- Average lifetime and what one student is worth turn "should I bother calling?" into arithmetic. One saved student is roughly $1,300.
The Action Queue — what needs you, with proof
The Actions view is a short list of situations the system found in the records: a student drifting away, practice that collapsed against the student's own baseline, a credit about to expire, a hard cancellation a family may not understand, a payroll collision, missing attendance marks, or an odd movement in the month-end books. Rules find these — not AI. Every item shows its evidence in plain sentences, the money involved when it is real, and one suggested next step.
- Read the evidence. Every line comes from the ledger; Open record jumps to the underlying view.
- Act, then tell the queue: Done when handled; Follow up to keep it on screen until you close it; Snooze 1 week to put it off; Dismiss… with a one-line reason if it needs nothing.
- Everything you decide is recorded in Activity under your name.
The two AI buttons on each card — Draft message and Case summary — only reword that one card's evidence. They see nothing else, they send nothing, and without an API key the queue works exactly the same minus those two buttons. The queue is visible to the owner's account only.
The AI — what it does and what it never does
One rule governs every AI feature: the AI writes language, never numbers. Every fact it may use comes from the ledger at that moment; the deciding — credits, payroll, refunds — is always done by the policy engine. And the AI never sends anything: every message it writes waits for you to read it and copy it.
Draft buttons, wherever there is evidence
- Retention — every risk card has Draft the message: a warm check-in written from the exact evidence on the card.
- Credits — every outstanding credit has Draft reminder: the value, the expiry date, an invitation to book.
- A cancelled lesson — Explain it to the family: the policy's stored reasoning, said kindly.
- A student's practice — open a student, and if their keyboard reports practice, Draft a practice note writes the encouraging weekly recap.
Each draft opens in a panel with a Copy button. Read it, change what you like, paste it into your own email or text. Nothing is sent by the system.
The Monday briefing
In Assistant, one button writes the owner's weekly page: who to call with the evidence and dollar amounts, the month's three numbers, the payroll collisions to check, expiring credits, and one thing worth doing. Copy it into your notes or email — it reads the books as of the moment you click.
Give an instruction
Also in Assistant: type what you want done — "mark Theo's Wednesday lesson attended", "cancel Chidi's Thursday lesson, the family called", "book Marisol's makeup with Alice next Tuesday at 4pm". The AI only matches your words to real lessons and credits; the system then shows you a proposal built from the database, and nothing happens until you press Confirm. The policy engine has the final word exactly as if you had clicked the buttons yourself. If your words are ambiguous, it says so instead of guessing.
The auditor's note
In Month end, one button asks the AI to read the period like a sceptical accountant: does the margin tie, is the residual zero, which double-pay warnings need eyes before payroll is approved. It checks the numbers in the report — it computes none of them.
Practice telemetry
Piano students' keyboards report practice sittings. You'll see it in three places: a week-by-week chart on the student's card, a "the piano has gone quiet" line in Retention when practice collapses (families stop practising weeks before they stop attending — this catches them earliest of all), and the drafted practice notes above.
One-time setup
- Create a file called
.envinside theappfolder. - Put one line in it:
ANTHROPIC_API_KEY=sk-ant-…(your key). - Restart the system. Without the key, every AI button shows the same setup card and everything else works normally.
Payroll
The Payroll view computes each teacher's pay for the period from the lessons actually taught — fixed per lesson, hourly, or a percentage of what the lesson earned. Percentages are stored exactly (62.5% is 62.5%, never a rounded approximation), so the run ties to the cent.
Closing the month
The Month end view answers: can this school close its month from its own records? Three numbers:
| Number | Meaning |
|---|---|
| Revenue | Every lesson taught this month, at its price. |
| Teacher pay | The payroll for the same lessons. Revenue minus pay is the margin, computed by subtraction — never rounded separately. |
| Credit liability | What the school owes families in unused lesson credits — the number that surprises schools when a parent asks for a refund. |
Under the liability is its movement: opening balance + issued − used − expired = closing balance. The residual line should always read zero. If it ever doesn't, the report itself is broken and you should say so — the system shows the discrepancy rather than hiding it.
The iPhone app — reference
| To do this | Do this |
|---|---|
| See a different day | The ‹ › arrows beside the date. Back to today returns. |
| Mark attended | Swipe the lesson right (or open it and tap). |
| Mark no-show | Swipe the lesson left. |
| Cancel a lesson | Open the lesson → Cancel… → say who is cancelling. Needs a connection; the policy's reasoning is shown before anything is final. |
| Work offline | Nothing to do — attendance marks queue on the phone and a banner counts them. They sync automatically; Settings → Sync now forces it. |
| Write a lesson recap | Open the lesson after marking it → Lesson recap. Tap the keyboard mic and just talk, then Tidy for the family shapes it into the note a parent reads. Save puts it on the lesson — the front desk sees it on the web too. |
| Switch teacher / server | The circle icon, top right → Settings. |
When something looks wrong
| Symptom | What it is |
|---|---|
| Browser says "can't connect" | The system isn't running. Start it (see Starting the system). |
| It keeps asking me to sign in | Your session expired (they last 30 days) or the password is wrong. On the demo school, the passwords are in Signing in; a reseed resets them. |
| Phone shows old lessons | Pull down to refresh. If a yellow banner shows queued changes, they sync the moment the server is reachable. |
| Assistant shows a setup card | No API key yet — see the one-time setup. Everything else works without it. |
| A number looks impossible | Click it. Every figure drills down to the lessons and credits that made it. The books are append-only, so the explanation is always there. |
| Demo data got messy while practising | Reset it: npm --prefix app run reset. (This wipes practice marks — don't run it on a real school's data.) |
The words this system uses
| Word | Meaning |
|---|---|
| Credit | A lesson the school owes a family, created by a cancellation or by hand. Has a dollar value and usually an expiry date. |
| Makeup | A lesson booked against a credit. Marked distinctly everywhere, because it's the lesson payroll must treat carefully. |
| Forfeit | A cancellation too late (or over the cap) to earn a credit. The lesson is charged; the decision explains why. |
| Reinstate | Undoing a cancellation. The lesson returns; its credit is voided, not erased. |
| Sweep | The automatic pass that marks expired credits. Runs on its own; you'll see it in the activity log as "system". |
| Liability | The total value of outstanding credits — money's worth of lessons the school still owes. |
| Cohort | All students who started in the same month, tracked together to measure how long students stay. |