Schedule

The schedule app handles the programming schedule end-to-end: calls for papers, panel submissions, selection, placement, and public display.

What it does

  • Calls for papers / submissions — an ingest form (authored through the form builder) collects panel proposals. A schedule-form-component-basic-details field carries the panel’s name/description.

  • Panels & slotsPanel (with form data), placed into Slots (room + time), organized by Category, Track, and Room.

  • Rooms, categories, tracks — first-class, editable entities. Categories support wayfinding arrows for signage.

  • Panel interest & responses — attendees express interest; organizers manage panelist responses.

  • Editors — multiple surfaces: a form editor, a slot editor, and a Kendo Scheduler-based editor (schedule-editor2).

  • Digital signageDigitalSignageDisplay drives public-facing schedule screens with configurable layouts.

  • Static pagesStaticPage provides custom Markdown pages for public views.

  • Import / export — XLSX import (schedule__import_xlsx) and export for round-tripping with spreadsheet-driven workflows.

  • Schedule check-in — panel/event check-in.

Status workflow

Panel submissions follow a status machine analogous to vendor applications (submitted → selected/rejected → placed/archived).

Key models (subset)

Event
  └─ Category / Track / Room
  └─ Panel (data: JSONField) → Slot
        ├─ Interest / Comment
        └─ responses
  └─ DigitalSignageDisplay
  └─ StaticPage

Where to look

  • Models: schedule/models.py

  • Views: schedule/views.py

  • URLs (under /app/schedule/): schedule/urls.py

  • Frontend: ui/src/app/apps/schedule/ (and form components under register-form-components/primatives/schedule-*)

  • Note: Panel.save() has a retrieve_from_data(...) helper that drills into the form JSON — see the form-system concept for how that extraction works (and how it’s hardened against non-dict entries).