Vercel
Next.js and public assets
Pages, SSR, PWA, and static resources. NEXT_PUBLIC variables are set at build time; private clinical files never belong here.
Platform architecture
Choose a scenario, select a component, and inspect its placement, data, connections, and operational owner.
Interactive topology
Select a node. Connected services remain highlighted while its responsibilities and flows open alongside the map.
The web app runs on Vercel while the API, FFmpeg, and private media run on a container host with persistent storage. PostgreSQL is managed separately.
The API controls private data and external integrations
Critical separation
The boundary follows process duration, secrets, and durable-storage needs rather than programming language.
Vercel
Pages, SSR, PWA, and static resources. NEXT_PUBLIC variables are set at build time; private clinical files never belong here.
Separate runtime
The API needs long-running processes, stable outbound connections, FFmpeg/ffprobe, and a quarantine volume: use a container or VPS.
Data boundary
A managed database simplifies backups, upgrades, and recovery. With Compose, its data must live in a persistent volume.
Launch order
Each lower layer must be ready before its dependants start.
Provision PostgreSQL, persistent media storage, domains, TLS, and production secrets.
Start the API container; it validates configuration and applies migrations under an advisory lock.
Build Next.js with final NEXT_PUBLIC_SITE_URL and NEXT_PUBLIC_API_URL values.
Check health, CORS/cookies, email, payments, video, backups, and recovery.
Before production
Clinical-media and DICOM uploads must not open until the de-identification profile, malware scanning, retention policy, and incident procedures are accepted. Transcoding is implemented, but it does not replace those safeguards.