Screens
On each Windows PC open
in kiosk mode β a pairing code appears here for approval.Screen groups
Groups organize screens (a screen can be in several). The parent tree also sets editor permissions: an editor scoped to a group manages that level and below.
| Status | Name | Group | Last seen | Now playing | Actions |
|---|
Monitoring wall
One tile per screen. Green = online, red = offline (no heartbeat for 90s). The thumbnail shows what online screens are currently playing; offline screens show OFFLINE instead of stale thumbnails.
Media library
sec
Streams: paste a live channel URL β an HLS
.m3u8, a YouTube watch/live link, or a channel's embed page. The duration is how long it stays on screen before the rotation moves on (streams default to 900s).Playlists
Click a playlist to expand it and see its media.
Schedules
Overlapping schedules play together, weighted by priority (High 3x, Normal 2x, Low 1x β like ad boost). Times use the server's timezone.
New schedule
none checked = every day
| Name | Playlist | Target | When | Priority | Sound |
|---|
Client requests
Change requests submitted from the client portal (
/portal). Clients see the status you set here. Urgent items still arrive by phone/WhatsApp.| Time | Client | Screen | Request | Attachment | Status |
|---|
Creative design requests
Design inquiries from the client portal. Deliver exactly 3 watermarked previews to consume 1 quota from the client's annual 30. Clients pick 1, get 2 tweak rounds, then confirm β the picked design goes straight into the scheduling queue. Original files are never handed to clients.
Design quotas & terms (signing-date terms, not calendar years)
Quota follows the client's signing date: a 12-month term from signing_date, renewal_date = signing_date + 12 months. Due within 30 days = yellow, overdue = red. Renew only after confirming payment β Renew sets a new signing date AND resets Used to 0 in one action. $20-tier clients have no annual quota; their designs are paid $45 each.
| Client scope | Tier | Signing date | Term | Renewal | Days left | Used | Total |
|---|
Requests
| Time | Client | Brief | Go-live | Previews | Deliver 3 previews | Billing / payment | Canva prompt | Status |
|---|
Client profiles
One profile per company (scope), not per login. Contact 2 is contact info only β it is NOT a second portal login and is never auto-emailed. Contact 1 email is for operational notifications only; billing lives in accounting software (no invoice is built in the CMS). Tier and signing date are admin-only.
| Scope | Company | Contact 1 | Contact 2 | Tier | Signing / renewal |
|---|
Play report
Proof-of-play: how many times each item played, per day or per 3-hour block, per location. π marks blocks covered by a boost window.
Alerts
Screen disconnects, internet loss and server-unreachable events.
| Time | Type | Screen | Message | Status |
|---|
Users
Admins can do everything. Editors can manage content, screens and alerts, but cannot change users or system settings.
| Username | Role | Scope | Created |
|---|
Audit log
Who did what, when. Latest 200 entries.
| Time | User | Action | Detail |
|---|
Settings
No-content message
Shown full-screen on a player when there is nothing to play (e.g. offline with no usable cached playlist). The player caches this, so it works while offline too.
Default playlist
Played when no schedule matches a screen.
Ad daily cap
Max times each ad plays per screen per day (individual ads can override this).
Email alerts
Send alert emails to each facility's contact when a screen goes offline, loses internet, or the server becomes unreachable. Uses a transactional email service (free tier): sign up at resend.com (100 emails/day free) or brevo.com (300/day free), create an API key, and paste it below. Each screen's contact email is set in Screens β Edit.
Info ticker
A weather / transit / news bar along the bottom of every screen β gives people a reason to look up. The server fetches the feeds on a schedule and caches them, so a slow provider never stalls playback. Weather: free, no key needed (Open-Meteo). Transit: free API key from the Winnipeg Transit Open Data portal (info.winnipegtransit.com β Open Data). News: any RSS feed, CBC Manitoba by default.
Push update
Tell every screen to re-check for new content right now (screens also check every 30s).