@startuml uml-deployment-runtime !include _style.iuml title 2. Diagrama UML de Despliegue — Runtime de produccion node "iPhone iOS 16+" <> as iPhone { artifact "expressmx-cliente.ipa" as ipaCli artifact "expressmx-prestador.ipa" as ipaPr component "Hermes + RN 0.83" as hermesIos } node "Android 11+" <> as Android { artifact "expressmx-cliente.aab" as aabCli artifact "expressmx-prestador.aab" as aabPr component "Hermes + RN 0.83" as hermesAnd } node "Browser desktop / mobile" <> as Browser { artifact "bundle Next.js (RSC + JS)" as bundleWeb component "V8 / SpiderMonkey / JSC" as jsRuntime } node "Vercel Edge Network" <> as vercel { component "Middleware Edge (V8 isolate)" as edgeMid component "Next.js Server (RSC + SSR)\nNode.js 20" as ssr component "API Routes /api/v1/*\nNode.js 20 Functions" as apiV1 component "API Routes /api/* (legacy)\nNode.js 20 Functions" as apiLegacy component "Static Assets + ISR\nVercel CDN" as static component "Vercel Cron\nNode.js 20" as cron } database "Neon Postgres" as neon { node "Compute (autoscale 0.25-4 CU)" <> as compute { artifact "Postgres 16" as pgArt } node "Storage" <> as storage { artifact "pages + WAL 7d" as walArt } node "Branch production" <> as brProd node "Branch dev" <> as brDev node "Branches preview/pr-N" <> as brPrev } cloud "Resend" <> as Resend { component "SMTP relay (Resend API v6.12)" as resendSmtp component "Templates engine" as resendTpl } ' Cliente -> Vercel Browser --> edgeMid : HTTPS/443 TLS 1.3 iPhone --> apiV1 : HTTPS + JWT Bearer Android --> apiV1 : HTTPS + JWT Bearer Browser ..> static : HTTPS cache-immutable ' Vercel internal edgeMid --> ssr : route match edgeMid --> apiV1 : route match edgeMid --> apiLegacy : route match ssr --> apiV1 : invoke ' Vercel -> Neon apiV1 --> compute : pg wire /5432 SSL apiLegacy --> compute : pg wire /5432 SSL ssr --> compute : pg wire /5432 SSL cron --> compute : pg wire /5432 SSL compute --> brProd compute --> brDev compute --> brPrev brProd ..> storage : persist + WAL brDev ..> storage : persist + WAL brPrev ..> storage : copy-on-write ' Vercel -> Resend apiV1 ..> resendSmtp : Resend API (Bearer) apiLegacy ..> resendSmtp : Resend API (Bearer) resendSmtp --> resendTpl resendSmtp ..> Browser : SMTP outbound TLS resendSmtp ..> iPhone : SMTP outbound TLS resendSmtp ..> Android : SMTP outbound TLS footer Fuente: deployment.md + neon-branching.md + .github/workflows/ci.yml @enduml