Skip to content
View yvalenta's full-sized avatar
🏠
Working from home
🏠
Working from home

Block or report yvalenta

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
yvalenta/README.md

💫 Yonatan Valencia

Sr. Software & AI Integration Engineer @ Globant

Designing scalable architectures, agentic AI workflows, and self-hosted ecosystems.

Discord LinkedIn Twitter Instagram


🔭 About Me

With over a decade of experience in the Ruby on Rails ecosystem and backend engineering, I currently specialize in the convergence of traditional software engineering and Artificial Intelligence.

I build agentic workflows (LangChain, n8n, Anthropic Claude, Gemini, Amazon Bedrock) and design robust DevOps infrastructures — from zero-downtime Kamal 2 deploys to a self-hosted home lab exposed through a single Cloudflare Tunnel with no open ports. Lately my main line of work is verifiable compute: outputs that a third party can check without trusting whoever produced them, sold agent-to-agent over x402 micropayments — see NomiCheck below.

The through-line across all of it is a habit rather than a stack: measure before believing, including your own documentation. Every claim below that carries a number was measured, and the ones that turned out false are written down too — my own docs passed six straight audits while publicly serving a wallet I had already rotated, which is what taught me to build the auditors that compare prose against what the servers actually return.

When I'm not optimizing containers or integrating APIs, I enjoy structured swim training and exploring the intersection of technology and brand development within the hospitality and gastronomy sector — currently building the digital presence and point-of-sale system for Resplandor, a Colombian restaurant in La Estrella, Antioquia.


🌌 Skills & Projects Constellation

Skills and Projects Map

An interconnected view of my tech stack, projects, and areas of expertise.


💻 Tech Stack

⚡ Core & Frameworks

Ruby Rails Python Node.js TypeScript Express Prisma React Vite Hotwire GraphQL

🎨 Frontend & Design Systems

TailwindCSS DaisyUI Alpine.js Google Fonts Canva

🧠 AI & Agentic Workflows

Anthropic Claude Gemini Amazon Bedrock LangChain n8n

🔏 Verifiable Compute

Ed25519 x402 Base USDC ERC-8004 MCP

☁️ Cloud, Infra & Data

AWS Docker Kamal Cloudflare Nginx Supabase PostgreSQL Redis ElasticSearch


⚖️ NomiCheck — verifiable payroll

The calculation is a commodity. The proof is not.

A Colombian payroll engine built around one idea: an answer nobody can check is worth very little. Live at nomicheck.ynt.codes.

Piece What it does
Dated legal catalog Every statutory parameter — minimum wage, transport allowance, UVT, night and Sunday premiums, the ordinary-hour divisor, social-security rates, garnishment and withholding caps — resolvable on any date since 2020, each with the decree or resolution that set it and the window it was in force.
Deterministic calculators Payroll, withholding tax, payslip verification, final settlement, USDC payout. Every response cites its legal basis (CST, E.T. art. 383/388) and carries the sha256 of the catalog that produced it.
Signed envelopes Each output is signed Ed25519 in an open CC0 format — the sobre — with a frozen canonicalization, published test vectors and a conformance suite anyone can run against their own implementation: Ruby, Node and the browser already produce byte-identical signatures, and an implementer's guide invites more. Verify at ynt.codes/verificar — the page runs entirely in the browser and sends nothing anywhere, so verification never depends on trusting the issuer.
x402 paywall The priced endpoints answer 402 Payment Required before doing any work, and settle in USDC on Base and Avalanche (EIP-3009) — each network routed to its own facilitator, and the server refuses to boot if a network is routed to one that cannot settle it. Charge first, then serve — a wall that serves before it collects is not a wall.
Free triage, priced report A free precheck (POST /api/batch/verificar/prechequeo) runs the same engine and tells you upfront whether a payslip is clean — you only pay for the full report, and the price never depends on what it finds.
MCP server Any MCP-capable agent gets five tools to discover, verify and buy: structured 402 terms, schema, worked example, local envelope verification — and a cross-check of the payment address in the live 402 against the published agent card, so an intercepted wall cannot silently redirect funds.
Agent identity An ERC-8004 identity on Base mainnet, published as an A2A agent card and an ARD catalog at ynt.codes, with ERC-8128 request signing against Execution Market — where the service is listed and sold agent-to-agent, delivery returned inline and signed.
Stateless by design Input JSON is processed in memory and discarded — never written to a database (Ley 1581/2012, habeas data).

