Skip to main content

Schedule

info

This page covers the weekly planner and daily view that track homeschool work. These are complementary to the Google Calendar integration: calendar events are time-bound appointments; schedule items are daily to-do items that track work completion.

School Platform series

  1. School Platform
  2. Architecture
  3. AI features
  4. Calendar integration
  5. Programme
  6. Explainers
  7. Schedule - You are here
  8. Integrations
  9. Deployment

Two paired surfaces

The schedule feature has two views designed for different audiences:

RouteAudiencePurpose
/scheduleParentWeek grid with seven day columns plus a weekly-plan column. Drag-drop between days, repeat-across-week, item CRUD.
/todayChildDaily to-do list for the current Perth date. Merges today's items, incomplete items carried forward from prior days, and any started AvE tasks.
/schedule/planParentLong-range view grouping week blocks into terms.

How it works

Data model

ModelPurpose
PlanPeriodMulti-week term or block with start/end dates
WeekBlockOne per ISO week (Monday start, Perth timezone). Holds weekly goals and theme.
DailyScheduleOne row per calendar day that has items. Created lazily.
DailyScheduleItemSingle to-do row on a day. Polymorphic via kind and linking columns.

Item kinds

The ScheduleItemKind enum covers all sources of scheduled work:

KindRepresentsLink mechanism
CUSTOMFree-text parent-typed itemNo link
ACTIVITYPlatform ActivityactivityId FK
STUDY_UNITAI-generated study unitstudyUnitId FK
AVE_TASKSingle AvE programme taskExternal ref to AveTask.id
AVE_MODULEAvE module reminderExternal ref to AveModule.id
EUKA_LESSONEuka lesson (auto-scheduled)External ref with Euka % score
MATHSPACE_TOPICMathspace topic (auto-scheduled)External ref
SCRATCH_PROJECTScratch projectExternal ref

The UI renders each kind with a distinct colour pill and label.

Key behaviours

Drag-drop between days

Every item on /schedule is draggable with HTML5 drag-and-drop. Day columns accept drops and PATCH the item's date server-side. A grip icon signals the draggable affordance and reveals on hover.

Repeat across the week

The repeat icon on each row clones the item across the remaining days in the current week. Already-existing duplicates are skipped server-side.

Carry-forward on /today

The daily view merges three sources into one list:

  1. Items dated today
  2. Incomplete items from prior days (carried forward until completed)
  3. Synthetic items for any AvE task that is started but not completed and has no existing schedule item

Ticking a carried-forward item marks it complete wherever it originated. Unticking an AvE-linked item resets the task's completion state so it reappears the next day.

Auto-scheduling from integrations

When the Euka or Mathspace scraper detects a lesson has been started or completed, it automatically creates an Activity and a DailyScheduleItem dated to the Perth calendar day the work was first observed. See Integrations for the full scraper lifecycle.

Compact week view

The week grid uses a compact layout:

  • Source pills (Euka 75%, AvE, Mathspace) shown as coloured badges
  • Redundant prefixes stripped when the source badge is already visible
  • Grip, repeat, and delete icons hidden until hover (checkbox remains always visible)
  • Task titles wrap naturally below the meta row

Timezone handling

All schedule dates are stored as UTC but represent Perth midnight (Australia/Perth, UTC+8, no DST). The helper perthStartOfDay normalises dates so timezone changes never shift an item to a different calendar day.