nathanrenting.dev
Project · v0.1 release candidate

TherapyVault — secure video-platform voor therapie

Een privé video-platform waar therapeuten opgenomen sessies veilig met hun eigen cliënten delen. Geen public URLs, geen YouTube-link met "alleen wie de link heeft" — alles achter signed URLs met granulaire access-grants per cliënt, optioneel time-limited, view-limited of download-limited.

Hand-getekende architectuur-schets: therapist uploadt naar VAULT (notebook met slot), MFA-shield voor admin, drie clients met access-grants (forever / time-limited / view-limited), audit-log notitieboek aan onderkant, annotaties 'no public URLs', 'access-grant evaluator', 'GDPR'.

Whiteboard-schets · de vorm van het systeem

Probleem

WeTransfer is niet GDPR-compliant voor zorggegevens. YouTube unlisted is geen access-control. SharePoint is enterprise-overkill. Vimeo-Pro

TherapyVault is de specifieke oplossing: één plek waar de therapeut uploadt en de cliënt veilig kijkt, met de juridische en technische fundering die zorgcontext vereist.

Wat er v0.1 in zit

AreaStatus
AuthEmail+password, password reset, MFA (TOTP), session management, RBAC
Video uploadResumable multipart (tus protocol) tot 10 GB, naar R2 / S3 / MinIO
Video streamingSigned-URL playback met range-support, geen public URLs
Access controlPer grant: forever / time-limited / view-limited / download-limited
Coupons5 types: free access, % off, fixed off, download credit, view credit
PaymentsStripe (one-time + subscriptions) + Mollie-stub achter PaymentProvider-interface
DashboardsTherapist, Client, Admin
GDPRData-export ZIP + scheduled-deletion met grace-period
i18nEN + NL vanaf dag één (next-intl)
Audit logElke gevoelige mutatie wordt vastgelegd

Stack

Frontend + API
Next.js 15 (App Router) + TypeScript + Tailwind + shadcn/ui
Auth
Auth.js v5 — credentials + Argon2id hashing + TOTP MFA
Database
PostgreSQL 16 + Prisma 6
Storage
Cloudflare R2 (S3-compatibel) — provider-abstractie ondersteunt S3, B2, MinIO, local
Uploads
tus protocol via @tus/server
Payments
PaymentProvider-interface met Stripe-live + Mollie-stub erachter
Email
console-stub (v0.1) — react-email templates die naar logs renderen
Rate-limit
Redis token-bucket met in-memory fallback
Logging
pino structured JSON + aparte AuditLog-tabel
Tests
Vitest unit/integration + Playwright e2e

Security-primitives

Geen public URLs. Elke video-stream gaat door een signed-URL die de server pas uitgeeft na een access-grant-check. Range-headers worden ondersteund zonder dat de URL ooit lekt buiten de sessie.

MFA verplicht voor admins. TOTP-app koppelen is een eerste-login requirement; geen toegang tot admin-dashboards zonder.

Argon2id als password-hash met memory-hard parameters.

GDPR-by-design. Cliënt-data-export als ZIP, account-deletie via scheduled-job met grace-period, AuditLog-tabel voor alle gevoelige mutaties.

Payment-provider-abstractie. Stripe live, Mollie achter dezelfde interface — switchen voor iDEAL zonder de business-logica te raken.

Roadmap

VersieWat
v0.1 (nu)Alle critical security-primitives, productie-deploybaar
v0.2UI-polish, multi-bitrate HLS transcoding, push-notifications, real email-provider
v0.3+Custom domain per therapeut, white-label, live-session

Status

v0.1 release candidate. SMTP-provider en real-email-templates zijn de volgende stap voor launch. Klant en specifieke use-case onder NDA.