Continuing the discussion from Discourse Calendar:
The Fedora Project currently has our own calendaring web app, Fedocal. It’s due for an update, and I’m thinking about whether we could replace it calendars on Discourse rather than rewriting the stand-alone app. This isn’t a feature request really, but rather a capturing of our use cases and what I see as missing as we evaluate what to do.
There are three important use cases I can see for Fedocal. If there are more, please let me know and I’ll add them to consideration.
- Scheduling meetings. This is by far the most important.
- Letting people share their availability. Currently we request that people with responsibility in the project enter this for vacations, but few people actually do it. (I, personally, find it just too cumbersome when I do remember.)
- Showing Fedora events like Flock to Fedora, Week of Diversity, or Release Parties. We don’t actually do this today.
- We tried to use Fedocal for the Flock conference schedule in 2013, but haven’t done that since. It’d be nice if we had a solution which made that appealing and easy.
- Showing the Fedora release schedule itself. Currently, I think we only use this to schedule the go/no-go meetings, not actually the schedule. If we would do this, it needs to come automatically from Fedora Project schedules rather than needing manual entry.
The “events” system being added to it is currently wrong for what we need. (It collects “events” from posts across the whole site and puts them on one single global calendar. We need way more than that.
My first assumption is that we’d focus on extending the “traditional” part of the calendar plugin, which has a calendar in the first reply to a topic which is “fed” by replies to that topic alone. However, it could be possible that the other approach — grabbing events across the site — would be better. In that case, though, we’d need to extend it to be able to have multiple calendars to target. (And in that case it’d be nice to be able to embed them in pinned topics, not just be hidden in the hamburger menu.)
So, that said, here’s some things we’d need:
- The calendar display itself is pretty rudimentary.
- It could be a lot prettier
- It doesn’t scale or adapt to how it’s being displayed in any way
- It is hard-coded to EU-style Monday-Sunday weeks
- It seems to always show days in UTC, even though the entries are in local timezones, making it so day-long events in a local timezone can look like they span two days on the calendar. (The Discourse team is aware of this bug.)
- The month-view currently only shows the first few characters of an event’s description. That’s fine if the calendar is just about one simple thing (see in use here for Fedora Social Hour, but not good for a calendar with a lot of different things.
- Currently, the “Holiday” version of the calendar can assign colors to events, but it does so using a value programatically derived from the username. This should instead be configurable on a per-event basis, and apply to all calendars not just the holiday one.
- I don’t think there’s an .ical feed? That’d be nice for people to be able to add to their Google Calendar or whatever.
- Nice to have: ability to generate reminder mails sent to mailing lists, not just subscribed users. We don’t have everyone on Discourse yet!
- Nice to have: a personal calendar view where you opt in to exactly what entries to track.
- Fedocal has two primary “axes” — the group that the calendar entry belongs to (like “council”) and the location (like “#fedora-meeting”). The calendar plugin can do one or the other: we can make a “Fedora Council Meetings” topic or a “Fedora Meeting Channel” topic, but entries wouldn’t be linked. I’m not really sure what the best design for that as a plugin would look like — I think we could use some UX designer expertise in thinking about that.
- it would be just fine if the “group” axis is Discourse groups, especially because we’re SOMEDAY SOON I HOPE going to get Discourse groups linked to our SSO.
- or, possibly, the calendar “group” axis could be a tag. That might be more flexible, and would work for us because we’re planning on a group-to-tag mapping for our site organization.
- the “locations” axis is short — we have a handful of meeting channels, and it’s probably sufficient to allow an “other” location for odd cases.
Critical: The system needs to prevent – or at least warn on – conflicts on both axis. That is, there can’t be two council-group meetings at the same time, and there can’t be two meetings from a different group in the same location at the same time.
- except if we have a catch-all “other”… so, I guess some locations should be able to have overlaps.
- The syntax for repeating events is kind of weird, but okay. However, repeating events just show up in the calendar grid as repeating (and in the reminder as updated to the next one), not anything more. And there should be more:
Critical: It should be possible for users subscribe to a notification for each repeating event, on a per calendar-entry basis.
- Nice to have: a per-Discourse-group configuration for the default notifications for a particular calendar, so e.g. members of the council group default to getting notifications for council calendar entries.
- Nice to have: ability to also configure 15-minute warning notifications for upcoming meetings
- Important: It should be possible to mark specific event as to be skipped (or to be held at a different time) without changing the whole thing
- Critical: It should be possible for users subscribe to a notification for each repeating event, on a per calendar-entry basis.
- Right now, event duration is done with entries like
[date=2021-11-28 time=12:00:00 timezone="America/New_York"] → [date=2021-11-28 time=13:00:00 timezone="America/New_York"]. That’s tedious to enter and the result (2021-11-28T17:00:00Z → 2021-11-28T18:00:00Z) not immediately obvious. It’d be nice to have
[date=2021-11-28 time=12:00:00 timezone="America/New_York" duration="1 hour"]instead.
- Nice to have: Entries without duration should be visually different — and perhaps only allowed for “whole day” entries.
- Nice to have: each calendar entry (separately for repeating ones) could have a link to an agenda + notes topic. This topic would not be automatically created without interaction, but should be easy to start with one click, and once created, linked automatically.
- The holiday calendar should also be group aware. Right now it has some special-casing for (Discourse site) Staff — that should be generalized and configurable, and different calendars allowed for different groups as well as a global one.
- In its default config, the holiday calendar shows standard national holidays for every person who has their locale configured. If that’s more than, like, five people in no more than two different locations, it overwhelms all else. Discourse has provided us with a temporary hack to hide that, though.
- Nice to have: Right now staff members get a emoji next to their username when they’re on vacation, only visible to other staff members. The visibility of this icon should be configurable.
Nice to have: allow configuration of which emoji is shown.
- Bonus nice to have: allow users to select from a list of emojis and reasons for a given unavailable time (vacation, sick, travel, etc.)
Actually, I think what we have today could work for this. However, some of the above — prettier and more flexible calendar display, notifications, colors — would be useful.
- Conference schedule use case is just the meeting schedule use case, but very intensely so. Manually keeping track of conflicts becomes impossible. For this, may need user-level axis instead of group-level axis. (Speakers can’t be in two places at once.) And unlike our meeting room locations, which haven’t changed much in 15 years (except for URL updates) and probably won’t in another 15, each event has its own set of locations.
- Release schedule calendar: I think this is mostly a matter of automation in importing from the existing schedule data. Existing calendar plugin could mostly work, I think. Again as with Fedora Events, color coding would be nice.