← Todos los trabajos

Plataforma 3D de modelos estructurales

Una plataforma web para una consultora de ingeniería estructural que parsea y renderiza en 3D modelos JSAF, incluso archivos de hasta 600 MB.

Rol
Arquitecto de Software & Backend Lead
Período
Ago 2025 – Presente
Cliente
Consultora de ingeniería estructural · en producción
  • C#
  • ASP.NET Core
  • PostgreSQL
  • React
  • TanStack Query
  • Three.js
  • Web Workers
  • GCP
  • Pub/Sub
  • Render
  • Terraform

Contexto

La consultora necesitaba revisar modelos estructurales en el navegador, sin software de escritorio. Fui el arquitecto de la solución en un equipo de 5, escribí la mayor parte del backend y lideré los refactors grandes de arquitectura. Desde octubre de 2026 me encargo del mantenimiento.

El problema

Los modelos llegan como archivos JSAF de hasta 600 MB. Parsearlos dentro del request daba timeout, y renderizarlos sin cuidado congelaba el navegador y lo dejaba sin memoria.

Arquitectura

Seguí el flujo a medida que scrolleás. Cada paso muestra qué hace.

01 SubidaJSAF · hasta 600 MB02 AlmacenamientoCloud Storage03 MensajePub/Sub04 Worker de parseoASP.NET Core05 Datos del modeloCloud SQL · PostgreSQL06 APIASP.NET Core07 Web WorkersLazy loading08 Render 3DThree.js01 SubidaJSAF · hasta 600 MB02 AlmacenamientoCloud Storage03 MensajePub/Sub04 Worker de parseoASP.NET Core05 Datos del modeloCloud SQL · PostgreSQL06 APIASP.NET Core07 Web WorkersLazy loading08 Render 3DThree.js
  1. SubidaEl navegador sube el archivo del modelo directamente.
  2. AlmacenamientoLos archivos se guardan una vez y nunca bloquean la API.
  3. MensajeUn mensaje le pasa el trabajo a un worker.
  4. Worker de parseoParsea el modelo JSAF fuera del request.
  5. Datos del modeloElementos parseados y metadatos, listos para consultar.
  6. APILe sirve el modelo al navegador en partes.
  7. Web WorkersLa geometría se arma fuera del hilo principal y se carga de a partes.
  8. Render 3DEl ingeniero recorre la estructura en el navegador.

GCP · Cloud Storage · Pub/Sub · Cloud SQL — todo en Terraform

resource "google_storage_bucket" "models" {
  name = "structural-models"
}

resource "google_pubsub_topic" "parse" {
  name = "model-parse"
}

resource "google_sql_database_instance" "main" {
  database_version = "POSTGRES_16"
}

Lo que hice

  • Diseñé una arquitectura server-worker: las subidas van a Cloud Storage y un mensaje de Pub/Sub dispara un worker que parsea.
  • Escribí la mayor parte del backend en ASP.NET Core y lideré los refactors cuando cambió la arquitectura.
  • Optimicé el render en Three.js con Web Workers, lazy loading y manejo cuidadoso de memoria.
  • Definí la infraestructura en GCP con Terraform: Cloud Storage, Cloud SQL y Pub/Sub.
  • Llevé las sesiones de discovery, las demos y los ciclos de feedback con el cliente.

Decisiones clave

Nunca parsear dentro del request

La API solo recibe la subida y responde. Un mensaje de Pub/Sub le pasa el trabajo a un worker, así que un archivo de 600 MB no puede dar timeout ni frenar a otros usuarios.

Dejar libre el hilo principal

La geometría se prepara en Web Workers y se carga de a partes, así que la página sigue respondiendo mientras el modelo va llegando.

Terraform para una plataforma que es del cliente

El cliente es dueño de su infraestructura como código. Cualquier ingeniero puede recrearla o cambiarla, y eso hizo simple el pase a mantenimiento.

Resultados

  • 600 MBmodelos procesados en ~50 s
  • 5ingenieros en el equipo, con la arquitectura a mi cargo
  • En vivoen producción y en crecimiento