Jesús Torres

Jesús Torres

Senior backend engineer, blockchain and distributed systems

I build EVM indexers and backend services in Go, TypeScript and Python, and I instrument them until I know where every core and megabyte goes. My largest system keeps two years of Ethereum and BSC DEX trades on the small board in this photo.

Based in Bogotá, Colombia. Open to international remote roles.

A Radxa ROCK 5C single-board computer in a black case, connected by USB to a blue Samsung T7 portable SSD.
Radxa ROCK 5C, Samsung T7, 2 TB. Runs Swapstracker, HabitsFlow and GroupBrain, published to the internet through Cloudflare Tunnel.

Inside the board

  1. Inside the case

    A Radxa ROCK 5C and a 2 TB Samsung T7. That is the whole server: it runs Swapstracker, HabitsFlow and GroupBrain.

    About the machine
  2. The SoC: one Go process

    The RK3588S2 runs the Swapstracker indexer. Parallel workers pull and enrich block ranges; a single committer writes them in block order.

    Read the Swapstracker case
  3. The SSD: 3.1+ billion trades

    Two years of Ethereum and BSC trades in about 1 TB of compressed TimescaleDB. The backfill took 20 days against a one-year estimate.

    See the measurement log
  4. Ethernet: three apps, one tunnel

    Cloudflare Tunnel publishes Swapstracker, HabitsFlow and GroupBrain straight from this board. There is no rented server.

    See the other apps
  5. The fan: measured, not guessed

    The indexer reports its throughput, stage latencies, CPU, RAM and temperature. A change counts once it shows up as a number.

    How I measure it
  6. The pins: access on purpose

    A board exposes its pins deliberately. Gatekeeper does the same for third-party APIs: each user reaches only the providers they were granted.

    Read the Gatekeeper case

Swapstracker: from a one-year estimate to 20 days

Swapstracker indexes Uniswap V2, V3 and V4-style swaps on EVM chains, prices every trade in USD and serves candles and live trades.

I built it twice. My first version split the ETL across TypeScript microservices writing to MongoDB, and my own logs showed where the time went: serializing, shipping and re-parsing the same data between services. So I rewrote the path from logs to trades as a single Go binary and moved storage to PostgreSQL with TimescaleDB. Both versions are my own closed-source code.

Operational numbers from my own logs and metrics. Not an independent audit, not a controlled benchmark.

Measurement log
3.1+ billiontrades stored, two years of Ethereum and BSCobserved
1 TBcompressed history, on a 2 TB SSDobserved
20 daysto backfill those two years, both chains togetherobserved
≈ 1 yearwhat my first version projected for the same jobestimate from logged blocks/s
80% lessRAM after the rewritereported, no reproducible benchmark yet
Two-year backfill, both chainsBar chart. My first, TypeScript version projected roughly 365 days to backfill two years of both chains, estimated from logged blocks per second. The rewritten indexer finished the same backfill in 20 days of observed wall-clock time.Two-year backfill, both chainsMy first version, projected≈ 365 daysMy Go indexer, observed20 days0100200300
An estimate against an observation, not a controlled benchmark. Architecture, data access and storage all changed together, so no single factor gets the credit.

Gatekeeper: use an API without holding its keys

Teams often paste the same client secret into several projects just to call one external API. Every copy is another place to leak or forget to rotate.

Gatekeeper keeps provider credentials on the server, encrypted, and lets each user call only the providers an admin granted them. Consumers authenticate against Gatekeeper; Gatekeeper authenticates against the provider.

TypeScript, Express, MongoDB, Redis

Your appholds a Gatekeeper tokenprovider secrets never cross this lineGatekeeperwho is calling?granted this provider?decrypt secretAdmin + TOTP

grants, revokes, stores secrets

External APIOAuth / bearer / basic

Also running on that board

HabitsFlow

A routine engine for gym, reading, meditation and running. Cycles, daily and weekday schedules, intervals, calendar shifts and cloning of community routines. Go (standard net/http router) and pgx/v5, explicit SQL, versioned migrations, SvelteKit.

HabitsFlow home: four discipline notebooks (gym, running, reading, meditation), today’s assignment on day 12 of a 26-day gym cycle, adherence per discipline and a 30-day activity calendar.
The daily notebook: four disciplines, the cycle in progress and 30 days of activity. The interface is in Spanish.

GroupBrain

A Telegram bot that remembers group conversations. RAG over messages, summaries and vector search, LLM provider failover and async reminders. It encrypts stored messages with AES-256-GCM, using per-user and per-group keys derived with HKDF from a server-side secret. Python, MongoDB, ChromaDB, Svelte.

GroupBrain model management: an execution order of five LLM providers, Groq first and then Omniroute, SambaNova, Nvidia and Cerebras, with the active provider marked.
Five LLM providers in a fixed fallback order, each with its own model, success and error counts. The interface is in Spanish.

Other public work

w3contractauditor

Risk analysis for EVM tokens: simulated buys and sells on forked state to detect honeypots and transfer taxes, combined with bytecode, market data and early holder analysis. Reuses Foundry Anvil daemons for recent-state simulations, isolating requests with a mutex and evm_snapshot/evm_revert.

Services

Auth
RS256/JWKS, TOTP, Argon2id, Redis sessions
Payments
Stripe and PayPal, webhook deduplication, scheduled reconciliation
Notify
Redis Streams consumer groups, Go workers, pending recovery, dead letters
Docs
GridFS storage, Testcontainers integration tests
Gateway
routing, rate limiting, CORS

golib and tslib

Shared contracts and adapters for auth, logging, encryption, storage and HTTP clients with retries and backoff.

How I got here

I trained as an electrical engineer and wrote both of my degree theses in MATLAB. Later I worked as a RETIE inspector, certifying that electrical installations met Colombia’s technical regulation. It was solid work, but not the kind of engineering I wanted to do.

While still inspecting, I co-founded a small power-quality studies company with a colleague. I wrote its analysis software in Python, using the GPU to get through large volumes of measurements, and built its website. That was my way back into software. What drew me in was the freedom to create something, measure how it works and keep improving it.

Outside work I play Warframe, and I played a lot of World of Warcraft. The part I enjoy is the math: working out which combination of gear and modifiers pushes damage and survivability furthest. In WoW, the numbers once gave me a character I could only describe as immortal. Same instinct, different system.

On the bench now

An automated futures strategy that takes its signals from Swapstracker’s trade statistics. No results to show yet. When there are, they will be written up here with the method.

Contact

Email is the fastest way to reach me. I’m looking for remote backend and blockchain roles with international teams.