Rename the web interface to Daynivo Kiosk Manager with the Daynivo logo
CI / test-bookworm (push) Failing after 3s
CI / test-latest (push) Successful in 32s

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>
This commit is contained in:
rothmanandClaude Opus 5.5 committed 2026-11-05 18:57:32 +01:00
1 parent e615f970bc
commit f30f602d4f
18 files changed
+20 -24

No files matched your search

+1 -1
View File
@@ -3,7 +3,7 @@
Lichte, onderhoudbare kioskdistributie voor de Raspberry Pi 3 (Model B/B+) Lichte, onderhoudbare kioskdistributie voor de Raspberry Pi 3 (Model B/B+)
op basis van Raspberry Pi OS Lite 32-bit (Bookworm of Trixie). Na het op basis van Raspberry Pi OS Lite 32-bit (Bookworm of Trixie). Na het
opstarten toont Chromium fullscreen één HTTPS-pagina. Beheer gaat via de opstarten toont Chromium fullscreen één HTTPS-pagina. Beheer gaat via de
webinterface **VoxIP Kiosk Manager** op `http://kiosk.local:8080`. webinterface **Daynivo Kiosk Manager** op `http://kiosk.local:8080`.
- Geen desktopomgeving: alleen een minimale X-server plus Chromium. - Geen desktopomgeving: alleen een minimale X-server plus Chromium.
- Herstelt zichzelf: browsercrashes, een vastgelopen pagina, netwerkuitval - Herstelt zichzelf: browsercrashes, een vastgelopen pagina, netwerkuitval
+1 -1
View File
@@ -1,7 +1,7 @@
<?xml version="1.0" standalone='no'?> <?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd"> <!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group> <service-group>
<name replace-wildcards="yes">VoxIP Kiosk Manager op %h</name> <name replace-wildcards="yes">Daynivo Kiosk Manager op %h</name>
<service> <service>
<type>_http._tcp</type> <type>_http._tcp</type>
<port>8080</port> <port>8080</port>
+1 -1
View File
@@ -9,7 +9,7 @@ samenwerken en waarom bepaalde keuzes zijn gemaakt.
- Raspberry Pi 3 Model B/B+ (1 GB RAM), Raspberry Pi OS Lite 32-bit - Raspberry Pi 3 Model B/B+ (1 GB RAM), Raspberry Pi OS Lite 32-bit
(Bookworm of Trixie), 24/7 in bedrijf. (Bookworm of Trixie), 24/7 in bedrijf.
- Eén HTTPS-pagina fullscreen in Chromium, zonder desktopomgeving. - Eén HTTPS-pagina fullscreen in Chromium, zonder desktopomgeving.
- Lokale webbeheerinterface (*VoxIP Kiosk Manager*) op poort 8080. - Lokale webbeheerinterface (*Daynivo Kiosk Manager*) op poort 8080.
- Geen klantspecifieke code: alles wat per klant verschilt staat in - Geen klantspecifieke code: alles wat per klant verschilt staat in
`/etc/voxip-kiosk/config.json` en kan bij uitrol via de bootpartitie `/etc/voxip-kiosk/config.json` en kan bij uitrol via de bootpartitie
worden meegegeven (`voxip-config.json`). worden meegegeven (`voxip-config.json`).
+1 -1
View File
@@ -115,7 +115,7 @@ for g in video render input audio; do
done done
getent group voxip >/dev/null || groupadd --system voxip getent group voxip >/dev/null || groupadd --system voxip
id voxip >/dev/null 2>&1 || useradd --system --gid voxip --home-dir /var/lib/voxip-kiosk --no-create-home \ id voxip >/dev/null 2>&1 || useradd --system --gid voxip --home-dir /var/lib/voxip-kiosk --no-create-home \
--shell /usr/sbin/nologin --comment "VoxIP Kiosk Manager" voxip --shell /usr/sbin/nologin --comment "Daynivo Kiosk Manager" voxip
for g in systemd-journal video; do for g in systemd-journal video; do
getent group "$g" >/dev/null && usermod -aG "$g" voxip getent group "$g" >/dev/null && usermod -aG "$g" voxip
done done
+1 -1
View File
@@ -1,7 +1,7 @@
[project] [project]
name = "voxip-kiosk" name = "voxip-kiosk"
dynamic = ["version"] dynamic = ["version"]
description = "VoxIP Kiosk OS — kiosk runtime and VoxIP Kiosk Manager" description = "VoxIP Kiosk OS — kiosk runtime and Daynivo Kiosk Manager"
requires-python = ">=3.11" requires-python = ">=3.11"
[tool.pytest.ini_options] [tool.pytest.ini_options]
+1 -1
View File
@@ -1 +1 @@
"""VoxIP Kiosk OS — kiosk runtime and VoxIP Kiosk Manager.""" """VoxIP Kiosk OS — kiosk runtime and Daynivo Kiosk Manager."""
+1 -1
View File
@@ -64,6 +64,6 @@ def main() -> int:
paths = load_paths() paths = load_paths()
config = load_config(paths.config_file) config = load_config(paths.config_file)
argv = gunicorn_argv(paths, config) argv = gunicorn_argv(paths, config)
log.info("VoxIP Kiosk Manager start op poort %s (%s)", config["admin_port"], "HTTPS" if config["admin_https"] else "HTTP") log.info("Daynivo Kiosk Manager start op poort %s (%s)", config["admin_port"], "HTTPS" if config["admin_https"] else "HTTP")
os.execv(argv[0], argv) os.execv(argv[0], argv)
return 1 # not reached return 1 # not reached
+1 -1
View File
@@ -1,4 +1,4 @@
"""VoxIP Kiosk Manager — Flask application factory.""" """Daynivo Kiosk Manager — Flask application factory."""
from __future__ import annotations from __future__ import annotations
+3
View File
@@ -37,6 +37,9 @@ h2 { font-size: 1.1rem; margin: 0 0 .9rem; }
.topbar { background: var(--navy); color: #fff; position: sticky; top: 0; z-index: 10; } .topbar { background: var(--navy); color: #fff; position: sticky; top: 0; z-index: 10; }
.topbar-inner { max-width: 1200px; margin: 0 auto; padding: 0 1rem; display: flex; align-items: center; gap: 1rem; min-height: 56px; flex-wrap: wrap; } .topbar-inner { max-width: 1200px; margin: 0 auto; padding: 0 1rem; display: flex; align-items: center; gap: 1rem; min-height: 56px; flex-wrap: wrap; }
.brand { display: flex; align-items: center; gap: .6rem; color: #fff; text-decoration: none; font-size: 1.1rem; margin-right: auto; } .brand { display: flex; align-items: center; gap: .6rem; color: #fff; text-decoration: none; font-size: 1.1rem; margin-right: auto; }
/* The Daynivo mark has navy parts that would vanish on the navy bar. */
.brand-mark { display: inline-flex; align-items: center; background: #fff; border-radius: 6px; padding: 3px 5px; }
.brand-mark img { display: block; height: 22px; width: auto; }
.mainnav { display: flex; align-items: center; gap: .25rem; flex-wrap: wrap; } .mainnav { display: flex; align-items: center; gap: .25rem; flex-wrap: wrap; }
.mainnav a, .mainnav button { color: #d6e2f3; text-decoration: none; padding: .45rem .7rem; border-radius: 6px; font: inherit; font-size: .95rem; background: none; border: 0; cursor: pointer; } .mainnav a, .mainnav button { color: #d6e2f3; text-decoration: none; padding: .45rem .7rem; border-radius: 6px; font: inherit; font-size: .95rem; background: none; border: 0; cursor: pointer; }
.mainnav a:hover, .mainnav button:hover { background: var(--navy-2); color: #fff; } .mainnav a:hover, .mainnav button:hover { background: var(--navy-2); color: #fff; }
+1 -1
View File
@@ -1,4 +1,4 @@
/* VoxIP Kiosk Manager — progressive enhancements. Every page works without JS. */ /* Daynivo Kiosk Manager — progressive enhancements. Every page works without JS. */
(function () { (function () {
"use strict"; "use strict";
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

-7
View File
@@ -1,7 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" role="img" aria-label="VoxIP Kiosk">
<rect x="2" y="4" width="28" height="19" rx="3" fill="#1d6fd8"/>
<rect x="5" y="7" width="22" height="13" rx="1.5" fill="#0b2545"/>
<path d="M10 10.5l3 6 3-6M18.5 10.5v6M21.5 16.5v-6h2a1.8 1.8 0 010 3.6h-2" fill="none" stroke="#fff" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/>
<rect x="13" y="23" width="6" height="3" fill="#1d6fd8"/>
<rect x="9" y="26" width="14" height="2.5" rx="1.25" fill="#1d6fd8"/>
</svg>

Before

Width:  |  Height:  |  Size: 543 B

+4 -4
View File
@@ -5,8 +5,8 @@
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="csrf-token" content="{{ csrf_token() }}"> <meta name="csrf-token" content="{{ csrf_token() }}">
<title>{% block title %}{{ title or "Beheer" }}{% endblock %} · VoxIP Kiosk Manager</title> <title>{% block title %}{{ title or "Beheer" }}{% endblock %} · Daynivo Kiosk Manager</title>
<link rel="icon" href="{{ url_for('static', filename='logo.svg') }}" type="image/svg+xml"> <link rel="icon" href="{{ url_for('static', filename='favicon.png') }}" type="image/png">
<link rel="stylesheet" href="{{ url_for('static', filename='app.css') }}?v={{ version }}"> <link rel="stylesheet" href="{{ url_for('static', filename='app.css') }}?v={{ version }}">
<script src="{{ url_for('static', filename='app.js') }}?v={{ version }}" defer></script> <script src="{{ url_for('static', filename='app.js') }}?v={{ version }}" defer></script>
</head> </head>
@@ -14,8 +14,8 @@
<header class="topbar"> <header class="topbar">
<div class="topbar-inner"> <div class="topbar-inner">
<a class="brand" href="{{ url_for('ui.dashboard') }}"> <a class="brand" href="{{ url_for('ui.dashboard') }}">
<img src="{{ url_for('static', filename='logo.svg') }}" alt="" width="28" height="28"> <span class="brand-mark"><img src="{{ url_for('static', filename='logo-mark.png') }}" alt="" width="34" height="22"></span>
<span><strong>VoxIP</strong> Kiosk Manager</span> <span><strong>Daynivo</strong> Kiosk Manager</span>
</a> </a>
{% if logged_in %} {% if logged_in %}
<button class="nav-toggle" type="button" aria-controls="mainnav" aria-expanded="false" data-nav-toggle> <button class="nav-toggle" type="button" aria-controls="mainnav" aria-expanded="false" data-nav-toggle>
+1 -1
View File
@@ -2,7 +2,7 @@
{% set title = "Eerste configuratie" %} {% set title = "Eerste configuratie" %}
{% block content %} {% block content %}
<section class="card card-narrow"> <section class="card card-narrow">
<h1>Welkom bij VoxIP Kiosk Manager</h1> <h1>Welkom bij Daynivo Kiosk Manager</h1>
<p>Stel eerst een uniek beheerderswachtwoord in. Je hebt daarvoor de <strong>setupcode</strong> nodig die op het <p>Stel eerst een uniek beheerderswachtwoord in. Je hebt daarvoor de <strong>setupcode</strong> nodig die op het
scherm van de kiosk staat (of via SSH: <code>sudo voxip-kiosk-ctl setup-code</code>).</p> scherm van de kiosk staat (of via SSH: <code>sudo voxip-kiosk-ctl setup-code</code>).</p>
{% if error %}<div class="alert alert-error" role="alert">{{ error }}</div>{% endif %} {% if error %}<div class="alert alert-error" role="alert">{{ error }}</div>{% endif %}
+1 -1
View File
@@ -1,4 +1,4 @@
"""Routes of the VoxIP Kiosk Manager.""" """Routes of the Daynivo Kiosk Manager."""
from __future__ import annotations from __future__ import annotations
+1 -1
View File
@@ -1,5 +1,5 @@
[Unit] [Unit]
Description=VoxIP Kiosk Manager (webbeheer) Description=Daynivo Kiosk Manager (webbeheer)
Documentation=file:///usr/share/doc/voxip-kiosk/README.md Documentation=file:///usr/share/doc/voxip-kiosk/README.md
After=network.target voxip-boot-import.service After=network.target voxip-boot-import.service
StartLimitIntervalSec=300 StartLimitIntervalSec=300
+1 -1
View File
@@ -176,7 +176,7 @@ def test_pages_render(logged_in, path):
resp = logged_in.get(path) resp = logged_in.get(path)
assert resp.status_code == 200, path assert resp.status_code == 200, path
body = resp.get_data(as_text=True) body = resp.get_data(as_text=True)
assert "VoxIP Kiosk Manager" in body and "9.9.9-test" in body assert "Daynivo Kiosk Manager" in body and "9.9.9-test" in body
def test_dashboard_masks_token(logged_in, paths): def test_dashboard_masks_token(logged_in, paths):