Scorecard
Loading...
Monthly Trends ?Chart showing KPI performance over the academic year. Toggle between line and bar views. Click legend items to show/hide metrics.
Actions Required ?Automated alerts for items needing attention: missing data, expiring cards, at-risk students, birthdays, and similar actionable items.
Monthly Breakdown ?Scorecard table showing key metrics by month: Revenue, Student Count, Class Count, etc. Compare against targets where set.
| Metric | Sep | Oct | Nov | Dec | Jan | Feb | Mar | Apr | May | Jun | Target |
|---|
Students
Loading...
| Name | Age | School Year | Gender | Parent | Classes | At Risk | Score | Start Date | Status |
|---|
Customers
Loading...
| Name | Mobile | Suburb | Students | Total Revenue | Date Inactive | Status |
|---|
Classes
Loading...
| Class | Level | Day | Time | Teacher | Venue | Capacity | Occupancy |
|---|
Trials & Leads
Your full lead pipeline plus trial-booking management. Every change keeps the matching lead in step.
Staff
Loading...
| Name | Mobile | Class Attendance | Sessions | Updated | Contract |
|---|
Leads & Trials
Loading...
| Name | Parent | Contact | Enquiry Date | Trial Date | Status |
|---|
Exits
Loading...
Student Analytics
Loading...
is_active = true.Source: Same number used by the Students-page header and DanceBiz statistics — the canonical headcount across the whole app.
How calculated: sum (today − DOB in years) ÷ count of active students with a DOB. Students missing a DOB are excluded.
How calculated: sum (today − start_date in days) ÷ count, converted to months. Students missing a start_date excluded.
What to look for: Trending upwards = improving retention. A sudden drop = recent influx of new starters (good but unproven).
How calculated: sum
students.current_class_count ÷ count of active students.What to look for: Higher = more committed (and higher revenue per student) cohort. Track over time as a leading indicator of upsell success.
Gender Split ?What: Doughnut chart of all currently active students, grouped by gender.
Source: students.gender field (Male / Female / Other / Unknown).
How calculated: count of active students per gender, then displayed as % of total active students. "Active" = is_active flag = true.
What to look for: Material drift over time can signal recruitment imbalance.
Age Distribution ?What: Bar chart of active students grouped into age buckets (Under 4, 4–6, 7–9, 10–12, 13–15, 16–17, 18+).
Source: students.dob.
How calculated: age = years between today and DOB. Each student is counted in exactly one bucket.
What to look for: A "missing middle" (e.g. drop-off at 12–15) often signals secondary-school competing demands.
Age × Gender Breakdown ?What: Cross-tabulation of the two charts above. Each cell = count of active students in that age × gender combination.
How calculated: Same data as Gender Split + Age Distribution, intersected. The % column = row total ÷ total active students × 100.
What to look for: Skews within age bands (e.g. Year 7 mostly female) — useful when planning new classes or marketing campaigns aimed at under-represented groups.
| Age Group | Female | Male | Other | Total | % |
|---|
Tenure Distribution ?What: How long currently active students have been with the school, grouped into bands (< 6 months, 6–12 months, 1–2 years, 2–3 years, 3 years+).
Source: students.start_date for active students only.
How calculated: tenure = days between today and start_date, then bucketed.
What to look for: A heavy <6 months bar means lots of recent joiners (good) but also risk if conversion to long-term hasn't been proven yet.
Avg Tenure by Gender ?What: Mean tenure (in months) per gender for active students.
How calculated: sum of tenure-in-days per gender ÷ count, converted to months.
What to look for: Big gaps between genders may indicate one cohort isn't being retained as well — worth investigating.
Tenure by Age Group ?What: Avg tenure (in months) per age bucket plus the % of that bucket sitting in each tenure band.
How calculated: Cross-tab of age bucket × tenure band, with the avg-months column = sum tenure ÷ count for that age bucket.
What to look for: Age groups dominated by <6m (e.g. Reception or Year 7 starters) need conversion plans; groups with most students in 3y+ are your stable core.
| Age Group | Avg (months) | <6m | 6-12m | 1-2y | 2-3y | 3y+ |
|---|
Classes per Student ?What: Histogram of how many classes each active student is enrolled in.
Source: students.current_class_count.
How calculated: for each value 1, 2, 3, 4+ — count how many active students are at that number.
What to look for: Large 1-class group = upsell opportunity. Heavy multi-class tail = your most committed (and highest revenue) students — worth identifying for retention focus.
Subject Areas ?What: Breakdown of which subjects (Musical Theatre, Singing, Drama, Dance disciplines, etc.) account for current enrolment headcount.
How calculated: for each active enrolment record, classify the class into a subject family from lesson_format; sum enrolments per subject.
What to look for: Heavy concentration on one subject = single-point-of-failure risk if a key teacher leaves. Long tail of small subjects can be candidates for consolidation.
Classes Distribution ?What: Same data as the "Classes per Student" chart but tabular: # classes → student count → % of total → cumulative %.
What to look for: The cumulative % column tells you "X% of students take 2 or fewer classes" — useful for setting realistic targets for upsell campaigns.
| # Classes | Students | % of Total | Cumulative % |
|---|
Cohort Retention Curves ?What: For each intake month (cohort), the % of those students still active N months after they joined.
Source: students.start_date assigns each student to a cohort; students.exit_date determines when they dropped off. Inferred-only exit dates are excluded by default (toggle to include).
How calculated: for each cohort and each month-since-intake, % still active = students from that cohort still active at month N ÷ original cohort size.
What to look for: Cohort lines that drop fast = onboarding problem for that intake. Cohorts that stay flat at 90%+ are sticky — what was different about how they joined? Replicate it.
Retention curves ?What: Same data as the heatmap below, plotted as a line per cohort. X-axis = months since joining, Y-axis = % still active.
How to read: Each line is one intake month. Lines that crash early = bad early-experience cohorts. Lines that stay above 75% past month 6 = your retention sweet spot.
Heatmap (rows = intake month, columns = months since intake) ?What: Triangular matrix — each row is an intake cohort, each column is months elapsed since they joined. Cell value = % of that cohort still active at month N.
Colour bands: green ≥90% (excellent), amber 75–89% (healthy), orange 50–74% (concerning), red <50% (critical).
How to read: Look down a column to compare same-tenure retention across cohorts. Look across a row to see how a single cohort decays. Diagonal red bands = a specific event hit multiple cohorts (e.g. a teacher leaving in month X).
📈 Student Movement
Enrollment Trends (12 months) ?What: Bar chart of new starts and exits per calendar month over the last 12 months.
Source: students.start_date (new) and students.exit_date (left). Uses reliable exit dates only — inferred-only exits are excluded so the count isn't inflated.
How calculated: count students with start_date in each month / count with exit_date in each month.
What to look for: Seasonal patterns — Sept/Jan typically have peaks of joiners; July/Aug often see exits as families re-plan. Compare same months across years for true trend signal.
Net Growth ?What: Net change in active students per month = new − exits.
How calculated: Same monthly counts as the chart on the left, subtracted. Positive bars = grew, negative = shrank.
What to look for: Sustained negative bars are the clearest churn warning. A single negative month after a recruitment push is normal seasonal noise.
Monthly Movement ?What: The same monthly data in tabular form, with a running "Active (EOM)" column = active student count at the end of each month.
How calculated: Active EOM = previous EOM + new − left, walked forward from the start of the 12-month window.
What to look for: The Active (EOM) trajectory tells you whether your headcount is sustainably growing — independent of which months were noisy.
| Month | New | Left | Net | Active (EOM) |
|---|
📚 Class Performance
Class Size Distribution ?What: Histogram of how many students each active class has.
Source: Active enrolment records grouped by class.
How calculated: count enrolled students per class, then bucket the classes by size (e.g. 1–3, 4–6, 7–10, 11–15, 16+).
What to look for: A heavy small-size tail (1–3 students) means under-utilisation. A large 16+ bar suggests classes you may want to split.
Top Classes by Enrollment ?What: Bar chart of the top classes ranked by current active enrolment count.
How calculated: sum active enrolments per class, sort descending, show the top N.
What to look for: Your most popular formats — these are the classes you'd protect first if you needed to consolidate, and the ones to mirror when planning new offerings.
⚠️ Classes of Concern ?What: Classes flagged for low enrolment, low fill rate, or recent dropouts.
Source: Active classes joined to current enrolment counts and class capacity.
How calculated: Fill % = enrolled ÷ capacity × 100. Flag triggers: empty class (0 enrolled) → "Empty"; fill % < 50 → "Under-filled"; ≥3 dropouts in last 30 days → "Recent dropouts"; no teacher assigned → "No teacher".
What to look for: Repeat-offenders week after week need either remarketing, retiming, or merging. Same logic powers the standalone Watchlist Report.
Classes with low enrollment or recent declines
| Class | Day/Time | Teacher | Current | Capacity | Fill % | Flag |
|---|
👩🏫 Teacher Performance
Students per Teacher ?What: Bar chart of distinct active students each teacher works with (across all their classes).
How calculated: for each teacher, take the union of student IDs across every active class they teach, then count.
What to look for: Very high counts (200+) = burnout / safeguarding load risk. Very low counts may indicate under-utilised teachers worth giving more classes to.
Class Fill Rate by Teacher ?What: Average fill rate (enrolled ÷ capacity) across each teacher's classes.
How calculated: for each teacher, average the fill % of their active classes (each class equally weighted).
What to look for: Teachers consistently under 60% may have a recruiting problem in their subject area; 90%+ across the board may indicate they need more capacity or class slots.
Teacher Summary ?What: Per-teacher table: number of classes, total students, avg fill %, status flag.
How calculated: Same source data as the two charts above. Status thresholds — Healthy ≥75% fill, Watch 50–74%, Concern <50%.
What to look for: Combine with the Class Revenue per Term report to see which teachers are also lower margin.
| Teacher | Classes | Total Students | Avg Class Size | Avg Fill % | Status |
|---|
Targets
Filter students for targeted communications
| Student | School Year | Age | Classes | At Risk | Attendance | Tenure | Customer |
|---|
Reporting Cycles
One-click pack PDFs that pull every relevant report into a single document. Run on a regular cadence so the discipline beats the chaos.
Weekly Pack
Run every Monday morning. The Reception/Principal weekly debrief.
What's inside (7 sections)
- Headline numbers — last weekend at a glance
- Weekend Retrospective — birthdays, no-shows, trials, watch list
- Trial Conversion Tracker (last 7 days)
- Missed-3-Weeks call list
- Recent Exits (last 7 days)
- Compliance heads-up (next 30 days)
- Action log — blank prompts for what was decided
Monthly Pack
Run on the 1st Monday of every month. The leadership review.
What's inside (7 sections)
- Headline KPIs — Scorecard summary
- Student headcount movement (started / joined / left / now)
- Recent Exits (last 30 days) with parent contacts
- At-Risk students summary (high-risk band only)
- Class Revenue + Wage Costs — top/bottom margin classes
- Cohort Retention snapshot
- Action log + decisions taken
Why use the cycles?
The Reports hub is for "answer this specific question right now". Cycles are for "do the regular discipline". Running the same pack every Monday means co-Principals see the same data in the same order each week — patterns become visible, decisions get tied to evidence, and nothing slips through because someone forgot to look at it.
Workflows
Guided routines for keeping the system up to date
Onboarding Sequence
Loading...
start_date — so it's a planning tool, not a delivery log.
- Day 0 Initial Sign Up · Day 5 Week 1: Stay Connected · Day 12 Week 2 · Day 19 Week 3 · Day 26 Week 4: Check In
- Day 47 Week 6: LAMDA (skipped for Pre-School) · Day 61 Week 9 · Day 68 Week 10 · Day 82 Week 12: 3 Months In · Day 112 tag removed, sequence ends.
Sending in the next 7 days
—
| Send date | Days away | Student | Parent |
|---|
Per-student schedule
Active students whose start date falls within the 112-day journey window. Pills show each email — green = already sent, amber = due in next 7 days, red = upcoming, grey = skipped (Pre-School LAMDA).
| Student | Parent | School year | Start | Day | Next email | Sequence ends | Timeline |
|---|
Year Setup
Generate next year's term dates, fees, and inspirations — paste straight into your Word handbook
Term Dates
40 teaching weeks. We back-fill from the first weekend of September and slot the holidays around your choices.
Show full week-by-week calendar
Summer School
Auto-generates 4 courses ending in the last full week of August. Edit names, ages, dates, prices and features as needed — pattern repeats year-on-year. Editing a start date shifts every other course by the same offset.
Edit course details
Fees Matrix
Three blocks (per the Yellow Sheet). Block 1 is the standard tier table; Block 2 is the smaller graded dance classes; Block 3 is named flat-rate classes (e.g. Musical Munchkins, Didi Drama). Prices are per term (10 weeks) — per week + per class auto-calculated.
Inspirations & Content
The bits only the principal can write. Saved as you type.
Terms & Conditions
The legal wording handed to parents at sign-up. Edit here, save to the cloud, generate a branded PDF whenever you need a fresh copy. The wording carries across academic years — bump the version date when you make material changes.
Formatting guide
## (two hashes + space).Numbered item:
1. **Title**: body text… or 1. **Title** on its own line followed by the body underneath.Bullet: start the line with
- (dash + space). Bullets attach to the numbered item or paragraph above them.Plain paragraph: just write text. Blank line = paragraph break.
Payroll Diary
Monthly schedule of invoice deadlines and payment dates. Defaults: invoices in by the 28th of the month, payment on the last working day. February shifts earlier (28-day month). December usually moves earlier still so payroll lands before Christmas — both are configurable below.
Generate
Three formats — pick whichever your handbook needs. Everything is saved automatically and can be re-opened from the year picker.
Generate a PTS-branded PDF with whichever sections you tick. Logo and colour scheme inherited from the rest of the app.
Preview the handbook outline
Generate mid/late August Reminder Letter
The "welcome back" letter that goes out to parents in the run-up to Term 1. Term-start dates are pulled live from your Year Setup calendar — placeholders like {{TERM_START_SAT}} are swapped at PDF time. Edit the wording, save to the cloud, generate the branded letter as a PDF on PTS letterhead.
Available placeholders & formatting
{{ACADEMIC_YEAR}} — e.g. 2024/2025{{LETTER_DATE}} — e.g. August 2024{{TERM_START_SAT}} — e.g. Saturday, 7th September 2024{{TERM_START_SUN}} — e.g. Sunday, 8th September 2024{{TERM_START_SAT_SHORT}} — e.g. 7th September{{TERM_START_SUN_SHORT}} — e.g. 8th September{{TERM_START_WEEKEND}} — e.g. 7th/8th September{{SIGNATORY_NAME}} — defaults to Jenna Rushton{{SIGNATORY_ROLE}} — defaults to Co-PrincipalFormatting:
•
## Heading on its own line — centred & underlined section title (e.g. NEW SCHOOL YEAR — USEFUL INFORMATION).•
**Whole line bold** — bold & underlined sub-heading (e.g. FAQ questions).•
--- on its own line — hard page break.• Each line in the source = one line in the PDF. Blank line = paragraph break. So the signatory name and role on consecutive lines render on consecutive lines.
Fees
Manage fees for the selected academic year. Edits sync back to Year Setup automatically.
Fees Matrix
Inherit last year's fees and apply a single % across the board, or edit any tier directly. The same data feeds the Year Setup handbook + PDF.
Contractors
Freelance contract template, signatory details, and other things shared by every contract you generate from the Staff page.
Freelance Contract Template
Wording used by every contract generated from the Staff page. Use the placeholders {{FREELANCER_NAME}}, {{FREELANCER_EMAIL}}, {{FREELANCER_ADDRESS}}, {{DATE}}, {{HOURLY_RATE}}, {{TERM_LABEL}}, {{TERM_DATES}}, {{PTS_SIGNATORY_NAME}} — they're swapped in at PDF time.
Weekly Operations Log
Reception's manual weekend report — complaints, accidents, cover staff, supplies, maintenance, cash, fees. Drag in the latest CSV; we de-dupe by Year + Term + Week so re-uploading the full sheet is safe.
Upload weekly report CSV
From Google Forms → Responses → Download CSV. Re-upload the full sheet each week — existing weeks are updated, new weeks are added.
Stored weeks
Recent weeks (last 12)
Compliance
DBS, First Aid and Safeguarding expiry tracker for active staff. Audit-ready, colour-coded by urgency. Certificates expiring in the next 60 days are flagged automatically.
Dates auto-save as you type. Stored locally in your browser; if your Supabase staff table has columns dbs_expiry, first_aid_expiry, safeguarding_expiry (date type), they sync across devices automatically.
Progress Notes
Per-term progress notes for each student. Teachers write 2–3 sentences; the system generates a branded one-pager parents see at the end of each term.
Notes auto-save as you type. Stored locally in your browser, scoped per academic term. PDFs use the same branded letterhead as the reminder letter.
Import Data
Drop any CSV file to import
Recent Imports
Data Tools
Reports
Search, pin, and run all reports from one place
Pinned
Your shortcutsRecently run
Last 5Retention & Risk
Students at risk of leaving and whyAttendance Watch
Active students with concerning attendance patterns — bucketed by severity. Click any row to open the student.
Missed Recent Weeks
Active students who haven't attended in 3+ weeks (from a recorded last-attended date) or who've missed 2+ consecutive sessions where the date isn't tracked. Sorted by longest absence first — the immediate intervention queue.
Exit Reasons Report
Why students leave, broken down by category (Within Control / External Factors / Engagement) and specific reason. Use to spot trends and focus retention efforts.
Data Quality Audit WEEKLY
Comprehensive scan of all records for malformed phones, bad emails, orphans, duplicates, and date anomalies. Send to reception weekly for cleanup in DanceBiz / VTiger.
What does the audit check?
- Malformed UK mobile numbers
- Invalid email format
- No contact details at all
- Missing Reg ID (if has active kids)
- Duplicate mobile/email
- No linked parent/customer
- Parent marked inactive but student active
- Missing Reg ID or DOB
- Invalid dates (future DOB, exit before start)
- Active but enrolled in 0 classes
- Malformed mobile numbers
- Invalid email format
- No contact details
- Malformed mobile numbers
- Invalid email format
- No contact details (cannot follow up)
- No teacher assigned
Severity: Critical = blocks linking/tracking. Warning = should fix but not urgent.
Trial Conversion Tracker
Leads who attended a trial but haven't converted yet. Conversion rate plummets after 14 days — call the recent ones first while the trial is still fresh in their mind.
At-Risk Student Lists
Active students at risk of leaving. Most teams want "All at-risk"; the band-specific reports are for focused outreach.
Periodic
Monthly and term-by-term reviewMonthly Snapshot Report COMPREHENSIVE
A 10-section branded PDF for any month: KPIs, trends, cohort analysis, demographics, areas of concern, high-risk students, recent joiners that need follow-up, trialled-but-not-signed-up leads, classes to look at, and where to focus marketing. Each section includes how it's calculated.
What's in the report?
- Cover & KPI summary — 5 headline KPIs vs target with status (on-track / at-risk / off-track)
- KPIs in detail — calculation methodology for each KPI
- Trends — last 12 months of every KPI in a single table
- Cohort retention — last 12 cohorts at month 6 + 12, plus the heatmap
- Demographics — active student counts by age band, gender, and school year
- New joiners — three buckets (≤2 weeks, ≤5 weeks, ≤6 months) with intervention flags
- High-risk students — score ≥ 61, ranked, with the contributing factors
- Trialled but not signed up — leads who attended a trial and didn't convert
- Classes of concern — under-filled, no teacher, recent dropouts
- Where to focus filling — fill rate by lesson format and by age band, ranked
Watchlist Report FOCUS
Surfaces the teachers, age groups, and classes that need attention right now — low fill, recent leavers, attendance issues, empty classes. One PDF, three sections, ranked by severity. Use this to decide where to focus next.
What does the watchlist flag?
- Attendance rate < 70%
- 2+ leavers from their classes this month
- Avg occupancy across their classes < 50%
- 3+ leavers in same age bucket this month
- Active count down > 5% vs 30 days ago
- Bucket retention < 90%
- Empty (0 enrolled)
- Occupancy < 50% (under-filled)
- No teacher assigned
- 3+ dropouts in last 30 days
Marketing
Demographics, postcodes, and lead sourcesMarketing & Demographics Report NEW
Comprehensive multi-page PDF with postcode analysis, demographics, enrolment trends, lead sources, and marketing recommendations. Ideal for strategic reviews and board reports.
7-page PDF covering: executive summary · Liverpool area breakdown · district roll-up · top 15 areas visualisation · age & gender demographics · 12-month enrolment trends · lead source performance · actionable marketing insights.
- Postcode → Liverpool area (L1–L40, CH41–CH66, WA8+)
- District roll-ups (Sefton, Wirral, Knowsley, etc.)
- Active vs inactive students per area
- Retention rate, avg age, avg LTV by area
- Net growth per area (last 12 months)
- Underserved local areas (marketing targets)
- Highest-value areas (where wealthy families cluster)
- Lead source conversion rates
Data quality
Audits, missing refs, duplicatesData Quality Reports
Identify records missing critical DanceBiz references (active students only)
Customers with active students who are missing a DanceBiz ID. Need manual matching.
Active students without a DanceBiz registration ID. Includes parent contact details.
Operations
Day-to-day operational outputsWeekend Operations Brief FORTHCOMING
A printable pack for Reception and Admin: this weekend's birthdays, new students, trial bookings, students to watch, and follow-up calls. Run on Friday — circulate before Saturday.
Weekend Retrospective LAST WEEKEND
A Monday-morning debrief on how last weekend actually went: birthdays celebrated, first-timers who showed up, confirmed no-shows for follow-up calls, trial outcomes, and current watch list.
Weekly Ops Log Trends RECEPTION REPORT
Trends pulled from Reception's manual weekly report (Setup → Weekly Ops Log). Trial / sign-up / exit weekly trend, fees received vs outstanding over time, recurring maintenance & complaints, divergence vs DanceBiz, cover-teacher league, free-text search.
Class Revenue per Term FEES x ENROLMENTS
Per-class term revenue derived from active enrolments and the fee blocks set in Year Setup. 1:1 lessons excluded. Each student's per-term fee is allocated across their classes — so a class shows what it's actually contributing to revenue, not just headcount.
Birthdays Coming Up
Active students with a birthday in the next 14 days. Use the call list for that personal touch — a card, a quick message, a shout-out at the end of class.
Weekend Timetable
Generate a branded Time × Studio grid PDF in 15-minute slots — print-ready for noticeboards and welcome packs. Pulls live class data, teachers, levels and venues.
15-min grid · Studios as columns · classes drawn as cards spanning their full duration.
Same layout as Saturday, branded with PTS palette and wordmark.
Two-page PDF — Saturday on page 1, Sunday on page 2. One file for the whole weekend.
Exports & snapshots
Raw data for AI analysis & longitudinal trackingData Exports & Snapshots
Centralised JSON exports for AI analysis (date-windowed Lead Funnel, Class Trends, Teacher Trends, Attendance, etc.) and weekly snapshots that build a true longitudinal time-series.
Reference
How the metrics workAbout Risk Scores
A weighted 0–100 score across four behavioural signals. Modelled on standard Early Warning System practice. Full methodology →
90%+ = 0 · 80–89% = 10 · 70–79% = 22 · 60–69% = 32 · <60% = 40
Streak 0–1 = 0 · 2 in row = 12 · 3 in row = 22 · 4+ in row = 30
3+ classes = 0 · 2 = 5 · 1 = 12 · 0 = 20 (review record)
12+ mo = 0 · 6–12 = 3 · 3–6 = 6 · <3 = 10
No matching reports
Try a different search or category filter.
Settings
System configuration and data tools
Data Quality Tools
Tools to improve and maintain data quality across your records.
Run this FIRST after a baseline import, then Infer Exit Dates.
Applies Year 13 cap for students who would be over 19.
Catches leads imported before their customer existed, and leads with mobile typos where the email matches.
Runs automatically after every customer import — this button is for ad-hoc cleanup.
📊 Scorecard Targets
Configure monthly lead targets for the scorecard calculations.
📄 Freelance Contract Template
The contractor contract editor has moved to its own page under Setup → Contractors. This keeps Settings focused on system configuration.
Database Connection
Current Supabase connection status.
Export Hub
Centralised JSON exports for AI analysis · Build longitudinal snapshots over time
Date Range
Date range applies to time-windowed exports (Class Trends, Teacher Trends, Lead Funnel, Attendance). Pure snapshots are tagged "as of today" instead.