Systems Engineer · Software Engineer

Diego Amado

I build digital systems that turn complex problems into simple solutions.

Web development, automation and artificial intelligence for solving real-world problems.

Available for new projects
FIG. 01 // DEV_WORKSPACEREF · IA
Pixel-art illustration of a developer seen from behind at a dual-monitor desk with code on screen, at dusk, with a dog resting on the rug and mountains outside the window
AI ILLUSTRATIONEST. 2025
// HARDWARE & COGNITIVE CRAFT
02.About

More than writing code, I design systems.

I'm a systems engineer with more than six years of experience building software in production.

I work mainly on the backend with Node.js, NestJS and TypeScript: APIs, modular architecture and asynchronous systems built on message queues. I also work across infrastructure, with AWS, Docker and CI/CD pipelines, and on the frontend with Angular and Vue when a project needs it.

I've spent the last four years working remotely as my team's go-to person on technical matters, while still writing code myself. I care about software architecture and anything that makes a system simpler to understand and maintain. On my own I build AI agents and automations, and I use AI daily as part of how I develop.

I live in Santander, Colombia.

  • Backend
  • Architecture
  • Asynchronous systems
  • Cloud & DevOps
  • AI
03.Projects

Selected projects

01
n
May 2026 — Present
Personal / portfolio project/Solo author, end-to-end

Multi-channel notification engine built from scratch as an architecture case study: runtime-swappable queue backends and delivery channels, with end-to-end distributed tracing.

  • NestJS
  • TypeScript
  • PostgreSQL
  • TypeORM
  • BullMQ
  • +7

What I did

  • Designed and built an asynchronous notification engine end-to-end in NestJS, with queue-based processing, automatic retries and dead-letter handling.
  • Implemented a queue abstraction layer (Adapter pattern, swappable BullMQ/SQS) and a delivery abstraction layer (Strategy pattern, email/Slack/SMS), keeping business logic decoupled from any concrete implementation.
  • Instrumented the system with OpenTelemetry, exporting traces to Grafana Tempo, covering both asynchronous processing paths.
  • Ran a structured self-audit against my own codebase and resolved the critical findings: API-key authentication, rate limiting, idempotency against duplicate sends, and a real npm dependency vulnerability.

Results

Swappable queues without touching business logic

BullMQ (Redis) and AWS SQS sit behind a single IQueue interface. The active backend is chosen with one environment variable; when SQS is active, the app makes no attempt to connect to Redis at all.

One environment variable to switch queue backends

Security self-audit and remediation

Found that the main endpoint operated as an unauthenticated open relay (could be used to send arbitrary HTML through my Resend account). Implemented API-key auth, rate limiting and idempotency to prevent duplicate sends on retry.

Critical audit findings resolved

Distributed tracing across both async paths

Centralized the sending logic into a single service method shared by the BullMQ worker and the SQS consumer, guaranteeing identical OpenTelemetry traces regardless of which backend processed the notification.

End-to-end traces in Grafana Tempo for both backends

Technologies

  • NestJS
  • TypeScript
  • PostgreSQL
  • TypeORM
  • BullMQ
  • AWS SQS
  • Redis
  • Docker
  • OpenTelemetry
  • Grafana Tempo
  • Resend
  • Slack API
02
e
Sep 2026 — Sep 2026
Technical test/Solo author, end-to-end

Energy management platform that turns electrical meter readings into operational decisions: detects anomalies with an explainable statistical engine, prioritizes them, and generates a natural-language explanation backed by an LLM that only drafts text, never decides.

  • Go
  • PostgreSQL
  • Vue
  • TypeScript
  • PrimeVue
  • +5

What I did

  • Designed and built an anomaly-detection engine end-to-end using robust statistics (median and MAD per hour of day), with no machine learning, favoring explainability over a black-box model.
  • Implemented a job queue on top of PostgreSQL (SELECT ... FOR UPDATE SKIP LOCKED) for asynchronous analysis processing, avoiding extra messaging infrastructure that the project scale didn't justify.
  • Designed the Explainer interface with two real implementations: a deterministic template and an OpenAI-compatible LLM client, with automatic fallback to the template if the LLM fails or no key is configured.
  • Built the backend in Go using only the standard library (no web framework or ORM) and the frontend in Vue 3 with TypeScript, PrimeVue and ECharts, packaged with Docker in a multi-stage build on a distroless image.

Results

Explainable detection, no black box

