Abschnitt 3 aus docs/ideen.md, bis auf die Sicherungsziele. VERLAUF ALS CSV. Der Export konnte nur den Bestand; wer nachrechnen wollte, was ueber einen Zeitraum passiert ist, sass vor einer Tabelle, die nach 500 Zeilen umblaettert. Der Knopf sitzt in der Reiterleiste und holt den Verlauf, DER GERADE OFFEN IST -- zwei Knoepfe nebeneinander waeren die Frage "welchen von beiden?" an einer Stelle, wo die Antwort schon auf dem Bildschirm steht. Semikolon und CRLF wie beim Bestands-Export; das war dort nachgemessen worden. Gemessen an der ausgelieferten Datei: 5371 Zeilen, kein einziges nacktes LF. Ohne Anmeldung 401 -- die Route liegt hinter dem Waechter, was nach dem Sitzungs-Fehler von vorgestern ausdruecklich nachgeprueft wurde. MELDUNG BEI UPLOAD -- die Drossel ist der eigentliche Inhalt. Jeder Upload schiebt eine Frist von zwei Minuten nach hinten; erst nach der Ruhe geht EINE Nachricht raus. Ohne das waere die Funktion ein Schaden: 900 Fahrzeugbilder ergaeben 900 Nachrichten, Discord drosselt Webhooks, und wer danach eine echte Meldung bekommt, sieht sie nicht mehr. Gemessen: drei Uploads mit zehn Sekunden Abstand -> eine Meldung ueber drei Dateien. Ein einzelner Upload -> eine Meldung ueber eine Datei. Nur Token-Uploads, absichtlich. Was ueber das Dashboard hereinkommt, hat gerade jemand selbst hochgeladen und bestaetigt bekommen. Zurueckholen aus dem Papierkorb meldet gar nichts: das ist kein Neues, das ist ein Wiedergefundenes. Und derselbe Fehler wie bei 'platte' lauerte schon wieder: die Liste der Anlaesse steht im Server UND in der Oberflaeche, und der Server verwirft beim Speichern alles, was in seiner Liste fehlt -- ein Kreuzchen, das sich setzen laesst und beim naechsten Laden weg ist. Diesmal beide angefasst, in beiden steht jetzt ein Verweis auf die andere. Nachgemessen: vier geschickt, vier gespeichert. DECKEL AUF DEM PAPIERKORB. 30 Tage UND 20 GB, was zuerst greift. Wer 200 GB loescht, haelt sie sonst 30 Tage doppelt und merkt es erst, wenn die Platte voll ist. Geraeumt wird das AELTESTE zuerst -- dessen Versehen waere am ehesten schon aufgefallen. Ueber PAPIERKORB_MAX_MB verstellbar, und das nicht aus Bequemlichkeit: ein Deckel von 20 GB laesst sich nicht pruefen, ohne 20 GB zu loeschen. Mit 0.0002 MB nachgemessen -- vier Eintraege zu 422 Bytes, drei entfernt, uebrig blieb der NEUESTE. Danach zurueck auf 20 GB, gemessen 21474836480. NEBENBEI, DREIMAL DIESELBE SORTE FEHLER: "0.0 MB" fuer 422 Bytes, "0 KB" fuer 106 Bytes, "0.0 MB von 0.0 MB" beim Deckel. Es gab drei Byte-Formatierer, jeder mit anderer Untergrenze. Jetzt einer in meldung.ts, von Bytes bis GB, exportiert und von dash.ts mitbenutzt. Nachgemessen ueber alle Stufen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
7.5 KiB
Was noch ginge
Stand 12.08.2026. Diese Liste ist nicht eine Sammlung von allem, was denkbar wäre — sie ist das, was beim Bauen und Messen wirklich aufgefallen ist. Was hier steht, hat einen Grund; was keinen hatte, steht am Ende unter „Verworfen, mit Begründung".
Sortiert nach dem, was ich zuerst täte.
1 · Sicher wertvoll
Die Oberfläche auf dem Telefon — abgelehnt am 12.08.2026
Vom Betreiber verworfen: das Dashboard wird nicht mobil benutzt. Der Rest des Abschnitts bleibt stehen, damit die Messung nicht verlorengeht, falls sich das je ändert.
Gemessen: 18 Umbruchpunkte (sm:/lg:/xl:) im ganzen Frontend. Die
Galerie ist ein Raster und passt sich an — die vier Tabellen in Verlauf,
Token, Konten und Papierkorb nicht. Auf einem Telefon laufen sie seitlich
heraus.
Der Umbau ist keine Kosmetik: Karten statt Tabellenzeilen unterhalb einer Breite, so wie es die Galerie schon macht. Betrifft vier Dateien.
Lohnt sich nur, wenn du das Dashboard mobil aufmachst. Sonst ist es Arbeit für einen Bildschirm, den niemand benutzt.
Sitzungen beenden können
Gemessen: 86 offene Sitzungen, davon 82 von admin — meine Testanmeldungen
von heute. Sie laufen nach 30 Tagen aus, und pruneSessions räumt stündlich
die abgelaufenen weg. Was fehlt, ist ein Knopf „alle anderen Sitzungen
beenden" im Kontomenü.
Das ist mehr als Ordnung: wer sich an einem fremden Rechner angemeldet hat und es später merkt, hat heute keine Möglichkeit, das zurückzunehmen — außer das Passwort zu ändern und zu hoffen, dass das die Sitzungen mitnimmt (tut es nicht, sie hängen an einer eigenen Tabelle).
Was der Verlauf nicht sieht
Gemessen: events kennt upload, replace, delete, move, rename —
alles über Dateien. Nichts über Einstellungen. Wer den Discord-Webhook
geändert hat, wer einen Token angelegt oder gelöscht hat, wer ein Konto
entfernt hat: steht nirgends.
Bei zwei Konten ist das verschmerzbar. Sobald ein drittes dazukommt — und über die Discord-Rolle entsteht es von selbst — ist es die erste Frage, die man stellt, wenn etwas anders ist als gestern.
2 · Nützlich, wenn der Fall eintritt
Massen-Umbenennen
Suchen und Ersetzen über Pfade, mit Vorschau vor dem Zuschlagen. Bei 3578 Items ist eine Umbenennung von Hand keine.
Der Anlass wäre etwa: items/ nach inventar/ verschieben, oder eine
Namenskonvention ändern. Heute geht das nur Datei für Datei oder gar nicht.
Die Warnung wäre dieselbe wie beim Ordner-Umbenennen — jede alte Adresse gibt danach 404 —, nur mal tausend.
Bilder beim Ablegen verkleinern
Eine Obergrenze für die Kantenlänge, einstellbar je Token. Wer ein 6000 × 4000 großes Foto hochlädt, bekommt es auf, sagen wir, 2048 gerechnet.
Gemessen und deshalb keine Dringlichkeit: ein 12000 × 12000 großes PNG hat den Dienst nicht in Verlegenheit gebracht — Vorschau in 374 ms, Speicher bei 47 MB von 31 GB. libvips arbeitet kachelweise und dekodiert nie das ganze Bild. Es geht also um Plattenplatz und Ladezeit beim Ausliefern, nicht um Stabilität.
Fehlende Bilder finden
Eine Liste hereinreichen (Fahrzeugmodelle, Item-Namen) und beantwortet bekommen: wozu fehlt ein Bild? Heute beantwortet das niemand — das Fotostudio weiß, was es aufgenommen hat, der Dienst weiß, was liegt, und die Differenz rechnet niemand aus.
Das wäre ein Endpunkt, der eine Liste entgegennimmt und die fehlenden zurückgibt. Klein, und die Antwort auf „warum zeigt das Handy bei manchen Autos kein Bild".
Einstellungen aus- und einlesen
Discord-Zugang, Sicherungsziel, Vorlagen, Meldungsanlässe — alles steht in
settings und ist beim Neuaufsetzen von Hand nachzutragen. Ein Export als JSON
(ohne die Geheimnisse, oder mit einer ausdrücklichen Ansage) macht aus
einer Stunde Klickerei fünf Minuten.
3 · Wäre schön, drängt nicht
Verlauf als CSV — gebaut am 12.08.2026
GET /api/dash/verlauf/export, wahlweise ?was=verwaltung. Der Knopf sitzt in
der Reiterleiste und holt den Verlauf, der gerade offen ist — zwei Knöpfe
nebeneinander wären die Frage „welchen von beiden?" an einer Stelle, wo die
Antwort schon auf dem Bildschirm steht.
Semikolon und CRLF wie beim Bestands-Export, und aus demselben Grund: Excel in deutscher Einstellung nimmt bei Komma alles in eine Spalte und bei nacktem LF die halbe Datei in eine Zelle. Gemessen an der ausgelieferten Datei: 5364 Zeilen, 5364 CRLF, kein einziges nacktes LF.
Meldung bei Upload — gebaut am 12.08.2026
Mit Drossel, und die ist der eigentliche Inhalt. Jeder Upload schiebt eine Frist von zwei Minuten nach hinten; erst nach der Ruhe geht eine Nachricht raus, mit Anzahl, Summe, Absendern und den ersten fünf Pfaden.
Ohne das wäre die Funktion ein Schaden statt eines Nutzens: 900 Fahrzeugbilder ergäben 900 Nachrichten, Discord drosselt Webhooks, und wer danach eine echte Meldung bekommt, sieht sie nicht mehr. Ein Serienlauf ergibt jetzt eine Zeile, ein einzelnes Bildschirmfoto ergibt eine Zeile — beide sagen dasselbe, nur mit anderen Zahlen.
Der Anlass heißt upload und ist abschaltbar wie die anderen drei. Die
Liste steht an zwei Stellen (Server und Oberfläche) — genau die Verdopplung,
die bei platte schon einmal ein Kreuzchen verschluckt hat; deshalb steht
jetzt in beiden ein Verweis auf die andere. Nachgemessen: vier geschickt, vier
gespeichert.
Papierkorb mit Größendeckel — gebaut am 12.08.2026
20 GB. Beim Ausleeren wird erst nach Alter geräumt (30 Tage) und dann nach
Größe, das Älteste zuerst — dessen Versehen wäre am ehesten schon
aufgefallen. Die Grenze steht in der Antwort von /api/dash/papierkorb, damit
die Oberfläche sie nicht ein zweites Mal hinschreibt.
Bei 910 GB frei ist das heute keine Grenze, sondern eine Zusicherung: der Papierkorb kann nicht mehr unbemerkt zur zweiten Ablage werden.
Mehrere Sicherungsziele — offen
Die Archive liegen auf derselben Platte wie die Daten, die Kopie in der Nextcloud ist die einzige Trennung.
Verworfen, mit Begründung
Diese standen auf der Liste und sind gemessen wieder heruntergefallen. Sie stehen hier, damit sie nicht beim nächsten Mal wieder aufschlagen.
| Idee | Warum nicht |
|---|---|
| Doppelte Dateien zusammenführen | 5 Gruppen, 0,0 MB verschwendet. Es gibt nichts zu holen. |
| Aufräumen nach Alter | Alle vier Altersstufen im Bericht stehen auf 0 Dateien. Es ist nichts alt. |
| Grenze für Bildmaße als Schutz | 12000 × 12000 → 374 ms, 47 MB. libvips streamt, die Gefahr gibt es nicht. |
| Plattenplatz-Wächter | Gebaut. 80/90/95 %, meldet nach Discord. |
| Kontingent je Token | Gebaut, auf beiden Upload-Wegen geprüft. |
| Eigene Statusseite bauen | /status reicht — der d4rkbot zeigt sie schon an. |
Und was heute noch schnell repariert wurde
pruneEvents lief nie von selbst. Die Funktion gibt es seit dem ersten Tag
und sie räumt Ereignisse älter als 180 Tage weg — aufgerufen wurde sie aber nur
von /maintenance/prune-sessions, einem Weg, den nicht einmal die Oberfläche
anbietet. Die dokumentierte Aufbewahrung griff damit nie, und die Tabelle
wuchs für immer.
Zum Vergleich: pruneSessions hängt seit jeher an einem stündlichen Takt. Das
eine war verdrahtet, das andere nicht, und der Unterschied fiel niemandem auf,
weil beide in derselben Zeile stehen.
Gemessen: nach einem Tag mit Umzug und Serienlauf standen 5355 Zeilen in
events. Läuft jetzt täglich, mit zwei Minuten Verzögerung nach dem Start.