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-detailsfield carries the panel’s name/description.Panels & slots —
Panel(with formdata), placed intoSlots (room + time), organized byCategory,Track, andRoom.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 signage —
DigitalSignageDisplaydrives public-facing schedule screens with configurable layouts.Static pages —
StaticPageprovides 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.pyViews:
schedule/views.pyURLs (under
/app/schedule/):schedule/urls.pyFrontend:
ui/src/app/apps/schedule/(and form components underregister-form-components/primatives/schedule-*)Note:
Panel.save()has aretrieve_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).