Velyo es un sistema de gestión de condominios que diseñé y construí de punta a punta — intercomunicador con videollamada, control de acceso físico, gestión de visitas, alertas de emergencia y panel de administración. No es un proyecto de práctica: Agencia Curicó, un cliente real, lo tiene corriendo en producción hoy, con su propia cuenta de AWS aislada.
Este es el diagrama completo de esa arquitectura, desde el celular del residente hasta el relé físico que abre la puerta. Nada de esto es un mockup — cada nodo y cada conexión salió de leer el código real del proyecto.
← Scroll horizontal para ver el diagrama completo →
Route 53 recibe todo el tráfico y lo reparte: a CloudFront si es un sitio (el website público, el panel de admin o el kiosko de conserjería — los tres corriendo SSR real en Lambda), o a API Gateway si es una llamada de API, con el JWT de Cognito validado ahí mismo, antes de que el request toque una sola línea de código de negocio.
Las 4 APIs (mobile, intercom, webhooks, reports) y los 7 middlewares corren todos sobre Node.js 24.x en ARM64, con memoria, timeout y runtime fijados una sola vez en una construct propia — nada de configuración repetida stack por stack.
AppSync Events como pub/sub para lo que necesita llegar en tiempo real (llamada entrante, alertas, estado de puertas) y tres tópicos SNS FIFO o estándar para todo lo que puede procesarse async: comandos de puerta, eventos de dominio, y el envío genérico de correo.
Cuando alguien llama por el intercomunicador, intercom-api firma un JWT y le pega directo a Firebase (FCM) en Android y a Apple Push (APNs) en iOS — mismo mecanismo para las dos, un push de datos puro que hace sonar la llamada con la UI nativa del sistema, aunque la app esté cerrada.
SOS, visitas y encomiendas no llegan como una notificación genérica: cada evento dispara su propio push de datos por FCM/APNs, con su propia acción al tocarlo — abrir la alerta de emergencia, ver el detalle de la visita, confirmar la encomienda. Mismo canal que la llamada, mismo nivel de prioridad, aunque la app esté cerrada.
Cada cliente vive en su propia cuenta de AWS aislada. Agencia Curicó no es un ambiente de prueba: tiene su propio Cognito, su propio dominio, su propio endpoint de IoT Core — completamente separado de cualquier otro cliente.
La parte que más me gusta mostrar: AWS IoT Core con Fleet Provisioning by Claim, así que cada placa ESP32 se auto-aprovisiona sola en terreno — pide su propio certificado la primera vez que se conecta, sin que nadie entre a la consola de AWS. De ahí en adelante habla MQTT directo con el backend, y un relé físico abre la puerta.
Cuéntame qué estás construyendo. Respondo personalmente cada mensaje.
Escríbeme hola@jbcsoftware.cl$ curl -X POST /jorge/proyecto \ -d location="Chile" \ -d email="hola@jbcsoftware.cl" \ -d disponibilidad="abierta" → 200 OK — te responderé pronto