Skip to content

Type 4: Integration Repository - Architectuur verkenning #10

@CorneeldH

Description

@CorneeldH

Problem / Opportunity

CEDA heeft meerdere zelfstandige R- en Python-packages (eencijfer, instroomprognose, verrijking, kansengelijkheid) die elk hun eigen simpele UI hebben (Shiny/Streamlit). Wat ontbreekt is een integratie-laag: een unified app waar beheerders pipelines kunnen triggeren (inclusief lang lopende ML-taken) en eindgebruikers resultaten uit meerdere repos in een dashboard kunnen zien.

In standards/project-structure.md staat Type 4 (Integration/Dashboard Repository) als "future, needs exploration". Dit issue documenteert de architectuurverkenning.

Appetite (timebox)

Large (5-6 dagen) voor eerste prototype/validatie. De volledige uitbouw is een doorlopend project.

Solution

API-first architectuur met verwisselbare frontend:

  • Backend: FastAPI (Python) - alle logica, job orchestratie, data serving
  • Frontend fase 1: NiceGUI - pure Python, snel starten, intern gebruik (<50 users)
  • Frontend fase 2: React/Next.js via vibe-coding (v0, Cursor) - visuele kwaliteit, schaalbaarheid
  • Integratie: Python packages direct importeren, R packages via subprocess
  • Job tracking: SQLite + asyncio (geen Redis/Celery bij 1-3 concurrent jobs)
  • Data: Polars leest Parquet uit pipeline output directories

Kritische voorwaarde: strikte scheiding backend/frontend. NiceGUI als "domme client" die alleen API-calls doet, zodat de frontend later vervangbaar is.

Risks / Rabbit holes

  • NiceGUI is relatief nieuw (~2022) - moet gevalideerd worden met een spike
  • R runtime in Docker container (fat container vs sidecar)
  • Package interface contract: downstream packages moeten een consistente run_pipeline() interface bieden
  • SURF Developer Platform deployment details nog onbekend

No-Gos

  • Geen Celery/Redis - overkill voor deze schaal
  • Geen rpy2 voor R-integratie - subprocess is robuuster
  • Geen monolithische frontend die niet vervangbaar is
  • Geen business logica in de frontend-laag

Gevalideerd met

@corneeldenhartogh

Sparring partner

@corneeldenhartogh

Metadata

Metadata

Assignees

Labels

needs-shapingPitch die nog gevormd moet wordenon-holdGeparkeerd, wacht op externe input of beslissingtechTechnische verbeteringen

Type

Projects

Status

Todo

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions