univault/README.md

96 lines
4.3 KiB
Markdown

# UniVault - Universelles Dokumenten-/Wissens-Management-System
## Context
Es gibt kein bestehendes Open-Source-Tool das universelle Dateispeicherung, direktes Erstellen von Inhalten, universelle Format-Konvertierung und einen einheitlichen Viewer kombiniert. Dieses Projekt schliesst diese Luecke als selbst-gehostete Loesung auf dem bestehenden Unraid-Server.
## Architektur
### Tech Stack
- **Backend**: NestJS 11 (TypeScript) + Prisma 6 ORM
- **Datenbank**: MySQL 8+ (bestehend auf 192.168.155.11)
- **Frontend**: Nuxt 3 + Vue 3 + Nuxt UI (Tailwind CSS)
- **Editor**: TipTap 2 (Rich Text, Tabellen, Bilder, Checklisten)
- **Konvertierung**: Sharp (Bilder), Pandoc (Dokumente), LibreOffice headless (Office)
- **OCR**: Tesseract 5 (deutsch)
- **Deployment**: Ein Docker-Container, docker-compose fuer Portainer
### Datenmodell
- **Dual-Storage**: Metadaten in MySQL, Dateien auf Filesystem (`/data/vault/{uuid}/`)
- **Direkte Eintraege**: TipTap JSON als kanonisches Format (verlustfrei zu HTML/PDF/DOCX konvertierbar)
- **Uploads**: Original-Datei wird byte-genau aufbewahrt (Fidelity-Garantie)
- **Metadaten**: Titel, Beschreibung, Tags, Kategorien (hierarchisch), Custom Fields, Datum
- **Versionierung**: Lineare Snapshots in DocumentVersion-Tabelle
### Konvertierungs-Engine
| Tool | Input | Output |
|---|---|---|
| Sharp | JPEG, PNG, WebP, TIFF, GIF, SVG | JPEG, PNG, WebP, TIFF, BMP |
| Pandoc | MD, HTML, DOCX, ODT, EPUB | DOCX, ODT, PDF, HTML, MD, TXT |
| LibreOffice | DOCX, XLSX, PPTX, ODS, ODT, CSV, legacy Office | PDF, DOCX, XLSX, ODS, CSV, Bilder |
Konvertierungs-Routing: Direct entries -> TipTap JSON -> HTML (static renderer) -> Pandoc -> Zielformat
### Frontend-Seiten
- Dashboard (letzte Dokumente, Schnellaktionen)
- Dokumentenliste (Suche, Filter, Grid/List-Ansicht)
- Dokumentendetail (UniversalViewer + Metadaten-Sidebar)
- Editor (TipTap fuer neue/bestehende Eintraege)
- Tag/Kategorie-Verwaltung
### Universal Viewer (nach MIME-Type)
- ImageViewer (Bilder) -> `<img>` mit Zoom
- PdfViewer (PDF) -> pdf.js
- RichTextViewer (Direkte Eintraege) -> TipTap read-only
- OfficeViewer (Office-Docs) -> Server-seitig zu PDF konvertiert
- TextViewer (TXT, CSV, MD) -> Syntax-Highlighting
- FallbackViewer -> Metadaten + Download-Button
## MVP (Phase 1) - Was zuerst gebaut wird
1. Projekt-Scaffold: NestJS Backend + Nuxt Frontend + Prisma Schema + Dockerfile
2. Dokument-CRUD: Erstellen, Lesen, Bearbeiten, Loeschen mit Metadaten
3. Datei-Upload: Drag-and-drop, Speicherung auf Filesystem
4. TipTap Editor: Rich Text fuer direkte Eintraege (Rezepte, Briefe, etc.)
5. Universal Viewer: Bilder, PDFs, Rich Text, Fallback-Download
6. Tags + Kategorien: Flache Tags, einfache Kategorien
7. Volltextsuche: MySQL FULLTEXT auf Titel + Beschreibung + extrahiertem Text
8. Basis-Export: TipTap->PDF, TipTap->DOCX (Pandoc), Bild-Format-Konvertierung (Sharp)
9. Docker-Deployment: Ein Container mit allen Deps, docker-compose fuer Portainer
10. Deutsche UI: Standard-Sprache Deutsch
## Phase 2 - Nach funktionierendem MVP
- Volle Konvertierungs-Matrix (LibreOffice fuer Office-zu-Office, Spreadsheets, Legacy-Formate)
- OCR-Pipeline (Tesseract fuer gescannte PDFs/Bilder, Deutsch)
- Thumbnail-Generierung fuer alle Dateitypen
- Text-Extraktion aus PDFs und Office-Docs
- Dokument-Versionierung
- Hierarchische Kategorien (Baumstruktur)
## Phase 3 - Nice-to-Have
- Custom Fields pro Dokument/Kategorie
- Bulk-Operationen (Multi-Select, Massen-Tagging)
- Template-System (Vorlagen fuer Rezepte, Briefe, Berichte)
- Duplikat-Erkennung (SHA-256)
- Papierkorb mit 30-Tage-Aufbewahrung
- Watch-Folder (Auto-Import aus ueberwachtem Verzeichnis)
## Kritische Dateien
- `prisma/schema.prisma` - Datenbankschema (Grundlage fuer alles)
- `src/conversion/conversion.service.ts` - Konvertierungs-Routing (komplexestes Stueck)
- `src/documents/documents.service.ts` - Kern-CRUD mit Dateihandling
- `components/UniversalViewer.vue` - Viewer-Strategie nach MIME-Type
- `Dockerfile` - Container mit LibreOffice, Pandoc, Tesseract
## Verifikation
1. `docker-compose up` startet den Container erfolgreich
2. Frontend erreichbar unter http://192.168.155.1:8420
3. Dokument erstellen (direkt + Upload) funktioniert
4. Tags/Kategorien zuweisen und danach filtern
5. Volltextsuche findet Inhalte
6. Export: Direkter Eintrag als PDF und DOCX herunterladen
7. Bild hochladen und in anderem Format exportieren