Marcos Britos

Proyectos

Algunos proyectos donde apliqué decisiones de backend, arquitectura, diseño de sistemas y datos en entornos reales.

Plataforma SaaS multi-tenant para clientes B2B

Plataforma SaaS B2B con múltiples clientes, administración centralizada y personalización por tenant. Rol: diseño de arquitectura, backend y modelo de datos.

Problema

El sistema debía soportar múltiples empresas con reglas particulares por cliente, manteniendo aislamiento de datos, trazabilidad por tenant y la posibilidad de evolucionar el producto sin romper integraciones existentes.

Enfoque

Se definió un enfoque multi-tenant sobre un esquema único, con filtros aplicados en la capa de acceso a datos, junto con un middleware de resolución de tenant por dominio y encabezados.

Los contratos de la API se diseñaron de forma explícita y versionada, alineados con bounded contexts del dominio, para poder introducir nuevas capacidades sin afectar clientes existentes.

Decisiones técnicas

  • API REST en .NET 7 siguiendo principios de Clean Architecture para separar aplicación, dominio e infraestructura.
  • Uso de Arquitectura Hexagonal (Ports & Adapters) para aislar el dominio de frameworks y proveedores externos.
  • Modelo de datos multi-tenant en SQL Server con TenantId explícito y validaciones en la capa de acceso a datos.
  • Autenticación basada en JWT con claims de tenant y rol, integrando un proveedor de identidad externo.
  • Logging estructurado y métricas con identificación de tenant para diagnósticos, observabilidad y seguimiento de performance.

Stack

.NET 7SQL ServerDockerJWT

API de plataforma de reservas con integración móvil

API backend para plataforma de reservas con clientes web y móviles. Rol: diseño de dominio, API y coordinación con los equipos de frontend.

Problema

Se necesitaba una API consistente para web y mobile, con manejo de disponibilidad, concurrencia en reservas y reglas de negocio específicas por tipo de recurso, manteniendo tiempos de respuesta acotados.

Enfoque

Se modeló el dominio de reservas y disponibilidad en torno a invariantes claros, validando reglas de negocio en una capa de dominio independiente del framework y de la base de datos.

La API se diseñó con endpoints específicos por caso de uso, en lugar de endpoints genéricos, para facilitar el versionado, la optimización y el monitoreo de cada flujo.

Decisiones técnicas

  • Implementación del backend con NestJS, módulos separados por contexto de negocio y DTOs tipados.
  • Uso de PostgreSQL con índices específicos para búsquedas por rango de fechas y estado de reserva.
  • Gestión de concurrencia en reservas mediante transacciones y, donde aplicaba, bloqueos optimistas.
  • Uso de colas para algunas operaciones asíncronas sensibles a picos de carga (notificaciones y confirmaciones).
  • Integración con aplicaciones React y React Native mediante contratos de API estables y documentados.

Stack

NodeNestJSPostgreSQLReactReact Native