Skip to main content

Events

Zander's event system gives your team a structured way to plan, review, and publish community events - from casual game nights to tournaments - with optional Discord sync, template-driven scheduling, and a clear approval workflow.

note

📸 Screenshot: The public events page showing upcoming event cards with titles, dates, and host names


For Players​

Community events are listed publicly at /events - the next 6 upcoming published events, plus a paginated (12/page) list of all published events past and future, newest first. Each event shows:

  • Event title and description
  • Start and end time
  • Host(s), with avatars
  • Location - a Discord voice channel, a Minecraft server, or free text
  • Tags and external links
  • A link to add the event to your calendar

Each event also has its own page with full details. Players only ever see events that staff have finished reviewing and made public - anything still being drafted, waiting for approval, or marked private stays invisible on the public site. Players can't submit their own events; only staff can create them, through the dashboard.

tip

Check the events page regularly for upcoming community activities. Events are published once they have been reviewed and approved by staff.


For Staff​

Staff manage events through Dashboard → Events.

Event Lifecycle​

Every event moves through a defined set of stages before it is published:

StageDescription
DraftCreated but not yet ready for review - visible only to staff
Pending ReviewSubmitted for approval - awaiting sign-off from a reviewer
ApprovedApproved and ready to publish
PublishedLive and visible to the public at /events
CancelledCancelled after publication - remains visible with a cancelled status
ArchivedClosed out after completion
RejectedSent back to the creator with a note; returns to Draft

Approving an event immediately makes it public and lines up any announcements for it. If you need to change an event that's already public, use Update Published - it keeps the event live while applying your changes, and makes sure Discord and the website pick up the update.

note

📸 Screenshot: The event dashboard list view showing events at various lifecycle stages

Creating an Event​

  1. Go to Dashboard → Events → Create.
  2. Fill in the Details tab: title, event type, visibility, start/end date-time, timezone, description, location (Discord voice channel / Minecraft server + IP / other free text), tags, an optional "From Template" selector, and a featured toggle.
  3. Fill in Branding (banner image + logo/thumbnail), Hosts (linked accounts or Discord users, each with a role), Actions (in-game commands to run via the bridge executor on publish/update/cancel), and Announcements (see below).
  4. Save as a draft, then click Submit for Review when ready.

Required fields to create a draft: title, startAt, endAt.

Draft or rejected events can be edited by their creator (with edit permission) or any reviewer. Once an event is pending review, approved, or published, only reviewers can edit it.

Approving Events​

The review queue is at Dashboard → Events → Review and requires zander.web.events.review.

ActionDescription
ApproveApproves the event and immediately publishes it, scheduling its announcements
RejectSends the event back to Draft with an optional note for the creator
Revert to DraftReviewers can also manually send an event back to Draft
note

📸 Screenshot: The review queue showing pending events with approve/reject actions

Cancelling, Archiving, and Duplicating​

ActionWhen to Use
CancelThe event is no longer happening. An optional reason can be recorded; any pending announcements are cancelled too.
ArchiveThe event has concluded. Removes it from the active events feed.
DuplicateClones any event into a new draft - useful for recurring events that aren't yet templated.

Event Templates​

Templates let you set up a recurring event once - say, a weekly game night - and have Zander automatically create a new draft event for it on schedule, so you don't have to rebuild it from scratch each time.

Dashboard → Events → Templates (requires zander.web.events to view, .edit to create/edit).

Creating a Template​

  1. Create a new template with a title.
  2. Define the event structure (description, hosts, actions, announcements).
  3. Set a day-of-week-based recurrence schedule.

Auto-Generation​

Every hour, Zander checks your templates in the background and:

  1. Checks for active templates whose next-generate time has passed.
  2. Creates a new draft event from the template.
  3. Updates the template's next generation timestamp.
  4. Cleans up any stale template-generated drafts that were never published and whose scheduled time has already passed.
note

📸 Screenshot: The event templates page showing active recurring templates with their schedules

All auto-generated drafts still go through the normal review and approval workflow before being published.


Discord Sync and Announcements​

Events can optionally sync to Discord in two ways, configured per-event on the Actions tab:

  • Discord message - posts (and updates/cancels) a channel announcement message.
  • Discord Guild Scheduled Event - creates a native Discord scheduled event tied to the event.

Separately, an event can have announcements attached - reminders sent to Discord or shown in-game (server list, chat tips, website banner, popup) before, during, or after the event. You choose when each one goes out (e.g. "1 hour before start") and write its message once.

Zander checks every minute in the background for announcements that are due and sends them. The target Discord channel is configured in config.json:

"events": {
"discordChannelId": "CHANNEL_ID"
}

Permissions​

PermissionDescription
zander.web.eventsView the dashboard calendar/list/detail (read-only)
zander.web.events.editCreate events, edit draft/rejected events, create/edit templates
zander.web.events.reviewReview queue access, approve/reject/publish, edit approved/published/pending events (implies edit)

Feature Toggle​

"events": false

Disabling this hides the /events page and returns feature-disabled responses from all events API endpoints.