Software Engineer · Full Stack · AngularAngular, React, Node.js, Applied AI
Electronic health records and multi-country credit scoring. I take requirements end to end: shape them with the Product Owner, build them and validate them before shipping. I bring AI into the development cycle — agents, reusable skills and Playwright tests — so the team ships faster without lowering the bar.
Software clinical staff use during their shift. When a screen fails or confuses, the cost is not a ticket: it is patient time.
Angular
TypeScript
Node.js
Oracle
Banking
Multi-country credit scoring
BID project · with NTT DATA
Credit assessment front end running under different rules per country, with unit tests and static analysis in the pipeline.
Angular
TypeScript
Bootstrap
SonarQube
Applied AI
RAG chatbot
LUXXOR · web and WhatsApp
An assistant that answers from the business's real documentation: I indexed the knowledge base with embeddings and retrieve context before every reply.
OpenAI API
ChromaDB
React
Node.js
2+
years building software
Education
Computer EngineerINACAP · graduated 2025
Certification
Azure Fundamentals (AZ-900)Microsoft Certified
What I work with
Frontend
Angular
React
Next.js
TypeScript
JavaScript
Tailwind CSS
Material-UI
Bootstrap 5
Backend
Node.js
Django
Python
PL/SQL
Data
Oracle 19c
PostgreSQL
ChromaDB
AI
OpenAI API
Claude Code
Cursor
RAG
Embeddings
Agents
Skills
Testing & quality
Playwright
Jest
SonarQube
Tools & methods
Git
GitLab
Bitbucket
Jenkins
ArgoCD
Jira
SCRUM
Kanban
02Track record
Experience
Rising Software Engineer (Full Stack)
Clínica Alemana de Santiago
Development & delivery
End to end:I take a requirement from the Product Owner all the way to production: design it, build it and validate it before shipping.
Standards:I take part in the project's technical decisions and wrote development standards the team uses today.
Mentoring:I run the technical onboarding for new joiners and led the team's adoption of AI workflows.
AI applied to development
Reusable skills:I designed agents, hooks and skills that automate repetitive work in the development lifecycle, with consistent results across developers.
Cost of context:I trimmed the unnecessary information sent to the models: fewer tokens per interaction for the same result.
Testing:I automated functional tests with Playwright and use AI to generate and maintain the scenarios.
03Running code
Interactive demos
Everything runs in your browser
Ask my CV
Local simulation of a RAG flow, like the one I built at LUXXOR: your question becomes a vector (TF-IDF), the closest fragments of my CV are retrieved, and the best one is returned. No external APIs.
Live Core Web Vitals
These metrics are measured in your browser, right now, with PerformanceObserver (the same data Chrome uses for its Core Web Vitals). Try the buttons and watch them change.
LCP
—
Measuring…
CLS
0.000
Good
INP
—
Interact with the page
FCP
—
Measuring…
TTFB
—
Measuring…
Largest Contentful Paint · Cumulative Layout Shift · Interaction to Next Paint
LCP: If it's red: prioritize the hero image (fetchpriority, preload), cut blocking JS and serve HTML from the server.
CLS: If it's red: reserve image width/height, use font-display and avoid inserting content above what's already visible.
INP: If it's red: break up long tasks, defer non-critical work and ship less JavaScript to the client.
FCP: Reduce render-blocking resources and use Server Components to send useful HTML right away.
TTFB: Cache on a CDN, use static routes and reduce server-side work.
Lab
Clicks: 0
This block stands in for content that is already visible. When a banner is inserted above it without reserved space, everything moves down: that is a layout shift, and CLS adds it up.
Lab values for this visit; in production they are measured from real-user data (CrUX / RUM) at the 75th percentile.
04Work
Projects
Filter by technology
7 projects shown
This portfolio
react
Bilingual ES/EN Next.js 15 (App Router): Server Components by default and small client islands for the interactive parts.
Keyboard navigable, with visible focus and correct ARIA roles
i18n with /es and /en routes, middleware and per-language metadata
Light/dark theme with no flash; animations with only CSS + IntersectionObserver
Playwright e2e tests in both languages
Next.js 15
React 19
TypeScript
Tailwind 4
Playwright
Live Core Web Vitals panel
react
Measures LCP, CLS, INP, FCP and TTFB of the page itself with PerformanceObserver, plus a lab to trigger CLS and INP on purpose.
CLS with session windows, as in the official definition
INP computed per interaction (high percentile)
Every metric explains how to fix it
React 19
PerformanceObserver
Event Timing
Layout Instability
RAG demo over my CV
react
A didactic, 100% in-browser version of the RAG flow I built at LUXXOR: retrieves by TF-IDF similarity and answers with the best fragment.
Shows the retrieved fragments with their score
Streaming answer that is screen-reader friendly
Pure, testable retrieval logic
React 19
TypeScript
TF-IDF
Cosine similarity
Design system in Storybook
react
Button, Badge, Tabs and ProjectCard documented with states, controls and automated accessibility checks.
Tabs following the WAI-ARIA pattern with arrow-key navigation
Color tokens with light/dark mode
a11y addon to catch contrast and semantics issues
Storybook 9
React 19
Tailwind 4
WAI-ARIA
50,000-row explorer (Angular)
angular
Hand-written virtualized table: only the visible rows exist in the DOM. Sorting, filtering, keyboard navigation and a sticky header.
Shows live how many nodes are actually in the DOM
role=grid with aria-rowcount and aria-rowindex over virtual rows
The windowing maths is pure and covered by tests
Angular 19
Signals
TypeScript
Jasmine
RxJS search (Angular)
angular
Debounce, cancellation of stale responses and retry with backoff, with a timeline showing which request was cancelled and why.
switchMap vs mergeMap: the race condition is shown, not explained
Latency inversely proportional to query length to force the case
Loading, empty and error states, with stale results flagged
Angular 19
RxJS
Signals
Jasmine
RAG demo (Angular)
angular
The same TF-IDF retrieval flow, built with Signals and forms in Angular.
Query and results state with signal() and computed()
Word-by-word answer streaming
Unit tests for the retrieval engine
Angular 19
Signals
TF-IDF
Jasmine
05Away from the keyboard
Photography and travel
When I close the editor, I pick up the camera. I love traveling and photographing what I find along the way, especially the small details that show up when you walk without hurry.
Photography
Travel
Nature
Lake Collico
Native forest
Pichillancahue Glacier
Columbines
Plum tree in bloom
06Say hello
Contact
Open to new opportunities
Have a project or a role in mind?
I read every email and I answer. Tell me what you are building and let's see how I can help.