The kiosk/ directory contains a standalone page for Samsung SmartTVs that rotates between different content screens. It runs on older Tizen browsers (2018+) in landscape mode.
kiosk/index.html – HTML structure (Jekyll front matter layout: null)kiosk/style.css – Styles using display: table / table-cell layout for the event screenkiosk/kiosk.js – Screen rotation system, event display, sine scroller animationAll screens are sibling <div>s inside <body>. Only one is visible at a time (toggled via display: block / display: none). A central rotation loop cycles through a playlist.
body
├── #screen-events (two-pane event display)
└── #screen-welcome (logo + sine-scrolling text)
Welcome → Event 0 → Event 1 → … → Event N → Welcome → Event 0 → …
Each screen shows for 30 seconds. The welcome screen appears once per full cycle through all events.
<div id="screen-foo" class="screen"> in index.htmlstyle.cssscreens object in kiosk.js with activate / deactivate functionsbuildPlaylist()Welcome screen (#screen-welcome): Displays the StartupOulu logo with a demoscene-style sine-wave text scroller. The text scrolls right-to-left with each character’s Y-coordinate animated via Math.sin(). Animation starts on activate, cleans up on deactivate.
Events screen (#screen-events): Two-pane layout showing event details (title, date, location, description, countdown) on the left and the event cover image with a QR code on the right.
const/let, arrow functions, template literals, fetch, or Promisesgap, no min(), no object-fitdisplay: table / table-cell with position: absolute for bottom-pinned elementsvh/vw units for resolution independence (720p, 1080p, 4K)setInterval + element.style updates (no CSS animations)data-auto-track="false" to avoid inflating pageview statskiosk-heartbeat event on each page load (every 30 min auto-refresh)/kiosk/?s=lobby?s= is not set, no analytics are tracked (useful for local testing)bundle exec jekyll serve → open /kiosk/