Features
Students & locations
- Multi-location enrolment — students train at one or more dojo sites with exactly one primary (home) dojo
- Photos, attachments, guardian and emergency contacts, structured addresses with an org-wide default country
- Disciplines assignment — a student's rank lives per discipline, globally across all locations teaching it
- Statuses for the full lifecycle: trial, active, inactive, alumni; CSV import/export for migrating schools
Classes & schedule
- Trainer roster with optional login accounts — guest instructors never need one
- Trainer verifications — school-defined credential types (working-with-children checks, first aid, insurance…) with numbers, expiry dates, scanned documents, status badges, and expiry reminders
- Courses tied to exactly one location and one discipline, with recurring weekly training times
- Sessions auto-generated two weeks ahead, idempotently; a weekly timetable view per location
- Location moves keep attendance history intact (the location is stamped on each session)
Attendance & QR check-in
- Attendance sheets per session: Present, Late, Excused, Absent — with bulk marking and one-click check-in
- An attendance browser listing every session past and upcoming with marked/trained counts, so history is always reachable
- Printable branded attendance PDF per session
- No-login QR check-in pages per location, secured by a revocable token
- Check-ins feed belt eligibility automatically (Present and Late both count)
- Students with overdue invoices can be suspended from check-in automatically
Belts & gradings
- Per-discipline belt ladders — Karate and Jujitsu students progress independently
- Cumulative eligibility: every trained session across all courses of a discipline counts toward the next rank
- Threshold per belt, set once on the ladder; instructors can override for make-up gradings
- Full promotion history with denormalised names/colours so records stay readable through ladder reorganisations
Historical import
- Per-student "add past attendance" backfill sheet (creates missing past sessions automatically)
- Attendance CSV import — idempotent, row-level errors reported, never auto-creating students or courses
- Belt-history CSV import per discipline, with backdated awards
Memberships & payments
- Plan builder with billing periods and pricing per plan
- Enrollments, auto-generated recurring invoices (optionally tagged to a location for per-location revenue)
- Manual payment recording — cash, transfer, terminal — with a full payment history per invoice
- Overdue tracking with configurable due windows, automatic check-in suspension, and payment reminder emails
Communication
- Scheduler-driven reminders: upcoming class, payment due/overdue, birthdays, and trial follow-ups
- Every reminder individually toggleable with its own timing window
- Editable subject/body templates with tokens, and a sample-send to test your SMTP setup
- Email log with statuses and one-click retry; failed sends surfaced on the dashboard
Trials & member portal
- Public trial-booking page at
/book— rate-limited and honeypot-protected, creates a trial student with a chosen class - A lead pipeline (New → Contacted → First class → Converted/Lost) with guarded stage transitions and conversion stats
- Staff-emailed magic links (hashed tokens, 30-day expiry) to a member portal: progress, belts, upcoming classes, attendance, invoices, and balance — plus digital signing, PDF downloads, self-service contact updates, and email preferences
Analytics
- Overview counters, weekly attendance trend with location filter, and monthly recorded revenue
- At-risk retention list surfacing students whose training has lapsed
- Members-per-location breakdown
- Reports — per-student attendance rate, birthdays & training anniversaries, revenue by plan with an estimated monthly recurring revenue, each exportable to CSV
Documents & consent
- A school-managed set of versioned agreements — the seeded privacy notice, informed consent, and safety expectations are placeholders; add/rename/disable/delete documents under Admin → Documents. Saving an edit creates a new version and requires members to re-sign
- Digital signing through the member portal (confirmation + typed name, date recorded) with a staff-recorded paper fallback and printable branded forms
- Compliance page listing every member with an outstanding signature, plus optional scheduler reminders and an optional check-in gate
- Health & medical section on the student record (medications, conditions, injuries) gated by a dedicated PHI permission
- Incident reports / accident book — dated, severity-rated incidents optionally linked to a student and location, with open/closed tracking and a per-student history
White-label branding
- Your organization name across the staff shell, browser titles, public booking page, member portal, check-in screens, PDFs, and the
token in email templates - Light and dark logo variants — the app switches automatically with the theme, including login and public pages; emails use your primary logo or the dark variant on a dark plate
- Your colours and layout — primary/secondary colours, corner radius, and content width for the staff UI; brand colours apply to the light theme, while dark mode keeps its contrast-tuned palette
- Your booking copy — replace the public booking headline and description; the dojo name sits above it automatically
- Email identity — From name/address, email logo, and fully editable subject/body templates
- Branded PDFs — organization name and primary logo on invoices, report cards, attendance sheets, and printable agreements; invoices also use the primary accent colour for status
- Custom domain — deploy behind your own hostname and set
APP_URL; TLS and routing live at the reverse proxy - Clear boundaries — runtime white-labeling, not arbitrary CSS/HTML injection; the source repository and docs remain Mitch‑Dojo, under AGPL-3.0
Languages
- Twelve languages ship today: English, Spanish, Portuguese, French, German, Italian, Japanese, Korean, Chinese, Arabic, Hindi, and Russian
- A school-wide default in Admin → General, plus a per-device selector; switching is a soft refresh that keeps unsaved form values
- Staff UI, auth screens, public booking, member portal, QR check-in, automated emails, and PDF labels are translated
- Authored content — email templates, agreement documents, plan/course names, notes, custom role names — stays exactly as written
- PDFs bundle Noto Sans families for Latin/Cyrillic, Arabic, Devanagari, and Japanese/Korean/Simplified Chinese; Arabic/Hindi shaping and Arabic RTL pagination are best-effort
- The ten languages added after English/Spanish are initial machine-assisted translations; native review is welcome
Platform
- Single sign-on — Microsoft Entra ID, Google, or any OpenID Connect provider; first sign-ins auto-provision passwordless accounts; SSO-only mode with a single-use break-glass URL for emergencies
- RBAC — three seeded system roles (Admin, Trainer, Viewer) plus custom roles over 24 fine-grained permissions (incl. PHI-gated medical visibility); gated controls are hidden, never greyed out
- Audit log — every state-changing admin action logged, with retention pruning
- Dual-mode database — PostgreSQL server or embedded PGlite; one schema, one migration set, a single environment variable to switch
- Scheduler — built-in 5-minute job runner (reminders, pruning, orphan-file sweep) or trigger it externally via a secured cron endpoint