Skip to content

[FE-24] Room-door display page — /display/[workspaceId] (current & next booking) #1388

Description

@yusuftomilola

Overview

A cheap Android tablet on each meeting-room door showing "In use until 14:00 — Design Sync" or "Free until 15:30" — a signature touch of professionally-run spaces (Robin/Joan devices do exactly this). One always-on web page per room.

Tasks

  • New route frontend/app/display/[workspaceId]/page.tsx — standalone full-screen layout, no auth chrome. Auth approach: a signed display token in the query string (?token=) issued by an admin endpoint, or an authenticated device session — check what's simplest with the current guard setup; a tiny backend addition (read-only "current + next booking for workspace" endpoint, public with the signed token) is in scope for this issue — follow the [BE-34] token pattern.
  • Display states: FREE (green background; "Free until HH:MM" if a booking is upcoming, else "Free all day") and BUSY (red; booking title/member if permitted, time remaining, "Next: HH:MM–HH:MM").
  • Auto-refresh: poll every 30–60s + a clock that updates every second; screen never sleeps into a stale state (handle fetch failures by showing last-known data with a subtle stale indicator).
  • Huge typography readable from 3 meters; workspace name always visible; dark-friendly colors (tablets run 24/7).
  • Admin: a "Open display page" link (with generated token) per meeting room on /admin/workspaces.

Acceptance Criteria

  • The page reflects a new booking within one refresh cycle without any interaction.
  • Free↔busy transitions happen at the right minute (client clock + booking times).
  • Runs for hours without memory growth or dead intervals (test with the tab throttled/backgrounded).

Dependencies

Better with [BE-17] (hourly bookings); works with daily bookings meanwhile.

Notes for Contributors

Good first issue with a fun visual result. Comment below to be assigned.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions