Skip to content

Available for CTO / VP Engineering / Staff Engineer

Engineering as a craft,
not as a race.

30 years across finance, agtech, pioneering e-commerce (1998) and European R&D. 9 years running motos.cat (live Rails SaaS) and AI in production since February 2026: 6 assistants, hybrid retrieval and coding agents under written protocol.

Rails 8 · Ruby 3.4 PostgreSQL · PostGIS Qdrant · bge-m3 Stripe · Sidekiq Axum · Rust

European Commission expert evaluator (2009–2025) · President of CONSEN EEIG (2003–2012) · Founder and operator of motos.cat since 2017

FC

Ferran Cabrer i Vilagut

Barcelona · coopeu AT coopeu DOT com

9

years running live SaaS

1,518

GPX in the archive

6

AI assistants in prod.

"Code review as a learning artefact, rehearsed migrations, and code you'd be proud of in a year."

Frontend & Product

Rails views that decide

  • • Trip cards with decision-grade data
  • • Leaflet + OSM + OSRM (off Google Maps)
  • • Tailwind + Stimulus, CSP with no CDN

Backend & Data

Postgres that doesn't lie

  • • Signed Stripe webhooks + reconciliation
  • • PostGIS + pg_trgm + 85 foreign keys
  • • Qdrant RAG with numbered citations

Infra & AI

Running on Hetzner

  • • Passenger + cron + backups with rollback
  • • Coding agents under protocol, one hand to production
  • • Rust/Axum for this portfolio itself

Featured projects

All projects →
MUFICATA · 2017 — today

motos.cat — Motorcycle Route SaaS

Modular Rails monolith running 24/7 since 2017: 123 controllers, 101 models, 259 services, 100 tables, 871 routes (measured 15/09/2026). PostgreSQL + PostGIS, signed Stripe webhooks, Sidekiq, hybrid search. Hetzner + Passenger, backups and smoke tests on every release.

Rails 8.1Ruby 3.4PostgreSQLPostGISRedisSidekiqStripeHetznerApachePassenger
View case →
AI in production · since February 2026

MotoBot — the motos.cat assistant

The assistant that answers riders from any page of motos.cat. Each question goes through ordered layers: curated answers, semantic FAQ, retrieval on Qdrant (bge-m3 + reranker), generation with Gemini and GLM as fallback, and verification before serving. A 52-question reference set gates every release.

RailsRAGQdrantbge-m3RerankerGeminiGLMOllama
View case →
De l'especificació a producció en 3 dies

botgate — MotoBot a Telegram i WhatsApp

Gateway Sinatra que posa l'assistent de producció als missatgers: identitat de xat SHA-256 (cap telèfon als logs), enllaç compte↔xat amb codis d'un ús des del perfil, límits per xat i globals amb circuit breaker, i l'arnès de fum de 52 preguntes que compara el pas pel gateway amb el pas directe abans de cada promoció. Webhook de WhatsApp verificat; primera conversa de producció el 8/10/2026: 9 sortides amb enllaços, 10 segons.

Sinatra · Ruby · Telegram Bot API · WhatsApp Cloud API · motos.cat API
View case →