Verify one end-to-end, in one click, with nothing installed and no account:

https://ynt.codes/verificar?url=https://nomicheck.ynt.codes/api/batch/verificar/ejemplo

Stack: TypeScript · Express · Prisma · PostgreSQL 17 · React 19 + Vite · pnpm monorepo · viem · Docker Compose on AWS Lightsail, with the home lab as a cold standby. The API and the web ship as one container on one port, and /api/health publishes the exact commit it is running.


🏠 Home Lab & Production: AI-Assisted Infrastructure

Two hosts behind one front door, with no inbound ports on either. In August 2026 the whole public surface moved to a managed host; the home lab kept its tunnel stopped and became something else entirely — the agent fleet, the read-only panels, and a standby nobody can reach. Everything is designed, debugged, and documented with AI assistance.

Home Lab Architecture

🏗️ Architecture Breakdown

Layer Tool Primary Function
Tunnel Cloudflare Tunnel + cloudflared Secure public exposure — zero open ports (Zero Trust), outbound-only, on both hosts. Moving production between them did not change DNS.
Production host AWS Lightsail (us-east-2) Since 2026-08-05, every publicly reachable hostname is served from here — the payroll API, the Rails app across its four tenants, the static apps, and the only cloudflared actually running. Static IP, port 80 closed. Rehearsed live: zero requests dropped.
What the home lab does now 192.168.40.253 — tunnel stopped It publishes nothing, deliberately: cloudflared is stopped there. It holds the agent fleet, the read-only panels, host monitoring, and a standby whose containers are up but unreachable — same commit, same signing key, same database. The Rails half stays off: two copies once saturated the database pooler and served two versions at once, which is how a tenant's login started showing the wrong brand.
Self-healing Compose healthcheck + autoheal · centinela (cron) Covers the case restart: unless-stopped never did — a process that is alive but cannot serve. Measured by freezing the process: 47 s. For the case that the whole box dies, the home lab's own watchdog promotes the standby after 3 min of silence — never if it cannot serve either, and never touching the other tunnel.
Edge Cloudflare Workers Serves the apex (ynt.codes) with no server involved — agent card, ARD catalog, envelope verifier and landing are embedded in the Worker, which answers by content negotiation: agents asking for the root get the card, browsers get HTML.
Static hosting GitHub Pages · Netlify The CV, Resplandor, 911 Urban Salón and nagual are served entirely off my infrastructure — turning the machine off does not take them down, which is exactly why "everything on the domain runs in the home lab" is the kind of sentence that quietly rots in a README.
Reverse proxy Docker network aliases (docker-lab_proxy-network) + nginx Hostname routing to containers; TLS terminates at the Cloudflare edge.
Containers Docker Compose · Docker 29.6.1 on Ubuntu 25.04 Execution and isolation of every service on one box (Intel i5-4570T · 7.2 GB).
Deploy Kamal 2 + Thruster (Rails) · deploy.sh + Compose (NomiCheck) Zero-downtime deploys, remote amd64 builds over SSH, extended drain window for long-running AI jobs.
Database Supabase (PostgreSQL 17) · local postgres:17 Managed Postgres via AWS pooler for the Rails side; NomiCheck's own Postgres sits on a private network unreachable from the tunnel, because it holds payroll PII.
Monitoring Netdata + Uptime Kuma Real-time telemetry (CPU, memory, SSH sessions, nginx traffic, Docker stats) and uptime checks. Uptime Kuma is bound to loopback, not to 0.0.0.0 — it has no public hostname.
Agent fleet sigilo (self-hosted IRC, own repo) + herdr Agent sessions on different machines talk through a private IRC rendezvous — sigilo, spun out into its own repo — authenticated by a pinned TLS fingerprint rather than a CA, with channel content always treated as data, never as instructions. herdr keeps each box's Claude Code session alive across restarts and resumable; an ops dashboard reads the whole fleet over one SSH round-trip, read-only by design.

🌐 Published on ynt.codes

Four different ways in — and no count in this heading on purpose: a number in a title is a claim nobody re-measures, and this one already went stale once. The table is the claim.

