17 domain design docs covering architecture, accounts, inventory, rentals, lessons, repairs, POS, payments, batch repairs, delivery, billing, accounting, deployment, licensing, installer, and backend tech architecture. Plus implementation roadmap (doc 18) and personnel management (doc 19). Key design decisions documented: - company/location model (multi-tenant + multi-location) - member entity (renamed from student to support multiple adults) - Stripe vs Global Payments billing ownership differences - User/location/terminal licensing model - Valkey 8 instead of Redis
14 KiB
Music Store Management Platform
Domain Design: Lessons
Version 1.2 | Updated: Session notes, grading scales, lesson plans, parent portal
1. Overview
The Lessons domain manages instructor scheduling, student enrollments, attendance tracking, and recurring lesson billing. Version 1.2 adds a complete teaching toolkit: per-session notes, custom grading scales, structured lesson plans with curriculum tracking, and homework assignment. These features turn the lessons module from a billing tool into a genuine teaching platform that instructors and parents will actively use.
2. Feature Summary
Feature
Description
Visible To
Session notes — internal
Instructor private notes per lesson. Not shared with student or parent.
Instructor, Admin
Session notes — student
Shareable lesson summary — what was covered, progress comments.
Instructor, Student, Parent
Homework assignment
Practice instructions assigned after each lesson.
Instructor, Student, Parent
Topics covered
Tags for what was worked on — links to lesson plan items.
Instructor, Admin
Custom grading scales
Store or instructor-defined scales. Letter, numeric, descriptive, or music-specific.
Instructor, Admin
Lesson plans
Structured curriculum per student. Sections, items, status, grades.
Instructor, Student, Parent
Progress tracking
Mastered / in progress / not started per curriculum item. History of grades.
Instructor, Student, Parent
Parent portal
Parents see plan progress, session summaries, homework, and grade history.
Parent via portal
3. Core Entities
3.1 instructor
id, company_id, employee_id (FK), display_name, bio,instruments (text[]), is_active, created_at
3.2 lesson_type
id, company_id, name, instrument, duration_minutes,lesson_format (private|group), base_rate_monthly, created_at
3.3 schedule_slot
id, company_id, instructor_id, lesson_type_id,day_of_week, start_time, room, max_students,is_active, created_at
3.4 enrollment
Column
Type
Notes
id
uuid PK
company_id
uuid FK
member_id
uuid FK
The member taking lessons
account_id
uuid FK
The billing account
schedule_slot_id
uuid FK
instructor_id
uuid FK
Denormalized for query convenience
status
enum
active | paused | cancelled | completed
start_date
date
end_date
date
Null for open-ended
monthly_rate
numeric(10,2)
Actual rate
billing_group
varchar
Consolidation group
stripe_subscription_id
varchar
stripe_subscription_item_id
varchar
Line item if consolidated
makeup_credits
integer
Available makeup credits
active_lesson_plan_id
uuid FK
Current lesson plan for this enrollment
notes
text
Enrollment-level notes
legacy_id
varchar
AIM enrollment ID
created_at
timestamptz
3.5 lesson_session
Column
Type
Notes
id
uuid PK
enrollment_id
uuid FK
company_id
uuid FK
scheduled_date
date
scheduled_time
time
actual_start_time
time
Nullable — if late start noted
actual_end_time
time
Nullable — if early end noted
status
enum
scheduled | attended | missed | makeup | cancelled
instructor_notes
text
Internal only — not visible to student or parent
member_notes
text
Shareable lesson summary
homework_assigned
text
Practice instructions for next session
next_lesson_goals
text
What to focus on next lesson
topics_covered
text[]
Free tags: scales, sight-reading, repertoire, theory
makeup_for_session_id
uuid FK
Self-ref — if this is a makeup session
notes_completed_at
timestamptz
When instructor finished post-lesson notes
created_at
timestamptz
4. Custom Grading Scales
Every store can define their own grading scales. Scales can be assigned at the store level (default for all instructors) or at the instructor level (personal preference). Individual lesson plan items can reference any available scale.
4.1 grading_scale
Column
Type
Notes
id
uuid PK
company_id
uuid FK
name
varchar
e.g. 'Standard Letter', 'ABRSM Style', 'Music Progress'
description
text
Optional explanation of the scale
is_default
boolean
Default scale used when none specified on plan item
created_by
uuid FK
Instructor or admin who created
is_active
boolean
created_at
timestamptz
4.2 grading_scale_level
Column
Type
Notes
id
uuid PK
grading_scale_id
uuid FK
value
varchar
The grade value: A, 4, Distinction, Mastered
label
varchar
Longer description shown in UI
numeric_value
integer
1-100 for averaging and reporting
color_hex
char(7)
UI display color e.g. #4CAF50 for green
sort_order
integer
Display order — highest grade first
4.3 Seeded Default Scales
Scale Name
Levels
Standard Letter
A+ A A- B+ B B- C+ C D F
Numeric 1-10
10 9 8 7 6 5 4 3 2 1
ABRSM Style
Distinction Merit Pass Below Pass
Progress
Mastered Proficient Developing Beginning
Concert Readiness
Concert Ready Performance Ready Practice Ready Learning
Simple
Excellent Good Needs Work
All default scales are seeded at store creation and can be modified or deactivated. Custom scales can be added at any time. Scale levels cannot be deleted if they have been used in a graded item — only deactivated.
5. Lesson Plans
A lesson plan is a structured curriculum for a specific student enrollment. It is organized into sections (e.g. Scales, Repertoire, Theory) with individual items in each section. Each item tracks status, grade, and progress history. Multiple plans can exist per student — one active at a time per enrollment.
5.1 member_lesson_plan
Column
Type
Notes
id
uuid PK
company_id
uuid FK
member_id
uuid FK
enrollment_id
uuid FK
created_by
uuid FK
Instructor who created the plan
title
varchar
e.g. 'Year 2 Piano', 'Grade 3 Violin'
description
text
Goals and context for this plan
template_id
uuid FK
Nullable — if created from a plan template
is_active
boolean
Only one plan active per enrollment at a time
started_date
date
completed_date
date
Nullable — set when all items mastered
created_at
timestamptz
updated_at
timestamptz
5.2 lesson_plan_section
id, lesson_plan_id (FK), title, description,sort_order, created_atExample sections: Scales & Arpeggios Repertoire Theory Technique Sight Reading Ear Training
5.3 lesson_plan_item
Column
Type
Notes
id
uuid PK
section_id
uuid FK
title
varchar
e.g. 'C Major Scale 2 octaves', 'Fur Elise'
description
text
Additional detail or context
status
enum
not_started | in_progress | mastered | skipped
grading_scale_id
uuid FK
Nullable — which scale to use for this item
current_grade_value
varchar
Most recent grade assigned
target_grade_value
varchar
Grade required to mark as mastered
started_date
date
When first worked on
mastered_date
date
When marked mastered
notes
text
Instructor notes specific to this item
sort_order
integer
created_at
timestamptz
updated_at
timestamptz
5.4 lesson_plan_item_grade_history
Every grade assigned to a plan item is preserved. This builds a complete history of how a student progressed through each piece or skill over time.
id, lesson_plan_item_id (FK),lesson_session_id (FK nullable), -- which session this grade was givengrade_value, -- the gradegrading_scale_id (FK),graded_by (uuid FK), -- instructornotes, -- context for this gradecreated_at
5.5 lesson_session_plan_item
Links lesson sessions to the plan items worked on during that session. Enables the full history of when each curriculum item was practiced.
id, lesson_session_id (FK), lesson_plan_item_id (FK),was_worked_on (boolean),grade_value (varchar nullable), -- grade if assessed this sessiongrading_scale_id (FK nullable),notes (text nullable), -- session-specific notes on this itemcreated_at
6. Lesson Plan Templates
Instructors can save lesson plan structures as templates to quickly create plans for new students. A template defines the sections and items without any student-specific data. Templates can be shared across the store or kept private to an instructor.
lesson_plan_template id, company_id, created_by (FK), title, instrument, skill_level (beginner|intermediate|advanced), description, is_shared (boolean), created_atlesson_plan_template_section id, template_id (FK), title, sort_orderlesson_plan_template_item id, section_id (FK), title, description, suggested_grading_scale_id (FK nullable), sort_order
When creating a new lesson plan from a template, all sections and items are copied to the new plan. Changes to the plan after creation do not affect the template.
7. Example — Year 2 Piano Plan
Student: Emma Chen Instrument: PianoPlan: Year 2 Piano Status: Active Progress: 40%SCALES & ARPEGGIOS [done] C Major 2 octaves Mastered Oct 2024 [done] G Major 2 octaves Mastered Nov 2024 [>> ] D Major 2 octaves In Progress Grade: B [ ] A Major 2 octaves Not Started [ ] C Major arpeggio Not StartedREPERTOIRE [done] Minuet in G (Bach) Mastered Sep 2024 [>> ] Fur Elise (Beethoven) In Progress Grade: B+ [ ] Moonlight Sonata Mvt 1 Not Started [ ] Sonatina Op.36 No.1 Not StartedTHEORY [done] Key signatures to 2 sharps Mastered [>> ] Intervals - 3rds and 6ths In Progress [ ] Chord inversions Not StartedTECHNIQUE [>> ] Hanon exercises 1-10 In Progress [ ] Scales in thirds Not StartedLast lesson (Nov 15): Topics: Fur Elise bars 1-16, D Major scale Homework: Practice Fur Elise bars 1-8 hands together daily Notes for parent: Great focus today. Right hand is clean. Next goals: Clean up arpeggios in bars 5-6
8. Instructor Post-Lesson Workflow
After each lesson the instructor completes a brief post-lesson record. The UI is optimized for speed — a mobile-friendly form the instructor fills in immediately after the student leaves.
Post-Lesson Form — Emma Chen, Nov 15Topics covered today: [+ Add from plan] [x] Fur Elise (Beethoven) Grade: [B+ v] [x] D Major 2 octaves Grade: [B v] [+ Add custom topic]Homework assigned: Practice Fur Elise bars 1-8 hands together dailyNotes for parent/student: Great focus today. Right hand melody is clean. Left hand needs more practice on the arpeggios.Private instructor notes: Emma seems distracted lately - check in with parentNext lesson goals: Clean up bars 5-6 arpeggios. Start bars 17-24.[Save Notes]
-
Topics linked to plan items auto-update item status to in_progress if not_started
-
Grade entry creates a lesson_plan_item_grade_history record
-
Student notes and homework immediately visible in parent portal after save
-
Private instructor notes never visible outside staff views
-
Notes completed timestamp recorded — store can see if instructors are filling in notes
9. Parent Portal — Lessons View
Parents access the customer portal to see their child's lesson progress. The view is read-only and shows only student-facing content — never instructor private notes.
Portal — Emma Chen's LessonsCurrent Enrollment: Piano with Ms. Sarah M. Tuesdays 4:00pm Next lesson: Nov 22Last Lesson Summary (Nov 15): What we worked on: Fur Elise, D Major Scale Homework: Practice Fur Elise bars 1-8 hands together daily Notes: Great focus today. Right hand melody is clean. Left hand arpeggios need more work.Lesson Plan Progress: 40% complete Scales: 2 of 5 mastered Repertoire: 1 of 4 mastered [In progress: Fur Elise] Theory: 1 of 3 mastered Technique: 0 of 2 mastered [View Full Plan]Recent Grades: Fur Elise B+ Nov 15 D Major Scale B Nov 15 Minuet in G A Sep 28 [Mastered]Upcoming Lessons: Nov 22 Tuesday 4:00pm Nov 29 Tuesday 4:00pmAttendance: 12 attended, 1 missed, 0 makeups available
10. Business Rules
10.1 Notes
-
instructor_notes are never exposed via any API route accessible to students or parents
-
member_notes and homework are visible in parent portal immediately after save
-
notes_completed_at tracked per session — admin can identify instructors not completing notes
-
Notes are optional — sessions can be marked attended without post-lesson notes
-
Notes can be edited after save — edit history not required but updated_at tracked
10.2 Grading Scales
-
Each store gets all default scales seeded at creation
-
Default scale is used when a plan item has no explicit scale assigned
-
Scale levels used in grade history cannot be deleted — only deactivated
-
Numeric_value enables cross-scale average calculations in reports
-
Instructors can create personal scales visible only to them
10.3 Lesson Plans
-
Only one plan can be active per enrollment at a time
-
Completing a plan (all items mastered) does not auto-create the next plan
-
Plan items marked mastered record mastered_date automatically
-
Skipped items excluded from progress percentage calculation
-
Plan history preserved when enrollment ends — never deleted
-
Templates are copied on use — template changes do not affect existing plans
-
Plan visible in parent portal — instructor controls what items appear there via is_shared flag on items
10.4 Scheduling Constraints
-
Student cannot be enrolled in two slots at the same day and time
-
Instructor cannot teach two students simultaneously unless group lesson
-
Group lessons enforce max_students cap on schedule_slot
-
Makeup sessions linked to original missed session via makeup_for_session_id
11. Reporting
Report
Description
Student progress summary
Plan completion % per student, items mastered, current grades
Instructor notes compliance
Which instructors are completing post-lesson notes and how quickly
Grade distribution
Grade spread per instructor, per instrument, per plan item
Curriculum progress
How many students are working on each plan item — popular pieces
Homework completion
Homework assigned vs next-session progress correlation
Retention by progress
Do students who have active lesson plans churn less? Correlation report.
Plan template usage
Which templates are used most, average completion time per template
Attendance summary
Attended, missed, makeup by student, instructor, and period