Nidus — case study

Het zenuwcentrum van het LOWI-platform

Deze pagina wordt een diepere blik op Nidus: architectuur, beslissingen en code. Inhoud volgt binnenkort.

Architectuur

client

nidus

Next.js · Vercel

Webdashboard: overzicht en bediening van het hele platform in de browser.

nidus-mobile

Expo / React Native · iOS

Mobiele app voor onderweg, praat uitsluitend met nidus-api.

api

nidus-api

Fastify 5 / TypeScript · Railway · Frankfurt

Centrale businesslogica; het enige component met schrijftoegang tot Supabase.

data

Supabase

PostgreSQL · Frankfurt

Centrale opslag met row-level security en auth.

nidus-ml

FastAPI / Python · Railway

ML-inferentie als aparte service naast de opslag.

Databricks

Community Edition · Cloud

Batch ML-training en datapipelines.

edge

nidus-pi

Raspberry Pi · Thuisnetwerk

PM2 cron jobs voor energie, locatie en sync.

ai

Claude Haiku

LLM · Anthropic API

Redenering en generatie voor Jarvis.

  • nidus-mobile roept nooit rechtstreeks Supabase aan — alles loopt via nidus-api.
  • Elke tabel heeft created_at/updated_at en RLS staat altijd aan.
  • Compute is wegwerpbaar (Railway, Pi), persistentie zit uitsluitend in Supabase.

Decision Log

  1. Wanneer stoppen met zoeken: VLamax zonder bloedlactaat

    Voor VLamax bestaat geen gepubliceerde formule op basis van enkel vermogen of snelheid — bevestigd door twee onafhankelijke literatuuronderzoeken. In plaats van te blijven zoeken naar een preciezere aanpak, koos ik voor een pragmatische proxy (piekvermogen over 3 seconden × een constante, foutmarge ~21%) en markeerde die expliciet als 'indicatief' in de interface. Soms is de juiste technische beslissing niet het probleem oplossen, maar toegeven dat het met de beschikbare data niet preciezer kan — en dat eerlijk communiceren naar de gebruiker.

  2. Een peer-reviewed formule verslaat eigen terugrekening

    De eerste versie van het VO2max-model rekende een constante terug uit vijf testresultaten, met een foutmarge van meer dan 20%. Door over te stappen op een gepubliceerde, snelheidsgebaseerde formule (Ji et al., 2021) en enkel de individuele constante te kalibreren, daalde die foutmarge naar 4,71%. Les: een gevalideerde formulevorm met één gekalibreerde parameter is betrouwbaarder dan een volledig zelf teruggerekend model.

  3. Custom SVG in plaats van een chart-library forceren

    Trainingsblokken moesten sleepbaar zijn op seconde-niveau, met vermogen- en hartslagcurves eronder. De bestaande grafiekbibliotheek (Recharts) wordt elders in de app gebruikt, maar is niet gebouwd voor precieze pointer-interactie. In plaats van die bibliotheek te forceren, koos ik voor een gerichte custom SVG-component met eigen pointer-events — minder herbruikbaar, maar robuust voor exact dit probleem.

  4. Power curve als JSONB, niet als aparte tabel

    Wanneer iemand een trainingsblokgrens verschuift, moeten vermogen- en hartslaggemiddeldes lokaal herberekend worden zonder het ML-model opnieuw aan te roepen — dat vereist dat de volledige curve beschikbaar blijft. In plaats van een aparte tabel met duizenden rijen per sessie, koos ik voor een JSONB-kolom op de sessietabel zelf: de data hoort logisch bij die ene sessie en wordt nooit los bevraagd.

  5. Gespreksgeheugen in de browser, niet de database

    Voor de AI-assistent op deze portfolio moest ik kiezen: gespreksgeschiedenis serverside opslaan zoals de assistent in Nidus zelf doet, of clientside bijhouden en meesturen bij elke vraag. Voor een kort, anoniem portfoliobezoek weegt het voordeel van serverside opslag niet op tegen de kost: een nieuwe databasetabel, een retentiebeleid, en extra privacy-oppervlak voor onbekende bezoekers. Dezelfde technologie, een bewust andere architectuurkeuze voor een andere context.

Screenshots

Dit is een nagebouwde reconstructie van de echte interface met verzonnen data — geen live screenshot, om privacyredenen (het draait écht op gezinsdata).

Vrijdag 10 juli

Goedemiddag, Robin.

MIDDAG INZICHT

Je week verliep rustig — geen opvallende pieken in energie of budget. Het weekend belooft mooi weer, ideaal om de tuinreminders af te werken.

WEEKRAPPORT

Boodschappen€142

+18% t.o.v. gemiddelde €120

Colruyt

Energie€38

+9% t.o.v. gemiddelde €35

Piek op woensdag

19°C

Half bewolkt

14°–21°

Morgen: 20°C, zon

Vandaag

  1. Teamoverleg
  2. Boodschappen ophalen

78

Goed herstel

HRV54 ms
Rusthartslag52 bpm
Slaapuren7,2 u

0,38 kW

live

Code

Binnenkort beschikbaar.