diff --git a/app.py b/app.py
index 9c0b314..88604bc 100644
--- a/app.py
+++ b/app.py
@@ -23,7 +23,7 @@ from cryptography.fernet import Fernet, InvalidToken
from fastapi import FastAPI, Header, HTTPException, Request
from pydantic import BaseModel
-from fastapi.responses import FileResponse
+from fastapi.responses import FileResponse, HTMLResponse
LOG_PATH = Path("activation.log")
@@ -5822,6 +5822,35 @@ def health():
}
+# Startseite des Kiosks im Konto "Personalisierung" (ADR-0041, Rolle
+# personalisierung in ansible-content). Bis das Formular mit Aktivierungscode
+# steht, nur ein Hinweis. "tuxflotte:abmelden" fängt der Kiosk ab und beendet
+# die Sitzung.
+PERSONALISIERUNG_SEITE = """
+
+Personalisierung
+
+Personalisierung
+Hier wird bald ein persönliches Konto für dieses Gerät eingerichtet.
+Dafür brauchst du einen Aktivierungscode von der Verwaltung deiner
+Einrichtung. Die Einrichtung ist noch nicht freigeschaltet.
+Abmelden
+
+"""
+
+
+@app.get("/personalisierung", response_class=HTMLResponse)
+def personalisierung_seite():
+ return HTMLResponse(PERSONALISIERUNG_SEITE, headers={"Cache-Control": "no-store"})
+
+
@app.post("/api/v1/activate")
def activate(payload: ActivationRequest, request: Request):
# Enrollment Sessions zuerst versuchen (Auto-Modus-ISOs, siehe
diff --git a/migrations/0062_personalisierung_merkmal.sql b/migrations/0062_personalisierung_merkmal.sql
new file mode 100644
index 0000000..a3226c3
--- /dev/null
+++ b/migrations/0062_personalisierung_merkmal.sql
@@ -0,0 +1,23 @@
+BEGIN;
+
+-- ADR-0041, Ergänzung 14.10.2026: "Personalisierung möglich" als
+-- Katalogmerkmal, am Workspace vorgegeben und je OE/Gruppe/Gerät
+-- übersteuerbar. Die Rolle personalisierung richtet nur das Konto
+-- "Personalisierung" mit Kiosk am Anmeldebildschirm ein; personalisiert wird
+-- erst mit einem Aktivierungscode je Gerät.
+--
+-- Blueprints nur für LightDM-Backends (Mint, Debian). Für Ubuntu/GDM gibt es
+-- noch keinen Weg, das Merkmal soll dort nicht wählbar erscheinen.
+
+INSERT INTO merkmale (id, key, name, description, kategorie_id, im_auftragskatalog) VALUES
+ (gen_random_uuid(), 'personalisierung', 'Personalisierung möglich',
+ 'Am Anmeldebildschirm steht das Konto „Personalisierung“. Damit kann auf einem einzelnen Gerät mit einem Aktivierungscode der Verwaltung ein persönliches Konto eingerichtet werden. Ohne Code passiert nichts.',
+ (SELECT id FROM kategorien WHERE key = 'konfig-identitaet-netzwerk'), TRUE);
+
+INSERT INTO blueprints (id, merkmal_id, backend_id, ansible_role)
+SELECT gen_random_uuid(), m.id, b.id, m.key
+FROM merkmale m
+JOIN backends b ON b.key IN ('mint-image', 'debian-image')
+WHERE m.key = 'personalisierung';
+
+COMMIT;