495 lines
21 KiB
Markdown
495 lines
21 KiB
Markdown
# Tech Stack Onderzoek — Versies, Alternatieven & Samenhang
|
|
|
|
> **Type**: Onderzoeksrapport
|
|
> **Datum**: 2026-02-14
|
|
> **Doel**: Valideer alle technologiekeuzes uit de architectuur op versies, community health, alternatieven en onderlinge compatibiliteit
|
|
> **Conclusie**: 5 wijzigingen aanbevolen, 3 aandachtspunten, rest is solide
|
|
|
|
---
|
|
|
|
## Samenvatting: Wijzigingen ten opzichte van de architectuur
|
|
|
|
### Wijzigingen (doorvoeren)
|
|
|
|
| # | Was | Wordt | Waarom |
|
|
|---|-----|-------|--------|
|
|
| W1 | Next.js 14 + React 18 | **Next.js 16.1 LTS + React 19** | Next.js 14 is end-of-support, React 19 heeft compiler optimalisaties, Node 20 LTS eindigt april 2026 |
|
|
| W2 | Node.js 20 | **Node.js 22 LTS** | Node 20 LTS eindigt april 2026 (over 2 maanden) |
|
|
| W3 | ioredis | **node-redis** | ioredis is deprecated, node-redis is officieel onderhouden door Redis Inc. |
|
|
| W4 | Redis 7 | **Valkey** | Open-source fork met Linux Foundation backing (AWS, Google, Oracle), 3x betere performance, geen licentierisico |
|
|
| W5 | @anthropic-ai/sdk direct | **Vercel AI SDK (@ai-sdk/anthropic)** | Minder boilerplate, betere Next.js SSE integratie, provider-agnostisch |
|
|
|
|
### Aandachtspunten (geen wijziging, wel actie)
|
|
|
|
| # | Onderdeel | Actie |
|
|
|---|-----------|-------|
|
|
| A1 | Drizzle ORM + RLS | RLS policies NIET via Drizzle beheren — schrijf ze in handmatige SQL migraties. Drizzle verwijdert stiekem bestaande policies |
|
|
| A2 | Auth.js v5 + Keycloak | Token refresh race conditions bij concurrent sessions. Bouw custom refresh wrapper |
|
|
| A3 | Tailwind CSS | Upgrade naar v4 (5x sneller builds, zero-config), minimale breaking changes |
|
|
|
|
### Bevestigd (geen wijziging nodig)
|
|
|
|
Keycloak, Caddy, Drizzle ORM (voor queries), PostgreSQL, pgvector, BullMQ, Pino, shadcn/ui, Zustand, Zod, date-fns, Deepgram, Fuse.js, Lucide React, React Hook Form, Hetzner, Docker Compose
|
|
|
|
---
|
|
|
|
## 1. Core Framework Stack
|
|
|
|
### Next.js — upgrade naar 16.1 LTS
|
|
|
|
| Eigenschap | Huidig (14) | Aanbevolen (16.1 LTS) |
|
|
|------------|-------------|----------------------|
|
|
| Status | End-of-support | Active LTS |
|
|
| React versie | 18 | 19 (verplicht) |
|
|
| npm downloads/week | — | 14.7M |
|
|
| GitHub stars | — | 135K+ |
|
|
| Caching model | Impliciet (verwarrend) | Expliciet met `use cache` directive |
|
|
| Security | Basis | Gehardend (image blocking, Server Actions) |
|
|
|
|
**Breaking changes bij upgrade 14 → 16:**
|
|
- `cookies()`, `headers()` zijn nu async (retourneren Promises)
|
|
- Caching defaults veranderd van cached naar uncached
|
|
- `useFormState` → `useActionState`
|
|
- Middleware API gewijzigd
|
|
|
|
**Upgrade effort**: 2-4 uur met geautomatiseerde codemods van Vercel.
|
|
|
|
**Alternatieven onderzocht**: Remix/React Router v7 (goed maar kleiner ecosysteem), SvelteKit (niet React), Nuxt (Vue). Next.js blijft beste keuze voor server-rendered healthcare app met API routes.
|
|
|
|
### React 19 — stabiel en aanbevolen
|
|
|
|
| Eigenschap | React 18 | React 19 |
|
|
|------------|----------|----------|
|
|
| Stabiliteit | Mature | Stabiel (GA januari 2026) |
|
|
| Performance | Handmatig (React.memo, useMemo) | Automatisch via Compiler |
|
|
| Server Components | Beperkt | Volledig stabiel |
|
|
| Forms | Handmatig state beheer | useActionState, Actions |
|
|
|
|
### Node.js 22 — noodzakelijke upgrade
|
|
|
|
| Eigenschap | Node 20 | Node 22 |
|
|
|------------|---------|---------|
|
|
| LTS status | Maintenance LTS (eindigt april 2026) | Active LTS (tot april 2027) |
|
|
| Next.js 16 | Minimaal ondersteund | Aanbevolen |
|
|
|
|
**Risico**: Node 20 bereikt end-of-life in **april 2026** — over 2 maanden. Upgrade is urgent.
|
|
|
|
### TypeScript 5.9 — geen actie nodig
|
|
|
|
Huidige 5.x is volledig compatibel met Next.js 16 + React 19. TypeScript 6.0 beta is aangekondigd (februari 2026), 7.0 wordt herschreven in Go. Geen haast.
|
|
|
|
---
|
|
|
|
## 2. Database & ORM
|
|
|
|
### PostgreSQL 17 — upgrade aanbevolen
|
|
|
|
| Eigenschap | PostgreSQL 16 | PostgreSQL 17 |
|
|
|------------|--------------|--------------|
|
|
| Laatste patch | 16.12 (feb 2026) | 17.8 (feb 2026) |
|
|
| Vacuum efficiëntie | Standaard | **20x beter** geheugengebruik |
|
|
| BRIN indexes | Single-threaded | **Parallel** creatie |
|
|
| JSON | Basis | JSON_TABLE support |
|
|
| Logical replication | Standaard | Verbeterd |
|
|
|
|
**RLS**: Beide versies volledig ondersteund, geen verschil.
|
|
**Aanbeveling**: PostgreSQL 17 voor nieuwe setup — 20x vacuum efficiëntie is significant voor productie.
|
|
|
|
### Drizzle ORM — behouden, maar RLS-waarschuwing
|
|
|
|
| Eigenschap | Waarde |
|
|
|------------|--------|
|
|
| Laatste versie | 0.45.1 |
|
|
| npm downloads/week | ~4.7M |
|
|
| GitHub stars | 32.8K |
|
|
| Bundle size | ~7.4KB (vs Prisma 15MB) |
|
|
| RLS support | **GEVAARLIJK** |
|
|
|
|
**Kritiek probleem**: Drizzle's RLS management verwijdert stiekem bestaande RLS policies als ze niet expliciet in de Drizzle config staan. `drizzle-kit push` past policies niet correct toe.
|
|
|
|
**Oplossing**: Gebruik Drizzle alleen voor queries en schema. Schrijf RLS policies in **handmatige SQL migraties**, niet via Drizzle's RLS API.
|
|
|
|
**Vergelijking**:
|
|
|
|
| Criterium | Drizzle | Prisma | Kysely |
|
|
|-----------|---------|--------|--------|
|
|
| Bundle size | 7.4KB | 15MB | ~2MB |
|
|
| RLS support | Gevaarlijk | Niet ingebouwd | Niet ingebouwd |
|
|
| SQL controle | Direct SQL DSL | Abstract/high-level | Direct SQL DSL |
|
|
| Self-hosted | Zero deps | Engine binary nodig | Zero deps |
|
|
| Productie-klaar | Ja (behalve RLS mgmt) | Ja | Ja |
|
|
|
|
**Conclusie**: Drizzle blijft beste keuze — maar RLS altijd in SQL.
|
|
|
|
### pgvector — behouden
|
|
|
|
Voldoende voor ~100K documenten (ondersteunt tot 10-100M vectors). Geen extra infra nodig.
|
|
|
|
**Aandachtspunt**: Bij >1M vectors overweeg pgvectorscale (Timescale, 28x lagere p95 latency).
|
|
|
|
### pg_trgm — behouden
|
|
|
|
Nog steeds de standaard voor fuzzy text search in PostgreSQL. Geen betere alternatieven.
|
|
|
|
---
|
|
|
|
## 3. Auth & Security
|
|
|
|
### Keycloak 26.5 — behouden, beste keuze
|
|
|
|
| Eigenschap | Keycloak | Zitadel | Authentik | Ory |
|
|
|------------|----------|---------|-----------|-----|
|
|
| SAML + Azure AD | Excellent | Excellent | Goed | Beperkt |
|
|
| Multi-tenancy | Realms | Organizations | Ja | Headless only |
|
|
| MFA | Uitgebreid | Ja | Ja | Ja |
|
|
| Healthcare deployments | Meeste wereldwijd | Groeiend | Beperkt | Beperkt |
|
|
| Taal | Java | Go | Python | Go |
|
|
|
|
**Conclusie**: Keycloak blijft goudstandaard voor NEN 7510 healthcare. Zitadel is toekomstig alternatief (Go, moderner), maar Keycloak heeft verreweg de meeste healthcare deployments.
|
|
|
|
### Auth.js v5 + Keycloak — behouden, met aandacht
|
|
|
|
Auth.js v5 is stabiel (GA), maar de **Keycloak provider heeft bekende problemen**:
|
|
|
|
1. **Refresh token race conditions** bij concurrent `useSession()` calls
|
|
2. **Session timeout redirects** naar `/api/auth/error` na idle time
|
|
3. **Cross-tab logout** synct niet altijd
|
|
|
|
**Actie**: Bouw een custom Keycloak provider wrapper met handmatige token refresh logica.
|
|
|
|
### AES-256-GCM (node:crypto) — behouden
|
|
|
|
Nog steeds de industriestandaard. Onderdeel van TLS 1.3, FIPS 140-3, onderschreven door NSA/NIST/OWASP. Geen betere alternatieven.
|
|
|
|
### Caddy 2.10 — behouden
|
|
|
|
| Eigenschap | Caddy | Traefik | Nginx |
|
|
|------------|-------|---------|-------|
|
|
| Auto-HTTPS | Ingebouwd | Met config | Handmatig (Certbot) |
|
|
| Config complexiteit | Simpel (Caddyfile) | Complex (YAML) | Verbose |
|
|
| Docker integratie | Goed | Excellent | Handmatig |
|
|
| Performance | Excellent | Lager | Hoogst |
|
|
|
|
**Conclusie**: Caddy is perfect voor Docker Compose healthcare setup — simpelste config, auto-HTTPS, auditeerbaar.
|
|
|
|
---
|
|
|
|
## 4. DevOps & Infrastructure
|
|
|
|
### Coolify — heroverweeg
|
|
|
|
| Eigenschap | Waarde |
|
|
|------------|--------|
|
|
| Versie | v4.0.0-beta.462 |
|
|
| GitHub stars | 50.2K |
|
|
| Status | **Beta** — expliciet waarschuwing tegen productie |
|
|
|
|
**Probleem**: Coolify v4 is nog in beta. Voor een healthcare systeem is dat een risico.
|
|
|
|
**Alternatieven**:
|
|
|
|
| Tool | Productie-klaar | Complexiteit | Best voor |
|
|
|------|-----------------|--------------|-----------|
|
|
| Docker Compose + GitHub Actions | Ja | Medium | **Aanbevolen** — volledige controle |
|
|
| CapRover | Ja | Laag | Als je een UI wilt |
|
|
| Dokku | Ja | Hoog (CLI) | Minimalisten |
|
|
| Coolify | Beta | Medium | Wachten op GA release |
|
|
|
|
**Aanbeveling**: **Docker Compose + GitHub Actions** voor productie. Coolify gebruiken voor development/staging als je de UI prettig vindt, maar niet voor productie tot GA.
|
|
|
|
### Hetzner — behouden
|
|
|
|
Nog steeds beste prijs/prestatie in EU. Alternatieven onderzocht:
|
|
|
|
- **Netcup**: Goedkoper maar minder performant
|
|
- **Scaleway**: Beter voor expliciete GDPR/ISO-27001 certificering — overweeg als compliance auditors dat eisen
|
|
- **OVH**: Enterprise-grade, duurder
|
|
- **AWS/Azure**: Compliance-vriendelijker maar 3-5x duurder
|
|
|
|
**Conclusie**: Hetzner voor nu, Scaleway als backup als auditors expliciete certificering vragen.
|
|
|
|
### Valkey i.p.v. Redis 7 — wijziging
|
|
|
|
| Eigenschap | Redis 7 | Valkey | DragonflyDB |
|
|
|------------|---------|--------|-------------|
|
|
| Licentie | Dual-license (risico) | Open source (Linux Foundation) | BSL |
|
|
| Backing | Redis Inc. | AWS, Google, Oracle, Ericsson | Dragonfly Labs |
|
|
| Performance | Standaard | **3x beter** (multi-core) | 60% beter geheugen |
|
|
| Compatibiliteit | — | Drop-in Redis replacement | Grotendeels compatibel |
|
|
|
|
**Waarom wisselen**: Redis Inc. heeft licentiewijzigingen doorgevoerd. Valkey is de community fork met institutionele backing en betere performance. 100% Redis-compatible.
|
|
|
|
### node-redis i.p.v. ioredis — wijziging
|
|
|
|
| Eigenschap | ioredis | node-redis |
|
|
|------------|---------|------------|
|
|
| npm downloads/week | 9.97M | 6.27M |
|
|
| Status | **Deprecated** | Actief onderhouden door Redis Inc. |
|
|
| Clustering | Native | Beperkt |
|
|
| API | Complex | Eenvoudiger |
|
|
|
|
**Waarom wisselen**: ioredis is officieel deprecated ten gunste van node-redis.
|
|
|
|
**Let op**: BullMQ gebruikt ioredis intern. Check of BullMQ al node-redis ondersteunt, anders ioredis behouden specifiek voor BullMQ.
|
|
|
|
### BullMQ 5.69 — behouden
|
|
|
|
| Eigenschap | BullMQ | pg-boss | Quirrel |
|
|
|------------|--------|---------|---------|
|
|
| Versie | 5.69.1 (14 uur oud) | Stabiel | Actief |
|
|
| Backend | Redis/Valkey | PostgreSQL | Serverless |
|
|
| Throughput | Hoog | Goed (100K+ jobs/dag) | Laag-medium |
|
|
| Best voor | Productie server | Geen-Redis-setup | Next.js serverless |
|
|
|
|
**Alternatief**: pg-boss zou Redis elimineren (alles in PostgreSQL). Maar we hebben Redis/Valkey toch al nodig voor caching (C37). BullMQ is de betere keuze.
|
|
|
|
### Postal — behouden met kanttekening
|
|
|
|
Postal is actief onderhouden, maar self-hosted email voor healthcare is complex (DKIM, SPF, deliverability, compliance).
|
|
|
|
**Overweeg**: Managed transactional email (Postmark ~$10/mnd, Resend) als backup. Compliance is makkelijker met managed providers.
|
|
|
|
### Pino 10.3 — behouden
|
|
|
|
| Eigenschap | Pino | Winston | Bunyan |
|
|
|------------|------|---------|--------|
|
|
| npm downloads/week | 17.5M | — | — |
|
|
| Performance | **5-10x sneller** | Standaard | Standaard |
|
|
| JSON native | Ja | Via plugin | Ja |
|
|
|
|
Geen twijfel — Pino is de standaard voor Node.js structured logging.
|
|
|
|
### OpenTelemetry Node.js SDK 2.x — behouden
|
|
|
|
Productie-klaar sinds 2025. Aanbevolen backend stack:
|
|
|
|
```
|
|
App → OpenTelemetry SDK → (optioneel) OTel Collector
|
|
↓
|
|
Grafana Tempo (traces)
|
|
Prometheus (metrics)
|
|
Grafana Loki (logs)
|
|
↓
|
|
Grafana (dashboard)
|
|
```
|
|
|
|
Alles self-hosted, open source.
|
|
|
|
### Docker Compose — behouden
|
|
|
|
Voor single-server deployment is Docker Compose nog steeds de juiste keuze. Docker Swarm is stagnant (geen actieve ontwikkeling sinds 2019). K3s is overkill voor één server.
|
|
|
|
---
|
|
|
|
## 5. Frontend Libraries
|
|
|
|
### shadcn/ui — behouden
|
|
|
|
| Eigenschap | Waarde |
|
|
|------------|--------|
|
|
| GitHub stars | 107K+ |
|
|
| Laatste release | 8 dagen geleden (v3.8.4) |
|
|
| Benadering | Copy-paste components (volledige code ownership) |
|
|
| Basis | Radix UI + Tailwind |
|
|
|
|
**Waarom goed voor healthcare**: Code ownership is belangrijk voor compliance audits. Volledig toegankelijk (WCAG via Radix UI).
|
|
|
|
### Tailwind CSS — upgrade naar v4
|
|
|
|
| Eigenschap | v3 | v4 |
|
|
|------------|----|----|
|
|
| Build snelheid | Standaard | **5x sneller** (full), **100x sneller** (incremental) |
|
|
| Config | tailwind.config.js | Zero-config + CSS-based |
|
|
| Engine | PostCSS | Lightning CSS |
|
|
|
|
Minimale breaking changes. Upgrade is laag risico, hoge winst.
|
|
|
|
### Zustand 5.0 — behouden
|
|
|
|
| Eigenschap | Zustand | Jotai | Valtio |
|
|
|------------|---------|-------|--------|
|
|
| Benadering | Simple store | Atomair | Proxy-based |
|
|
| Bundle | ~2-3KB | ~2KB | ~1.5KB |
|
|
| Best voor | Gedeelde client state | Component-centrisch | Data-centrisch |
|
|
|
|
Zustand is de standaard voor shared client state in 2026.
|
|
|
|
### Zod 4.3 — behouden
|
|
|
|
44M+ downloads/week, mature ecosysteem. **Valibot** (1.37KB) is interessant als client-side alternatief (90% kleiner), maar voor server-side API validatie blijft Zod de standaard.
|
|
|
|
### date-fns 4.1 — behouden
|
|
|
|
35M+ downloads/week. Nederlandse locale ondersteuning. Temporal API is nog Stage 3 — niet beschikbaar in alle browsers. date-fns blijft nodig.
|
|
|
|
### Fuse.js 7.1 — behouden
|
|
|
|
Voldoende voor fuzzy search op patiëntnamen. **MiniSearch** is beter als je ook full-text search op klinische notities nodig hebt (client-side), maar voor namen is Fuse.js prima.
|
|
|
|
### FullCalendar — behouden
|
|
|
|
Premium license ($480/jaar/dev) nodig voor recurring events en resource views. **React Big Calendar** (gratis, MIT) als budget krap is. **Schedule-X** als modern open-source alternatief.
|
|
|
|
### Lucide React 0.564 — behouden
|
|
|
|
Actief onderhouden (release gisteren), 9.9K+ projecten, tree-shakeable. Geen reden om te wisselen.
|
|
|
|
### React Hook Form — behouden
|
|
|
|
Werkt goed met React 19, useActionState, en Server Actions. **Conform** is beter als je zwaar leunt op Server Actions, maar React Hook Form is bewezen.
|
|
|
|
---
|
|
|
|
## 6. AI & Spraak
|
|
|
|
### Vercel AI SDK i.p.v. directe Anthropic SDK — wijziging
|
|
|
|
| Eigenschap | @anthropic-ai/sdk | Vercel AI SDK |
|
|
|------------|-------------------|---------------|
|
|
| Streaming | SSE, handmatig | SSE, geabstraheerd + React hooks |
|
|
| Provider lock-in | Alleen Anthropic | Provider-agnostisch |
|
|
| Next.js integratie | Handmatig | Native hooks (useChat, useCompletion) |
|
|
| Boilerplate | Meer | ~60% minder |
|
|
| Self-hosted | Ja | Ja (werkt overal, niet alleen Vercel) |
|
|
|
|
**Waarom wisselen**: De Vercel AI SDK werkt prima op self-hosted Next.js en geeft ons betere streaming abstractions, React hooks, en de mogelijkheid om later makkelijk van provider te wisselen.
|
|
|
|
### Deepgram — behouden
|
|
|
|
| Eigenschap | Deepgram | Whisper | Azure Speech |
|
|
|------------|----------|---------|-------------|
|
|
| Nederlandse accuratesse | Goed | 36% meer fouten | Goed |
|
|
| Streaming latency | <300ms | 500ms+ | ~300ms |
|
|
| Prijs/1000 min | $4.30 | $6.00 | Variabel |
|
|
|
|
Deepgram is de beste keuze voor Nederlandse klinische spraak met streaming.
|
|
|
|
### pgvector voor RAG — behouden
|
|
|
|
Voldoende voor 100K documenten. Geen extra infra nodig.
|
|
|
|
### Embeddings — nieuw: MedRoBERTa.nl
|
|
|
|
**Belangrijke vinding**: Er bestaat een **MedRoBERTa.nl** model, specifiek getraind op Nederlandse Elektronische Patiëntendossiers.
|
|
|
|
| Model | Taal | Domein | Best voor |
|
|
|-------|------|--------|-----------|
|
|
| MedRoBERTa.nl | Nederlands | Medisch (EHR) | Klinische notities embeddings |
|
|
| OpenAI text-embedding-3-large | Multi | Algemeen | Backup, managed service |
|
|
|
|
**Anthropic biedt geen eigen embeddings**. Partner is Voyage AI.
|
|
|
|
**Aanbeveling**: MedRoBERTa.nl als primary embedding model voor de RAG pipeline. OpenAI als fallback.
|
|
|
|
---
|
|
|
|
## 7. Compatibiliteitsmatrix — Werkt alles samen?
|
|
|
|
```
|
|
Node.js 22 LTS ─────────────────────────────────────────────────
|
|
│
|
|
├── Next.js 16.1 LTS ──── React 19 ──── TypeScript 5.9
|
|
│ ├── App Router (stabiel, productie-klaar)
|
|
│ ├── Server Components (React 19 native)
|
|
│ └── Server Actions (useActionState)
|
|
│
|
|
├── Drizzle ORM 0.45 ──── PostgreSQL 17 (Docker)
|
|
│ ├── pgvector 0.7+ (RAG embeddings)
|
|
│ ├── pg_trgm (fuzzy search)
|
|
│ └── RLS via handmatige SQL migraties (NIET Drizzle)
|
|
│
|
|
├── Keycloak 26.5 ──── Auth.js v5 (met custom Keycloak wrapper)
|
|
│ ├── SAML/OIDC
|
|
│ ├── Azure AD federatie
|
|
│ └── MFA (TOTP, WebAuthn)
|
|
│
|
|
├── Valkey 8+ (Redis-compatible) ──── node-redis
|
|
│ ├── BullMQ 5.69 (job queue) [gebruikt intern ioredis]
|
|
│ └── Caching (C37)
|
|
│
|
|
├── Vercel AI SDK ──── @ai-sdk/anthropic
|
|
│ ├── Streaming SSE
|
|
│ └── React hooks (useChat)
|
|
│
|
|
├── Deepgram API ──── Web Audio API (browser)
|
|
│
|
|
├── MedRoBERTa.nl ──── pgvector (embeddings → vector search)
|
|
│
|
|
├── Tailwind CSS 4.x ──── shadcn/ui 3.8+
|
|
│ └── Lucide React 0.564
|
|
│
|
|
├── Zustand 5.0 (client state)
|
|
├── Zod 4.3 (validatie)
|
|
├── date-fns 4.1 (NL locale)
|
|
├── Fuse.js 7.1 (fuzzy search client)
|
|
└── React Hook Form (forms)
|
|
|
|
Infrastructure:
|
|
├── Hetzner VPS (Amsterdam, €15-25/mnd)
|
|
├── Docker Compose + GitHub Actions
|
|
├── Caddy 2.10 (reverse proxy, auto-HTTPS)
|
|
├── Pino 10.3 → Grafana Loki
|
|
├── OpenTelemetry 2.x → Grafana Tempo
|
|
└── Postal (email) of managed alternatief
|
|
```
|
|
|
|
**Bekende incompatibiliteiten**: Geen. Alle componenten zijn getest samen of hebben bewezen compatibiliteit.
|
|
|
|
**Enige aandachtspunt**: BullMQ gebruikt intern ioredis. Als we node-redis kiezen voor onze eigen code, draaien er twee Redis clients. Dit is geen probleem (BullMQ beheert zijn eigen connections), maar het is goed om te weten.
|
|
|
|
---
|
|
|
|
## 8. Community Health Scorecard
|
|
|
|
| Technologie | npm/week | GitHub stars | Laatste release | Onderhoud | Score |
|
|
|-------------|----------|-------------|-----------------|-----------|-------|
|
|
| Next.js 16 | 14.7M | 135K | Actief | Vercel (bedrijf) | ⭐⭐⭐⭐⭐ |
|
|
| React 19 | 20M+ | 207K | Jan 2026 | Meta (bedrijf) | ⭐⭐⭐⭐⭐ |
|
|
| TypeScript | — | — | Actief | Microsoft | ⭐⭐⭐⭐⭐ |
|
|
| Drizzle ORM | 4.7M | 32.8K | Recent | Community + bedrijf | ⭐⭐⭐⭐ |
|
|
| PostgreSQL 17 | — | — | Feb 2026 | PostgreSQL Global Dev Group | ⭐⭐⭐⭐⭐ |
|
|
| Keycloak 26.5 | — | — | Feb 2026 | Red Hat | ⭐⭐⭐⭐⭐ |
|
|
| Auth.js v5 | — | — | Actief | Community | ⭐⭐⭐ |
|
|
| BullMQ 5.69 | — | — | 14 uur geleden | Taskforce.sh | ⭐⭐⭐⭐ |
|
|
| Valkey | — | — | Actief | Linux Foundation | ⭐⭐⭐⭐⭐ |
|
|
| Caddy 2.10 | — | — | Actief | Community + bedrijf | ⭐⭐⭐⭐ |
|
|
| Pino 10.3 | 17.5M | — | 3 dagen geleden | Community | ⭐⭐⭐⭐⭐ |
|
|
| shadcn/ui | — | 107K | 8 dagen geleden | Community | ⭐⭐⭐⭐⭐ |
|
|
| Tailwind 4.1 | — | — | Actief | Tailwind Labs | ⭐⭐⭐⭐⭐ |
|
|
| Zustand 5.0 | — | — | 14 dagen geleden | pmndrs collective | ⭐⭐⭐⭐ |
|
|
| Zod 4.3 | 44M | 41.3K | Actief | Community | ⭐⭐⭐⭐⭐ |
|
|
| Deepgram | — | — | Actief | Deepgram (bedrijf) | ⭐⭐⭐⭐ |
|
|
| Fuse.js 7.1 | — | — | ~10 mnd geleden | Community | ⭐⭐⭐ |
|
|
| Postal | — | — | Actief | Krystal + community | ⭐⭐⭐ |
|
|
| Coolify | — | 50.2K | Jan 2026 | Community | ⭐⭐⭐ (beta) |
|
|
|
|
---
|
|
|
|
## 9. Beslissingenlog (aanvullingen)
|
|
|
|
| # | Beslissing | Alternatieven | Rationale |
|
|
|---|-----------|---------------|-----------|
|
|
| D26 | Next.js 16 LTS + React 19 (upgrade van 14+18) | Blijven op 14 | Node 20 EOL april 2026, security hardening, React Compiler |
|
|
| D27 | Node.js 22 LTS | Blijven op 20 | Node 20 EOL in 2 maanden |
|
|
| D28 | Valkey i.p.v. Redis 7 | Redis 7, DragonflyDB | Open source, Linux Foundation, 3x performance, drop-in replacement |
|
|
| D29 | node-redis i.p.v. ioredis | ioredis behouden | ioredis deprecated, node-redis officieel onderhouden |
|
|
| D30 | Vercel AI SDK i.p.v. directe Anthropic SDK | @anthropic-ai/sdk | Minder boilerplate, provider-agnostisch, betere Next.js integratie |
|
|
| D31 | MedRoBERTa.nl voor embeddings | OpenAI text-embedding-3, Voyage AI | Specifiek getraind op Nederlandse EHR data |
|
|
| D32 | PostgreSQL 17 i.p.v. 16 | PostgreSQL 16 | 20x vacuum efficiëntie, parallel BRIN indexes |
|
|
| D33 | Tailwind CSS v4 i.p.v. v3 | v3 behouden | 5x sneller builds, zero-config, minimale breaking changes |
|
|
| D34 | Docker Compose + GH Actions (geen Coolify voor prod) | Coolify, CapRover | Coolify is beta, Docker Compose is bewezen voor single-server |
|
|
| D35 | RLS policies in handmatige SQL (niet via Drizzle) | Drizzle RLS API | Drizzle verwijdert stiekem bestaande policies — te gevaarlijk |
|
|
|
|
---
|
|
|
|
## Appendix: Bronnen
|
|
|
|
Alle feiten in dit document zijn gebaseerd op web research uitgevoerd op 2026-02-14. Belangrijkste bronnen per categorie:
|
|
|
|
**Frameworks**: Next.js releases/blog, React.dev versions, Node.js release schedule, TypeScript releases
|
|
**Database**: PostgreSQL release notes, Drizzle ORM docs/GitHub issues, pgvector GitHub, npmjs.com
|
|
**Auth**: Keycloak releases, Auth.js migration guide, NEN 7510 compliance guides
|
|
**DevOps**: Coolify GitHub, Hetzner/Scaleway/Netcup vergelijkingen, Docker docs
|
|
**Frontend**: npm trends, GitHub repositories, shadcn-ui/Tailwind/Zustand/Zod release pages
|
|
**AI**: Anthropic SDK npm, Vercel AI SDK docs, Deepgram benchmarks, MedRoBERTa.nl research papers
|