feat: initial commit for MischCRM - full private custom personal relationship manager
This commit is contained in:
110
README.md
Normal file
110
README.md
Normal file
@@ -0,0 +1,110 @@
|
||||
# 🤝 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)
|
||||
Reference in New Issue
Block a user