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 · NEXUS-Q Tools |
| Programming languages and compilers | AXIOM |
| Runtime, compute and simulation | DINAH |
| 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 16, 2026
Rust post-quantum cryptographic security engine for data, keys and identities, with key lifecycle management, authenticated encryption, signatures, credentials, policy enforcement, audit logging and hardware-provider abstractions. The project includes security CI, fuzz targets, documented threat models, benchmarks and a PQC Benchmark Arena. v4.1.2 is the current release. It is an audit-ready release, not a production-readiness claim; no independent external audit or FIPS validation is claimed. The native ML-KEM/ML-DSA backend remains experimental and opt-in; RustCrypto is the default path.
Rust ML-KEM-768 ML-DSA-65 SLH-DSA 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: historical engineering release; the current release line is v4.1.2
- V4.1.2: current release · Audit-Ready Release · no production-readiness claim, no FIPS validation, external audit pending. Native backend remains experimental and opt-in; RustCrypto is the default.
- Last activity: Oct 28, 2026
NEXUS-Q Tools is the companion collection of 25 independent Rust CLI binaries, each published on crates.io at version 0.1.0. They are separate, focused utilities built around the public nexusq-core API—not a second cryptographic engine. Install only the commands you need with Cargo.
| Category | Tool | Purpose |
|---|---|---|
| Diagnostics | nq-about |
Shows suite and Core information |
| Diagnostics | nq-doctor |
Checks the local development environment |
| Diagnostics | nq-env |
Summarizes OS/runtime details with environment-variable redaction |
| Diagnostics | nq-cache-report |
Reports cache and build-directory sizes without deleting files |
| Diagnostics | nq-git-audit |
Summarizes repository and working-tree status read-only |
| Files & reports | nq-hash |
Calculates file SHA-256 hashes through Core |
| Files & reports | nq-config-check |
Validates JSON configuration objects and required fields |
| Files & reports | nq-json-check |
Checks JSON syntax in files or standard input |
| Files & reports | nq-log-view |
Filters text logs by level, text and date |
| Files & reports | nq-report |
Builds Markdown diagnostic reports from text sections |
| Files & reports | nq-diff |
Compares file-manifest inventories |
| Manifests & workspaces | nq-manifest |
Creates deterministic file inventories and Core hashes |
| Manifests & workspaces | nq-bundle |
Creates ZIP bundles with a Core SHA-256 manifest |
| Manifests & workspaces | nq-verify-bundle |
Verifies bundle structure and content without extraction |
| Manifests & workspaces | nq-workspace |
Creates and validates a minimal Rust CLI starter |
| Manifests & workspaces | nq-test-runner |
Runs explicit program/argument arrays without shell interpretation |
| Integrity & security | nq-seal |
Creates and verifies SHA-256 integrity manifests |
| Integrity & security | nq-vault |
Local content-addressed artifact store; not encrypted storage |
| Integrity & security | nq-sign |
Generates Ed25519 keys and verifies detached signatures through Core |
| Integrity & security | nq-policy |
Evaluates manifest metadata against JSON policy rules |
| Integrity & security | nq-supply-chain |
Reports Cargo.lock dependency, source and checksum metadata offline |
| Integrity & security | nq-secure-backup |
Creates, verifies and restores encrypted local backups using Core |
| Docs & integration | nq-release-notes |
Extracts Markdown changelog sections |
| Docs & integration | nq-doc-audit |
Checks Markdown links and required headings |
| Docs & integration | nq-integrate |
Runs an isolated integration diagnostic against public Core APIs |
Install examples: cargo install nq-hash, cargo install nq-doctor, or cargo install nq-secure-backup. See the 25-tool catalogue, CLI reference, installation guide, and NEXUS-Q Tools repository.
A cross-platform desktop application for encrypting and decrypting individual files and folders, built with Rust, Tauri 2 and the NEXUS-Q core. It includes encrypted vault backups and folder-vault manifests, with native file pickers. Early access: the application has not undergone an independent security audit.
Rust Tauri 2 HTML CSS JavaScript Linux Windows macOS
- Status: v0.1.0 · early access
- Platforms: Windows (EXE/MSI), macOS (DMG), Linux (DEB/AppImage)
- Downloads: Latest release and installers
- Website: NEXUS-Q Vault app page
- Repository: nexus-q-vault
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 Rust-first foundation for runtime execution, memory, compute, ECS, deterministic simulation and early networking. Core/runtime/memory/compute/ECS foundations, five bounded simulation models, initial blocking TCP wrappers and prediction/reconciliation/replay primitives are implemented. Networking wire encoding and full protocol integration remain unfinished; this is not a production-ready runtime or game engine.
Rust Runtime Compute ECS Simulation Networking
Rust 100%
- Status: pre-alpha · active development
- License: MIT OR Apache-2.0
- Last activity: Oct 19, 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 8 PRs merged into Arc main, covering the WAL, file replication, ingestion, retention policies, filtered manual tier migrations, the tiering API and configuration, plus 2 additional PRs merged into the Python SDK.
Go DuckDB WAL Parquet Ingestion
- Arc core PRs merged into main: 8
- Arc Python SDK PRs merged: 2
- Last Arc core merge: Oct 29, 2026
- Last SDK merge: Nov 5, 2026
Arc (Basekick Labs) is an AGPL-3.0 licensed SQL time-series database written in Go, with 686 stars. These are my changes that the maintainer has merged into its main branch, with the context of each review.
I also contribute to the Arc Python SDK (arc-client-python). Two additional SDK pull requests have been merged into its main branch:
- #27 · feat(schedulers): expose scheduler status and controls — adds synchronous and asynchronous scheduler clients, scheduler status, continuous-query schedule reload and an explicitly confirmed retention trigger.
- #28 · feat(diagnostics): expose write protocol health and stats — adds synchronous and asynchronous read-only diagnostics for Line Protocol health/statistics and MessagePack specification/decoder/buffer statistics.
Both changes preserve the server's authentication, authorization and error handling. The SDK tests were added in those PRs but were not run locally; CI is the dynamic validation source.
#1052 · feat(tiering): support filtered manual migrations
Merged into main · Oct 29, 2026 · +319 −16 · 7 files
Adds database- and measurement-filtered manual tier migrations, validates the source and destination tiers while keeping the supported direction explicit as hot → cold, and makes dry_run report candidate count and bytes without moving files. The scheduled migration path remains unchanged. The PR adds focused coverage for filtered candidates and preview non-mutation; it was merged by the Arc maintainer after review.
#1241 · fix(config): remove dead license.enabled key
Merged into main · Oct 13, 2026 · +12 −6 · 2 files · Closes #1195
Removed license.enabled from the config struct, loader and defaults because it was read but never used. Enterprise licensing continues to be driven by license.file_path or license.key; any leftover license.enabled setting or ARC_LICENSE_ENABLED environment variable remains ignored, so this is a cleanup with no behavior change.
#1053 · feat(retention): apply policies to cold tier
Merged into main · Retention · Cold-tier storage
Retention policies now apply to data in the cold tier as well, bringing cold-tier lifecycle handling in line with Arc's retention rules instead of limiting policy enforcement to the hot tier.
#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.
Source: the public PR and release pages of Arc on GitHub and its API, as of November 6, 2026. The eight Arc core PRs and two SDK PRs were merged by their respective upstream maintainers. #769 shipped in 26.09.2, #1055 and #1056 in 26.09.3, and #1051, #1073, #1241 and #1052 were merged after 26.09.3, the latest published release.


