Software, infrastructure and backend engineer in Barcelona.
I build the machinery behind the product: AI gateways, post-quantum cryptography and systems languages.
I am interested in the layer between software and infrastructure: the part that makes systems useful, controllable and resilient. I would rather build the machinery behind the product than another thin wrapper around an API.
| What I do | Where |
|---|---|
| AI gateways and LLM infrastructure | SentinelFlow |
| Security and cryptographic systems | NEXUS-Q |
| Languages, compilers and runtimes | AXIOM |
| Agents, tools and MCP | Genie |
| Time-series databases | Arc |
| Local and self-hosted software | Linux · Android · Termux |
OpenAI-compatible gateway for teams that run several model providers. It brings intelligent routing, provider failover, policies, AI FinOps, security and observability into a single open source layer. Authentication, tenant isolation, quotas, audit and events.
Go PostgreSQL Redis Docker Kubernetes Prometheus
Go 87% · HTML 9% · Shell 2% · others 2%
- Status: V5.0.1 stable · V6 in development on the
v6branch - License: MIT
- Last activity: Oct 7, 2026
Rust security infrastructure to protect data, keys and identities: key lifecycle, authenticated encryption, credentials, audit, policies and hardware abstraction. It is measured with security CI, benchmarks and a PQC Benchmark Arena against other libraries. No independent audit or certification.
Rust ML-KEM-768 ML-DSA-65 RISC-V Android SDKs
Rust 94% · C 3% · C++ 1% · Go, Shell, PHP, Ruby 2%
- V1: frozen baseline
v1.0.0 - V2: frozen on
nexusqv2(v2.0.0) - V3: merged into
main(PR #45) - V4: architecture-specific performance kernels (Issue #23)
- Last activity: Oct 9, 2026
A general-purpose language with a small syntax and a deep semantic model. The long-term goal is its own compiler, runtime, ABI and self-hosted toolchain, so that AXIOM compiles AXIOM. Python and Rust are the transition infrastructure.
Python Rust Compiler Runtime Systems
Python 51% · Rust 49%
- Status: architecture closed, now being implemented
- License: MIT
- Last activity: Oct 3, 2026
A SKILL.md file with instructions that let an AI guess what you are thinking of, with no app and nothing to install. The questions adapt to your answers, a "not sure" counts as neither yes nor no, and it only takes a guess when it has enough evidence. It also includes a minimal remote MCP server for compatible AI clients.
Markdown TypeScript MCP
- License: MIT
- Last activity: Sep 29, 2026
An experimental project with a Python backend and a JavaScript interface, deployed on Vercel. I keep it lightweight while the implementation evolves.
Python JavaScript Vercel
Python 74% · JavaScript 26%
- Last activity: Sep 28, 2026
I contribute to Arc, by Basekick Labs: an open, SQL-native time-series database written in Go on top of DuckDB, built for high-throughput telemetry, Parquet storage and analytical SQL. I have 5 PRs merged into main, touching the WAL, file replication, ingestion and the tiering API.
Go DuckDB WAL Parquet Ingestion
- PRs merged into main: 5
- Last merge: Oct 8, 2026
Arc (Basekick Labs) is an AGPL-3.0 licensed SQL time-series database written in Go, with 681 stars. These are my changes that the maintainer has merged into its main branch, with the context of each review.
#1073 · fix(filereplication): make rewritten files immutable
Merged into main · Oct 8, 2026 · +623 −101 · 16 files · After 26.09.3 · Closes #975 · unblocks #1092
Partial DELETE rewrites no longer mutate the existing manifest entry: they publish a fresh Parquet file, register the new path and delete the old one in a single Raft batch, with the rewritten checksum and size and the rewriting node as the new origin. Before, a same-size rewrite could leave replicas trusting a stale file, because presence was checked by size only. It covers the live, replay and snapshot catch-up paths, and serializes concurrent partial DELETEs so they cannot publish several survivors from the same source. The maintainer noted that the approach was right from the first push. Benchmark on existing data: +0.26%, within the noise margin.
#1051 · fix(api): validate tiering file limits
Merged into main · Oct 7, 2026 · +129 −21 · 2 files · After 26.09.3 · Fixes #1135
GET /api/v1/tiering/files rejects non-integer or negative limit values, which used to cause a panic when slicing with a negative index. I added a structural guard with a positive limit at the point of use, kept limit=0 as an explicit empty result, and dropped the proposed cap of 1000 so the API stays backward compatible.
#1055 · fix(wal): line-protocol WAL entries carry their database envelope
Merged into main · Oct 4, 2026 (merged Oct 5) · +137 −4 · 3 files · Release 26.09.3 · Fixes #889
Line-protocol writes reached the buffer as columns with no raw client bytes, so their WAL entry went out without a database and a receiver always filed it under "default". The row-format path now writes the same envelope that msgpack uses. It is safe for replay, receiver, checkpoints and large sizes, and readable by any binary since 26.05.1. During review the maintainer narrowed the scope: the change in cmd/arc/main.go (#886), which depended on #888, was dropped and only the #889 envelope was kept.
#1056 · fix(wal): purge only data proven flushed
Merged into main · Oct 4, 2026 · +884 −156 · 8 files · Release 26.09.3 · Resolves #1009 / #966
Closes the remaining gap in WAL purging. It tracks pending identities through durable flush checkpoints, exposes a real minimum-unflushed sequence and uses PurgeFlushed instead of wall-clock age for periodic and recovery cleanup, so a file is deleted only once its data has been flushed. After review, a maintainer commit bounds the purge floor and reclaims files it cannot describe.
#769 · fix(ingest): log numeric host coercion at debug level
Merged into main · Sep 13, 2026 · +58 −2 · 3 files · Release 26.09.2 · Fixes #768
The fallback that coerces numeric values into host_<num> strings is intentional and stays, but it hid a sign of misconfigured clients. I added a debug-level log when it fires, so the hot ingest path is not flooded, and two test cases (float and boolean host) that fall through to the default branch. It went through three review rounds and the merge added me to the project contributors list.
These 8 PRs are still under review or being consolidated. I do not count them as merged contributions.
| PR | Title | Status |
|---|---|---|
| #1185 | fix: separate WAL and reconciliation identities |
Open · Oct 9 |
| #1074 | fix(cluster): keep replicated batches out of manifest registration |
Open · closes #888 · a reviewer validated the tests with -race |
| #1059 | feat(wal): apply disk pressure backpressure |
Reopened by the maintainer: it will be consolidated on top of #1115 with credit for my work |
| #1058 | fix(api): reject invalid execution limits |
Open |
| #1057 | feat(metrics): expose queued and inflight ingest records |
Open |
| #1054 | fix(filereplication): verify snapshot catch-up content |
Open · verifies SHA-256 on catch-up |
| #1053 | feat(retention): apply policies to cold tier |
Open |
| #1052 | feat(tiering): support filtered manual migrations |
Open · filters by database and measurement |
Source: the public PR and release pages of Arc on GitHub and its API, as of October 9, 2026. All merges were done by the project maintainer. #769 shipped in 26.09.2, #1055 and #1056 in 26.09.3, and #1051 and #1073 were merged after 26.09.3, the latest published release.


