The public calendar and boards

An event lives in two places by default: the dashboard, which only managers open, and its RSVP panel, which only the people reading that channel see. Two surfaces widen that.

  • The public calendar is a web page at flavibot.xyz/calendar/<server ID> that anyone can open, with no Discord account and no login, plus a feed they can subscribe to. You choose, event by event, what goes on it.
  • A board is a message in one of your channels listing what is coming, edited in place as things change, so the schedule is never a pinned message three weeks out of date.

The two are independent. A server can run a board and publish nothing, or publish a page and never post a board.

Public or private

Every event carries a visibility, Public or Private, and it decides exactly one thing: whether the event appears on the server's public calendar page and in its public feed.

Private is the default, and a private event is not a hidden one. Whatever the visibility says:

  • the RSVP panel is posted in its channel, and sign-ups, the waitlist and the roster work as usual;
  • reminders, team invitations and the start announcement are sent as usual;
  • the native Discord scheduled event is created as usual;
  • members' Google Calendar entries and ICS feeds are written as usual.

Public adds a row to a page anyone can read, and nothing else. Reading the setting as a permission is the one mistake to avoid: marking an event private does not stop FlaviBot from telling people about it.

You set it in the event form, under Visibility: a Public / Private control that starts on whatever the server default says. The event's detail panel carries a badge, so reading a calendar tells you at a glance what is published. On a series, visibility is one of the shared details: set it on the series and the dates it posts are published with it.

Turning the page on

The Settings tab of the Events page has a Public calendar block:

SettingWhat it does
Public calendarWhether the page exists at all. Off by default
New events are publicThe default of the Visibility control on the create form. Off: you publish event by event
Public descriptionOne line under the server name on the page, up to 300 characters
Page addressflavibot.xyz/calendar/<server ID>, with a copy button

The switch and the default are independent, which is what lets you prepare: mark a few events public while the page is still off, then turn it on when the list looks right.

Switch it off and the address answers not found — deliberately the same answer as a server that never had a page, so nobody can tell one from the other by poking at addresses. Nothing is deleted and no event's visibility changes; switch it back on and the page returns as it was.

What a visitor sees

A header with the server's icon, name and public description, then the events themselves as a month grid or an agenda list, read-only: nothing to create, nothing to drag.

  • The page opens in the visitor's own timezone, read from their browser, and a selector switches to the server's zone or to any other one.
  • Clicking an event opens its details: when it is, in the zone on screen and in the event's own, the place, the description, how many people are going, the capacity when there is one, and "Every Tuesday" when it belongs to a series.
  • From there: Add to Google Calendar, Download .ics and, when the server has an invite FlaviBot knows about, Join the server.
  • Subscribe to this calendar gives the feed link described below.

The page covers the next 60 days and at most 200 events, and it is cached for a couple of minutes: an event created on the dashboard shows up there shortly after, not instantly.

Three kinds of event are never listed:

  • the ones marked Private;
  • cancelled events, and events that are already over;
  • the dates of a series that have no panel yet — the dashed occurrences of recurring events. The page lists real events, not projections. Raise Occurrences posted ahead if you want more of the season visible.

And for the events that are listed, the page carries the event and not the server: no channel, no link to the panel message, no hosts, no invited team, no required role, and none of the names of who answered. A visitor sees that an event exists, when it is, and how full it is.

The public feed

Subscribe to this calendar is an ICS feed of the same events, for a calendar app rather than a browser. It needs no account and carries no secret token — it is as public as the page, and it stops answering the moment the page is switched off.

That makes three feeds, with three different audiences:

FeedHoldsWho can read it
The public feed, on the public pageThe server's public eventsAnyone at all
The server feed, Settings > Calendar subscriptionEvery upcoming event of the server, private ones includedAnyone holding the secret link. Rotate it if it leaks
Your feed, on your profile pageEvery event you said Going to, in every serverAnyone holding the secret link

Subscribing works the same way for all three; the steps for Google Calendar, Apple Calendar and Outlook are in Google Calendar and ICS. The public one has nothing to rotate, since nothing about it is secret.

Channel boards

A board is one message, in one channel, listing the server's events for a period. FlaviBot keeps it correct on its own: nobody reposts it, nobody edits it by hand, and it does not scroll away into last month the way a pinned announcement does.

Creating one

Settings tab, Boards, then Add:

FieldNotes
ChannelA text channel. One board per channel
ShowsToday, This week, This month, or The next N events
How many1 to 25. Only The next N reads it; the other three are bounded by their period
TeamOnly the events attached to that team. Empty: every event
KindsTick the kinds to keep. None ticked: every kind
TitleThe heading of the message, up to 100 characters. Empty: a default one naming the period

A preview next to the form shows the message as Discord will render it. Save, and it is posted straight away.

What it reads like

One line per event: the kind's emoji and colour, the start as a Discord timestamp so every reader sees it in their own local time, the title, the going count, and the tally per slot on an event that has sign-up slots. Under the list, an "updated a few minutes ago" line. A period with nothing in it says so rather than leaving an empty message behind.

A board is a summary, not a second panel: members read it to know what is on and still answer on the event's own panel.

A board lists the events that match its filters whether they are public or private: visibility is about the web page, while a board is already inside the server, behind the channel's own permissions. A board in a staff channel shows the staff meetings. What keeps an event off a board is the channel you put the board in, its team filter or its kinds — not its visibility.

How it stays up to date

  • On every change to the server's events: created, edited, moved, cancelled, deleted, and on sign-ups too. A burst of answers is grouped, so a panel filling up nudges the board about every ten seconds rather than on every click.
  • Every fifteen minutes in any case. That is what rolls a Today board over at midnight, and what brings a board back into line after an outage.
  • If someone deletes the message, the next refresh posts a new one and forgets the old. Deleting the message is not how you remove a board.
  • Refresh now, on the board's row, when you would rather not wait.

Editing and removing

Edit reopens the same form and re-renders the message with what you changed. Delete removes the board and its message from the channel.

Limits and permissions

A server can run five boards, one per channel; the form refuses a channel that already has one and tells you so. FlaviBot needs View Channel and Send Messages in the board's channel — without them nothing is posted and the board's row keeps reading as never updated, so grant the permission and press Refresh now.

Written on