Senior Software Engineer
Fast pages, measured and kept that way.
I'm Miguel, a senior software engineer in Colombia with 17+ years of experience. I focus on the front end: Next.js and React in production, with performance built into every site, not added at the end.
View my portfolio02Skills
The stack I ship with, and how I keep it fast.
Mindset
Performance
I treat it as part of the build, not a last step: what loads first, what can wait, what the cache holds. The habit started on storefronts, with service workers and lazy loading, years before React.
Framework and library
Next.js and React
App Router, Server Components and Server Actions, with caching and revalidation planned from the first page. Reusable components built from Figma handoffs, with client code only where it is needed.
Language
TypeScript
The default for the platforms I ship and for the packages I build for the team.
Styling
Tailwind CSS
With Radix UI and shadcn/ui as the base of the platforms: accessible primitives, styled in one place.
Query layer
GraphQL
Typed queries with variables and cursor pagination from Next.js to WPGraphQL. I also wrote a plugin with the default queries a headless site needs, and rules against introspection abuse and circular queries.
Headless CMS
Headless WordPress
WPGraphQL and REST feeding Next.js, with on-demand revalidation from WordPress when content changes.
Plugins
PHP
WordPress plugins with PSR-4, PHPStan level 8, PHPCS and PHPUnit, released by CI on every tag.
Runtime
Node.js
The CLIs and libraries I publish on npm, such as jsdoc-to-tsdoc, recaptcha-next and docs-sitekit.
Quality
Testing
Jest and Testing Library for units, Cypress and Playwright end to end.
Delivery
CI/CD
GitHub Actions across my projects: matrix tests, CodeQL, Dependabot with auto-merge and releases that run on a tag. Actions are pinned by SHA and Docker base images by digest, so nothing in a build changes without a commit, which limits supply-chain attacks.
Infrastructure
AWS
CloudFront, ECS, Secrets Manager, CodePipeline and Amplify behind the production platforms.
AI workflows
AI-assisted engineering
agents-toolkit: prompts and skills for Claude Code, GitHub Copilot and Codex, from ticket to pull request. CI that sets up and reviews with the Copilot agent, and an MCP server for an internal API.
The PHP logo is by Colin Viebrock, adapted to one color under CC BY-SA 4.0. The original is on php.net.
03About
I taught myself to code with no formal training, then got my first professional job in 2009 and studied Multimedia Production at SENA while working.
Since 2023 I've been back in school for a Software Engineering degree, alongside my day job building the front end of Next.js platforms, mostly with Next.js, TypeScript and headless WordPress.
Performance is how I work, not a task at the end. It started on storefronts, with ES6 modules, service workers and lazy loading, and it comes with me to every Next.js site.
I started on one job, moving sites from WordPress to Next.js. As I learned the business, I began to build the tools the team could reuse, under the same standards for code, architecture, CI/CD and quality.
I'm based in Madrid, Cundinamarca, Colombia. Outside of work, I'm usually out with my dog, Mila.

17+
Years of experience
Front end
Where I focus
Fast
Performance from the first commit
Reusable
Packages and standards the team builds on
Frontend developer
2009 to 2019
First professional job in 2009, then agencies and independent client work through 2019.
Frontend tech lead, SAP Commerce
2019 to 2024
Storefront work where the performance habit started: ES6 modules, PWAs, service workers and lazy loading. Promoted to tech lead in 2020.
React and Next.js in production
Since November 2023
Moved to React and Next.js, building platforms for a U.S. client.
Senior software engineer
Today
Next.js platforms, WordPress plugins and open-source packages, built from Figma handoffs and made to be reused, with performance in each.
04What I do
The interesting part is never the first release. It's whether it still holds up a year later.
- 01
Performance that survives the release
Pages that load fast and keep loading fast after the release. Caching, images and scripts are planned with the feature and measured before and after. It started on storefronts, with service workers and PWAs.
- 02
Next.js platforms, end to end
Features shipped from the page to the API: App Router, Server Components and Server Actions against headless WordPress and REST, kept running after the launch.
- 03
Pipelines that catch things early
A release pipeline a team can rely on: matrix testing, CodeQL, Dependabot with auto-merge and SHA-pinned actions across my repositories, plus CI that requests automated review.
- 04
A foundation the team builds on
Public WordPress plugins on shared packages and coding standards, one script loader under the Next.js integrations, and base images for the WordPress and Next.js sites. Built once, documented, and reused.
05Portfolio
Things that are live, and what is inside them.

docs-sitekit, a documentation site for every repository
- TypeScript
- Astro
- Tailwind CSS 4
- shadcn/ui

FamilyAssets, a nationwide senior care directory
- Next.js
- React
- WordPress
- GraphQL

CSS and JS Minifier, a VS Code extension
- TypeScript
- VS Code API
- LightningCSS
- oxc-minify

Oasis Senior Advisors, from WordPress to headless Next.js
- Next.js
- WordPress
- WPGraphQL
- Elementor
06Blog
What each project actually taught me.
Not tutorials. The bug that took a week to find, the fix that turned out to be configuration, the assumption that measurement destroyed.
How to use a schema to work with several agents across different sessions
I work with Claude, Codex, Copilot and local models, and I run out of tokens in the middle of a task. This is the schema I use to keep the state of the work in two files, so another agent can continue. Download the skill and tell me how you do it.
Taking minification offline: two Rust libraries, six platforms, seven languages
Moving my VS Code extension from a minification API to local Rust minifiers fixed every feature complaint I had, and shipped a package that only worked on my own laptop to a few thousand people who were not me.
Shipping seven languages and showing everyone English
My VS Code extension had shipped translations for seven languages since October. Nine months later I found out that six of those bundles had never been displayed to a single user, and that my i18n test suite had been asserting through the bug the whole time.
How I fixed the macOS bug that broke every VS Code extension's tests
My own extension's tests started failing on macOS. I chased the wrong cause first, then found someone else had already diagnosed the right one, and shipped the fix myself instead of waiting.
open to new opportunities
Hiring, or starting a project? Let's talk.
I'm open to full-time roles and freelance projects. With more than 17 years building for the web, I can take a feature from the design file to production and help your team move faster. Tell me what you're hiring for.
07Contact
Have something to build, or just say hi.
Madrid, Cundinamarca, Colombia