Read-only PRD for a coding agent
Biologie-Studierende brauchen ein Lernwerkzeug, das Simulationen (Enzymkinetik,…
1. Problem, goal & success metric
- Problem: Biologie-Studierende brauchen ein Lernwerkzeug, das Simulationen (Enzymkinetik, Räuber–Beute, Populationswachstum, DNA→Protein) mit einer lokalen Skript-Bibliothek und KI-gestützten Quizs/Zusammenfassungen vereint, ohne dass Skriptinhalte den Rechner verlassen.
- Goal: Eine einzige selbstenthaltene HTML-Datei (~110 kB), die per Doppelklick (file://) läuft, alle Inhalte lokal in localStorage speichert und nur explizite KI-Anfragen mit dem eigenen API-Key an einen OpenAI-kompatiblen Endpoint sendet.
- Success metric: Alle 11 Abnahmepunkte der Checkliste in Sektion 11 der Spezifikation sind erfüllt; die App funktioniert offline außer bei KI-Aufrufen und CDN-Laden von Chart.js/pdf.js/mammoth.
2. Users & roles
Keine registrierten Nutzer – die App läuft lokal im Browser einer einzelnen Person (Biologie-Studierende). Keine Rollen, kein Multi-User, kein Backend. Alle Daten bleiben auf dem Gerät.
3. Core workflows
- Nutzer öffnet die einzelne HTML-Datei
biowissenschaften-studio.htmlper Doppelklick (file://). - Wählt einen Tab: Simulationen, Skript-Bibliothek, Quiz-Studio oder Zusammenfassungen.
- Simulationen: Parameter per Slider einstellen, Charts berechnen live, Ergebnisse ablesen.
- Bibliothek: Dateien per Drag&Drop oder Klick hochladen, Name/Fach prüfen, dann speichern (kein Auto-Save). PDFs können optional per KI-Vision bildbeschrieben werden.
- Quiz-Studio: Skripte auswählen, Anzahl und KI-Konfiguration setzen, Fragen generieren oder Demo-Quiz starten, 5-Optionen-Fragen beantworten, sofortiges Feedback, Ergebnis anzeigen.
- Zusammenfassungen: Skripte auswählen, KI-Zusammenfassung anfordern (Begriffe, Kernaussagen, Gliederung), kopieren oder als neues Skript in die Bibliothek speichern.
4. Features & requirements
Zusammenfassungen: Skript-Auswahl (wie Quiz), KI-Zusammenfassung mit drei Ebenen (Schlüsselbegriffe 8–14, Kernaussagen 6–10, Gliederung mit Kernsatz), Kopieren-Button, „Als Skript speichern
5. Scope: must / later / never
- List the must-haves
- Name at least 2 things the agent must not build
List the must-haves; Name at least 2 things the agent must not build
6. Screens & UI
screens
7. Design system & visual style
Component library: kein externes Framework; reines Vanilla-HTML/CSS/JS in einer Datei, Chart.js 4.4.4 über CDN für Charts, pdf.js 3.11.174 + mammoth 1.9.0 lazy beim ersten PDF-/DOCX-Upload.
Colors (hex, exakt aus Spezifikation):
- --bg:#f2f7f3, --card:#ffffff, --ink:#16382a, --ink-soft:#40614f, --muted:#6d8a79
- --green:#2f855a, --green-dark:#1e5631, --green-deep:#123528
- --line:#dcecdc, --warn:#b3402a, --ok:#256b44
- Body-Hintergrund: --bg plus zwei radiale Verde-Gradienten (oben rechts #e2f2e6, unten links #e6f2e8)
- Font: "Segoe UI", system-ui, -apple-system, sans-serif; Basisgröße 15px.
- Corner radius: --radius:16px (Karten), Tabs 14px/9px, Buttons 12px, Inputs 10px, Segmented-Control 13px.
- Spacing: Karten-Innenabstand 22px 24px; Dropzone 28px Padding.
- Light/dark mode: nicht vorgesehen; nur heller Grün/Weiß-Look.
- Tone: professionell, akademisch, deutsch, ruhig, keine bunten Emojis.
- Reference apps: wissenschaftliche Lern-Tools (Anki, Quizlet) mit akademischem Green-Theme, aber ohne Spielerei; alle Symbole Inline-SVG-Strich-Icons (flask, books, question, note, paw, trend, dna, microscope, fileplus, file, gear, sparkles, save, pencil, image, folder, outline, key, pin, link, grid, copy, zap, search).
8. Data model
Entität: Bibliothek (biocampus_lib_v1)
| field | type | required | |||
|---|---|---|---|---|---|
| id | string | yes | |||
| name | string | yes | |||
| kind | "PDF" | "DOCX" | "TXT" | "MD" | yes |
| tag | string | no | |||
| size | number | yes | |||
| added | string (de-DE Datum) | yes | |||
| text | string (max 400.000 Zeichen) | yes |
Entität: KI-Konfiguration (biostudio_ki_cfg_v1)
| field | type | required |
|---|---|---|
| endpoint | string | yes |
| model | string | yes |
| key | string | no (nur wenn Checkbox aktiviert) |
9. APIs & integrations
OpenAI-kompatibler Chat-Endpunkt (Default OpenRouter https://openrouter.ai/api/v1, konfigurierbar z. B. https://api.openai.com/v1).
POST /chat/completions mit Authorization: Bearer <Key>, stream:false, Timeout 180 s.
Modell-Fallback-Ketten:
- Text: ["nvidia/nemotron-3-super-120b-a12b:free","google/gemma-4-26b-a4b-it:free","minimax/minimax-m3.1-flash:free"]
- Vision: ["google/gemma-4-31b-it:free","nvidia/nemotron-3.5-super-vl:free","google/gemma-4-26b-a4b-it:free","minimax/minimax-m3.1-flash:free"]
Bei 400/429/402/404 zum nächsten Modell springen (nicht bei fehlendem Key). jsonMode → response_format:{type:"json_object"}; bei HTTP 400 mit jsonMode Retry ohne response_format.
CDN-Abhängigkeiten: Chart.js 4.4.4 (Charts), pdf.js 3.11.174 + mammoth 1.9.0 (nur lazy beim ersten PDF-/DOCX-Upload). Keine weiteren Integrationen.
10. Auth, permissions & security
Keine registrierten Nutzer, keine Rollen, kein Backend, kein Multi-User. App läuft lokal im Browser einer einzelnen Person. Alle Daten bleiben auf dem Gerät (localStorage). API-Key wird nur im Browser gespeichert, wenn Checkbox „API-Key in diesem Browser speichern“ aktiviert; sonst nicht gespeichert. Keine Authentifizierung, keine Berechtigungen, keine Verschlüsselung über localStorage hinaus.
11. Performance, privacy & accessibility
Default: Performance <1 s Charts, Privacy keine Daten außer KI, Accessibility Fokusringe + ARIA + Kontraste.
12. Edge cases & errors
Default: kein Internet → CDN-Fehler stumm ignorieren, lokale Funktionen laufen; leerer localStorage → leere Bibliothek; fehlender API-Key → Demo-Quiz verfügbar, KI-Fehlertext; gescanntes PDF ohne Text → Fehlermeldung, kein Save; alle Vision-Seiten leer → Warnung und Abbruch ohne KI-Call; 429/402 → nächster Fallback-Modell; 180 s Timeout → AbortController mit „Zeitüberschreitung“.
13. Stack & constraints
Einzel-HTML-Datei ohne Build-Schritt und ohne Backend.
- Vanilla HTML/CSS/JS in einer Datei, keine externen Frameworks
- Chart.js 4.4.4 über CDN (nur für Charts)
- pdf.js 3.11.174 + mammoth 1.9.0 lazy geladen erst beim ersten PDF-/DOCX-Upload
- localStorage als einzige Datenhaltung auf dem Gerät
- Kein Server, kein Hosting, keine Umgebungsvariablen, keine CI/CD
- API-Key wird nur im Browser-
localStoragegespeichert und nur wenn die Checkbox aktiviert ist - Sprache: Deutsch, alle Icons als Inline-SVG-Strich-Icons, keine bunten Emojis
14. Existing code & do-not-change
Not needed: Neues Projekt, keine bestehende Codebasis.
15. Build order
- Shell & Tabs: Einzel-HTML-Datei, Header, 4 Tabs, Panel-Wechsel per
hidden+aria-selected, kein Neuladen. - Simulationen: Enzymkinetik, Lotka–Volterra, Logistik, DNA→Protein (Chart.js via CDN, Formeln exakt nach Spezifikation).
- Skript-Bibliothek: Upload (Drag&Drop/Klick), Namensprüf-Karte, lokaler Speicher
biocampus_lib_v1, Suche, Sortierung, Umbenennen/Löschen, pdf.js/mammoth lazy. - KI & Quiz/Zusammenfassungen: KI-Konfig (
biostudio_ki_cfg_v1), Verbindung testen, Modell-Fallback, Quiz-Studio (KI-Generierung + Demo), Zusammenfassungen (3 Sektionen, Kopieren, Als Skript speichern). - Finish & Acceptance: Alle 11 Checkpunkte der Spezifikation prüfen, Offline-Betrieb außer KI/CDN, keine bunten Emojis, Inline-SVG-Icons.
16. Acceptance criteria & tests
| # | Check (muss bestanden sein) |
|---|---|
| A1 | Einzelne Datei biowissenschaften-studio.html öffnet per Doppelklick (file://) ohne Build-Schritt und zeigt alle 4 Tabs. |
| A2 | Tab-Wechsel schaltet Panels per hidden + aria-selected; kein Neuladen. |
| A3 | Enzymkinetik: Kurve, Punkt bei [S], Vmax-Asymptote, α-Berechnung und Ergebnis-Kapsel stimmen mit den Formeln überein. |
| A4 | Lotka–Volterra: 2 Charts (Zeit + Phasenraum) + Gleichgewichtszeile (H* = γ/δ, P* = α/β). |
| A5 | Logistik: Wachstumskurve + gestrichelte K-Linie, Wendepunkt bei N=K/2. |
| A6 | DNA→Protein: Transkription T→U, Translation ab AUG, Kodon-Chips, Ein-Buchstaben-Protein. |
| A7 | Bibliothek: Drag&Drop → Namensprüf-Karte ohne Auto-Save → Speichern → Eintrag erscheint in biocampus_lib_v1. |
| A8 | Suche filtert Name+Fach; Sortierung (Neueste zuerst / Name A–Z) funktioniert; Umbenennen/Löschen über Dialoge. |
| A9 | KI-Konfiguration wird in biostudio_ki_cfg_v1 gespeichert (Key nur bei aktivierter Checkbox); Verbindung testen zeigt „✓ Verbunden – N Modelle sichtbar". |
| A10 | Quiz-Studio: KI-Generierung erzeugt genau 5 Optionen und 1 Lösung; Erklärungen enthalten nicht „laut des Skripts"; Demo-Quiz ohne Key verfügbar. |
| A11 | Zusammenfassungen: 3 Sektionen gerendert (Begriffe/Kernaussagen/Gliederung), Kopieren-Button, „Als Skript speichern" in Bibliothek. |
| A12 | Keine bunten Emojis; alle Icons Inline-SVG-Strichstil; UI auf Deutsch. |
17. Deployment, environments & secrets
Deployment, environments & secrets
- Kein Hosting, kein Server, keine Umgebungsvariablen: die App wird als einzelne Datei
biowissenschaften-studio.htmllokal abgelegt und per Doppelklick überfile://geöffnet. - API-Key wird nicht in Umgebungsvariablen gespeichert, sondern nur im Browser-
localStorage(biostudio_ki_cfg_v1) und nur wenn die Checkbox „API-Key in diesem Browser speichern" aktiviert. - Keine Umgebungen (Staging/Production) nötig; keine CI/CD.
18. Open questions & assumptions
- Default: Einzel-HTML-Datei ohne Build-Schritt, kein Hosting, lokal per
file://(aus Spezifikation). - Default: PDF-Vision und KI-Anfragen sind enthalten; falls pdf.js in der file://-Umgebung nicht rendert, zeigt die App die pdf.js-Fehlermeldung an (kein App-Bug, siehe Spezifikation Sektion 5.2).
- Default: Keine Verschlüsselung über localStorage hinaus; API-Key liegt im Klartext im Browser.
- Default: Chart.js 4.4.4, pdf.js 3.11.174 und mammoth 1.9.0 werden über CDN geladen (Internet nur für CDN und KI-Anfragen nötig).
- Default: UI auf Deutsch, alle Icons als Inline-SVG-Strich-Icons, keine bunten Emojis.
- Default: keine PWA/ServiceWorker, keine Authentifizierung, keine Multi-User-Rollen.
- Default: keine weiteren Integrationen neben OpenAI-kompatiblem Chat-Endpunkt (Standard OpenRouter).