Teacher Scheduling
Teacher scheduling in TimelyChurch connects teachers, classes, and lessons on specific dates. The scheduling system supports teacher assignment, confirmation workflows, lesson selection, prep task management, and holiday handling.
How Scheduling Works
Schedules are created through the Events module (Event Hub) and link to the class system. Each schedule record represents a single class session on a specific date and includes:
- Class -- Which class is being taught.
- Date -- The date of the class session.
- Teacher -- The assigned teacher, if one is locked in yet.
- Lesson -- The lesson to be taught (optional at creation, can be assigned later).
- Status -- Whether the session still needs a teacher, is cancelled, is done, or falls on a holiday. Whether the assigned teacher has actually confirmed is a separate signal -- see below.
Schedule Statuses
| Status | Meaning |
|---|---|
| Scheduled | A session exists for this date, whether or not a teacher has confirmed yet. |
| Needs Substitute | The confirmed teacher can no longer make it and the class is looking for coverage. See Substitute Teacher Requests. |
| Cancelled | The class session has been cancelled. |
| Completed | The class session has been taught (marked as completed). |
| Holiday | The date is a holiday and no class will be held. |
Confirmation isn't a schedule status. It rides the same serving invitation every team in your church uses -- see the Teacher Confirmation Workflow below. The class detail page shows each session's teacher with a small "Confirmed" or "Not confirmed yet" note underneath their name.
Assigning Teachers to Classes
At Class Creation
When you create a new class, you can select teachers during the creation process. These teachers are assigned as leaders of the class -- and the first (primary) leader is who gets automatically invited to teach when a session for that class is created.
Through the Class Detail Page
- Open the class from the Classes list.
- Use the teacher management section to add or change teachers.
- Teachers assigned to a class are available as the default teachers when creating schedules for that class.
On Individual Schedules
Teachers can also be assigned directly to individual schedule entries, overriding the class's default teachers. This is useful for one-off assignments or when a regular teacher is unavailable.
Teacher Confirmation Workflow
There's no separate teacher-only confirmation system anymore. A class's teacher is invited, reminded, and confirmed through the same serving engine every team in your church rides for its own positions -- "Teacher" is simply a position on the class, the way "Greeter" or "Sound" is a position on a team.
- A class event is created (or a session is added) — the class's primary leader is invited as teacher automatically, or an admin picks a specific teacher from the class detail page.
- The teacher gets a personal invitation — on Telegram if linked, by email otherwise — and can confirm or decline in one tap, or from their portal schedule.
- Confirm locks them in; Decline (or silence, see below) hands the slot to the replacement flow automatically. That only applies to an invitation nobody has answered yet -- once a teacher HAS confirmed and later needs to back out, that's a different flow: see Substitute Teacher Requests.
Automated Reminders — Now Yours to Tune
Unconfirmed teachers are re-pinged on the days the CLASS group configures under Scheduling settings → Remind unconfirmed people — the default is the classic 4 days and 2 days before the session, and each class can pick its own days (say, 5 and 1). One reminder per day at most.
When a Teacher Doesn't Respond
Enable Move on when someone does not respond on the class group and set a response deadline: an invitation that stays unanswered past the deadline expires and the system invites the next eligible person automatically — declines and silences share the same attempt budget. See Cascade Auto-Fill, Sub Invites, and Fill Requests.
If nobody in rotation picks up the slot before anyone ever confirms, the system opens a substitute request the same way it would for any other team position -- see Substitute Requests. That's a different, earlier-stage mechanism from the one covered in Substitute Teacher Requests below, which is what a teacher uses once they've already confirmed and then need to back out.
Lesson Assignment
Teachers and admins can assign lessons to schedules in several ways:
Admin Assigns a Lesson
- When creating or editing a schedule, select a lesson from the lesson library.
- Only approved lessons are available for selection.
Teacher Selects a Lesson
If the "Teacher Picks Lesson" option is enabled on a schedule:
- The teacher receives a notification that they need to select a lesson.
- They browse the lesson library from the portal.
- They select a lesson and it is assigned to the schedule.
Teacher Proposes a Lesson
If a teacher wants to teach content that is not yet in the library:
- From the portal, they choose to propose a new lesson for their schedule.
- They fill in the lesson title, description, and scripture reference.
- The proposal is submitted with a "Pending" status.
- An admin reviews the proposal and can:
- Approve -- The lesson is created in the library and assigned to the schedule. The teacher is notified.
- Reject -- The teacher is notified with the reason for rejection and can submit a revised proposal.
Teacher Creates a Lesson
If "Allow teachers to create lessons" is enabled in Lesson Settings:
- Teachers can create new lessons directly from the portal.
- If approval is required, the lesson starts as a Draft.
- Once approved, it becomes available for scheduling.
Lesson Needed Notifications
When a schedule has a teacher assigned but no lesson selected, the system automatically notifies the teacher that they need to choose a lesson. This notification is triggered when:
- A new schedule is created with a teacher but no lesson.
- A teacher is newly assigned to an existing schedule that has no lesson.
- A lesson is removed from an existing schedule.
Notifications are not sent for past schedules or holidays.
Prep Tasks
Schedules can have associated preparation tasks to help teachers get ready for their class.
What Are Prep Tasks
Prep tasks are to-do items linked to a specific schedule. Examples include:
- "Print worksheets for the lesson"
- "Set up classroom with craft supplies"
- "Prepare snack for 15 kids"
Prep Task Fields
Each task includes:
- Title -- What needs to be done.
- Description -- Additional details.
- Task Type -- The kind of preparation needed.
- Quantity -- How many of something are needed (if applicable).
- Assigned To -- Who is responsible for this task.
- Due Date -- When the task should be completed.
- Priority -- Low, normal, or high.
- Estimated Time -- How many minutes the task is expected to take.
- Status -- Pending, completed, or skipped.
Tracking Prep Tasks
- The schedule shows a completion percentage for all prep tasks.
- Overdue tasks are flagged automatically.
- Tasks marked as needing attention appear in the admin's attention queue.
Holiday Handling
To mark a date as a holiday (no class):
- Create a schedule entry for the date.
- Enable the Holiday flag.
- Optionally enter the holiday name (e.g., "Easter Sunday" or "Christmas Break").
Holiday schedules:
- Do not require a teacher or lesson.
- Display the holiday name instead of a status.
- Are excluded from "needs attention" reports.
- Do not trigger lesson-needed notifications.
Marking a Session as Taught
After a class session has been completed:
- Find the schedule entry.
- Click Mark as Taught.
- The status changes to "Completed."
- Clicking again toggles it back to "Scheduled" if marked by mistake.
When a lesson is marked as taught, the lesson's teach count is incremented and its "last taught at" date is updated.
Schedule Visibility and Materials Access
Public Visibility
Each schedule can control what information is visible to the public. The public_visibility field on the Schedule model accepts one of four values, matching the constants defined on App\Models\Schedule:
| UI Label | Stored Value | Constant | Behavior |
|---|---|---|---|
| Global Default | null |
PUBLIC_VISIBILITY_GLOBAL |
Uses the church-wide visibility setting. This is the default for new schedules. |
| Public | 'public' |
PUBLIC_VISIBILITY_PUBLIC |
Lesson details are visible on public-facing pages. |
| Private | 'private' |
PUBLIC_VISIBILITY_PRIVATE |
Lesson details are hidden from public view. |
| Limited | 'limited' |
PUBLIC_VISIBILITY_LIMITED |
Only basic information (date, class name) is shown; lesson title, description, and attachments are hidden. |
Per-field overrides (e.g., "show title but hide description for this one schedule") are stored in the visibility_overrides JSON column and merge with the church-wide defaults when the public page is rendered.
Materials Access
Control how lesson attachments and materials are accessible. The materials_access_mode field (with optional materials_pin) on each schedule maps to these four constants:
| UI Label | Stored Value | Constant |
|---|---|---|
| Inherit (Church Default) | null |
MATERIALS_ACCESS_INHERIT |
| Public | 'public' |
MATERIALS_ACCESS_PUBLIC |
| PIN Protected | 'pin_protected' |
MATERIALS_ACCESS_PIN_PROTECTED |
| Hidden | 'hidden' |
MATERIALS_ACCESS_HIDDEN |
When PIN Protected is selected, the schedule's materials_pin field is checked first. If it is empty, the church-wide public_materials_pin (set in Public Sharing settings) is used as a fallback. PINs can therefore be configured at two levels: per-schedule or church-wide.
For instructions on enabling and branding the public lesson page (where this PIN protection takes effect), see Public Lesson Sharing.
Tips for Effective Scheduling
- Schedule in advance -- Set up schedules several weeks ahead so teachers have time to prepare.
- Trust the confirmation status -- Every teacher invite rides the same Confirm/Decline every serving position uses, so the class detail page always tells you who has actually committed and who hasn't answered yet.
- Leverage prep tasks -- Add prep tasks to schedules so nothing falls through the cracks.
- Monitor "Needs Attention" items -- Schedules with no teacher, no lesson, or needing a substitute are flagged automatically.
- Mark holidays early -- Add holiday entries to the schedule so teachers can plan around breaks.