📋 Was Cool_DB Catta alles kann
Eine kompakte Übersicht aller Features — gruppiert nach Bereichen.
Cool_DB-Catta (Einträge)
- Passwörter, Notizen, Dateien
- Anhänge direkt in DB (BLOBs)
- Kategorien mit Icons
- Verschlüsselung sensibler Daten
- Volltextsuche
ToDos Erweitert
- Mehrere Listen
- Subtasks (Unteraufgaben)
- Prioritäten 🔴🟡🟢
- Recurring (täglich/wöchentlich/monatlich/…)
- Listen-Ansicht + Kanban
- Drag & Drop Sortierung
- Subtask-Edit (✏️) Neu
- Subtask Auto-Save beim Klick raus Neu
- Subtasks in Termin-Mail mitversendet Neu
- Klick auf Titel öffnet Detail-Panel Neu
- Notiz-Feld passt Höhe automatisch an Neu
Reminder-System Killer
- 🌅 Am Fälligkeitstag (5 Uhr morgens)
- ⏱ X Min vor Uhrzeit (punktgenau)
- ⏰ X Tage vorher (2 separate)
- 🔄 Recurring mit Full-Reset
- 📬 E-Mail via GMX SMTP
Kalender-Export
- ICS-Datei herunterladen
- Direkt an Mail senden
- Google Kalender-Link
- Recurring-Events unterstützt
- Dauer konfigurierbar
Shopping-Listen Erweitert
- Einkaufslisten getrennt
- Artikel als erledigt markieren
- Via ICS als Termin exportierbar
- Sortierung beibehalten
- Mehrzeilige Eingabe (Komma + Newline) Neu
- Mail-Direktversand auch ohne Speichern Neu
Dashboard
- Heute fällig · Überfällig
- Anstehende (Woche/Monat/…)
- Ein-Klick ✅ Erledigt
- Ein-Klick 🗓🗑 Termin entfernen
- Ein-Klick 🗑 Komplett löschen
- Status-Filter (Offen/In Arbeit/Erledigt)
- ÜBERFÄLLIG-Kachel klickbar Neu
- Items-Layout: Header oben, Titel volle Breite Neu
- Statistiken-Widgets
UI & Themes
- 🌙 Dark-Theme (Standard)
- ☀️ Light-Theme (Creme)
- 🌓 Auto (System-Einstellung)
- 📱 Mobile-optimiert (2-zeilig)
- 👆 Touch-Ziele 44px+
Sicherheit
- 2FA per E-Mail (OTP)
- Session-Cookies
- Passwort-Hashing (bcrypt)
- CRON_KEY-Schutz
- Intern-only (VPN-Zugang)
Backup
- restic + rclone zu pCloud
- Täglich 03:00 automatisch
- Aufbewahrung: 14 Tage / 8 Wo / 12 Mo
- Verschlüsselt (Repo-Passwort)
- Proxmox-Backup zur Synology
- Auto-Rotation der .bak-* Dateien (max. 3 pro Datei) Neu
Netzwerk & Zugriff
- LAN-Zugriff direkt
- WireGuard VPN On-Demand
- Automatisch bei mobilem Netz
- Heim-WLAN als ausgenommen
Mail-System
- UTF-8 für Umlaute
- Sprechende Absender-Namen
- · Login · Termin · Einkauf
- GMX SMTP via msmtp
- 📧-Markierung bei versendeten Termin-Mails
- GMX-Filter sortiert in Termin/Erinnerung-Ordner
- Priorität in Termin-Mails sichtbar Neu
- Notiz + Subtasks in Termin-Mails Neu
- Log unter /var/log/msmtp.log
Quick-Tab Erweitert
- Notiz-Feld direkt beim Erfassen
- Priorität (🟢/🟡/🔴) auswählbar
- Multi-Artikel im Einkauf
- Mail-Direktversand
Dokus-Tab Neu
- Schnellzugriff auf Kategorie "Dokus"
- Tab erscheint dynamisch
- Versteckt sich automatisch wenn Kategorie fehlt
Anhänge Erweitert
- Bis 100 MB pro Datei (vorher 2 MB)
- Direkter Stream-Download
- Vorschau bis 12 MB, größere Dateien zeigen Hinweis
- MariaDB max_allowed_packet auf 128 MB
Cron-Jobs
- Minütlich: Reminder-Check
- Täglich 03:00: pCloud-Backup
- Täglich 03:15: .bak-* Rotation
- Logs in /var/log/syslog
- Robuste Zeitzone Europe/Berlin
Admin-Dashboard Neu
- Live-Status auf einen Blick
- App, DB, Backup, Cron, Disk
- Reminder-Status, Logs
- Aufruf:
/admin.php - Read-only — sicher
🏆 Der Weg von IONOS zu Proxmox
Eine Migration, die sich gelohnt hat.
🎯 Warum überhaupt Migration?
🔔 Das Killer-Feature: Das Reminder-System
Vier verschiedene Reminder-Typen arbeiten parallel an einem einzigen ToDo:
| Typ | Wann? | Wofür? |
|---|---|---|
| 🌅 Am Fälligkeitstag | 5:00 morgens | Tages-Übersicht |
| ⏱ X Min vor Uhrzeit | Minuten vor Termin | „Gleich geht's los" |
| ⏰ Erinnerung 1 | X Tage vorher | Langfristige Planung |
| ⏰ Erinnerung 2 | X Tage vorher (2.) | Doppelte Sicherheit |
🚀 Was diesen Build besonders macht
Maßgeschneidert
Jedes Feature ist für einen realen Workflow gebaut — nicht für „Benutzer allgemein".
Privacy-First
Alle Daten bleiben auf dem eigenen Server zuhause. Kein Cloud-Zwang.
Robust
Automatische Backups zu pCloud, Recurring mit Full-Reset, 10-Min-Fenster gegen Cron-Ausfall.
Schnell
LAMP-Stack, MariaDB, keine fetten Frameworks. Lädt in < 1 Sekunde.
Mobile-First
iPhone-Layout aufgeräumt: 2 Zeilen pro ToDo, Touch-Ziele, Wochentag vor Datum.
Wartbar
Nur ~6.000 Zeilen PHP/JS/CSS. Alles überschaubar und anpassbar.
📈 Was in der Migration alles dazu kam
- Minütliche Reminder (statt 15-Min-Takt)
- "X Min vor Uhrzeit"-Reminder (neu!)
- Theme-Toggle Dark/Light/Auto
- Mobile-optimiertes Dashboard
- Ein-Klick-Aktionen (✅ 🗓🗑)
- Sprechende Absender-Namen
- UTF-8 in allen Mails
- pCloud-Backup via restic
- VPN On-Demand für unterwegs
- Homescreen-Icon (wie native App)
📖 Wie benutze ich Cool_DB Catta?
Praktische Anleitungen für den Alltag.
🔐 Einloggen
1Öffne die App via Homescreen-Icon oder http://192.168.178.121
2Passwort eingeben → ein OTP-Code kommt per Mail
3Code eintippen → eingeloggt
✅ Ein ToDo mit Reminder anlegen
1ToDo-Liste öffnen (Menü → gewünschte Liste)
2"+ Neue Aufgabe" → Titel eingeben
3Aufgabe aufklappen (Expander)
4Datum + Uhrzeit setzen → 💾 Speichern
5Bei Reminder-Optionen:
- 🌅 "Am Fälligkeitstag" (Checkbox) — Default an
- ⏱ VOR UHRZEIT — Minuten vorher (z.B. 15)
- ⏰ ERINNERUNG 1 / 2 — Tage vorher (z.B. 7 / 1)
6💾 bei jeder Zeile einzeln speichern → Toast bestätigt
📧 Termin als Mail an sich selbst senden
1ToDo / Eintrag mit Datum öffnen
2Im Expander: Goldener Button "📧 Termin an mich"
3Ein Klick → Mail mit ICS-Anhang in deinem GMX-Postfach
🔄 Wiederkehrende ToDos
1ToDo mit Datum anlegen
2Im Dropdown "Einmalig" → wähle z.B. "Monatlich"
3💾 Speichern
🎯 Dashboard-Aktionen
Auf dem Dashboard kannst du ToDos direkt abhaken ohne in die Liste zu wechseln:
1Dashboard öffnen
2Bei jedem ToDo/Item siehst du 3 Icons rechts:
- ✅ — als erledigt markieren (direkt)
- 🗓🗑 — Termin + alle Reminder entfernen (mit Bestätigung)
- 🗑 (rot umrandet) — ToDo komplett löschen Neu
✏️ Mehrzeiliger Editor Neu
Beim Bearbeiten von ToDo-Titeln und Cool_DB-Einträgen öffnet sich ein hübsches Modal mit großem Textbereich:
1Klick auf das ✏️-Symbol bei einem ToDo (oder Cool_DB-Eintrag)
2Modal öffnet sich mit großer Textarea (mehrzeilig möglich)
3Cmd+Enter = Speichern, Esc = Abbrechen
📥 GMX-Filter für Cool_DB-Mails Neu
So sortieren sich Reminder-Mails automatisch in Unterordner:
1Im GMX-Webmailer eigene Unterordner anlegen: Termin + Erinnerung
2Einstellungen → Filterregeln → 2 Regeln anlegen:
- Regel 1: Absender = scatta@gmx.de UND Betreff enthält "Termin:" → Ordner Termin
- Regel 2: Absender = scatta@gmx.de UND Betreff enthält "Erinnerung:" → Ordner Erinnerung
🛠 Admin-Dashboard Neu
Live-Status der gesamten Cool_DB-Infrastruktur auf einer Seite:
1Im Browser aufrufen: http://192.168.178.121/admin.php
29 Status-Karten zeigen alles:
- App-Status (Apache, MariaDB, PHP)
- DB-Größe + Anzahl aller Tabellen
- Backup-Status (Restic-Lauf, Snapshots)
- Cron-Jobs, Disk-Verbrauch
- Backup-Files, Reminder, Logs
⚡ Quick-Tab: Notiz + Priorität Neu
Im Quick-Tab kannst du beim ToDo-Erfassen direkt eine Notiz und Priorität setzen:
1Quick-Tab → ToDo-Reiter
2Titel eingeben
3📝 Notiz-Textarea (3 Zeilen, optional) — Zusatzinfos
4🚦 Priorität: 🟢 Niedrig · 🟡 Mittel · 🔴 Hoch
🛒 Mehrere Einkaufs-Artikel auf einmal Neu
Im Quick-Tab → Einkauf kannst du jetzt mehrere Artikel mit einem Klick erfassen:
1Eingabefeld ist Textarea (mehrzeilig)
2Eingabe-Möglichkeiten:
- Komma-Trennung:
Brot, Milch, Eier - Zeilen-Trennung: jeweils Enter zwischen Artikeln
- Mischung: beides geht
3"+ Zur Liste hinzufügen" → alle Artikel auf einmal angelegt
✏️ Unteraufgaben (Subtasks) Neu
Subtasks sind kleine Teil-Aufgaben innerhalb eines ToDos. Pro Subtask gibt's:
- ✏️ Editieren — öffnet das große Textarea-Modal
- ✕ Löschen
- ▢ → ✓ Abhaken
📖 Dokus-Tab Neu
Schnellzugriff auf alle Cool_DB-Einträge der Kategorie "Dokus":
1Oben in der Tab-Leiste: 📖 Dokus (zwischen Cool_DB und ToDo)
2Klick → Cool_DB öffnet sich automatisch mit Filter "Dokus"
📎 Anhänge bis 100 MB Neu
Datei-Anhänge zu Cool_DB-Einträgen sind bis 100 MB pro Datei möglich (vorher 2 MB).
🎨 Theme wechseln
1Burger-Menü (☰) oben links
2"🌓 Theme" auswählen
3Wähle: Dark / Light / Auto (Auto folgt System-Einstellung)
🔔 Wann kommen die Reminder-Mails?
| Reminder-Typ | Wann wird verschickt? |
|---|---|
| 🌅 Am Fälligkeitstag | 5:00 morgens des Fälligkeitstages |
| ⏱ X Min vor Uhrzeit | Exakt X Min vor der due_time (±60 s) |
| ⏰ X Tage vorher | Nächster Cron-Lauf sobald ≤ X Tage verbleiben |
🛠 Technische Architektur
Wie alles unter der Haube funktioniert.
🖥️ Architektur-Übersicht
📁 Datei-Struktur
/var/www/cool/
├── app.php ← Frontend (HTML/JS/CSS, ~5500 Zeilen)
├── api.php ← Backend-API (PHP, ~1900 Zeilen)
├── reminder.php ← Cron-Worker (~560 Zeilen)
├── admin.php ← Admin-Status-Dashboard (read-only)
├── docs.html ← Diese Dokumentation
└── config.php ← DB-Zugang, VAULT_FROM, VAULT_EMAIL
/etc/apache2/sites-available/
└── cool.conf ← Apache VHost
/etc/msmtprc ← SMTP-Credentials (GMX)
/etc/sudoers.d/cooldb-admin ← www-data Read-only Befehle
/etc/cron.d/cooldb-bak-rotate ← Tägliche .bak-* Rotation
/var/log/
├── msmtp.log ← Mail-Versand-Log
├── cooldb-backup.log ← Restic-Backup-Log
└── cooldb-bak-rotate.log ← Bak-Rotation-Log
/usr/local/bin/
├── cooldb-backup.sh ← mysqldump + restic → pCloud
├── cooldb-restore.sh ← Restore von Restic
└── cooldb-bak-rotate.sh ← Behält max. 3 .bak-* pro Datei
/var/lib/cooldb/last-backup.txt ← Zeitstempel letzter Backup-Lauf
/root/.restic-password ← Backup-Passwort (chmod 600)
🗄️ Datenbank-Schema
| Tabelle | Inhalt |
|---|---|
vault_items | Einträge (Passwörter, Notizen) |
vault_attachments | Anhänge als BLOBs |
vault_categories | Kategorien mit Icons |
vault_todo_lists | ToDo-Listen |
vault_todos | ToDos (inkl. 8 Reminder-Spalten) |
vault_todo_subtasks | Unteraufgaben |
vault_shopping_lists | Einkaufs-Listen |
vault_shopping_items | Einkaufs-Artikel |
vault_settings | UI-Einstellungen (z.B. Theme) |
vault_sessions | Login-Sessions |
🔔 Reminder-Spalten (vault_todos & vault_items)
| Spalte | Typ | Bedeutung |
|---|---|---|
reminder1_days | INT | Tage vor Fälligkeit (Reminder 1) |
reminder1_sent | TINYINT | Flag: bereits gesendet |
reminder2_days | INT | Tage vor Fälligkeit (Reminder 2) |
reminder2_sent | TINYINT | Flag: bereits gesendet |
reminder_on_due_day | TINYINT | Am Fälligkeitstag 5 Uhr? (1/0) |
reminder_due_sent | TINYINT | Flag: bereits gesendet |
reminder_minutes_before | INT | Min vor Uhrzeit (0-360, NULL = aus) |
reminder_time_sent | TINYINT | Flag: bereits gesendet |
mail_sent_at | DATETIME | Zeitpunkt Quick-Mail-Versand (zeigt 📧-Icon) Neu |
📦 Upload-Limits Neu
Konfiguration in /etc/php/8.4/apache2/php.ini + MariaDB:
| Setting | Wert | Bedeutung |
|---|---|---|
upload_max_filesize | 100M | Pro Datei max. 100 MB |
post_max_size | 100M | POST-Request Gesamtgröße |
max_allowed_packet (MariaDB) | 128M | DB-Insert/Select max. Größe (war 16 MB → blockierte Uploads) |
⬇️ Attachment-Download Neu
Zwei Endpoints für Anhänge:
| Endpoint | Zweck | Format |
|---|---|---|
?api=get_attachment&id=... | Vorschau (Bilder/PDFs) | JSON mit data:URI |
?api=download_attachment&id=... | Download | Direkter Stream mit Content-Disposition |
Vorschau wird ab 12 MB Dateigröße geblockt (Frontend-Check), um Browser-Hänger zu vermeiden.
⏰ Cron-Jobs
# /etc/crontab
* * * * * curl -s "http://192.168.178.121/reminder.php?key=..." >/dev/null 2>&1
0 3 * * * /usr/local/bin/cooldb-backup.sh >> /var/log/cooldb-backup.log 2>&1
# /etc/cron.d/cooldb-bak-rotate
15 3 * * * root /usr/local/bin/cooldb-bak-rotate.sh
reminder_minutes_before-Funktion sekundengenau. Die Last ist vernachlässigbar (< 50ms pro Lauf).
☁️ Backup-Strategie
# cooldb-backup.sh (vereinfacht)
mysqldump --all-databases > /tmp/db.sql
restic -r rclone:pcloud:Backups/CoolDB-Catta-Restic backup \
/tmp/db.sql /var/www/cool /etc/apache2 /etc/msmtprc
restic forget --keep-daily 14 --keep-weekly 8 --keep-monthly 12 --prune
| Aufbewahrung | Anzahl |
|---|---|
| Täglich | 14 Snapshots |
| Wöchentlich | 8 Snapshots |
| Monatlich | 12 Snapshots |
📂 Backup-Files Rotation Neu
Jeder Patch-Lauf legt eine .bak-*-Sicherheitskopie an. Damit das nicht ausartet, läuft täglich um 03:15 ein Cleanup:
# /usr/local/bin/cooldb-bak-rotate.sh
# Behält pro Basis-Datei (app.php, api.php, etc.) die 3 neuesten Backups.
# Gruppierung: alles vor ".bak-" → eine Gruppe.
# Rest wird gelöscht, Aktion in /var/log/cooldb-bak-rotate.log protokolliert.
🛠 Admin-Dashboard Neu
Read-only Status-Übersicht unter http://192.168.178.121/admin.php
| Karte | Inhalt |
|---|---|
| 🟢 App-Status | Apache, MariaDB, PHP-Version, VM-Hostname/IP |
| 💾 DB-Status | Datenbankgröße, Anzahl Items/ToDos/Listen/Anhänge/Kategorien |
| 📦 Backup | Letzter Restic-Lauf, Snapshot-Anzahl, Aufbewahrung, Log-Auszug |
| ⏰ Cron-Jobs | root crontab + /etc/cron.d/-Liste |
| 💿 Disk-Verbrauch | VM-Root /, /var/www/cool, /var/backups, /var/log |
| 📂 Backup-Files | Liste aller .bak-* mit Größe + Alter |
| 📧 Reminder-Status | Welche ToDos haben Reminder bereits versendet |
| 🔄 Bak-Rotate-Log | Letzte Rotation-Aktion |
| 📋 Apache-Error-Log | Letzte 15 Zeilen vom Server-Log |
/etc/sudoers.d/cooldb-admin erlaubt www-data nur eine enge Liste an Read-only Befehlen
(systemctl status, tail, crontab -l) ohne Passwort. So funktioniert das
Dashboard, ohne dass Apache root-Rechte hätte.
🔐 Sicherheit
Login-Flow
- Passwort + bcrypt-Hash
- 2FA: 6-stelliger OTP per Mail
- OTP-Gültigkeit: 5 Min
- Session-Cookie (httponly)
Netzwerk
- LAN-only Zugriff
- WireGuard für Remote
- Kein Public-Facing
- IONOS final deaktivierbar
Cron-Schutz
- CRON_KEY (48 Zeichen)
- Als URL-Parameter
- Prüfung in reminder.php
- Log-only bei Mismatch
Sudoers (Admin-Dashboard)
/etc/sudoers.d/cooldb-admin- Eng definierte Read-only Befehle
- Nur
systemctl is-active/status - Nur
tail -n <n> /var/log/... visudo -c-validiert
📬 Mail-Konfiguration
# /etc/msmtprc (gekürzt)
account gmx
host mail.gmx.net
port 587
tls on
auth on
user scatta@gmx.de
password ***
account default: gmx
Cool_DB_Catta · Login(OTP)Cool_DB_Catta · Termin(ICS/Reminder)Cool_DB_Catta · Einkauf(Shopping)Cool_DB_Catta Erinnerung(Reminder-Cron)
🕐 Zeitzone
# /etc/php/8.4/*/php.ini
date.timezone = Europe/Berlin
# Server
timedatectl set-timezone Europe/Berlin
📦 Stack
| Komponente | Version |
|---|---|
| Debian | 12/13 (VM) |
| Apache | 2.4.66 |
| PHP | 8.4 |
| MariaDB | 10.x |
| restic | 0.18.0 |
| rclone | aktuell |
| msmtp | System |
| WireGuard | FritzOS |