Files
CRM/README.md
Kroonk 38cc4c09ca
All checks were successful
Build & Push Docker Image to Gitea Registry / build-and-push (push) Successful in 29s
feat: build CRM image in Gitea registry
2026-05-22 16:01:39 +02:00

140 lines
5.9 KiB
Markdown

# 🤝 MischCRM - Personal Relationship Manager
Willkommen bei **MischCRM**, deinem eleganten, privaten und vollautomatisierten Beziehungsmanager (Personal CRM). Diese Anwendung wurde entwickelt, um lose Textnotizen (z. B. aus Obsidian) durch eine intuitive, saubere Web-Oberfläche zu ersetzen, mit der du deine Freundschaften, gemeinsamen Treffen, offenen Gesprächsthemen und Meilensteine mühelos verwalten kannst.
Das gesamte System läuft **vollständig lokal und privat** ohne externe Tracker oder Cloud-Dienste auf deinem Server (z. B. MischNAS).
---
## ✨ Features
* **Premium Glassmorphism Dark Theme**: Ein luxuriöses, modernes Interface mit Outfits-Schriftart, Radial-Glows, Unschärfe-Effekten (`backdrop-filter`) und flüssigen Mikro-Animationen.
* **Interaktives Ehre-Rating**: Ein dynamisches Ehre-Zähler-Modul (+/- Buttons) direkt auf den Profilkarten und im Detailbereich mit spürbarem UI-Feedback.
* **Schnell-Log für Treffen**: Trage mit wenigen Klicks Treffen direkt vom Dashboard oder aus einem Freundesprofil ein (Aktivität, Stimmung/Vibe, detaillierte Gesprächsnotizen).
* **"Lange nicht gesehen"-Warner**: Eine automatische Liste auf dem Dashboard, die Freunde nach dem Datum des letzten Treffens sortiert und dich warnt, wenn du dich länger nicht gemeldet hast.
* **Geburtstags-Tabelle**: Zeigt anstehende Geburtstage in den nächsten 30 Tagen an, berechnet die Tage bis zum Geburtstag und das neue Lebensalter.
* **Dinge zum Ansprechen (Gesprächsthemen-Checkliste)**: Verwalte offene Fragen, D&D-Ideen oder Themen für das nächste Treffen direkt auf dem Profil des Freundes.
* **Obsidian Markdown Import**: Ein intelligenter Parser, der Obsidian `.md`-Notizen einliest, YAML-Frontmatter und Überschriften analysiert und die Profildaten direkt in die SQLite-Datenbank überführt.
* **Dockerized Deployment**: Perfekt vorbereitet für das einfache Hosting auf deinem `MischNAS` mittels Docker und Docker Compose.
---
## 🚀 Lokale Installation & Entwicklung
### Voraussetzungen
* **Node.js** (v18 oder neuer)
* **npm** oder **pnpm**
### Setup
1. Installiere die Abhängigkeiten im CRM-Verzeichnis:
```bash
npm install
```
2. Starte den Server im Entwicklungsmodus (mit automatischem Reload bei Codeänderungen):
```bash
npm run dev
```
Der Server läuft nun auf [http://localhost:8085](http://localhost:8085).
---
## 🐳 Bereitstellung mit Docker (MischNAS)
MischCRM lässt sich mit einem einzigen Befehl per Docker Compose deployen.
### Starten
Führe folgenden Befehl im Verzeichnis aus, in dem sich die `docker-compose.yml` befindet:
```bash
docker compose up -d
```
Die Anwendung ist anschließend unter **[http://localhost:38090](http://localhost:38090)** erreichbar (Port `38090` auf dem Host wird auf Port `8085` im Container weitergeleitet).
### 💾 Daten-Persistenz & Backups
Das CRM verwendet **SQLite** zur Datenhaltung. Die Datenbankdatei `crm.db` wird im Host-Ordner `./data/` abgelegt, welcher in den Container gemountet wird (`/app/data`).
* **Kein Datenverlust**: Selbst wenn der Container gelöscht, geupdatet oder neu gebaut wird, bleiben alle deine Freunde, Treffen und Notizen in `./data/crm.db` sicher auf deinem Host-System gespeichert.
* **Einfache Backups**: Sichere einfach die Datei `./data/crm.db`, um ein vollständiges Backup deines CRMs zu erstellen.
---
## 📂 Obsidian Import Guide
Du kannst bestehende Markdown-Notizen aus deinem Obsidian-Vault direkt in MischCRM importieren. Kopiere dazu einfach den gesamten Text der Notiz in das Feld unter dem Tab **Obsidian Import**.
### Unterstützte Markdown-Struktur:
Der Parser ist optimiert auf folgende Struktur (siehe z. B. dein Notizenformat für *Aaron Lingel*):
```markdown
---
tags:
- Freund
---
## Allgemeines
- Name: Aaron Lingel
- Geburtstag: 13.08.1999
- Kontakt: +49 172 1821612
- Wohnort: Am schlaggraben 18, 71272 renningen
- Beziehungsstatus: FOREVER ALONE (aber hat mich)
- Familie: Mama Lingel und Papa Africano
- Ehre: +32
## Aktuelle Lebenssituation
- Arbeit/Studium: Studium / Arbeit
- Hobbys/Interessen: Ehrenbruder sein, D&D, Gaming
Auf der Suche nach neuen Abenteuern.
## Persönliche Meilensteine
- Hat ein stabiles Freundschaftsprofil bekommen
- Neue Wohnung bezogen
## Random Infos
- Lieblingsessen/-getränk: Pizza, Kaltgetränke
- Sonstige Infos: Bester Kumpel. Immer am Start.
```
### So funktioniert der Import:
1. Der Parser extrahiert den Namen aus dem Dateinamen oder dem Feld `Name:` unter `## Allgemeines`.
2. Geburtstage im Format `DD.MM.YYYY` werden automatisch in das Standardformat `YYYY-MM-DD` konvertiert.
3. Der Zähler für **Ehre** (z. B. `+32`) wird extrahiert und als Startwert festgelegt.
4. Alle Unterabschnitte werden den entsprechenden Datenbankspalten zugeordnet.
5. Nach dem Import kannst du direkt per Klick auf das neu erstellte CRM-Profil springen!
---
## 🛠️ Technologien
* **Backend**: Node.js, Express.js, SQLite (`sqlite3`)
* **Frontend**: Vanilla HTML5, CSS3 (luxuriöse HSL-Variablen, Backdrop-Filter), Vanilla JavaScript (SPA, state-driven rendering)
* **Icons**: Lucide Icons (per CDN geladen)
---
## Gitea Registry Deployment auf MischNAS
MischCRM soll auf der NAS nicht lokal gebaut werden. Der Build laeuft in Gitea Actions und pusht das fertige Image in die lokale Gitea Container Registry:
```text
git.mischlabs.de/mrdiderot/crm:latest
```
Die NAS zieht dieses Image per Docker Compose. Der universelle Watchtower kann es danach regelmaessig pruefen und bei neuen Images automatisch aktualisieren.
### Start und manuelles Update auf der NAS
```bash
cd /volume2/docker/mischcrm
git pull --ff-only
docker compose pull
docker compose up -d
```
Falls `docker compose up -d` lokal zu bauen beginnt, steht in der Compose noch `build:` statt `image:`. Korrekt ist:
```yaml
image: git.mischlabs.de/mrdiderot/crm:latest
```
Die SQLite-Daten bleiben ueber `./data:/app/data` persistent. Die Datei `./data/crm.db` darf nicht ins Git committed werden.