Reproducible Science Setup
Dieses Kapitel dokumentiert den technischen Aufbau des HyponaTrack-Projekts als Vorlage für reproduzierbare klinische Forschung. Das Ziel: Andere Forschungsgruppen sollen dieses Setup adaptieren können, um eigene Studien mit dem gleichen Qualitätsanspruch aufzusetzen.
Monorepo-Konzept
Alle Projektbestandteile — App-Code, wissenschaftliche Dokumentation, Datenauswertung und Präsentationen — leben in einem Repository:
HyponaTrack-Project/
├── app/ iOS App (SwiftUI, ResearchKit)
├── site/ Quarto Website
│ ├── konzept/ Wissenschaftliches Konzeptpapier
│ ├── auswertung/ Statistische Auswertung (Python)
│ ├── slides/ Reveal.js Präsentationen
│ ├── _bibliography/ Zotero-Export (Better BibTeX)
│ └── _templates/ Typst + Reveal.js Vorlagen
├── netlify/ Edge Functions (Passwortschutz)
├── .github/workflows/ CI/CD (GitHub Actions)
├── CLAUDE.md Instruktionen für Claude Code
└── README.md
Vorteile:
- Eine Quelle der Wahrheit: Keine Versionskonflikte zwischen App-Code und Dokumentation
- Gemeinsame Bibliographie: Eine
references.bibfür alle Dokumente - Atomare Commits: Änderungen an App und Dokumentation in einem Commit
- Ein CI/CD-Pipeline: Push → Build → Deploy
Quarto als Publikationsplattform
Quarto vereint vier Ausgabeformate in einem Toolchain:
| Format | Verwendung | Quarto-Typ |
|---|---|---|
| Website (HTML) | Online-Dokumentation mit Sidebar-Navigation | website |
| Reveal.js Slides | Präsentationen für Vorträge und Ethikkommission | revealjs |
| PDF (via Typst) | Formale Dokumente (Protokoll, Patienteninfo) | typst |
| Word (DOCX) | Einreichung bei Journals | docx |
Executable Code
Quarto rendert Python-Code direkt in den Dokumenten — Diagramme, Tabellen und statistische Analysen sind reproduzierbar und werden bei jedem Build neu berechnet:
import plotly.graph_objects as go
fig = go.Figure(go.Bar(x=["A","B"], y=[1,2]))
fig.show()Graphviz-Diagramme
Flussdiagramme und Architekturdiagramme werden als {dot}-Blöcke geschrieben — kein externes Tool nötig:
digraph { A -> B -> C }Zotero + Better BibTeX
Workflow
- Zotero verwaltet alle zitierten Paper (DOI-Import, PDF-Anhänge, Notizen)
- Better BibTeX exportiert automatisch nach
site/_bibliography/references.bib - Quarto zitiert via
[@CitationKey]und generiert das Literaturverzeichnis - CSL-Style (APA 7th) formatiert die Zitate
Einrichtung
# Zotero installieren
brew install --cask zotero
# Better BibTeX Plugin: manuell in Zotero installieren
# Werkzeuge → Plugins → Zahnrad → Install Add-on From File
# Auto-Export konfigurieren:
# Sammlung → Rechtsklick → Export → Better BibTeX → Keep updated
# Speicherort: site/_bibliography/references.bibZitieren in Quarto
Die DPH-Inzidenz liegt bei 13,3 % [@Webb2025].
Mehrere Studien bestätigen dies [@Lee2021; @Klaassen2025].
@Roser2023 zeigten, dass Gewichtszunahme signifikant ist.Typst für PDF-Generierung
Typst ist eine moderne Alternative zu LaTeX für die PDF-Generierung. Quarto kann Typst als Backend verwenden:
format:
typst:
template: _templates/typst/elspub.typ
toc: trueDie App nutzt Typst auch intern für die Generierung von Patienten-Berichten (bericht_vorlage.typ) und Einwilligungserklärungen (consent_vorlage.typ).
GitHub Actions CI/CD
Jeder Push auf main löst automatisch aus:
- Python + Jupyter installieren (Dependencies)
- Graphviz installieren (Diagramme)
- Quarto render (alle .qmd → HTML)
- Netlify deploy (Passwortgeschützte Website)
# .github/workflows/deploy.yml (vereinfacht)
on:
push:
branches: [main]
paths: ['site/**']
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- run: pip install jupyter plotly numpy scipy pandas
- uses: quarto-dev/quarto-actions/setup@v2
- run: cd site && quarto render
- uses: nwtgck/actions-netlify@v3Netlify mit Passwortschutz
Die Website wird auf Netlify gehostet mit einer Edge Function für Passwortschutz:
- Login-Seite im UKE-Branding
- SHA-256-gehashtes Passwort als Cookie (30 Tage)
- Edge Function prüft Cookie server-seitig
- Alle Inhalte nur nach Authentifizierung zugänglich
Dieses Setup adaptieren
Für eine neue Studie:
- Repository forken/klonen
- App anpassen (andere Parameter, andere Schwellenwerte)
- Konzeptpapier-Kapitel an eigene Fragestellung anpassen
references.bibdurch eigene Zotero-Sammlung ersetzen_quarto.ymlanpassen (Titel, Autor, Sidebar-Struktur)- GitHub Secrets setzen (
NETLIFY_AUTH_TOKEN,NETLIFY_SITE_ID) - Push → automatisch live