nathanrenting.dev
Projet · v0.1 release candidate

TherapyVault — plateforme vidéo sécurisée pour la thérapie

Une plateforme vidéo privée où les thérapeutes partagent en toute sécurité des séances enregistrées avec leurs propres patients. Pas d'URL publiques, pas de lien YouTube du type "accessible à toute personne disposant du lien" — tout est protégé par des signed URLs avec des autorisations d'accès granulaires par patient, au choix limitées dans le temps, en nombre de visionnages ou en nombre de téléchargements.

Croquis d'architecture dessiné à la main : le thérapeute téléverse vers le VAULT (carnet avec cadenas), bouclier MFA pour l'admin, trois patients avec des autorisations d'accès (forever / time-limited / view-limited), carnet d'audit-log en bas, annotations 'no public URLs', 'access-grant evaluator', 'GDPR'.

Croquis de whiteboard · la forme du système

Problème

WeTransfer n'est pas conforme au RGPD pour les données de santé. YouTube unlisted n'est pas un contrôle d'accès. SharePoint, c'est de la sur-ingénierie d'entreprise. Vimeo Pro

TherapyVault est la réponse spécifique : un seul endroit où le thérapeute téléverse et où le patient regarde en toute sécurité, avec les fondations juridiques et techniques qu'exige un contexte de santé.

Ce que contient la v0.1

DomaineStatut
AuthE-mail+mot de passe, réinitialisation du mot de passe, MFA (TOTP), gestion de session, RBAC
Upload vidéoMultipart reprenable (protocole tus) jusqu'à 10 Go, vers R2 / S3 / MinIO
Streaming vidéoLecture par signed URL avec support des range, pas d'URL publiques
Contrôle d'accèsPar autorisation : forever / time-limited / view-limited / download-limited
Coupons5 types : accès gratuit, % de remise, remise fixe, crédit de téléchargement, crédit de visionnage
PaiementsStripe (ponctuel + abonnements) + stub Mollie derrière une interface PaymentProvider
Tableaux de bordTherapist, Client, Admin
RGPDExport de données en ZIP + suppression planifiée avec période de grâce
i18nEN + NL dès le premier jour (next-intl)
Journal d'auditChaque mutation sensible est enregistrée

Stack

Frontend + API
Next.js 15 (App Router) + TypeScript + Tailwind + shadcn/ui
Auth
Auth.js v5 — credentials + hachage Argon2id + MFA TOTP
Base de données
PostgreSQL 16 + Prisma 6
Stockage
Cloudflare R2 (compatible S3) — l'abstraction de provider prend en charge S3, B2, MinIO, local
Uploads
protocole tus via @tus/server
Paiements
interface PaymentProvider avec Stripe-live + stub Mollie derrière
E-mail
stub console (v0.1) — templates react-email qui s'affichent dans les logs
Rate-limit
token-bucket Redis avec fallback en mémoire
Logging
JSON structuré pino + table AuditLog dédiée
Tests
Vitest unit/integration + Playwright e2e

Primitives de sécurité

Pas d'URL publiques. Chaque flux vidéo passe par une signed URL que le serveur n'émet qu'après vérification d'une autorisation d'accès. Les en-têtes range sont pris en charge sans que l'URL ne fuite jamais hors de la session.

MFA obligatoire pour les admins. L'association d'une app TOTP est une exigence à la première connexion ; pas d'accès aux tableaux de bord admin sans elle.

Argon2id comme hachage de mot de passe, avec des paramètres memory-hard.

RGPD by design. Export des données patient en ZIP, suppression de compte via un job planifié avec période de grâce, une table AuditLog pour toutes les mutations sensibles.

Abstraction du provider de paiement. Stripe en live, Mollie derrière la même interface — passage à iDEAL sans toucher à la logique métier.

Roadmap

VersionQuoi
v0.1 (maintenant)Toutes les primitives de sécurité critiques, déployable en production
v0.2Peaufinage de l'UI, transcodage HLS multi-débit, push notifications, vrai provider e-mail
v0.3+Domaine personnalisé par thérapeute, marque blanche, session en direct

Statut

v0.1 release candidate. Un provider SMTP et de vrais templates d'e-mail sont la prochaine étape avant le lancement. Client et cas d'usage spécifique sous NDA.