A rule tree based on hourly baselines, a robust z-score, and a physical consistency ratio (kWh / V·I·PF) classifies each case — real anomaly, false positive, or data-quality issue — with auditable numeric evidence behind every decision.

4 of 4 real anomalies detected, 0 false positives across the other 8 meters

Job queue with no extra infrastructure

Analysis runs asynchronously via a goroutine worker that claims work with SKIP LOCKED on PostgreSQL, survives restarts, and recovers stuck runs — the queue pattern without adding another moving piece to the stack.

Zero additional messaging infrastructure

LLM that drafts, never decides

The language model only receives evidence already computed by the deterministic engine and turns it into readable text; I verified figure by figure that the generated explanations exactly match the underlying evidence, and hardened the prompt to prevent it from suggesting unverified causes.

0 fabricated figures in generated explanations

Technologies

  • Go
  • PostgreSQL
  • Vue
  • TypeScript
  • PrimeVue
  • ECharts
  • Docker
  • JWT
  • OpenAI-compatible LLM API
  • Swagger / OpenAPI
04.Experience

Professional experience

  1. 01

    Full Stack Engineer · Spain

    Aug 2022 — May 2026

    Full stack development focused on backend, DevOps and infrastructure. Technical reference for the team for four years.

    • NestJS
    • Node.js
    • TypeScript
    • .NET
    • Vue
    • +10

    Remote · Spain (remote from Colombia)

    Responsibilities

    • Built and maintained NestJS/TypeScript backend services: REST API design, data validation and inter-service communication across multiple environments.
    • Delivered end-to-end features with Vue and Angular frontends: complex forms, data tables, filtering and real-time API consumption.
    • Deployed and managed AWS services (EC2, S3, ECR, Lambda, CloudFront) and configured development and production environments, both cloud and on-premise.
    • Diagnosed and resolved production incidents involving configuration, environment variables, service connectivity and runtime behaviour.
    • Acted as the team's technical reference: architecture decisions, code reviews and mentoring of more junior developers.

    Results

    Self-service certificate system

    Built most of the payroll and tax-retention certificate system. The API started in .NET and I migrated it to NestJS with queue-based processing on RabbitMQ: it receives the request, queues it, calls an external API, generates the documents, updates statuses in the database, packages them into an encrypted ZIP and delivers them.

    From several days of manual email handling to immediate delivery

    CI/CD pipelines

    Designed and implemented the team's CI/CD pipelines with GitHub Actions and Docker, removing manual steps and related errors.

    Deployments from ~20 manual minutes to ~5 automated

    Technologies

    • NestJS
    • Node.js
    • TypeScript
    • .NET
    • Vue
    • Angular
    • RabbitMQ
    • PostgreSQL
    • MySQL
    • Docker
    • GitHub Actions
    • AWS
    • Nginx
    • Linux
    • Python
  2. 02

    Software Solutions Engineer · Colombia

    Jul 2019 — Aug 2022

    Full stack applications with Node.js and integrations with internal systems and CRM platforms.

    • Node.js
    • Express
    • JavaScript
    • REST APIs
    • SQL

    Hybrid · Bogotá, Colombia

    Responsibilities

    • Delivered full stack applications with Node.js and Express aligned with business requirements.
    • Integrated REST APIs with internal systems and CRM platforms, with error handling, authentication flows and data transformation layers.
    • Identified performance bottlenecks through profiling and applied query optimization, caching strategies and architectural improvements.
    • Performed functional and integration testing alongside QA to ensure production stability.

    Technologies

    • Node.js
    • Express
    • JavaScript
    • REST APIs
    • SQL
  3. 03

    Junior Developer · Colombia

    Feb 2018 — May 2019

    Corporate web development, environment standardization and data visualization.

    • JavaScript
    • HTML
    • CSS
    • Docker
    • QlikView

    On-site · Bogotá, Colombia

    Responsibilities

    • Developed modules and dynamic interfaces for the corporate website.
    • Introduced Docker to the team to standardize local development environments.
    • Built KPI dashboards and visualizations in QlikView and supported data loading processes.

    Technologies

    • JavaScript
    • HTML
    • CSS
    • Docker
    • QlikView
05.Stack

Technologies I work with

Frontend
Vue.js Angular TypeScript Reactfundamentals
Backend
Node.js NestJS Python .NET
Data
SQL Server PostgreSQL MySQL MongoDB
Infrastructure
Docker Linux Nginx AWS CI/CD
Tools
Git GitHub VS Code
AI
Claude Code Claude.ai OpenAI
06.Contact

Have a project in mind?

Let's talk about how I can help.