Add lessons module, rate cycles, EC2 deploy scripts, and help content
- Lessons module: lesson types, instructors, schedule slots, enrollments, sessions (list + week grid view), lesson plans, grading scales, templates - Rate cycles: replace monthly_rate with billing_interval + billing_unit on enrollments; add weekly/monthly/quarterly rate presets to lesson types and schedule slots with auto-fill on enrollment form - Member detail page: tabbed layout for details, identity documents, enrollments - Sessions week view: custom 7-column grid replacing react-big-calendar - Music store seed: instructors, lesson types, slots, enrollments, sessions, grading scale, lesson plan template - Scrollbar styling: themed to match sidebar/app palette - deploy/: EC2 setup and redeploy scripts, nginx config, systemd service - Help: add Lessons category (overview, types, instructors, slots, enrollments, sessions, plans/grading); collapsible sidebar with independent scroll; remove POS/accounting references from docs
This commit is contained in:
@@ -50,7 +50,7 @@ If you can't find what you're looking for, contact your admin or system administ
|
||||
content: `
|
||||
# Accounts
|
||||
|
||||
An **account** is a billing entity — it could be a family, a business, a school, or an individual person. All billing, invoices, and payments are tied to an account.
|
||||
An **account** is an organizational entity — it could be a family, a business, a school, or an individual person. Members, repairs, and lessons are all linked to an account.
|
||||
|
||||
## Creating an Account
|
||||
|
||||
@@ -251,8 +251,7 @@ Permissions are organized by area:
|
||||
|
||||
- **Accounts** — view, edit, admin
|
||||
- **Inventory** — view, edit, admin
|
||||
- **POS** — view, edit, admin
|
||||
- **Rentals, Lessons, Repairs** — each has view, edit, admin
|
||||
- **Lessons, Repairs** — each has view, edit, admin
|
||||
|
||||
**Permission inheritance:** If a role has **admin** permission for an area, it automatically includes **edit** and **view** too. If it has **edit**, it includes **view**.
|
||||
|
||||
@@ -486,6 +485,249 @@ For pending approval tickets, you can:
|
||||
5. Then move the ticket to **Approved** status
|
||||
`.trim(),
|
||||
},
|
||||
{
|
||||
slug: 'lessons-overview',
|
||||
title: 'Lessons Overview',
|
||||
category: 'Lessons',
|
||||
content: `
|
||||
# Lessons
|
||||
|
||||
The Lessons module manages music instruction — instructors, schedules, student enrollments, individual sessions, and lesson plans with grading.
|
||||
|
||||
## Module Setup
|
||||
|
||||
Before using Lessons, an admin must enable the module in **Admin → Modules**.
|
||||
|
||||
## Core Concepts
|
||||
|
||||
- **Lesson Types** — the kinds of lessons you offer (e.g. "30-min Piano", "1-hr Guitar"). Each has default rates.
|
||||
- **Instructors** — staff members who teach. Each instructor has their own schedule slots.
|
||||
- **Schedule Slots** — recurring time blocks when an instructor is available (e.g. Mondays 3–5 PM). Slots can override the lesson type's default rates.
|
||||
- **Enrollments** — a student (member) assigned to a specific slot with agreed billing terms.
|
||||
- **Sessions** — individual lesson occurrences generated from enrollments. Each session is marked attended, missed, cancelled, or makeup.
|
||||
- **Lesson Plans** — per-student curriculum tracking with goals, notes, and graded progress.
|
||||
|
||||
## Typical Workflow
|
||||
|
||||
1. Create **Lesson Types** with default rates
|
||||
2. Add **Instructors**
|
||||
3. Create **Schedule Slots** for each instructor
|
||||
4. **Enroll** students into slots — set billing cycle and rate
|
||||
5. Sessions are created automatically on a weekly basis
|
||||
6. After each lesson, mark the session **Attended** (or Missed/Cancelled) and add notes
|
||||
7. Track progress via the student's **Lesson Plan**
|
||||
`.trim(),
|
||||
},
|
||||
{
|
||||
slug: 'lesson-types',
|
||||
title: 'Lesson Types',
|
||||
category: 'Lessons',
|
||||
content: `
|
||||
# Lesson Types
|
||||
|
||||
Lesson types define what you teach and your default rates. Examples: "30-min Piano", "1-hr Guitar", "Group Drum — 45 min".
|
||||
|
||||
## Creating a Lesson Type
|
||||
|
||||
1. Go to **Lessons → Lesson Types**
|
||||
2. Click **New Lesson Type**
|
||||
3. Enter a name and optional description
|
||||
4. Set default rates for each billing cycle:
|
||||
- **Weekly** — billed every week
|
||||
- **Monthly** — billed once a month
|
||||
- **Quarterly** — billed every 3 months
|
||||
5. Click **Create**
|
||||
|
||||
Rates here are defaults — individual schedule slots (and enrollments) can override them.
|
||||
|
||||
## Editing Rates
|
||||
|
||||
Click any lesson type to edit it. Rate changes only affect new enrollments — existing enrollments keep their agreed rate unless you manually update them.
|
||||
`.trim(),
|
||||
},
|
||||
{
|
||||
slug: 'instructors',
|
||||
title: 'Instructors',
|
||||
category: 'Lessons',
|
||||
content: `
|
||||
# Instructors
|
||||
|
||||
Instructors are the teachers in your system. Each instructor has a display name, contact info, and their own set of schedule slots.
|
||||
|
||||
## Adding an Instructor
|
||||
|
||||
1. Go to **Lessons → Instructors**
|
||||
2. Click **New Instructor**
|
||||
3. Enter the display name (shown everywhere in the UI), email, and optional phone
|
||||
4. Click **Create**
|
||||
|
||||
## Instructor Detail
|
||||
|
||||
Click an instructor to see their profile and all their schedule slots.
|
||||
|
||||
## Deactivating an Instructor
|
||||
|
||||
If an instructor leaves, you can mark them inactive. Their existing enrollments and session history are preserved — they just won't appear in dropdowns for new enrollments.
|
||||
`.trim(),
|
||||
},
|
||||
{
|
||||
slug: 'schedule-slots',
|
||||
title: 'Schedule Slots',
|
||||
category: 'Lessons',
|
||||
content: `
|
||||
# Schedule Slots
|
||||
|
||||
A schedule slot is a recurring time block when an instructor teaches — for example, "Mondays 4:00–4:30 PM with Sarah Chen, Piano".
|
||||
|
||||
## Creating a Slot
|
||||
|
||||
1. Go to **Lessons → Instructors** → click an instructor
|
||||
2. Click **Add Slot**, or go to **Lessons → Schedule** → **New Slot**
|
||||
3. Select:
|
||||
- **Lesson Type**
|
||||
- **Day of week**
|
||||
- **Start time** and **End time**
|
||||
4. Optionally set **instructor rate overrides** for this specific slot:
|
||||
- These override the lesson type's default rates for students in this slot
|
||||
- Leave blank to use the lesson type defaults
|
||||
5. Click **Create**
|
||||
|
||||
## Rate Override Logic
|
||||
|
||||
When enrolling a student, the rate auto-fills based on this priority:
|
||||
|
||||
1. Slot's rate for the chosen billing cycle (if set)
|
||||
2. Lesson type's rate for that cycle
|
||||
3. Manual entry (if neither is set)
|
||||
|
||||
## Blocked Dates
|
||||
|
||||
Use **Lessons → Blocked Dates** to mark days when lessons don't occur (holidays, school breaks). Sessions on blocked dates are automatically marked cancelled.
|
||||
`.trim(),
|
||||
},
|
||||
{
|
||||
slug: 'enrollments',
|
||||
title: 'Enrollments',
|
||||
category: 'Lessons',
|
||||
content: `
|
||||
# Enrollments
|
||||
|
||||
An enrollment connects a student (member) to a schedule slot with agreed billing terms.
|
||||
|
||||
## Creating an Enrollment
|
||||
|
||||
1. Go to **Lessons → Enrollments → New Enrollment**
|
||||
2. Select the **member** (student)
|
||||
3. Select the **instructor** and **schedule slot**
|
||||
4. Set the **billing cycle**:
|
||||
- Choose the interval (e.g. 1) and unit (week / month / quarter / year)
|
||||
- The rate field auto-fills from the slot or lesson type — you can override it manually
|
||||
5. Set the **start date**
|
||||
6. Click **Create Enrollment**
|
||||
|
||||
## Enrollment Statuses
|
||||
|
||||
- **Active** — student is actively taking lessons; sessions are being generated
|
||||
- **Paused** — temporarily on hold (e.g. summer break); no new sessions generated
|
||||
- **Cancelled** — permanently ended
|
||||
- **Completed** — finished the curriculum
|
||||
|
||||
## Changing Status
|
||||
|
||||
Open the enrollment and use the status dropdown. Adding a note when pausing or cancelling is recommended.
|
||||
|
||||
## Billing Terms
|
||||
|
||||
The **rate** and **billing cycle** represent what the customer agreed to pay. These don't connect to payment processing automatically — they're for reference when generating invoices.
|
||||
`.trim(),
|
||||
},
|
||||
{
|
||||
slug: 'sessions',
|
||||
title: 'Sessions',
|
||||
category: 'Lessons',
|
||||
content: `
|
||||
# Sessions
|
||||
|
||||
A session is one instance of a lesson. Sessions are generated automatically from active enrollments based on their schedule slot's day and time.
|
||||
|
||||
## Viewing Sessions
|
||||
|
||||
- **Lessons → Sessions** — list view with search and filters, or week view showing all sessions on a calendar grid
|
||||
- Use the **instructor filter** in the week view to focus on one teacher's schedule
|
||||
- Use the **status filter** in list view to find missed or upcoming sessions
|
||||
|
||||
## Session Statuses
|
||||
|
||||
- **Scheduled** — upcoming, not yet occurred
|
||||
- **Attended** — lesson took place
|
||||
- **Missed** — student didn't show
|
||||
- **Cancelled** — lesson was cancelled (instructor unavailable, holiday, etc.)
|
||||
- **Makeup** — a makeup session for a previously missed lesson
|
||||
|
||||
## Recording a Session
|
||||
|
||||
1. Click on a session (from the list or week view)
|
||||
2. Update the status (Attended, Missed, etc.)
|
||||
3. Add session notes — these feed into the student's lesson plan
|
||||
4. Click **Save**
|
||||
|
||||
## Makeup Sessions
|
||||
|
||||
If a student misses a session, you can schedule a makeup:
|
||||
|
||||
1. Open the missed session
|
||||
2. Click **Schedule Makeup**
|
||||
3. Choose a date and time
|
||||
4. A new session is created with status **Makeup** linked to the original
|
||||
|
||||
## Notes
|
||||
|
||||
Session notes are visible on the session detail page and also appear in the student's lesson plan history. Use them to record what was covered, what to practice, and any concerns.
|
||||
`.trim(),
|
||||
},
|
||||
{
|
||||
slug: 'lesson-plans',
|
||||
title: 'Lesson Plans & Grading',
|
||||
category: 'Lessons',
|
||||
content: `
|
||||
# Lesson Plans & Grading
|
||||
|
||||
Lesson plans track a student's curriculum, goals, and progress over time.
|
||||
|
||||
## Grading Scales
|
||||
|
||||
Before using grading, set up a grading scale in **Lessons → Grading Scales**. A scale defines the grades available (e.g. 1–5, A–F, or custom labels like "Needs Work / Developing / Proficient / Mastered").
|
||||
|
||||
## Lesson Plan Templates
|
||||
|
||||
Templates define a standard curriculum that can be applied to students. Go to **Lessons → Plan Templates** to create reusable outlines with goals organized by category.
|
||||
|
||||
## Student Lesson Plans
|
||||
|
||||
Each active enrollment can have a lesson plan. To view or edit a student's plan:
|
||||
|
||||
1. Go to the member's detail page → **Enrollments** tab
|
||||
2. Click the enrollment → **Lesson Plan** tab
|
||||
|
||||
Or go to **Lessons → Lesson Plans** and search by student name.
|
||||
|
||||
## Recording Progress
|
||||
|
||||
On the lesson plan detail page:
|
||||
|
||||
1. Click **Add Grade Entry**
|
||||
2. Select the goal or skill being assessed
|
||||
3. Choose the grade from your scale
|
||||
4. Add optional notes
|
||||
5. Click **Save**
|
||||
|
||||
Grade history is shown as a timeline so you can see improvement over time.
|
||||
|
||||
## Goals
|
||||
|
||||
Goals are the specific skills or pieces being tracked (e.g. "C Major Scale", "Correct bow hold", "Sight reading level 2"). Goals come from the plan template but can be customized per student.
|
||||
`.trim(),
|
||||
},
|
||||
]
|
||||
|
||||
export function getWikiPages(): WikiPage[] {
|
||||
|
||||
Reference in New Issue
Block a user