The problem
Schedule grids (example) are a way of displaying a collection of
events, some of which occur at overlapping times. They are often used
to show what is happening at a conference or other busy event with
multiple things going on simultaneously. They are tables where the
y-axis is time and the x-axis is sometimes arbitrary or sometimes some
concept of location (e.g., which room the event occurs in). Events are
rectangles spanning their start through end times and usually covering a
single column. This is a fairly standard display format for a calendar
application showing a single day's events.
I had a friend who needed schedule grids for their job as a teacher in a
(somewhat unusual) classroom that had a lot of small group activities,
keeping track of where every student and staff person was supposed to
be at all times. They were creating the grids using Google Sheets and
spending a lot of time on the layout manually rearranging the columns
and manually creating copies of the information to display both a
summary and separate schedules for each person.
One complication was that due to privacy laws around information about
students, I didn't want any of that data to be touching my server, both
because I shouldn't have that data and I don't want to be responsible
for promising the school district my server won't get hacked.
The solution
Schedule Grid Editor (source) is a
browser-based tool for creating printable schedule grids. While hosted
on my server, the tool works just as well entirely offline. It saves the
data in local JSON files (or locally in the browser using OPFS with
support for import/export of JSON files).
It maintains a weekly schedule, where each event may be recur on one or
more days of the week. Each event has some subset of the students and
staff assigned to it, and the logic checks that no one is expected to be
at two events simultaneously and that every student is assigned to some
event at all times. For each day of the week, it generates a schedule
with as few columns as possible showing all of the events. Additionally,
for each day of the week, for each person, it generates a single column
schedule showing just their events.