- .github/workflows/release.yml: a tag vX.Y.Z runs the tests, publishes
daynivo-kiosk-os-X.Y.Z.tar.gz (+ .sha256) and install-online.sh as a
Gitea release, then builds the SD image with pi-gen and attaches it.
- install-online.sh: curl | sudo bash installer for the latest release.
- voxip-kiosk-updater: checks the latest release, verifies and unpacks a
newer one under /opt/daynivo-kiosk-os and runs its update.sh. A daily
timer checks around 03:00 and installs when auto_update is on.
- Web interface: Systeem -> Software-updates with the auto-update switch,
check now and install now (helper verbs update-check / update-install).
- CI checks out with plain git, so it runs on Gitea's act_runner too.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Product name (Daynivo Kiosk OS), default device name, kiosk screens,
service descriptions, installer output and docs. Internal names
(voxip-kiosk-*, /etc/voxip-kiosk, user voxip, VOXIP_* variables) stay.
An update renames a device still called "VoxIP Kiosk" to the new default.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Daynivo mark sits on a small white tile in the navy bar, where its
navy parts would otherwise disappear; the favicon is Daynivo's too.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
With no address on any interface (cable out, no wifi) the kiosk now
switches to the offline screen right away and returns when the network
and server are back. An unreachable server with the network up still
leaves the page running for InfoFlow's offline cache. The panel on the
local pages loses its blue top edge.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Own plymouth theme (logo centred on white), quiet kernel command line
without boot text, Raspberry logos or cursor, and no firmware rainbow
square. The initramfs is only rebuilt when the theme changes;
uninstall.sh restores the previous theme.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Dark grey background, name top left, date and clock top right, a flat
panel with a blue top edge. The pages show the kiosk link (token masked)
and the management address; the clock code is shared in kiosk.js.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The actions are now on every page in the same place instead of a button
row that differed per page.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Without a connected monitor every Chromium start waited 30 s for one, so
DevTools was unreachable for ~35 s after a restart. Only wait right after
boot. The reload error now says Chromium may still be starting.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Navy as the only accent, secondary buttons for restart/shutdown, the
destructive action as a red outline, status colour only in the badge
dot, no underline on the active nav item.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ProtectKernelTunables, ProtectKernelModules and LockPersonality imply
NoNewPrivileges for a non-root unit, so sudo refused to start the helper
(hostname, reboot, network changes all failed). Guarded by a test.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
On a Pi OS Desktop image lightdm keeps display :0 until the next reboot,
so the kiosk X server failed with 'server already running'. Disabled
display managers are recorded and re-enabled by uninstall.sh.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Chromium kiosk without a desktop for the Raspberry Pi 3, a Flask web
interface on port 8080 (kiosk, system and network management), a
restricted root helper, network changes with automatic rollback, a
healthcheck timer, install/update/uninstall scripts and a pi-gen image
build.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>