Skip to content

Architectuur

De platformarchitectuur van Whitefield bestaat uit 10 componenten, verdeeld over twee omgevingen: een lokale machine voor de trading engine en een cloudplatform voor beleggers en paper trackers.

Zie Het Plan voor de samenvatting.


Ecosysteemtopologie

#ComponentOmgevingTechnologieMaandelijkse kosten
1Helios EngineLokaalPython 3.12, Polars
2ETL SyncLokaalPython 3.12, psycopg3
3IB GatewayLokaal (toekomst: Droplet)Docker, IB Gateway API
4Investor AppCloud (App Platform)Laravel 12, PHP 8.4, Filament v3~$12
5Tracking AppCloud (App Platform)Laravel 12, PHP 8.4~$12
6Vue FrontendCloud (App Platform)Vue 3.5+, Vite, TypeScript(via Laravel)
7Publieke SiteCloud (App Platform)Astro 5.xGratis
8Queue WorkersCloud (App Platform)Laravel 12, PHP 8.4~$5
9PostgreSQLCloud (DigitalOcean)PostgreSQL 16+~$15
10PostmarkCloud (SaaS)Email APIVariabel
Totale infrastructuur~$44/mo

AFM-light isolatie

Er zijn twee gescheiden Laravel-applicaties: één voor het investeerdersplatform en één voor performance tracking. Dat is geen technische hobby, maar het sterkste isolatiemodel binnen AIFM-light:

  • Gescheiden codebases: whitefield/investor/ en whitefield/tracking/ zijn onafhankelijke Laravel-applicaties
  • Gescheiden databases: helios_investor en helios_track op dezelfde managed PostgreSQL-instantie. Geen cross-database queries.
  • Gescheiden deployments: Elke app is een onafhankelijke App Platform service
  • Geen cross-linking: Geen “upgrade naar belegger” knop, geen gedeelde sessies

Monorepo-structuur

helios/
├── lib/ # Trading engine (Python)
│ ├── portfolio/ # Backtestmotor, slippage, commissies
│ ├── signals/ # Signaalextractie en roll-forward
│ └── analysis/ # Audit scripts, statistiek
├── whitefield/ # Investeerdersplatform
│ ├── investor/ # Laravel investor app
│ ├── tracking/ # Laravel tracking app
│ ├── frontend/ # Vue SPA (dual build target)
│ ├── www/ # Publieke site (Astro)
│ └── docs/ # Documentatiesite (Starlight)
├── packages/ # Gedeelde packages
│ ├── php/ # Composer path repositories
│ └── js/ # npm workspaces
├── knowledge-base/ # Alle onderzoeksdocumenten
├── tests/ # Python unit tests (2390+)
└── scripts/ # Hulpscripts

De monorepo-aanpak met domeingebaseerde top-level split (helios/ voor intern, whitefield/ voor publiek, packages/ voor gedeeld) houdt engine, platform en documentatie bij elkaar.


Dataflow: eenrichtingsverkeer

Helios Engine (lokaal)
▼ ETL push (wekelijks)
Cloud PostgreSQL (DigitalOcean)
▼ Laravel leest
Investor/Tracking Dashboard

Kernregel: eenrichtingsverkeer. De engine pusht data naar de cloud. De cloud pusht niets terug. De engine weet niet dat beleggers bestaan. Dat houdt de koppeling klein en het risico beheersbaar.


Risicoprofielarchitectuur

Het fonds start met één risicoprofiel: Normal.

AttribuutWaarde
ProfielNormal
SRI-indicator5 (22,95% VEV)
Actieve systemenSystem 1 + System 2 + System 3
StatusEnige profiel bij lancering

De profile_id foreign key zit al in alle 9 accounting- en engine-tabellen. Daardoor kan multi-profielondersteuning later worden toegevoegd zonder schemawijzigingen. Toekomstige profielen, zoals Defensief of Agressief, vragen wel elk om een aparte engine-run met andere parameters.

Profielwissel: vereist volledige aflossing plus nieuwe inschrijving (60-90 dagen frictie). Dat voorkomt profiel-hopping.

20 architectuurbeslissingen

Kernbeslissingen per deliverable

#BeslissingOnderbouwing
1Monorepo: domein-gebaseerde splitEngine vs. investeerder-facing
2Twee gescheiden Laravel appsAFM-light isolatie
3Eenrichting ETL: lokaal naar cloudEngine onbewust van beleggers
4Wekelijkse batch-syncOntmoedigt gokgedrag
5Truncate-and-reload met advisory lockingIdempotente re-runs
6psycopg3 COPY protocolSnelste PostgreSQL bulk insert
7IBKR = primaire NAV (belt-and-suspenders)Door derde partij geverifieerde waarde
8Unit-based NAV met equalisatie HWMEnkele NAV/unit voor alle beleggers
9Onveranderlijk unit-grootboek (trigger-enforced)Correcties via CORRECTION entries
10Maandelijks NAV-venster + 30-dagen opzegtermijnAnti-timing maatregelen
11EUR-only investeerderspresentatieUSD-portefeuille geconverteerd
12Management fee: maandelijkse NAV-aftrekPost-fee NAV zichtbaar
13Performance fee: maandelijkse opbouw, jaarlijkse kristallisatieHWM-gebaseerd
14profile_id FK in alle tabellenMulti-profiel zonder schema-wijzigingen
15Profielwissel = aflossing + nieuwe inschrijving60-90 dagen frictie
163-maanden vertraagde trade-transparantieVoorkomt front-running
17Vue SPA: enkel codebase, twee build targetsGeen duplicatie
18Gedeelde packages via Composer/npmCode-hergebruik zonder koppeling
19NUMERIC precisie overal (nooit float)Financiele nauwkeurigheid
20Reconciliatie drie tiers: ok/waarschuwing/fout0,1% ok, >1% blokkeert NAV-publicatie
Database topologie

Twee databases, één managed instance

Twee databases draaien op dezelfde DigitalOcean Managed PostgreSQL-instantie:

DatabaseApplicatieTabellenDoel
helios_investorInvestor AppFondsboekhouding, NAV, units, engine-data, reconciliatieEcht beleggen
helios_trackTracking AppPaper tracking portefeuilles, engagement-metricsVirtueel volgen

Geen cross-database queries. Geen gedeelde tabellen. Geen foreign keys tussen databases. De scheiding is volledig.

Fondsboekhouding Schema

9 kerntabellen met profile_id FK:

  • risk_profiles — risicoprofielconfiguratie
  • investors — beleggerregistratie
  • nav_history — NAV per profiel per maand
  • unit_transactions — onveranderlijk unit-grootboek
  • investor_hwm — high-water mark per belegger per profiel
  • fund_requests — inschrijvingen en aflossingen
  • engine_equity_snapshots — equity-curve per profiel
  • engine_holdings — actuele posities
  • engine_trades — handelsgeschiedenis