José Manuel Cotarelo
Software engineer
Oviedo, Spain

I build private AI and self‑hosted software, for people and teams whose data can’t leave the building.

I co-founded Hesperia Labs, where we design and deploy AI systems that run on our clients’ own infrastructure. I’m also a ServiceNow consultant at DXC Technology, where for eight years I’ve built and integrated enterprise systems for clients like Grifols, Fluidra, Generali and Sanofi.

In the evenings I teach AI and data science at Upgrade Hub. The rest of the time I build small open-source tools and run them on servers I own, under the name KaiCorp Labs.

NowOctober 2026

  • Hesperia Labs. Building an AI platform for a client in New York: retrieval over their content, call transcription, lead classification and draft generation, with evaluation and observability on the generated answers.
  • DXC Technology. ServiceNow consulting for Grifols and Fluidra.
  • Teaching. Starting my fourth bootcamp cohort at Upgrade Hub.
  • Arveil. Taking the messenger’s Android and Mac apps through beta on real devices. iOS is next.

Selected work

Reed ↗

2026 · v0.6 · Open source

A self-hosted RAG service. You upload documents, ask questions, and get streamed answers that cite the passages they came from. If the documents don’t support an answer, it says so instead of guessing.

Reed pipeline: question, hybrid retrieval with dense vectors and BM25, fusion, generation with a local model, citation check, then an answer with sources or a refusal. Question + corpus Dense search Qdrant BM25 keyword Fuse RRF Generate Ollama Answer with citations Refuse no evidence Reed pipeline: question, hybrid retrieval with dense vectors and BM25, fusion, generation with a local model, citation check, then an answer with sources or a refusal. Question + corpus Dense search Qdrant BM25 keyword Fuse RRF Generate Ollama Answer with citations Refuse no evidence
Every answer passes a citation check. The refusal path is a feature, not an error.
  • Hybrid retrieval with dense vectors and BM25 fused by reciprocal rank. It abstains when the evidence is weak and audits every citation it emits.
  • A golden set of 41 questions with labelled evidence, including multi-hop, cross-language and adversarial cases, scored with Recall@k, nDCG and MRR and bootstrap confidence intervals. Embedding models are chosen by A/B on that set.
  • About 300 tests behind an 85% branch-coverage gate, Playwright end-to-end runs, a backup and restore round trip, and multi-arch images with SBOM and provenance.
  • Python
  • FastAPI
  • LangChain
  • Qdrant
  • Ollama

Arveil ↗

2026 · Beta · Open source

An end-to-end encrypted messenger for families and small circles. You run a small relay at home; the Android and Mac apps hold the keys.

Arveil on macOS: a group chat with a shared PDF, and the panel for comparing safety numbers with another participant. Arveil on macOS: a group chat with a shared PDF, and the panel for comparing safety numbers with another participant.
  • Group encryption with MLS (RFC 9420) over Noise, in a Rust core the Flutter apps share through a generated bridge. Local storage is SQLCipher. The Go relay only ever forwards ciphertext.
  • A threat model with 13 invariants that the tests check, 13 architecture decision records, and about 620 tests across Rust, Dart and Go. CI runs relay-to-client interop and crash-injection scenarios.
  • Not independently audited, and the relay still sees metadata such as who talks to whom and when. The docs say both up front.
  • Rust
  • Go
  • Flutter
  • MLS
  • SQLCipher

DocDrop ↗

2026 · v3.1 · Live

Self-hosted file transfer. Multi-gigabyte files go out through links that expire or run out of downloads, encrypted in the browser so the server never holds the key.

DocDrop upload screen: a drop zone, options for expiry, download limit and in-browser encryption, and a 40 MB upload in progress.
  • AES-256-GCM in 4 MiB chunks with order and truncation authenticated. The key travels in the URL fragment and decryption streams through a service worker.
  • Up to 10 GiB per file, resumable 32 MiB uploads, streamed ZIP64 downloads and race-safe download limits.
  • Moved from Node to a single Go binary built on the standard library alone, with the React UI embedded. 55 rollback checks against the previous image kept existing links and data working.
  • Go
  • React
  • TypeScript
  • Web Crypto
  • Playwright

SecretDrop ↗

2026 · v0.9 · Live

One-time secret links. Paste a password or an API key, send the link, and it burns after the first view. The secret is encrypted in the browser, so the server only ever stores ciphertext.

SecretDrop after creating a secret: the one-time link with its key after the #, the remaining views and expiry, and a list of active secrets showing only metadata.
  • AES-256-GCM with a 256-bit key from Web Crypto. The key lives in the URL fragment, which browsers never send to the server.
  • Burning is crash-safe: the last allowed view writes a tombstone before the payload goes out, so a secret can’t be read more times than it was meant to.
  • Ported from Next.js to a single Go binary on the standard library, with rollback tests against the previous image, about 190 HTTP and browser checks, and a graceful drain on shutdown.
  • The README is explicit about the limit: encryption in the browser can’t protect you from a server that serves malicious JavaScript.
  • Go
  • React
  • TypeScript
  • Web Crypto
  • Docker

More tools

Everything here runs on hardware I own under KaiCorp Labs. Each tool ships as a container image with SBOM and provenance, and its README spells out what it protects and what it doesn’t.

Apps

MacThermal is a dependency-free CLI and menu-bar app I co-develop with Guillermo; my part includes its diagnostics mode and the move to Swift 6. Stoa and Faro de Fe are Flutter apps on Google Play, with no accounts or analytics.

Experience

  1. 2025 – now
    Co-founder, AI engineer · Hesperia Labs

    Local-first AI systems for teams that can’t send data to the cloud: RAG, transcription, evaluation, on-premises deployment.

  2. 2025 – now
    AI & Data Science instructor · Upgrade Hub

    Three bootcamp cohorts of 10–15 students so far. Python, SQL, APIs, ETL, RAG with embeddings and local models, and computer vision with YOLO (course material).

  3. 2025
    AI engineering intern · Impacto Tecnológico

    Built a machine-learning recommendation engine for real estate investment.

  4. 2018 – now
    Senior ServiceNow technical consultant · Fruition Partners, DXC Technology

    Technical design, integrations, implementation reviews and third-line support on international projects. Currently working with Grifols and Fluidra; before that Generali, Sanofi, COFCO and Acciona.

Before that: security at Treelogic, Java and Spring Boot backends at GADD, full-stack work at Clarcat, and a web internship at Believe.ai in London (2016–2018).

Education

  1. 2026
    MSc Artificial Intelligence · UNIR

    Thesis: hate speech detection models optimised to run directly on an Android phone.

  2. 2021
    MEd Teacher Training · UNIR
  3. 2020
    MSc Cybersecurity · UNIR
  4. BSc
    Computer Engineering (Software) · Universidad Isabel I

ServiceNow Certified System Administrator and Certified Implementation Specialist (ITSM).

Contact

If you’re building something where the data can’t leave your servers, or hiring someone who can, I’d like to hear about it. I reply in English or Spanish.

manuel@hesperialabs.com