Read-only PRD for a coding agent
Projektname: Explorable.
1. Problem, goal & success metric
Projektname: Explorable. Problem: Studierende haben unstrukturierte Vorlesungsmaterialien (PDF, TXT, DOCX), in denen Zusammenhänge zwischen Themen verborgen bleiben. Ziel: Aus hochgeladenen Materialien wird automatisch eine hierarchische, interaktive Mindmap, in der Querverbindungen zwischen Dokumenten sichtbar werden. Erfolgsmessung: Ein Upload einer Vorlesung (bis 20 Dateien) ergibt in unter 2 Minuten eine nutzbare Mindmap; mindestens 70 % der Testnutzer finden in einer Testsitzung eine Verbindung zwischen zwei Dokumenten, die sie vorher nicht gesehen haben.
2. Users & roles
Nutzer: Eine Person pro Rechner (Studierende).
Rollen: Keine. Kein Rollen- oder Rechtemodell, keine Freigaben, kein Teilen.
Sichtbarkeit: Alle Projekte, Dokumente und Analysen sind nur auf diesem Rechner sichtbar.
3. Core workflows
Kern-Workflow:
- Die App öffnet sich mit der schmalen Leiste oben und der Mindmap über alle Projekte.
- Studierender lädt einzelne Dateien (PDF/TXT/DOCX/PNG/JPG) über den Button in der Leiste per Auswahldialog in ein Projekt hoch.
- Jedes Dokument wird direkt nach dem Upload automatisch analysiert: Text extrahieren (bei reinen Bildern per Tesseract-Texterkennung), Schlüsselkonzepte erkennen und in die Clusterung eingliedern. Es gibt keinen separaten Analyse-Button; geänderte Dateien werden nur durch erneuten Upload neu analysiert.
- Ein Projekt erscheint in der Mindmap erst, wenn die erste Datei fertig analysiert ist; die Mindmap wird erst aktualisiert, wenn die Analyse des jeweiligen Dokuments abgeschlossen ist. Nie wird ein halbes Ergebnis angezeigt.
- Erst nach Abschluss der Analyse schlägt die App Tags aus dem erkannten Inhalt vor; der Nutzer übernimmt, ändert oder löscht sie.
- Pipeline clustert Konzepte Bottom-Up zu einer Hierarchie (Detail → Makro-Oberthema).
- Dokumente mit gemeinsamen Tags/Überschneidungen erzeugen gewichtete Brücken zwischen Clustern.
- Studierender erkundet die Mindmap: Zoomstufen, Filter über die Leiste, Custom Paths, Knoten und Tags, Wechsel zwischen Tag-Modus und Dokumenten-Modus.
- Klick auf einen Knoten zeigt Zusammenfassung und verlinkt auf das Quelldokument.
4. Features & requirements
- Ausblenden per Klick: Ein Klick auf einen Projektbereich oder Dokument-Knoten blendet ihn aus; ein zweiter Klick blendet ihn wieder ein.
- Tag-Filter aus Vorschau: Ein Klick auf einen Tag in der Vorschau filtert die Mindmap sofort auf diesen Tag; ein zweiter Klick auf denselben Tag hebt den Filter auf.
5. Scope: must / later / never
Must:
- Lokaler Upload von PDF, TXT, DOCX, PNG und JPG pro Projekt
- Automatische Analyse direkt nach dem Upload
- Hierarchische Mindmap mit Projektbereichen und Dokumenten
- Brücken zwischen Dokumenten mit gemeinsamen Tags
- Zwei getrennte Ansichten: Tag-Ansicht und Dokumentansicht
- Ausblenden per Klick, Dokumentvorschau, Tag-Filter
- Fortschrittsanzeige pro Datei, Überspringen nicht lesbarer Dateien, Duplikat-Erkennung
Later:
- Erkennung geänderter Dateien ohne erneuten Upload
- Eigene Farben für Projektbereiche
- Alternative Sprachmodelle
Never:
- Login oder Konten
- Teilen zwischen Nutzern
- Übertragung an fremde Server
- Cloud-Hosting
6. Screens & UI
- Startansicht: Beim Öffnen wird die Tag-Ansicht gezeigt, damit du zuerst den Überblick über alle Themen hast, bevor du in einzelne Dokumente gehst.
- Hover über einen Knoten: Hervorgehoben werden der Knoten selbst und die Verbindungen zu seinen Nachbarn mit höherer Priorität. Priorität bedeutet: mehr gemeinsame Tags zwischen zwei Dokumenten, also stärkere Verbindung. Verbindungen mit niedrigerer Priorität bleiben unverändert.
- Klick auf einen Knoten: Es öffnet sich eine kurze Zusammenfassung mit einem Link zum Originaldokument.
7. Design system & visual style
Projektbereiche: Keine eigenen Farben pro Projekt. Es gilt die vorher festgelegte Grün-Beige-Farbpalette aus DESIGN.md; nur die Farbtokens aus tokens.css verwenden.
Tag-Filter-Hervorhebung: Der aktive Tag in der Filterleiste erhält den Messing-Akzent #A08A55 und zeigt den Hinweis "Filter: <Tag>".
8. Data model
| Entität | Felder |
|---|---|
| Projekt | id, name, erstellt_am |
| Dokument | id, projekt_id, dateiname, größe, dateityp, speicherpfad, analyse_status |
| Custom Path | id, projekt_id, name |
| Tag | id, name (eindeutig) |
| Dokument-Tag (Verknüpfung) | dokument_id, tag_id |
| Dokument-Custom-Path (Verknüpfung) | dokument_id, custom_path_id |
| Analyse-Ergebnis | id, dokument_id, konzepte, cluster_id, zusammenfassung |
Tags sind eine gemeinsame Liste; ein Tag wie 'Statistik' existiert nur einmal und wird über die Verknüpfungstabelle mehreren Dokumenten zugeordnet.
9. APIs & integrations
Lokale Komponenten:
- Tesseract: Texterkennung für reine Bilddateien (PNG, JPG), lokal und kostenlos.
- Ollama mit llama3.2 (3B) auf dem Standardport als Standardmodell; qwen2.5 (7B) als Alternative, wenn der Rechner genug Speicher hat. Lokal und kostenlos.
Keine Netzwerkübertragung von Dokumenten oder Bildern.
10. Auth, permissions & security
Authentifizierung: Keine. Kein Login, keine Registrierung, kein Konto.
Berechtigungen: Kein Rollenmodell; die einzige Person am Rechner hat vollen Zugriff.
Datenschutz: Uploads und Analyseergebnisse bleiben ausschließlich lokal, keine Übertragung an fremde Server.
11. Performance, privacy & accessibility
Performance: Ein Projekt mit 20 Dateien wird auf einem Rechner mit mindestens 16 GB RAM in unter 2 Minuten analysiert. Bei mehr Dateien steigt die Zeit proportional.
Datenschutz: Alle Daten bleiben lokal auf dem Rechner; keine Übertragung an fremde Server.
Barrierefreiheit: Nicht festgelegt; Assumption: Grundlegende Tastaturbedienung und ausreichende Kontraste nach DESIGN.md.
12. Edge cases & errors
- Fehlerhafte Datei: Kann eine Datei nicht gelesen werden, wird sie übersprungen; die übrigen Dateien werden weiter analysiert. Am Ende meldet die App jede übersprungene Datei mit Dateiname und Grund.
- Doppelter Upload: Hat eine hochgeladene Datei denselben Namen und dieselbe Größe wie eine bereits gespeicherte Datei im Projekt, wird sie nicht erneut gespeichert. Die App zeigt eine kurze Meldung an.
13. Stack & constraints
Lokale Datenbank: SQLite als eine Datei auf dem Rechner für Projekte, Tags, Custom Paths und Analyse-Ergebnisse.
Lokaler Dateispeicher: Ein Ordner auf dem Rechner für die hochgeladenen Originaldateien.
Lokale Dienste: Tesseract für Texterkennung bei Bildern, Ollama mit llama3.2 (3B) als Standard oder qwen2.5 (7B) als Alternative für die Konzepterkennung. Kein Hosting, kein Login, keine Cloud.
14. Existing code & do-not-change
Not needed: neues Projekt
15. Build order
- Upload und Projekte
- Textextraktion
- Konzepterkennung mit Ollama
- Mindmap-Aufbau
- Interaktion (Ausblenden, Vorschau, Tag-Filter)
- Start und Offline-Betrieb
16. Acceptance criteria & tests
- 7 must-haves but only 1 acceptance checks
- Fährst du mit dem Mauszeiger über einen Knoten, werden der Knoten und die Verbindungen zu Nachbarn mit höherer Priorität hervorgehoben, Verbindungen mit niedrigerer Priorität bleiben unverändert.
17. Deployment, environments & secrets
Ausführung: Lokal auf einem einzelnen Rechner, kein Hosting, kein Server im Netz. Die App läuft vollständig offline.
Start: Ein Startbefehl öffnet die App im Browser unter einer lokalen Adresse (z. B. http://localhost). Beim Start prüft die App, ob Ollama läuft; ist es nicht aktiv, startet die App Ollama automatisch auf dem Standardport mit.
Voraussetzungen: Ollama mit dem gewählten Sprachmodell (llama3.2 3B oder qwen2.5 7B), Tesseract für OCR, mindestens 16 GB RAM.
Umgebungen: Nur eine Umgebung (lokal). Keine Geheimnisse oder API-Schlüssel nötig.
18. Open questions & assumptions
Default: Isolation per Klick, zweiter Klick hebt auf.
Default: Dateiänderungen werden nicht erkannt; geänderte Dateien müssen neu hochgeladen werden.
Default: Ollama wird beim Start automatisch mitgestartet; die App läuft vollständig offline.
Default: Scope und Build-Reihenfolge sind wie oben festgelegt; Barrierefreiheit beschränkt sich auf Tastaturbedienung und Kontraste nach DESIGN.md.
Offen: Ob die Konzepterkennung ohne Ollama als Fallback existiert, ist festgelegt: nein, neue Analysen werden blockiert.