UniVault - Universelles Dokumenten- und Wissens-Management-System
| README.md | ||
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
- Projekt-Scaffold: NestJS Backend + Nuxt Frontend + Prisma Schema + Dockerfile
- Dokument-CRUD: Erstellen, Lesen, Bearbeiten, Loeschen mit Metadaten
- Datei-Upload: Drag-and-drop, Speicherung auf Filesystem
- TipTap Editor: Rich Text fuer direkte Eintraege (Rezepte, Briefe, etc.)
- Universal Viewer: Bilder, PDFs, Rich Text, Fallback-Download
- Tags + Kategorien: Flache Tags, einfache Kategorien
- Volltextsuche: MySQL FULLTEXT auf Titel + Beschreibung + extrahiertem Text
- Basis-Export: TipTap->PDF, TipTap->DOCX (Pandoc), Bild-Format-Konvertierung (Sharp)
- Docker-Deployment: Ein Container mit allen Deps, docker-compose fuer Portainer
- 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 Dateihandlingcomponents/UniversalViewer.vue- Viewer-Strategie nach MIME-TypeDockerfile- Container mit LibreOffice, Pandoc, Tesseract
Verifikation
docker-compose upstartet den Container erfolgreich- Frontend erreichbar unter http://192.168.155.1:8420
- Dokument erstellen (direkt + Upload) funktioniert
- Tags/Kategorien zuweisen und danach filtern
- Volltextsuche findet Inhalte
- Export: Direkter Eintrag als PDF und DOCX herunterladen
- Bild hochladen und in anderem Format exportieren