Software Developer · Backend Engineering · Aplicaciones web
Desarrollo aplicaciones con especial atención a la lógica de negocio, la seguridad de las APIs y la persistencia de datos. Trabajo principalmente con Java, Spring Boot, TypeScript y NestJS; también construyo interfaces con React. Mi código y mis decisiones de arquitectura pueden revisarse en los repositorios públicos.
Proyectos · Arquitectura · Código real · Contribuciones · LinkedIn
| Área | Herramientas | Evidencia |
|---|---|---|
| Backend | Java 25, Spring Boot 4, NestJS, TypeScript, REST | CRM · NEXO |
| Frontend | React, JavaScript, TypeScript, HTML/CSS, Vite, Tailwind | Patitas Felices · CRM |
| Datos | PostgreSQL, MySQL, SQL Server, MikroORM, JPA | Persistencia NEXO · CRM |
| Calidad y operaciones | Git, Docker, GitHub Actions, pruebas, documentación | CI NEXO · CI CRM |
01 / NEXO Fulfillment — Backend distribuido
Sistema para pedidos, inventario y despachos, con servicios separados de operaciones, documentos y notificaciones.
- Reglas de negocio: reservas transaccionales de stock, control de estados y creación idempotente de pedidos.
- Integración: eventos de dominio, outbox/inbox, colas, documentos PDF y notificaciones por WebSockets.
- Entrega: contenedores Docker, configuración de infraestructura, pruebas y documentación de arquitectura.
Ver implementación de pedidos · Documentación · Pruebas · Pipeline
02 / Borough & Ledger CRM — Java y aplicaciones empresariales
CRM modular con clientes, contactos, prospectos, oportunidades, cotizaciones, tareas, reportes y auditoría.
- Backend: Java 25, Spring Boot 4, servicios transaccionales y separación por organización.
- Datos: MySQL, migraciones Flyway, consultas paginadas y trazabilidad.
- Interfaz: React y TypeScript, con módulos conectados a la API.
Ver servicio de clientes · Pruebas · CI
03 / Patitas Felices — Frontend
Proyecto de experiencia web para una tienda de mascotas, organizado mediante rutas, vistas, componentes reutilizables y estilos responsivos. Su alcance es frontend: no se presenta como una tienda con pagos o backend productivo.
Ver rutas React · Componentes · Código fuente
En NEXO, la reserva de stock se confirma en una transacción. El evento de integración queda registrado mediante outbox para su posterior publicación. Los servicios consumidores gestionan sus propios estados e inbox, evitando depender de una transacción distribuida entre bases de datos.
flowchart LR
UI["Panel React"] --> API["API · NestJS"]
API --> DB[("PostgreSQL · pedidos / stock")]
DB --> OB["Outbox"]
OB --> BUS["SNS / SQS"]
BUS --> DOC["Documentos · PDF / S3"]
BUS --> NOT["Notificaciones"]
NOT --> WS["WebSockets"]
WS --> UI
El esquema describe componentes implementados y contratos del proyecto, no un despliegue AWS público certificado. Consultar decisiones y límites.
Los siguientes fragmentos proceden de los repositorios enlazados. No son ejemplos inventados para el perfil.
TypeScript / NestJS — deduplicación de pedidos mediante clave idempotente
return this.store.transaction(async (tx) => {
const prior = await tx.lockRequest(actor.sub, key);
if (prior) {
invariant(
prior.requestHash === requestHash,
'IDEMPOTENCY_CONFLICT',
'Esta clave ya se utilizó con otros datos.',
);
const order = await tx.order(prior.orderId);
invariant(order, 'ORDER_NOT_FOUND', 'Pedido no encontrado.', 404);
return snapshot(order, await tx.items(order.id));
}
// Continúa la creación transaccional del pedido...
});Qué resuelve: dos solicitudes con la misma clave y contenido no generan dos pedidos; utilizar la misma clave con datos distintos produce un conflicto. Ver método completo.
Java / Spring Boot — aislamiento de clientes por organización
private Customer find(AppUser actor, UUID id) {
return customers.findByIdAndOrganizationIdAndArchivedAtIsNull(
id, actor.getOrganizationId()
).orElseThrow(() -> new ResponseStatusException(
HttpStatus.NOT_FOUND, "Cliente no encontrado"
));
}Qué resuelve: la consulta filtra por organización y excluye clientes archivados, sin revelar la existencia de registros de otra organización. Ver código completo.
React — organización de rutas por funcionalidades
<Routes>
<Route path="/" element={<Home />} />
<Route path="/products/cat" element={<ProductsCat />} />
<Route path="/cart" element={<Cart />} />
<Route path="/profile" element={<Profile />} />
</Routes>Qué muestra: separación de vistas y navegación de una aplicación React. Ver en el proyecto.
Este apartado se genera desde código mediante GitHub Actions y un script de Node.js. No introduce visitas, commits, estrellas ni actividad ficticia.
Actividad verificable · Instantánea pública: 2026-11-02 (UTC)
| Contribuciones (últimos 12 meses) | Repositorios públicos | Proyectos propios públicos | Estrellas en esos repositorios | Seguidores |
|---|---|---|---|---|
| 68 | 11 | 5 | 4 | 7 |
Últimos eventos públicos registrados
| Fecha | Repositorio | Evento |
|---|---|---|
| 2026-11-01 | web-petshop |
Código actualizado |
| 2026-11-01 | openstand |
Código actualizado |
| 2026-11-01 | web-petshop |
Nueva rama o repositorio |
Las contribuciones proceden del calendario público de GitHub. Los eventos disponibles dependen de la ventana de la API; estas cifras no son una medición de habilidad o productividad.
Mantengo la visualización de Yoshi — GitHub Profile 3D Contrib, que transforma el historial de contribuciones en un gráfico tridimensional generado a partir de GitHub.
Explorar otras vistas 3D generadas desde el mismo calendario
Además de mis proyectos, participo en conversaciones técnicas y contribuciones a repositorios de terceros. Los siguientes son forks públicos, no proyectos originales de mi autoría:
duo · deadcode-hunter · pqc-migration-readiness
GitHub · LinkedIn · Explorar repositorios
Este README prioriza evidencia técnica, decisiones de implementación y proyectos verificables. Los gráficos 3D son la única sección visual externa; las demás visualizaciones provienen de Markdown y código.

