Initial: UniVault Projektplan und Architektur
This commit is contained in:
commit
993cac529f
1 changed files with 96 additions and 0 deletions
96
README.md
Normal file
96
README.md
Normal file
|
|
@ -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) -> `<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
|
||||||
Loading…
Reference in a new issue