# 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) -> `` 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