Software Engineer · Full Stack · AngularAngular, React, Node.js, IA aplicada
Ficha clínica en salud y scoring crediticio en banca. Llevo requerimientos de punta a punta: los diseño con el Product Owner, los construyo y los valido antes de entregar. Integro IA al ciclo de desarrollo —agentes, skills reutilizables y pruebas con Playwright— para que el equipo entregue más rápido sin bajar el estándar.
Software que el personal clínico usa en su turno. Si una pantalla falla o confunde, el costo no es un ticket: es tiempo de atención.
Angular
TypeScript
Node.js
Oracle
Banca
Scoring crediticio multipaís
Proyecto BID · con NTT DATA
Front-end de evaluación crediticia operando con reglas distintas por país, con pruebas unitarias y análisis estático en el pipeline.
Angular
TypeScript
Bootstrap
SonarQube
IA aplicada
Chatbot con RAG
LUXXOR · web y WhatsApp
Asistente que responde con la documentación real del negocio: indexé la base de conocimiento con embeddings y recupero contexto antes de cada respuesta.
OpenAI API
ChromaDB
React
Node.js
2+
años en proyectos de software
Formación
Ingeniero en InformáticaINACAP · titulado 2025
Certificación
Azure Fundamentals (AZ-900)Microsoft Certified
Con qué trabajo
Frontend
Angular
React
Next.js
TypeScript
JavaScript
Tailwind CSS
Material-UI
Bootstrap 5
Backend
Node.js
Django
Python
PL/SQL
Datos
Oracle 19c
PostgreSQL
ChromaDB
IA
OpenAI API
Claude Code
Cursor
RAG
Embeddings
Agentes
Skills
Testing y calidad
Playwright
Jest
SonarQube
Herramientas y método
Git
GitLab
Bitbucket
Jenkins
ArgoCD
Jira
SCRUM
Kanban
02Trayectoria
Experiencia
Rising Software Engineer (Full Stack)
Clínica Alemana de Santiago
Desarrollo y gestión
Requerimientos:Análisis, planificación, diseño, desarrollo, validación y entrega con metodologías ágiles.
Stakeholders:Coordinación técnica con Product Owners para levantar requerimientos y definir plazos.
Estandarización:Decisiones técnicas y estándares de desarrollo para soluciones escalables.
Mentoring:Capacitación de nuevos desarrolladores y apoyo al equipo en la adopción de flujos con IA.
IA aplicada al desarrollo
Workflows:Estándares, instrucciones y flujos para agentes, hooks y skills: reutilización, consistencia y trazabilidad.
Skills reutilizables:Automatización de tareas repetitivas del ciclo de desarrollo.
Contexto y tokens:Reducción de información innecesaria en las interacciones con modelos generativos.
Pruebas:Pruebas funcionales con Playwright, apoyadas con IA para generar y ejecutar escenarios.
03Código corriendo
Demos interactivas
Todo corre en tu navegador
Pregúntale a mi CV
Simulación local de un flujo RAG, como el que implementé en LUXXOR: tu pregunta se convierte en vector (TF-IDF), se buscan los fragmentos más cercanos de mi CV y se responde con el mejor. Sin APIs externas.
Core Web Vitals en vivo
Estas métricas se miden en tu navegador, ahora mismo, con PerformanceObserver (los mismos datos que usa Chrome para sus Core Web Vitals). Prueba los botones y mira cómo cambian.
LCP
—
Midiendo…
CLS
0.000
Bueno
INP
—
Interactúa con la página
FCP
—
Midiendo…
TTFB
—
Midiendo…
Largest Contentful Paint · Cumulative Layout Shift · Interaction to Next Paint
LCP: Si está en rojo: priorizar la imagen/hero (fetchpriority, preload), reducir JS bloqueante y servir HTML desde el servidor.
CLS: Si está en rojo: reservar ancho/alto de imágenes, usar font-display y evitar insertar contenido sobre lo ya visible.
INP: Si está en rojo: dividir tareas largas, diferir trabajo no crítico y mandar menos JS al cliente.
FCP: Reducir recursos que bloquean el render y usar Server Components para enviar HTML útil de inmediato.
TTFB: Cachear en CDN, usar rutas estáticas y reducir trabajo en el servidor.
Laboratorio
Clics: 0
Este bloque simula contenido ya visible. Cuando un banner se inserta encima sin espacio reservado, todo se desplaza hacia abajo: eso es un layout shift, y el CLS lo suma.
Valores de laboratorio de esta visita; en producción se miden con datos reales de usuarios (CrUX / RUM) en el percentil 75.
04Trabajo
Proyectos
Filtra por tecnología
7 proyectos mostrados
Este portafolio
react
Next.js 15 (App Router) bilingüe ES/EN: Server Components por defecto y pequeñas islas cliente para lo interactivo.
Navegable con teclado, con foco visible y roles ARIA correctos
i18n con rutas /es y /en, middleware y metadatos por idioma
Tema claro/oscuro sin flash; animaciones solo con CSS + IntersectionObserver
Tests e2e con Playwright en ambos idiomas
Next.js 15
React 19
TypeScript
Tailwind 4
Playwright
Panel de Core Web Vitals en vivo
react
Mide LCP, CLS, INP, FCP y TTFB de la propia página con PerformanceObserver, con un laboratorio para provocar CLS e INP a propósito.
CLS con ventanas de sesión, igual que la definición oficial
INP calculado por interacción (percentil alto)
Cada métrica incluye cómo arreglarla
React 19
PerformanceObserver
Event Timing
Layout Instability
Demo RAG sobre mi CV
react
Versión didáctica, 100% en el navegador, del flujo RAG que implementé en LUXXOR: recupera por similitud TF-IDF y responde con el mejor fragmento.
Muestra los fragmentos recuperados con su puntaje
Respuesta en streaming accesible con lector de pantalla
Lógica de recuperación pura y testeable
React 19
TypeScript
TF-IDF
Similitud coseno
Design system en Storybook
react
Button, Badge, Tabs y ProjectCard documentados con estados, controles y chequeos automáticos de accesibilidad.
Tabs con patrón WAI-ARIA y navegación por flechas
Tokens de color con modo claro/oscuro
Addon a11y para detectar problemas de contraste y semántica
Storybook 9
React 19
Tailwind 4
WAI-ARIA
Explorador de 50.000 filas (Angular)
angular
Tabla virtualizada escrita a mano: solo existen en el DOM las filas visibles. Orden, filtro, navegación por teclado y encabezado fijo.
Muestra en vivo cuántos nodos hay realmente en el DOM
role=grid con aria-rowcount y aria-rowindex sobre filas virtuales
La matemática de la ventana es pura y está cubierta por tests
Angular 19
Signals
TypeScript
Jasmine
Buscador con RxJS (Angular)
angular
debounce, cancelación de respuestas obsoletas y reintento con backoff, con una línea de tiempo que muestra qué petición se canceló y por qué.
switchMap contra mergeMap: el race condition se ve, no se explica
Latencia inversa al largo de la consulta para forzar el caso
Estados de carga, vacío y error, y resultado obsoleto señalizado
Angular 19
RxJS
Signals
Jasmine
Demo RAG (Angular)
angular
El mismo flujo de recuperación TF-IDF, implementado con Signals y formularios en Angular.
Estado de la consulta y resultados con signal() y computed()
Streaming de la respuesta palabra por palabra
Pruebas unitarias del motor de recuperación
Angular 19
Signals
TF-IDF
Jasmine
05Fuera del código
Fotografía y viajes
Cuando cierro el editor, salgo con la cámara. Me gusta viajar y fotografiar lo que encuentro en el camino, sobre todo los detalles chicos que aparecen si uno camina sin apuro.
Fotografía
Viajes
Naturaleza
Lago Collico
Bosque nativo
Glaciar Pichillancahue
Aguileñas
Ciruelo en flor
06Hablemos
Contacto
Abierto a nuevas oportunidades
¿Tienes un proyecto o un puesto en mente?
Leo todos los correos y respondo. Cuéntame qué están construyendo y vemos cómo puedo aportar.