Host How it gets there What it serves
ynt.codes Cloudflare Worker A2A agent card, ARD catalog, envelope verifier, landing
nomicheck.ynt.codes Tunnel → Lightsail NomiCheckTu nómina, verificada
cv.ynt.codes CNAME → GitHub Pages CV / portfolio — publishing it is git push
nagual.ynt.codes CNAME → GitHub Pages nagual — signed evidence for the market-signal work
homelab.ynt.codes Tunnel → Lightsail Ynt-labs · Homelab Architecture — the page documenting the home lab, served from the managed host
advance-fitness-app.ynt.codes Tunnel → Lightsail Advance Fitness — gym platform (login)
comercial.ynt.codes Tunnel → Lightsail Advance Fitness — tenant (login)
join.ynt.codes Tunnel → Lightsail Advance Fitness — tenant (login)
vital-fitness.ynt.codes Tunnel → Lightsail Advance Fitness — tenant Vital fitness (login)
advance-fitness.ynt.codes CNAME → Netlify Advance Fitness — landing page
loan_calculator.ynt.codes Tunnel → Lightsail Simulador de Abonos a Capital
resplandor.ynt.codes CNAME → GitHub Pages Resplandor — POS
911-urban-salon.ynt.codes CNAME → GitHub Pages 911 Urban Salón — barbershop site + live queue panel

🔍 Key Engineering Learnings

  • Deploying a single persistent outbound tunnel with cloudflared to bypass CGNAT restrictions, eliminating the need for any open port on the home network.
  • Architecting internal Docker networking so a freshly deployed Kamal container re-joins the right network-alias inside the proxy network without manual intervention.
  • Tuning Kamal's drain_timeout well above the default so in-flight AI plan generations (up to ~120s) survive a mid-generation deploy instead of leaving jobs stuck.
  • Running dev and prod against the same external Postgres instance safely, with clear guardrails around DATABASE_URL vs DEV_DATABASE_URL.
  • Putting the payroll database on its own isolated Docker network, so cloudflared cannot reach it even if a routing rule is written by mistake — and moving Uptime Kuma off 0.0.0.0 after auditing what the host was actually listening on.
  • Making the deploy measure what it served rather than what it intended: exporting a variable is not the same as delivering it to the container, and a deploy that silently didn't looks exactly like one that did.
  • Rehearsing the failover instead of assuming it — moving production to a managed host and promoting the old one back, live, with zero requests dropped. A standby nobody has ever promoted is a hypothesis, not a backup.
  • Learning why that standby now stays deliberately off rather than warm: with both copies running, they exhausted the database pooler's connections and split traffic across two versions of the app — which is how one tenant's login started rendering another tenant's brand. Failover is manual and one-way on purpose.
  • Finding, while load-testing something else, that the per-IP rate limit was bypassable by rotating X-Forwarded-For (40/40 got through against a cap of 10) because the payment wall set trust proxy in a different file. The key now comes from CF-Connecting-IP.
  • Keeping the public status panel in a separate process that never loads the wallet code at all — a guarantee an allowlist cannot give you, because it cannot leak what it never had in memory.

🛰️ The measuring house

A set of small, deliberately boring collectors that answer one question each with my own numbers instead of somebody's screenshot. Every one of them started because a claim was circulating — a viral thread, a marketing figure, a rumor — and the honest way to settle it was to measure it.

They share one rule, and it is the interesting part: they measure, they never execute. No signing, no funds moved, no API key needed. They are outbound clients only — they listen on no port, on any machine. If a measurement ever justified acting on it, that is a different phase and a separate decision.

Project The claim it was built to settle What it does
rezago "the repricing window is ~2.7 seconds" — from a viral thread Measures the real lag between Binance spot moves and Polymarket's CLOB repricing, and the net edge after taker fees at the book's actual depth.
brecha "send USDC to Arbitrum and you get more" Quotes executable swaps (not index prices) across 7 chains at three sizes, and counts how many opportunities survive all costs.
cazadores "follow wallets with >80% win rates" Measures those win rates myself over resolved trades, with the size of the rare losses in view — and produces a calibration curve: does a share bought at 80¢ actually win 80% of the time?
feria Tracks what knowledge agents are actually buying on Execution Market, by topic.
timon A tiny control plane: it knows each project's closing criterion, checks it against real data, and when one is met it opens a gate — a decision only the human makes, served with its evidence. It detects and asks; it never decides.
tablero The observation panel over all of them (Python + asyncio, WebSockets, 4 Hz to the browser). Ruby measures, Python streams.

