Creator Content
Celebrate the content creators in your community. Zander's Watch page automatically aggregates live streams and videos from designated creators and surfaces them at /watch - giving your community a single place to discover and support content made on your network.
Internally, this feature is called the Watch module (routes/watchRoutes.js, controllers/watchController.js) - "Creator Content" and "Watch" refer to the same feature.
📸 Screenshot: The /watch page showing a grid of live streams and recent videos from community creators
For Players​
Browse community streams and videos at /watch. The page shows:
- Live now - up to 50 currently-live Twitch streams from community creators, most recently started first
- Recent videos - a paginated grid (12 per page) of the latest YouTube uploads
All data is public and unauthenticated - no login is required to browse. Use the Discord /watch command to get a direct link to the Watch page without leaving Discord (the command simply links out; it doesn't call the API itself).
Want to appear on the Watch page? Link your Twitch or YouTube account in your profile settings, then ask a staff member to grant you the zander.watch.creator permission.
For Staff​
Creator Setup​
To add someone as a featured creator:
- Confirm their Minecraft account is linked to Zander.
- Ask them to connect their Twitch or YouTube account from their profile settings.
- Grant them
zander.watch.creatorin LuckPerms:/lp user <username> permission set zander.watch.creator true
The creator's content will begin appearing on the Watch page once Zander next checks their stream or channel and finds something matching the configured filters (see below). Eligibility is checked directly against LuckPerms each time - Zander looks at the user's own permission, their group membership, and one level of group inheritance - so there's no separate on/off switch to manage elsewhere.
There is no dedicated admin dashboard for Watch. Whether someone counts as a creator is controlled entirely through LuckPerms permissions, and checking for new streams/videos, filtering, and expiring old entries all happen automatically on a schedule - day-to-day, this module needs no admin attention beyond the initial config.json filter setup and OAuth credentials.
Content Filtering​
Not all content from a creator is shown automatically - it must match the configured filters to prevent off-topic content from appearing.
Configure filters in config.json:
"watch": {
"contentChannelId": "CHANNEL_ID",
"contentPingRoleId": null,
"filters": {
"twitch": {
"titleMarkers": ["#cfc", "[cfc]"],
"tags": ["cfc"]
},
"youtube": {
"tags": ["cfc"],
"descriptionMarkers": ["#cfc"]
}
}
}
Content appears on the Watch page if it matches any filter for its platform:
| Platform | Filter Type | How to Match |
|---|---|---|
| Twitch | titleMarkers | Stream title contains the marker (e.g. #cfc) |
| Twitch | tags | Stream has a matching tag |
| YouTube | tags | Video has a matching tag |
| YouTube | descriptionMarkers | Video description contains the marker |
Instruct creators to include the appropriate marker in their stream titles, tags, or descriptions to have their content appear.
Discord Notifications​
When new creator content is detected, Zander can post a notification to a Discord channel:
- Set
contentChannelIdinconfig.jsonto the channel where notifications should be posted. - Set
contentPingRoleIdto a role ID to ping that role with each notification, or leave asnullto post without a ping.
📸 Screenshot: A Discord notification showing a new creator stream going live, with title, thumbnail, and a "Watch Now" link
OAuth Setup​
Twitch and YouTube integrations require OAuth credentials in .env:
| Variable | Where to Get It | Description |
|---|---|---|
twitchClientId | Twitch Developer Console | OAuth2 application client ID |
twitchClientSecret | Twitch Developer Console | OAuth2 application client secret |
googleClientId | Google Cloud Console | OAuth2 client ID (YouTube Data API) |
googleClientSecret | Google Cloud Console | OAuth2 client secret |
youtubeApiKey | Google Cloud Console | YouTube Data API v3 key |
Background Checks​
Two automatic, scheduled jobs keep the Watch page up to date:
| Job | What It Does |
|---|---|
watchTwitchCron | Checks Twitch for active streams from linked creators |
watchYoutubeCron | Checks YouTube for new video uploads from linked creators |
Zander keeps a record of each stream and video it finds, and remembers what it's already announced, so a given stream or upload only triggers a Discord ping once. A temporary in-game tip announcement can also be created (expiring after 2 hours by default).
Despite the similar name, this Discord-notification path is unrelated to the site's in-app Notifications inbox - the two systems don't share code.
Feature Toggle​
"watch": false
Disabling this makes /watch show a "page not found" error and stops Zander from checking Twitch and YouTube for new content.