{
  "$schema": "https://raw.githubusercontent.com/jsonresume/resume-schema/v1.0.0/schema.json",
  "basics": {
    "name": "Luis Felipe Llamas Luaces",
    "label": "Senior Backend Specialist",
    "image": "https://lfllamas.com/luis.jpg",
    "email": "luis@lfllamas.com",
    "url": "https://lfllamas.com/es/",
    "summary": "Ingeniero backend con diez años entre la investigación en robótica, las plataformas de analítica y las herramientas con LLM. Represento a mi departamento en la Comisión de Gobernanza de IA de la empresa desde su creación, trabajando en estándares de seguridad y en la política de IA de la empresa, y he impartido formación en Claude a más de cien compañeros de distintos departamentos. En mi departamento construyo flujos de trabajo agénticos, skills compartidas que aceleran la entrega y un sistema enlazado de código y documentación para que los agentes carguen menos contexto. Además, llevo más de una década en una asociación maker.",
    "location": {
      "city": "A Coruña",
      "region": "Galicia"
    },
    "profiles": [
      {
        "network": "LinkedIn",
        "url": "https://www.linkedin.com/in/luis-felipe-llamas-luaces-367461bb/"
      },
      {
        "network": "GitHub",
        "url": "https://github.com/Shiul93"
      }
    ]
  },
  "work": [
    {
      "name": "Redegal",
      "position": "Senior Backend Specialist y miembro de la Comisión de Gobernanza de IA",
      "location": "A Coruña (en remoto)",
      "url": "https://www.redegal.com/en/",
      "startDate": "2026-02",
      "summary": "El mismo trabajo de backend, más funciones de gestión en Producto / I+D. Representante del departamento de producto en la Comisión de Gobernanza de IA desde su creación.",
      "highlights": [
        "Funciones de gestión en Producto / I+D, sin dejar el trabajo de backend del periodo anterior.",
        "Comisión de Gobernanza de IA, como representante del departamento de producto: estándares de seguridad, despliegue de la IA en la empresa y skills compartidas por toda la empresa; formación en Claude para más de cien compañeros.",
        "Servidores MCP para las herramientas de analítica existentes de la empresa.",
        "Flujos de trabajo agénticos y skills compartidas que estandarizan el desarrollo y reducen el tiempo de entrega, además de un sistema enlazado de código y documentación para que los agentes carguen menos contexto."
      ]
    },
    {
      "name": "Redegal",
      "position": "Backend Engineer",
      "location": "A Coruña (en remoto)",
      "url": "https://www.redegal.com/en/",
      "startDate": "2022-06",
      "endDate": "2026-03",
      "summary": "Ingeniero backend principal de las herramientas de marketing y analítica basadas en datos de Redegal, Binnacle y Boostic, y del backend del CMS de ATaquilla.",
      "highlights": [
        "Diseño y construcción de Binnacle y Boostic desde cero hasta producción en un año, con nuevas funcionalidades después: generación dinámica de dashboards desde el backend e integración de LLM para el análisis de datos y la generación de informes.",
        "Las herramientas las usan el equipo de marketing de Redegal y clientes externos.",
        "Mentoría y revisión de código de los nuevos miembros del equipo backend.",
        "Coordinación con los equipos de Data Science y Frontend mediante un sistema de documentación compartido y los protocolos para usarlo.",
        "Diseño y construcción desde cero del backend del CMS de ATaquilla hasta producción en el plazo acordado, junto con los equipos de software, marketing y operaciones del cliente."
      ]
    },
    {
      "name": "Universidad de A Coruña",
      "position": "Investigador predoctoral",
      "location": "Híbrido",
      "url": "https://aiplus.udc.es",
      "startDate": "2021-11",
      "endDate": "2022-05",
      "summary": "Sistemas de percepción en robótica cognitiva, dentro de los estudios de doctorado.",
      "highlights": [
        "Estudio de sistemas de percepción en robótica cognitiva dentro de los estudios de doctorado.",
        "Sistema de tutorización inteligente sobre un simulador de robótica en Unity3D para mejorar el aprendizaje de robótica con la plataforma Robobo.",
        "Librería en Python para el acceso sencillo a sistemas domóticos HomeAssistant, para enseñar inteligencia ambiental en las aulas.",
        "Codirección de dos trabajos de fin de grado y un trabajo de fin de máster en robótica educativa y visión artificial; el de máster se publicó en IEEE (2019).",
        "Herramientas para otros investigadores del grupo y colaboración en publicaciones científicas."
      ]
    },
    {
      "name": "Unidad Mixta de Investigación UDC – Navantia",
      "position": "Investigador",
      "location": "Ferrol (presencial)",
      "url": "https://umi.udc.es/es/actuaciones/tubos-de-cierre/",
      "startDate": "2020-11",
      "endDate": "2021-11",
      "summary": "Prototipo que usa algoritmos genéticos para rediseñar los tubos de cierre de buques en construcción.",
      "highlights": [
        "Diseño e implementación de un prototipo para mejorar el ajuste de tubos en buques en construcción.",
        "Algoritmos genéticos (Python) para rediseñar las tuberías que, por las desviaciones reales del montaje, no cumplían las tolerancias de ajuste.",
        "Trabajo con los ingenieros del taller de tubería y del laboratorio de metrología; junto con escáneres 3D, el prototipo acortó los tiempos de medida y diseño y evitó errores."
      ]
    },
    {
      "name": "CITIC Centro de Investigación TIC, Universidade da Coruña",
      "position": "Investigador",
      "location": "En remoto",
      "url": "https://theroboboproject.com/",
      "startDate": "2020-07",
      "endDate": "2020-11",
      "summary": "Nuevas técnicas de visión artificial para la plataforma de robótica educativa Robobo.",
      "highlights": [
        "Desarrollo e integración de nuevas técnicas de visión artificial en el framework de la plataforma de robótica educativa Robobo."
      ]
    },
    {
      "name": "Unidad Mixta de Investigación UDC – Navantia",
      "position": "Investigador",
      "location": "Ferrol (presencial)",
      "url": "https://umi.udc.es/es/actuaciones/tubos-de-cierre/",
      "startDate": "2019-04",
      "endDate": "2020-07",
      "summary": "Investigación de tubos de cierre para el astillero Navantia: análisis de soluciones para medir las desviaciones del montaje.",
      "highlights": [
        "Análisis de soluciones para la extracción automática de extremos de tubos en los módulos de construcción de buques, para detectar las desviaciones del montaje y actualizar los tubos de unión para que encajen.",
        "Evaluación de escáneres láser y software de metrología."
      ]
    },
    {
      "name": "Grupo Integrado de Ingeniería (GII)",
      "position": "Ingeniero de software",
      "location": "A Coruña / Ferrol (presencial)",
      "url": "https://gii.udc.es/",
      "startDate": "2019-01",
      "endDate": "2019-04",
      "summary": "Plataforma de robótica educativa Robobo: nuevos módulos de interacción y el port a iOS.",
      "highlights": [
        "Desarrollo de módulos de interacción adicionales para el framework de la plataforma de robótica educativa Robobo.",
        "Port a iOS de la aplicación y el framework de Robobo."
      ]
    },
    {
      "name": "Mytech Ingeniería Aplicada",
      "position": "Software Engineer",
      "location": "Ferrol",
      "url": "http://mytechia.com",
      "startDate": "2016-10",
      "endDate": "2018-12",
      "summary": "Framework de sensorización y actuación de la plataforma de robótica educativa Robobo, como continuación del proyecto de fin de carrera.",
      "highlights": [
        "Desarrollo desde cero de la app de Android de Robobo e integración de visión artificial con OpenCV."
      ]
    }
  ],
  "volunteer": [
    {
      "organization": "Bricolabs",
      "position": "Presidente",
      "url": "https://www.bricolabs.cc/",
      "startDate": "2020-02",
      "endDate": "2023-09",
      "summary": "Presidente de Bricolabs, un hackerspace que promueve el hardware y el software libres.",
      "highlights": []
    },
    {
      "organization": "Bricolabs",
      "position": "Miembro",
      "url": "https://www.bricolabs.cc/",
      "startDate": "2013-04",
      "summary": "Miembro de Bricolabs, un hackerspace que promueve el hardware y el software libres.",
      "highlights": []
    }
  ],
  "education": [
    {
      "institution": "UDC",
      "studyType": "Doctorado, Robótica Cognitiva",
      "startDate": "2019-11",
      "endDate": "2022-06",
      "score": "discontinued",
      "courses": []
    },
    {
      "institution": "UDC",
      "studyType": "Máster en Bioinformática para Ciencias de la Salud (enfoque en Neurociencia)",
      "startDate": "2016-09",
      "endDate": "2018-07",
      "courses": []
    },
    {
      "institution": "UDC",
      "studyType": "Grado en Ingeniería Informática (especialidad en Computación)",
      "startDate": "2011-09",
      "endDate": "2016-08",
      "courses": []
    }
  ],
  "publications": [
    {
      "name": "Artificial Intelligence Teaching Through Embedded Systems: A Smartphone-Based Robot Approach",
      "publisher": "Springer",
      "releaseDate": "2019-11",
      "url": "https://link.springer.com/chapter/10.1007/978-3-030-35990-4_42"
    },
    {
      "name": "Adapting computer vision algorithms to smartphone-based robot for education",
      "publisher": "IEEE",
      "releaseDate": "2019-10",
      "url": "https://ieeexplore.ieee.org/abstract/document/9264289"
    },
    {
      "name": "The Robobo Project: Bringing Educational Robotics Closer to Real-World Applications",
      "publisher": "Springer",
      "releaseDate": "2017-08",
      "url": "https://link.springer.com/chapter/10.1007/978-3-319-62875-2_20"
    }
  ],
  "skills": [
    {
      "name": "Desarrollo en Python",
      "keywords": [
        "Flask",
        "numpy",
        "pandas",
        "Poetry",
        "marshmallow",
        "pydantic"
      ]
    },
    {
      "name": "Ingeniería de software",
      "keywords": [
        "Diseño modular",
        "Diseño de API REST",
        "Testing (pytest)"
      ]
    },
    {
      "name": "Gestión de bases de datos",
      "keywords": [
        "PostgreSQL",
        "ClickHouse",
        "ORM",
        "SQLAlchemy",
        "SQL",
        "Alembic"
      ]
    },
    {
      "name": "DevOps",
      "keywords": [
        "git",
        "Docker",
        "Docker Compose",
        "Kubernetes",
        "Elastic",
        "Linux",
        "Redis",
        "make",
        "bash"
      ]
    },
    {
      "name": "Desarrollo móvil",
      "keywords": [
        "Android",
        "iOS"
      ]
    },
    {
      "name": "IA y LLM",
      "keywords": [
        "LangChain",
        "LangGraph",
        "MCP",
        "Claude",
        "Ingeniería de prompts"
      ]
    }
  ],
  "languages": [
    {
      "language": "Español"
    },
    {
      "language": "Inglés"
    }
  ],
  "interests": [
    {
      "name": "Música",
      "keywords": [
        "Guitarra",
        "Bajo",
        "Piano",
        "Batería"
      ]
    },
    {
      "name": "Electrónica",
      "keywords": [
        "Robótica",
        "IoT",
        "Radioafición"
      ]
    },
    {
      "name": "Artesanía",
      "keywords": [
        "Carpintería",
        "Metalistería",
        "Joyería"
      ]
    },
    {
      "name": "Arte",
      "keywords": [
        "Dibujo",
        "Pintura"
      ]
    },
    {
      "name": "Deporte",
      "keywords": [
        "Ciclismo de montaña"
      ]
    }
  ],
  "projects": [
    {
      "name": "Binnacle / Boostic",
      "description": "Backend de las herramientas de marketing y analítica basadas en datos de Redegal.",
      "highlights": [
        "API RESTful en Flask protegida con OAuth (Auth0) y JWT; dependencias gestionadas con Poetry.",
        "Redis para caché y tareas asíncronas; PostgreSQL modelado con el ORM SQLAlchemy; ClickHouse como almacén de datos analíticos, consultado con SQL y procesado con Pandas.",
        "Contenerización y despliegue con Docker Compose.",
        "Integración de LLM para el análisis de datos y la generación de informes: primero un pequeño framework de encadenado de prompts y después agentes con LangChain / LangGraph.",
        "Un framework para diseñar dashboards dinámicamente en el backend a partir de widgets, que gestiona la localización y genera descripciones que renderiza el frontend. Sustituyó a Superset, ahorrando mantenimiento, complejidad de despliegue y trabajo de frontend, y permitió al equipo backend crear dashboards más rápido.",
        "Introducción de una plataforma de documentación compartida en Obsidian con control de versiones, además de protocolos y plantillas, para los equipos de frontend y ciencia de datos."
      ],
      "keywords": [
        "Python",
        "Flask",
        "Prompt engineering",
        "PostgreSQL",
        "ClickHouse",
        "Docker",
        "Auth0",
        "LangChain",
        "LangGraph",
        "SQL",
        "Pandas"
      ],
      "startDate": "2022-06",
      "url": "https://lfllamas.com/es/projects/binnacle-boostic/",
      "roles": [
        "Ingeniero backend principal"
      ],
      "type": "application"
    },
    {
      "name": "Pipe Fitting",
      "description": "Prototipo con algoritmos genéticos que rediseña los tubos de cierre para que encajen en los bloques ya construidos del buque en Navantia.",
      "highlights": [
        "Análisis y evaluación comparativa de escáneres 3D comerciales con la suite de metrología Polyworks.",
        "Diseño conceptual de una herramienta de medición 3D en Fusion 360 y análisis geométrico del problema.",
        "Desarrollo y evaluación de algoritmos genéticos en NumPy.",
        "Prototipo en Python con interfaz wxPython, refinado con los usuarios finales y su equipo de metrología."
      ],
      "keywords": [
        "Python",
        "Algoritmos genéticos",
        "wxPython",
        "NumPy",
        "PyGAD"
      ],
      "startDate": "2020-11",
      "endDate": "2021-11",
      "url": "https://lfllamas.com/es/projects/pipe-fitting/",
      "roles": [
        "Investigador"
      ],
      "type": "application"
    },
    {
      "name": "Plataforma Robobo",
      "description": "Framework software de una plataforma de robótica educativa basada en smartphone.",
      "highlights": [
        "Apps nativas de Android e iOS para el robot.",
        "Un framework modular de sensorización y actuación con módulos de visión artificial, audio, procesamiento de señal y streaming de vídeo.",
        "Librerías cliente para controlar el robot por websockets: Python, JavaScript, Scratch y ROS.",
        "Un simulador de robot en el motor de videojuegos Unity."
      ],
      "keywords": [
        "Android",
        "iOS",
        "OpenCV",
        "Python",
        "JavaScript",
        "Unity"
      ],
      "startDate": "2016-10",
      "endDate": "2022-05",
      "url": "https://lfllamas.com/es/projects/robobo/",
      "roles": [
        "Ingeniero de software e investigador"
      ],
      "type": "application"
    },
    {
      "name": "Librería HRI de Robobo",
      "description": "Librería base de los módulos de interacción humano–robot de la plataforma Robobo.",
      "highlights": [
        "Tacto: toques, pulsaciones mantenidas, caricias y deslizamientos rápidos en la pantalla del teléfono.",
        "Habla: reconocimiento de voz y síntesis de texto a voz.",
        "Sonido: detección de palmadas, tono y notas, generación de tonos y sonidos de emociones.",
        "Visión: acceso a la cámara, detección de caras y de colores con OpenCV.",
        "Mensajería: envío de texto e imágenes de la cámara por correo.",
        "Emociones: expresiones faciales mostradas en la pantalla del teléfono.",
        "Apps de ejemplo construidas sobre los módulos: un robot mascota, un juego de Simon y un robot de vigilancia."
      ],
      "keywords": [
        "Android",
        "Java",
        "OpenCV"
      ],
      "startDate": "2016",
      "endDate": "2016",
      "url": "https://lfllamas.com/es/projects/robobo-hri/",
      "roles": [
        "Trabajo de fin de grado"
      ],
      "type": "application"
    },
    {
      "name": "Stimpack",
      "description": "Herramienta en MATLAB para ejecutar experimentos de electrofisiología en primates despiertos, sobre todo para estudiar la memoria de trabajo.",
      "highlights": [
        "Construida sobre Psychtoolbox para presentar estímulos visuales con temporización precisa.",
        "Tres tareas: fijación para entrenar al sujeto, mapeo para localizar campos receptores en la corteza visual y una tarea de memoria de trabajo para estudiar el efecto de la estimulación magnética transcraneal sobre la corteza prefrontal.",
        "Una ventana por tarea para configurar sus parámetros y controlar la sesión en tiempo real (pausar, reanudar, dar una recompensa); los cambios se aplican desde el siguiente ensayo.",
        "Funciona con el seguimiento ocular Eyelink, la adquisición de datos Plexon OmniPlex a través de DATAPixx y el sistema de recompensas; el ratón puede sustituir a la mirada para desarrollar sin el hardware.",
        "Las tareas nuevas extienden una clase de tarea abstracta y una ventana plantilla, así que solo implementan la lógica del ensayo."
      ],
      "keywords": [
        "MATLAB",
        "Psychtoolbox",
        "Eyelink",
        "Plexon OmniPlex"
      ],
      "startDate": "2018",
      "endDate": "2018",
      "url": "https://lfllamas.com/es/projects/stimpack/",
      "roles": [
        "Trabajo de fin de máster"
      ],
      "type": "application"
    },
    {
      "name": "ATaquilla",
      "description": "CMS a medida para que el equipo de marketing de ATaquilla edite el contenido público de los eventos.",
      "highlights": [
        "Arquitectura del backend definida con el cliente e integrada con su infraestructura existente, en coordinación con el equipo de frontend que construía la web.",
        "API RESTful en Python / Flask desplegada con Kubernetes y Rancher.",
        "Sincronización con el backend de operaciones existente mediante webhooks y jobs periódicos de Kubernetes.",
        "PostgreSQL con el ORM SQLAlchemy y migraciones con Alembic; búsqueda aproximada de productos con pg_trgm.",
        "Despliegue de Keycloak e integración para la autenticación de usuarios."
      ],
      "keywords": [
        "Python",
        "Flask",
        "Kubernetes",
        "PostgreSQL",
        "Keycloak",
        "Alembic"
      ],
      "startDate": "2022-06",
      "endDate": "2026-03",
      "url": "https://lfllamas.com/es/projects/ticketing-cms/",
      "roles": [
        "Ingeniero backend principal"
      ],
      "type": "application"
    },
    {
      "name": "DnD Sidekick",
      "description": "Una aplicación web centrada en el jugador para fichas de personaje de D&D 5e que funciona sin conexión en la mesa, con conjuros, inventario, un compendio de reglas y una lista de personajes.",
      "highlights": [
        "Ficha de personaje jugable con edición en línea y paneles que cambian según la clase (de momento Artificer y Monje).",
        "Roster de personajes: creación guiada, subida de nivel, duplicar y exportar e importar en JSON.",
        "Conjuros (preparados, espacios, homebrew) e inventario con peso, contenedores y objetos homebrew. La clase de armadura y los ataques salen del equipo equipado.",
        "Compendio de reglas de varios libros, con el texto completo de las reglas y sus tablas."
      ],
      "keywords": [
        "React",
        "TypeScript",
        "Vite",
        "PWA",
        "IndexedDB",
        "Dexie",
        "Vitest",
        "Playwright"
      ],
      "url": "https://lfllamas.com/es/personal/dnd-sidekick/",
      "type": "personal"
    },
    {
      "name": "MealVault",
      "description": "Gestiona recetas, despensa, planificación de comidas y listas de la compra, con un servidor MCP que expone la API como herramientas para un LLM.",
      "highlights": [
        "Recetas con sustitutos y subrecetas.",
        "Inventario de despensa: cocinar una receta descuenta existencias, empezando por lo más antiguo.",
        "«Qué puedo cocinar ahora», con lo que falta en las recetas casi posibles.",
        "Menús semanales y listas de la compra, más un registro de movimientos de la despensa para analizar el consumo."
      ],
      "keywords": [
        "Python",
        "Flask",
        "SQLAlchemy",
        "PostgreSQL",
        "Redis",
        "React",
        "TypeScript",
        "FastMCP",
        "Alembic"
      ],
      "url": "https://lfllamas.com/es/personal/mealvault/",
      "type": "personal"
    },
    {
      "name": "Morse Trainer",
      "description": "Firmware de un entrenador interactivo de código Morse para una placa ESP32-C3 con paleta iambic, tono lateral con zumbador, una pantalla a color pequeña y un codificador rotatorio.",
      "highlights": [
        "Entrada de paleta iámbica con modos tecla recta, Iambic A e Iambic B, velocidad en WPM y espaciado Farnsworth.",
        "Pantalla de decodificación de Morse en vivo.",
        "Tono del zumbador, un LED de estado y un indicador de estado en vivo en una pantalla en color de 240×135.",
        "Menús con un codificador rotatorio y ajustes guardados en flash. Siguiente: lecciones y puntuación."
      ],
      "keywords": [
        "C++",
        "Arduino",
        "PlatformIO",
        "ESP32-C3",
        "Unity"
      ],
      "url": "https://lfllamas.com/es/personal/morse-trainer/",
      "type": "personal"
    },
    {
      "name": "Mis robots",
      "description": "Robots construidos a lo largo de los años: un resolvedor de laberintos, un minisumo, un hexápodo y tres robots de combate de media libra para la OSHWDem.",
      "highlights": [],
      "keywords": [
        "Arduino",
        "Teensy",
        "C++",
        "PlatformIO",
        "Impresión 3D",
        "Fresado CNC"
      ],
      "url": "https://lfllamas.com/es/personal/my-robots/",
      "type": "personal"
    },
    {
      "name": "Radio Show",
      "description": "Un DJ de radio autónomo: un agente escribe el guion de un programa en directo, lo locuta con síntesis de voz y controla la reproducción de Spotify en el navegador de cada oyente.",
      "highlights": [
        "Planifica el programa entero como una escaleta y escribe cada bloque en directo, un bloque por delante de lo que suena.",
        "Elige canciones en Spotify, descartando versiones de karaoke y canciones puestas hace poco.",
        "Locuta cada intervención con síntesis de voz y baja la música bajo la voz.",
        "Recuerda programas anteriores: un resumen de lo último emitido y una búsqueda en el historial que el modelo usa cuando la necesita."
      ],
      "keywords": [
        "FastAPI",
        "LangGraph",
        "PostgreSQL",
        "Redis",
        "React",
        "TypeScript",
        "Spotify Web Playback SDK",
        "OpenAI API",
        "Web Audio"
      ],
      "url": "https://lfllamas.com/es/personal/radio-show/",
      "type": "personal"
    }
  ],
  "meta": {
    "canonical": "https://lfllamas.com/es/cv.json",
    "version": "v1.0.0",
    "lastModified": "2026-10-11T14:20:30"
  }
}
