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.
Asking the assistant
The Assistant view answers questions in plain English from the school's actual books — it is handed a fresh summary of the ledger with every question and is under orders to refuse rather than invent a number.
Questions that work well:
- Who should I call this week, and why?
- How is this month going compared to what we owe families?
- Draft a friendly note to the family whose credit is about to expire.
- Which teacher costs me the most per dollar of revenue?
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, the assistant shows a 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. |
| 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. |