I build software.I run it.I secure it.

I'm Christopher. Software, infrastructure and security from Pachuca, Mexico.

Scroll ↓

Three trades, one person

Most teams split this across three roles. I write the application, set up the server it lives on and check how someone could take it down. That is why what I deliver reaches production and stays there.

Build

Web, mobile and desktop applications: from a finance app in Flutter to a React and .NET dashboard or a graphics engine in C++.

Run

Servers, virtualization, monitoring and networks. Migrations that lose no data, backups that actually restore and docs someone else can follow.

Secure

Audits with an agreed scope, system hardening and incident response: contain, clean up and leave evidence.

Projects

Scroll →

Screenshot of Tomín

Every peso, on time

Tomín

Personal app for credit cards: it reads PDF statements with AI, works out closing dates, due dates and interest-free installments, and projects whether the money lasts until the next payment.

  • Flutter
  • Supabase
  • PostgreSQL
  • Claude API

Audits with a mandatory scope

TESSYRIUM

Console platform that orchestrates nmap, ssh-audit and testssl. It scans nothing outside the signed scope of the project, and keeps inventory and history.

  • Python
  • Typer
  • Textual
View on GitHub ↗
Screenshot of Aether

Live wallpapers for Hyprland

Aether

Animated scenes as desktop wallpaper, with its own engine, an editor built into the system panel, one scene per monitor and per-app audio mixing.

  • C++
  • OpenGL
  • QML
  • PipeWire

RGB without the vendor's software

Alumbra

Lighting control for my peripherals. I worked out the hub protocol by observing the original program and rewrote it with my own interface.

  • Rust
  • iced
  • USB HID

Every server on one board

Server dashboard

Internal dashboard for a company's infrastructure team: inventory pulled from Zabbix, live metrics on demand, role-based access with a second factor and alerts by email and Telegram.

  • React
  • .NET
  • Zabbix
  • TOTP

A wholesaler catalog, online

Online store

Online store for a technology company: it syncs catalog, prices and stock with the wholesaler and takes the order from cart to payment.

  • Next.js
  • Fastify
  • Prisma
  • PostgreSQL

The network reports before the customer does

AI monitoring

Workflows that watch a network of over a thousand devices, group outages by link and report on Telegram with context instead of hundreds of loose alerts.

  • n8n
  • PostgreSQL
  • Telegram
  • AI

Before this

  • 2025–26
    Inventory and logistics

    Control and bulk movement of consumable and serialized inventory, with movement auditing and reports, inside a company's internal system.

    C# · ASP.NET · MySQL · JavaScript
  • 2025
    Real-time violence detection

    Deep learning models trained to detect violence in live video, with their frontend and backend.

    YOLOv8 · MobileNetV2 · BiLSTM · Flask
  • 2024–25
    EduSphere

    Web platform for school management at primary and secondary level.

    PHP · MySQL · JavaScript
  • 2024
    Netwire AR

    Mobile app for learning networking with augmented reality, with my own 3D models.

    Unity · Blender

Cases

Three real problems: how they were, what I found, what I did and how they ended up. No client names.

[repair]

The monitoring system that kept crashing

34×faster disk reads

How it was

The system watching almost 4,000 network devices hung every day. The console stopped responding, the database logged about 270 errors a day and outage alerts were lost: the network went unwatched exactly when it failed.

What I found

Two causes, one on top of the other. The database had corrupt indexes in its history. Underneath, the virtual machine disk used an old emulated controller: the hypervisor measured 1 ms per read while the database waited 444 ms.

What I did

  • Repaired the database without losing the configuration or the device inventory.
  • Moved the disk to a modern controller by cloning it, with a rollback ready.
  • Left a weekly integrity check and backups that test themselves.

How it ended

Zero errors since the repair, the console answers in 0.02 seconds and 866 GB were freed. Everything went into a log someone else can follow step by step.

Disk read time
before444 ms
after13 ms
Database errors per day
before270
after0

[incident]

One site down that turned out to be six sites taken over

6compromised sites, not one

How it was

I was asked to look at a website that had stopped working on a shared hosting server. It looked like a WordPress fault.

What I found

It was not a fault. A crypto miner had been using the processor at 186% for 20 days, backdoors had been reinstalling themselves every hour for over a year, and a plugin was stealing passwords at login. It was six sites, and the server had 273 security patches pending.

What I did

  • Read-only forensic review in five phases, keeping the evidence intact.
  • A list of indicators to detect the same attack on other servers.
  • A clean copy of each site, verified in an isolated environment before handing it over.
  • A report for management: what happened, who answers for each site and the plan.

How it ended

The affected sites were rebuilt clean and management received a prioritized plan to replace the server, instead of an unexplained "it is fixed".

[automation]

Too many alerts to read

16×more alerts than time to review them

How it was

The night shift received 859 network alerts. Reviewing each takes about 10 minutes: that needed 16 times the time available. In practice nobody could tell an important outage from the noise.

What I found

I measured 59 hours of real alerts. Most were the same outage counted many times: when a link fails, every device behind it reports.

What I did

  • Automated workflows that read the state of the network every minute.
  • Grouping by topology: if a link drops, the link is reported, not its hundred devices.
  • One message per incident, with the likely cause and who is affected.

How it ended

In the measurement, 2,036 confirmed outages became 703 incidents. The alert arrives with context and before the customer calls.

Alerts for the same outages
before2,036
after703

How I work

  1. Understand

    Before writing code or touching a server, I write down what exists, what is wanted and what is out of scope. In security, nothing is reviewed without a signed scope.

  2. Build small

    Small deliveries that already work, with tests. I would rather show you something real every few days than one big delivery at the end.

  3. Put it to work

    Server, backups, monitoring and a rollback ready. A system is not finished until it runs where it should and reports when something fails.

  4. Leave it documented

    A log of what was done and why, so anyone can maintain it without depending on me.

Credentials

Drag them ✥

What I work with

Off the clock

What I do when nothing needs fixing. Almost all of it is about patience and putting things in their place.

Piano
I am learning it. Try the one below: it still sounds better than I do.
Art
All kinds. I stop at anything well made, be it a painting or an interface.
Fishing
Waiting without losing your nerve takes practice too.
Order
On the desk, on the servers and in the code.
Solving problems
I do not let go of a bug until I know why it happened.
Skating
Balance and falls: you learn from both.
Video games
To switch off, and because they are well-made systems too.
Customizing Linux
I built my Arch and Hyprland desktop piece by piece.

I listen to everything: from dubstep to classical music, with bachata, metal and k-pop along the way.

Play a key Also on your keyboard: A to L

Shall we build something?

If you have an application to build, infrastructure to put in order or a system you want reviewed before someone else does it, write to me.