Docs

Everything the Pi needs, in one place.

The full manual ships with the product as its README. This page is the short version: what to have ready, how to install and upgrade, how to roll back, and where each thing lives.

Before you start

  • A Raspberry Pi 5 with Raspberry Pi OS Lite, 64-bit, on your network. The appliance arrives with this done.
  • Your calendar provider's access: for Google Workspace, a service account with domain-wide delegation that can read FreeBusy on each room calendar. For Microsoft 365, an Entra ID app registration with the application permission Calendars.Read and admin consent.
  • A hostname for the admin on your LAN, such as rooms.yourcompany.internal, and a laptop to install the private certificate on. Security keys need a real name over HTTPS.

Install

On the Pi, as a user who can use sudo:

git clone [REPOSITORY URL] lintel
cd lintel
sudo ADMIN_HOST=rooms.yourcompany.internal ./scripts/install.sh
sudo /opt/room-kiosk/bin/check.sh

The installer snapshots any existing install first, sets up the Python environment, nginx, the kiosk session and the certificate, and boots the board to the console. The check script reports every service in plain words.

First sign-in

Create the first owner on the Pi, then open the admin at your hostname. You will be asked for a password and then to enrol a security key or passkey, and shown ten recovery codes once. Store them. The brand wizard follows: name and logo, typeface, colours, three short steps.

sudo -u kiosk /opt/room-kiosk/venv/bin/python /opt/room-kiosk/backend/cli.py bootstrap-owner --username you --email you@yourcompany.com

Upgrade

cd lintel && git pull
sudo ADMIN_HOST=rooms.yourcompany.internal ./scripts/install.sh
sudo /opt/room-kiosk/bin/check.sh

Settings, users, media and the plugin secrets live outside the code and are untouched. The installer writes a snapshot to /var/backups/room-kiosk/ before it changes anything.

Roll back

sudo /opt/room-kiosk/bin/rollback.sh            # the latest snapshot
sudo /opt/room-kiosk/bin/rollback.sh --list     # every snapshot

Settings have their own history too: the last twenty saves are under System in the admin, and any of them can be restored with one click.

Plugins

Under Plugins in the admin: install one from the catalogue, grant what it asks for, turn it on, add its slide. Each row says what the plugin is doing and what to do next. Seven of the ten need no key. Keys and tokens are kept apart from settings, on the Pi, and never shown again.

Brand

Under Brand and theme: a logo (PNG, WebP or SVG), one of eight bundled typefaces or your own WOFF2, and six colours in three pairs. Every pair is checked against 4.5 to 1 as you type and on save. A saved theme reaches the board within one settings poll, without a restart.

Licence

Every board has a device code, LNTL-D-XXXX-XXXX-XXXX, on the admin's overview. Send it with your order and the key that comes back is made for that board; paste it into the overview, or on the Pi:

sudo -u kiosk /opt/room-kiosk/venv/bin/python /opt/room-kiosk/backend/cli.py licence set <key>

The key is checked on the Pi against a public key that ships with the product. Nothing is sent anywhere. Without a key the board works in full for thirty days, then its footer says "Unlicensed copy" and nothing else changes. Replacing the Pi? Send the old and new codes and the key is reissued at no charge. The appliance arrives with its key installed.

Try it on a laptop

./scripts/dev.sh demo

Demo mode runs the whole product with sample calendar data, a seeded deck and a demo account that signs in without a key, on your own machine only. It is how the pictures on this site were made.