Findings land in trading-knowledge, an Obsidian vault where estado/ is the source of truth: dated, sourced, and authoritative over every other note. Signals carry an expiry — a detection whose market has closed is shown as expired, never as an opportunity. None of it is financial advice: it shows measurements against written rules, and the decision stays human.


🔭 Agent fleet, and a format for proving things

Project What it is
sobre The signing format itself, released into the public domain — frozen canonicalization, published test vectors, a conformance suite and an implementer's guide. Ruby, Node and the browser produce byte-identical signatures; a fourth implementation, written in Python by another team from the spec alone, reached identical bytes without seeing my code. The spec includes a section on what a signature does not assert.
sigilo The fleet's own IRC rendezvous. Agent sessions on different machines leave each other messages; the session dies, the daemon does not. Authenticated by a pinned TLS fingerprint rather than a CA — regenerate the cert and the client refuses to speak until a human updates the pin, because a rendezvous that accepts any cert is a place anyone can stand in the middle of. Channel content is treated as data, never as instructions.
Grimorio sigilo's observatory: it turns a channel buffer into a graph of who addressed whom, and federates it with a public on-chain swarm — our edges are words, theirs are money, shown side by side and never mixed. By default it ships structure only, never message text.
nagual Operating a market signal as a product, with its own on-chain identity and published signed evidence at nagual.ynt.codes.

🤖 The AI Integration Ecosystem

Beyond the Home Lab, Artificial Intelligence is the core of my professional workflow, acting not as a replacement, but as an engineering accelerator.

  ┌─────────────────────────────────────────────────────┐
  │              AI Integration Stack                   │
  │                                                     │
  │  LangChain ────────► Agent Orchestration            │
  │  Anthropic Claude ─► Reasoning & Generation         │
  │  Gemini 2.5 Flash ─► Primary provider (multi-model) │
  │  Amazon Bedrock ───► Multi-model API Gateway        │
  │  RAG Pipelines ────► Embeddings + Vector Search     │
  │  n8n ──────────────► Multi-step Agentic Workflows   │
  └─────────────────────────────────────────────────────┘

Advance Fitness is the flagship application of this stack: a multi-tenant gym management platform (Rails 8.1 · Ruby 4.0.5) with AI-generated, editable training and nutrition plans through a provider adapter layer — gemini-2.5-flash by default, claude-sonnet-5 as fallback — deployed via Kamal 2 on the home lab and backed by Supabase. Four tenants run off the same deployment, each on its own hostname.


🎨 Brand & Business

Alongside engineering, I design and build the digital presence — and increasingly the operational software — for small hospitality and e-commerce brands.

Project Description
Resplandor Colombian restaurant & bar in La Estrella, Antioquia. Full brand system and landing page, plus a working point-of-sale: table map, orders, split billing, pre-checks and end-of-day close.
911 Urban Salón Barbershop, spa & massage studio in El Poblado, Medellín. Graffiti-brand landing with a multi-service booking assistant, plus a live operations panel (/admin): shared realtime queue, per-barber logins with role-based views, attention confirmation with POS-style checkout, product sales and daily cash summary — Supabase (Postgres RLS + Realtime + Storage), content edited from the panel and published straight to the page.
FungiLab Functional mushroom supplement brand — product-focused landing with animated visual components.

Stack: single-file HTML · Tailwind CSS (JIT via CDN) or design-system tokens with custom brand palettes · Alpine.js / React via CDN · Lucide Icons · AOS scroll animations · Google Fonts · Supabase for the POS and the salon queue.

Pinned Loading

  1. api-sena- api-sena- Public

    Ruby

  2. ember-empleados-backend ember-empleados-backend Public

    Ruby

  3. ember-empleados-frontend ember-empleados-frontend Public

    CSS

  4. file-versioning file-versioning Public

    File versioning app

    Ruby

  5. Front-sena Front-sena Public

    JavaScript

  6. libreria-samitic libreria-samitic Public

    Aplicación web ​ para realizar críticas o reseñas de libros

    Ruby