All checks were successful
Build & Push Docker Image to Gitea Registry / build-and-push (push) Successful in 29s
140 lines
5.9 KiB
Markdown
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.
|