commit 993cac529f9f99698f28651f5e273efa3f58874e Author: data Date: Mon Apr 6 00:48:39 2026 +0200 Initial: UniVault Projektplan und Architektur diff --git a/README.md b/README.md new file mode 100644 index 0000000..b004b10 --- /dev/null +++ b/README.md @@ -0,0 +1,96 @@ +# 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