# Santiago Gómez de la Torre Romero · sgomez.dev

> Todo el contenido de sgomez.dev en markdown, en español. El resumen corto está en https://sgomez.dev/llms.txt.

---

# Santiago Gómez de la Torre Romero

> Full-stack engineer que lleva la IA a producción, no a demos. Creador de NudaUI y de una búsqueda semántica en vivo sobre su catálogo.

Santiago Gómez de la Torre Romero es un full-stack engineer que lleva la IA a producción. Cofundador de SkyQuetz Consulting, creador de NudaUI y de una búsqueda semántica (RAG) en vivo sobre su catálogo. Developer en Evenbytes y organizador de GDG Santander.

Canonical URL: https://sgomez.dev

## Perfil

- Rol: Full-Stack Engineer (AI/LLM), en Evenbytes.
- Cofundador de SkyQuetz Consulting (https://skyquetz.com). Cofundador, uno de cuatro socios, no fundador único.
- Cofundador de Forgia (https://forgia.es). Cofundador, uno de dos socios, y lleva toda la parte técnica.
- Ubicación: Santander, Cantabria, España. Trabajo en remoto.
- Contacto: contact@sgomez.dev

## Proyectos

- **Claude Canvas**: Plugin de Claude Code que le da a Claude una pantalla propia. Abre un panel interactivo de terminal junto a la conversación, tú actúas en él y tu respuesta vuelve como un valor exacto en vez de prosa que el modelo tiene que interpretar. Nueve tipos de panel (picker, form, table, image, diff, dashboard, calendar, document y flight), transporte propio por socket local y CI en Linux, macOS y Windows. Es un fork del proof of concept de David Siegel, ampliado a fondo, con una sola capa de IPC donde había dos incompatibles, primitivas reutilizables, composición, más de 600 tests y CI en tres sistemas operativos donde no había ninguno. (TypeScript, Bun, React, Ink, tmux) https://claude-canvas.sgomez.dev Caso de estudio: https://sgomez.dev/work/claude-canvas
- **NudaUI Semantic Search (RAG)**: Búsqueda en lenguaje natural sobre 1.000+ componentes de NudaUI. Pipeline de RAG completo, sin frameworks de RAG. Incluye embeddings con Voyage, retrieval por coseno, evaluación con un golden set propio, servicio en FastAPI y UI en vivo. Subió la precisión del primer resultado del 67% al 80% (hit@1) y reportó hasta la categoría que empeoró. (RAG, Embeddings, Python, FastAPI, Evals) https://blog.sgomez.dev/rag-busqueda-semantica-nudaui Caso de estudio: https://sgomez.dev/work/nudaui-semantic-search-rag
- **NudaUI**: Librería open-source de más de 1.500 componentes y animaciones UI copy-paste, framework-agnósticos (HTML + CSS, JS solo cuando hace falta), organizados en 81 categorías. Cero dependencias, cero build. Creador y único mantenedor. (Next.js, TypeScript, CSS, framework-agnostic) https://nudaui.dev Caso de estudio: https://sgomez.dev/work/nudaui
- **EliteEstate Manager**: PWA de gestión inmobiliaria completa con autenticación, propiedades, citas, zonas y panel de administración. Proyecto end-to-end para cliente real. (React, Vite, Firebase, TailwindCSS) https://elite-estate-manager.vercel.app/
- **GeekLab**: E-commerce full-stack de productos IT con catálogo avanzado, carrito persistente, foro en tiempo real con WebSockets, API GraphQL y panel admin. (Svelte 5, Node.js, Express, MongoDB, GraphQL, Socket.io) https://github.com/sgomez-dev/GeekLab
- **SyncCart**: Extensión de Chrome que unifica carritos de compra de múltiples tiendas (Amazon, PcComponentes, MediaMarkt) en una sola interfaz con calculadora de presupuesto. (Plasmo, React 18, TypeScript, Chrome APIs) https://github.com/sgomez-dev/SyncCart
- **Sortlab**: Visualizador interactivo de 15 algoritmos de ordenamiento con animaciones dinámicas y explicaciones estructuradas. (React, TypeScript, Framer Motion) https://sortlab.sgomez.dev
- **Docs - SGOMEZ**: Documentación visual de su stack tecnológico con interfaz temática galáctica. (React, Vite, TailwindCSS, Framer Motion) https://docs.sgomez.dev
- **CorvexTalk.AI**: Chat de traducción con inteligencia artificial. Desplegado con Docker y pipeline CI/CD en Jenkins. (Node.js, JavaScript, Docker, Jenkins) https://corvex-talk-ai.vercel.app
- **sgomez CLI**: CLI publicada en npm para inicializar proyectos frontend y backend con múltiples frameworks. (Node.js, npm) https://www.npmjs.com/package/sgomez-cli
- **Skyzen**: App de clima en tiempo real con geolocalización y pronóstico extendido. (React, Vite, TailwindCSS, Framer Motion) https://skyzen.sgomez.dev
- **Galardón**: Web app para crear y compartir invitaciones de graduación digitales. (Vue, TypeScript, CSS) https://galardon-gamma.vercel.app

## Páginas

- [Sobre mí](https://sgomez.dev/about)
- [Contacto](https://sgomez.dev/contact)
- [Portal para desarrolladores y agentes](https://sgomez.dev/developers)
- [Privacidad](https://sgomez.dev/privacy)

## Para agentes

- [llms.txt](https://sgomez.dev/llms.txt): `text/markdown`
- [llms-full.txt](https://sgomez.dev/llms-full.txt): `text/markdown`
- [agents.md](https://sgomez.dev/agents.md): `text/markdown`
- [openapi.json](https://sgomez.dev/openapi.json): `application/json`
- [openapi.yaml](https://sgomez.dev/api/openapi.yaml): `application/yaml`
- [sitemap.xml](https://sgomez.dev/sitemap.xml): `application/xml`
- [robots.txt](https://sgomez.dev/robots.txt): `text/plain`
- [manifest.webmanifest](https://sgomez.dev/manifest.webmanifest): `application/manifest+json`
- API pública: `GET https://sgomez.dev/api/v1/profile`

---

# Sobre Santiago Gómez de la Torre Romero

> Full-stack engineer en Cantabria, España. Llevo la IA a producción, no a demos. Cofundador de SkyQuetz Consulting y creador de NudaUI.

Santiago Gómez de la Torre Romero es full-stack engineer en Evenbytes, cofundador de SkyQuetz Consulting, creador de NudaUI y organizador de GDG Santander. Aquí se cuentan su trayectoria, su formación y en qué trabaja hoy.

Canonical URL: https://sgomez.dev/about

## Quién soy

Me llamo Santiago Gómez de la Torre Romero y soy full-stack engineer. «Gómez de la Torre» es un apellido compuesto, no dos apellidos sueltos. Vivo en Cantabria, España, y trabajo en remoto. Hoy desarrollo software en Evenbytes con Angular, Node.js y Google Cloud, y en 2026 cofundé SkyQuetz Consulting con tres socios más, donde llevo la parte de ingeniería.

Hay personas que llegan a la tecnología por casualidad. Yo no. A mí siempre me atrapó entender cómo funciona todo por dentro: cómo se despliega un servicio, por qué un sistema falla, qué hace que una interfaz fluya o se rompa. Con el tiempo, esa curiosidad dejó de ser un impulso y se convirtió en mi forma de trabajar, que consiste en entender para construir y construir para mejorar.

Mi trayectoria combina administración de sistemas, desarrollo web y arquitectura en la nube. Empecé en FUNIBER en el equipo de redacción técnica, pasé a sysadmin y QA, seguí como técnico de soporte IT en la Universidad Europea del Atlántico (donde además estudio Ingeniería Informática) y desde junio de 2025 soy desarrollador en Evenbytes. Esa mezcla de operar sistemas antes de escribirlos es la razón de que me interesen tanto el despliegue y la observabilidad como el código.

## En qué trabajo ahora

Construyo IA que llega a producto, no a demos. Diseño sistemas que se pueden medir. Uso pipelines de RAG con embeddings y retrieval por coseno, evaluación con golden sets propios y modelos de lenguaje integrados en el producto real. La búsqueda semántica de NudaUI responde en lenguaje natural sobre más de 1.000 componentes, y con evals propias subí la precisión del primer resultado del 67% al 80% (hit@1), reportando también la categoría que empeoró. También mantengo en producción un asistente conversacional B2B construido sobre la API de Claude. Todo esto sin frameworks mágicos, entendiendo cada pieza del pipeline.

En 2026 cofundé SkyQuetz Consulting con tres socios más, una consultora de software a medida para negocios de habla hispana, en remoto y sin intermediarios. Soy cofundador, uno de cuatro socios, no fundador único. Llevo la ingeniería, y de ahí han salido dos productos propios: Synentria, un motor de auditoría SEO y GEO cuyos hallazgos son deterministas y no los decide ningún modelo, y Packatrack, un SaaS de conciliación de liquidaciones para operadores de última milla.

Y cuando no construyo para clientes, construyo para la comunidad. Soy el creador y único mantenedor de NudaUI, una librería open-source con más de 1.500 componentes UI copy-paste en 81 categorías que funcionan en cualquier framework, y de sgomez-cli, una herramienta publicada en npm para arrancar proyectos full-stack en un solo comando. Además organizo eventos con GDG Santander y he competido en Hack2Progress.

El tercero es Claude Canvas (https://claude-canvas.sgomez.dev), un plugin de Claude Code que le da al modelo una pantalla propia. Abre un panel interactivo de terminal junto a la conversación (eliges un fichero, apruebas hunk a hunk un diff, rellenas un formulario) y tu respuesta le vuelve como un valor exacto en vez de prosa que tenga que interpretar. Son nueve tipos de panel, un transporte propio por socket local, más de 600 tests y CI en Linux, macOS y Windows. Partí del proof of concept de David Siegel (https://github.com/dvdsgl/claude-canvas), que lo publicó como prueba de concepto sin soporte, y lo llevé a algo que aguanta el uso diario. Lo digo siempre que lo cuento. La idea es suya, la licencia es MIT y conserva su copyright. Es un proyecto mío, no un producto de SkyQuetz Consulting.

## Trayectoria

- **2021** · Inicios en el Desarrollo. Comienzo en FUNIBER como parte del equipo de redacción técnica. Primeros proyectos personales con React y PWAs.
- **2022** · Sysadmin & QA. Promoción a Sysadmin en FUNIBER. Gestión de infraestructura tecnológica y aseguramiento de calidad.
- **2023** · Soporte IT Universitario. Técnico de Soporte IT en Universidad Europea del Atlántico. Portafolio 3D con Next.js y Framer Motion.
- **2024** · Comunidad & Eventos. Organizador de GDG Santander. Participación en Hack2Progress. Consolidación como desarrollador full-stack.
- **2025** · Desarrollador Profesional. EliteEstate Manager para Irma Romero. Developer en Evenbytes con Angular, Node.js y GCP. Múltiples recomendaciones profesionales.
- **2026** · Cofundador de SkyQuetz y de Forgia. Cofundé SkyQuetz Consulting con tres socios. Llevo la ingeniería y los productos propios (Synentria, motor de auditoría SEO y GEO, y Packatrack). En paralelo publico Claude Canvas, un plugin open source que le da a Claude Code una pantalla propia. También cofundé Forgia con otro socio y llevo su parte técnica.

## Datos verificables

- Nombre completo: Santiago Gómez de la Torre Romero.
- Rol: Full-Stack Engineer (AI/LLM) en Evenbytes.
- Cofundador de SkyQuetz Consulting (https://skyquetz.com), fundada en 2026 por cuatro socios.
- Cofundador de Forgia (https://forgia.es), con otro socio, y responsable de toda la parte técnica.
- Formación: Grado en Ingeniería Informática, Universidad Europea del Atlántico (desde 2021).
- Comunidad: organizador de Google Developer Group (GDG) Santander.
- Ubicación: Santander, Cantabria, España. Trabajo en remoto.
- Idiomas: español (nativo) e inglés.
- Contacto: contact@sgomez.dev.

Los mismos datos, en formato legible por máquina, están en https://sgomez.dev/llms.txt y en el endpoint https://sgomez.dev/api/v1/profile de la API pública.

---

Más formatos legibles por máquina: [llms.txt](https://sgomez.dev/llms.txt), [agents.md](https://sgomez.dev/agents.md), [OpenAPI](https://sgomez.dev/openapi.json), [sitemap](https://sgomez.dev/sitemap.xml).

---

# Contacto

> La vía directa es el email. Respondo en español o en inglés.

Cómo contactar con Santiago Gómez de la Torre Romero: email, LinkedIn y GitHub. Disponible para freelance y colaboraciones de IA/LLM y full-stack desde Cantabria, España.

Canonical URL: https://sgomez.dev/contact

## Vías de contacto

- [contact@sgomez.dev](https://sgomez.devmailto:contact@sgomez.dev): Email directo. La vía preferente para propuestas de trabajo.
- [linkedin.com/in/sgomez-dev](https://linkedin.com/in/sgomez-dev): Para contacto profesional y referencias.
- [github.com/sgomez-dev](https://github.com/sgomez-dev): Para incidencias y contribuciones en mis proyectos open source.
- [https://skyquetz.com](https://skyquetz.com): Para encargos de la consultora que cofundé, con contrato y equipo detrás.

No hay formulario en esta web y no se recoge ningún dato al visitarla. Escribir un email es todo lo que hace falta, y así el mensaje queda en tu bandeja de enviados y no en una base de datos que no puedes consultar.

## Para qué escribirme

- Proyectos de IA/LLM en producción: RAG, embeddings, retrieval, evaluación con golden sets, integración de modelos en producto real.
- Desarrollo full-stack: React, Next.js, Angular, Node.js, Python y FastAPI, con despliegue en Google Cloud.
- Encargos de software a medida a través de SkyQuetz Consulting, cuando el proyecto necesita un equipo y no una sola persona.
- NudaUI: dudas, propuestas o errores de la librería. También valen los issues del repositorio.
- Charlas y eventos de la comunidad, a través de GDG Santander.

Trabajo en remoto desde Santander, Cantabria (España), en horario europeo (CET/CEST). Estoy abierto a freelance y a colaboraciones seleccionadas; si el encargo requiere equipo, contrato y continuidad, lo natural es canalizarlo por SkyQuetz Consulting.

## Si eres un agente

Los datos de contacto están publicados en formato estructurado y no hace falta que los extraigas de esta página. El JSON-LD de tipo Person incluye el email, y la API pública los devuelve como JSON.

- [/api/v1/profile](https://sgomez.dev/api/v1/profile): Perfil completo en JSON, con email, ubicación y disponibilidad.
- [/llms.txt](https://sgomez.dev/llms.txt): Resumen factual del sitio en markdown.
- [/agents.md](https://sgomez.dev/agents.md): Cuándo usar este sitio y cómo llamarlo.

---

Más formatos legibles por máquina: [llms.txt](https://sgomez.dev/llms.txt), [agents.md](https://sgomez.dev/agents.md), [OpenAPI](https://sgomez.dev/openapi.json), [sitemap](https://sgomez.dev/sitemap.xml).

---

# Portal para desarrolladores y agentes

> Todo lo que esta web publica sobre mí está también disponible como JSON, como OpenAPI y como markdown. Sin claves, sin registro y con CORS abierto.

Portal para desarrolladores de sgomez.dev: API REST pública y sin autenticación, especificación OpenAPI 3.1, errores en JSON, negociación de contenido en markdown y ficheros de instrucciones para agentes.

Canonical URL: https://sgomez.dev/developers

## Quickstart

Tres llamadas y ya tienes el mapa completo. Comprueba que la API responde, léela desde su especificación y pide el perfil.

```bash
curl -s https://sgomez.dev/api/v1/health
curl -s https://sgomez.dev/openapi.json
curl -s https://sgomez.dev/api/v1/profile
```

No hay sandbox aparte ni claves de prueba, porque la API es de solo lectura y todo su contenido ya es público, así que el entorno de producción ES el entorno de pruebas. No hay nada que puedas romper con un GET. La API responde en español por defecto y acepta `?lang=en` o `Accept-Language: en` para el inglés.

## Endpoints

| Método y ruta | operationId | Qué devuelve |
| --- | --- | --- |
| GET /api/v1/health | getHealth | Estado del servicio y enlaces de entrada. |
| GET /api/v1/profile | getProfile | Identidad, rol, ubicación, contacto y disponibilidad. |
| GET /api/v1/about | getAbout | Biografía larga y cronología por años. |
| GET /api/v1/projects | listProjects | Proyectos publicados, con stack y enlace. |
| GET /api/v1/projects/{slug} | getProject | Un proyecto concreto por su slug. |
| GET /api/v1/experience | listExperience | Puestos, organizaciones y periodos. |
| GET /api/v1/skills | listSkills | Tecnologías por categoría, con años de uso. |
| GET /api/v1/certifications | listCertifications | Certificaciones con enlace al credencial. |
| GET /api/v1/education | listEducation | Formación reglada. |
| GET /api/v1/recommendations | listRecommendations | Recomendaciones escritas por colegas y clientes. |
| GET /api/v1/search?q= | searchContent | Búsqueda por palabras clave sobre todo lo anterior. |

Las colecciones aceptan `limit` (1-100) y `offset` (0-1000). `search` acepta `q` (obligatorio) y `limit` (1-50). Toda respuesta correcta va envuelta en `{ "data": …, "meta": … }`, y `meta` incluye `count`, `total`, `self` y `documentation_url`.

## Errores

Los errores también son JSON, con el mismo sobre siempre. `code` es estable y se puede usar en un `switch`; `hint` dice qué hacer para arreglarlo, que es lo que a un agente le falta cuando recibe un 404 vacío.

```json
{
  "error": {
    "status": 404,
    "code": "not_found",
    "message": "No project with slug \"nope\".",
    "hint": "Known slugs: nudaui, sortlab, … List them with GET /api/v1/projects.",
    "documentation_url": "https://sgomez.dev/developers"
  }
}
```

- `400 invalid_parameter`: un parámetro falta o está fuera de rango.
- `404 not_found`: el recurso o el endpoint no existe. Cualquier ruta desconocida bajo /api responde JSON, nunca HTML.
- `405 method_not_allowed`: la API es de solo lectura; la respuesta incluye la cabecera `Allow`.

## Autenticación y límites

No hay autenticación ni claves de API porque no existe ningún dato privado detrás, así que una clave solo sería un trámite. Tampoco hay límite de peticiones por cliente más allá de la protección ordinaria de la CDN. A cambio, las respuestas se sirven cacheadas (`Cache-Control: public, max-age=300, s-maxage=3600`). Si necesitas el catálogo entero, una llamada por colección basta, y repetir la misma llamada en bucle no te dará datos más frescos.

CORS está abierto a cualquier origen (`Access-Control-Allow-Origin: *`) para GET, HEAD y OPTIONS, así que la API se puede llamar desde el navegador. Los datos se publican bajo licencia CC BY 4.0, así que puedes usarlos citando la fuente.

## Especificación OpenAPI

La especificación es OpenAPI 3.1 y se genera desde el mismo código que sirve los endpoints, así que no puede describir una ruta que ya no existe. Cada operación tiene `operationId` único, `summary`, `description`, parámetros tipados y un esquema de respuesta por código, que es justo lo que necesita un cliente de function calling para convertirla en herramientas.

- [/openapi.json](https://sgomez.dev/openapi.json): Ubicación canónica.
- [/api/openapi.json](https://sgomez.dev/api/openapi.json): El mismo documento bajo /api.
- [/api/openapi.yaml](https://sgomez.dev/api/openapi.yaml): El mismo documento en YAML.

## Markdown para agentes

Las páginas de contenido se sirven en markdown cuando la petición lo pide, siguiendo la convención de acceptmarkdown.com. La URL canónica no cambia y la respuesta lleva `Vary: Accept`, para que una CDN no le dé a un agente la variante HTML que guardó para un navegador.

```bash
curl -s -H "Accept: text/markdown" https://sgomez.dev/about

# o, si prefieres una URL explícita:
curl -s https://sgomez.dev/about.md
```

Funciona en `/`, `/about`, `/contact`, `/privacy` y `/developers`, y en sus gemelas inglesas bajo `/en/…`. Las rutas que ya son markdown (`/llms.txt`, `/agents.md`) se sirven tal cual. Una ruta que no existe devuelve 404 con un cuerpo markdown que dice a dónde ir, en vez de una página de error que un agente no sabe leer.

## Ficheros para agentes

- [/llms.txt](https://sgomez.dev/llms.txt): Resumen factual del sitio, con la sección «when to use this».
- [/agents.md](https://sgomez.dev/agents.md): Para qué sirve este sitio y cómo llamarlo.
- [/sitemap.xml](https://sgomez.dev/sitemap.xml): Todas las URLs publicadas.
- [/robots.txt](https://sgomez.dev/robots.txt): Crawlers de IA explícitamente permitidos.
- [/manifest.webmanifest](https://sgomez.dev/manifest.webmanifest): Manifiesto de la aplicación web.

## Versionado

La versión va en la ruta (`/api/v1`). Dentro de v1 solo se añaden campos y endpoints, porque quitar un campo o renombrar un `operationId` sería un cambio incompatible y saldría en `/api/v2`. Los `code` de error forman parte del contrato y no se renombran.

---

Más formatos legibles por máquina: [llms.txt](https://sgomez.dev/llms.txt), [agents.md](https://sgomez.dev/agents.md), [OpenAPI](https://sgomez.dev/openapi.json), [sitemap](https://sgomez.dev/sitemap.xml).

---

# Política de privacidad

> En resumen, sgomez.dev no instala cookies, no ejecuta analítica y no tiene formularios. No hay ningún dato tuyo que yo pueda consultar.

sgomez.dev no recoge ningún dato propio. Sin cookies, sin analítica y sin formularios. Explica el alojamiento, los enlaces externos y los derechos de protección de datos.

Canonical URL: https://sgomez.dev/privacy

## Responsable

El responsable de este sitio es Santiago Gómez de la Torre Romero, en Santander, Cantabria (España). Para cualquier cuestión relativa a esta política, el canal es contact@sgomez.dev. Este sitio es un portafolio personal que no vende nada, no registra usuarios y no tiene área privada.

## Qué NO se recoge

- Cookies propias: ninguna. El sitio no escribe cookies ni usa localStorage o sessionStorage para seguirte.
- Analítica: ninguna. No hay Google Analytics, ni Tag Manager, ni Plausible, ni ningún otro script de medición.
- Formularios: ninguno. El contacto es un enlace mailto, así que el mensaje sale de tu cliente de correo y no pasa por este servidor.
- Publicidad y perfilado: ninguno. No se venden ni se ceden datos, porque no hay datos que ceder.
- Tipografías remotas: ninguna. Next.js descarga Inter Tight e Instrument Serif al compilar y el sitio las sirve desde este mismo dominio, así que tu navegador no pide nada a un tercero para renderizar la página.
- Imágenes de terceros: ninguna. El servidor descarga y optimiza las portadas de las entradas del blog y las sirve desde este mismo dominio, así que tu navegador no pide nada a terceros para mostrarlas.

## Qué sí ocurre, y conviene que sepas

El sitio está alojado en Vercel. Como cualquier servidor web, su infraestructura registra las peticiones que recibe (dirección IP, agente de usuario, ruta pedida, fecha y hora) para servir la página y protegerse de abusos. Esos registros los genera y conserva el proveedor de alojamiento conforme a sus propias políticas, no una herramienta instalada por mí, y yo no los uso para identificar a nadie ni los cruzo con ninguna otra fuente.

Si me escribes un email, trato tu dirección y el contenido del mensaje con la única finalidad de responderte y, en su caso, gestionar la relación profesional que se derive. La base jurídica es tu propia solicitud (interés legítimo y, cuando proceda, la ejecución de un contrato). No uso esa dirección para enviarte comunicaciones comerciales y conservo el correo solo mientras la conversación tenga sentido.

La web enlaza a sitios de terceros (GitHub, LinkedIn, npm, Google Drive para los certificados). Cuando sigues uno de esos enlaces sales de sgomez.dev y pasas a regirte por la política de privacidad de ese tercero.

## Tus derechos

Conforme al Reglamento General de Protección de Datos (UE) 2016/679 y a la Ley Orgánica 3/2018, puedes ejercer los derechos de acceso, rectificación, supresión, oposición, limitación del tratamiento y portabilidad escribiendo a contact@sgomez.dev. En la práctica, si nunca me has escrito no tengo ningún dato tuyo que rectificar o suprimir. Si consideras que el tratamiento no se ajusta a la normativa, puedes reclamar ante la Agencia Española de Protección de Datos (aepd.es).

Esta política se actualizará si algún día el sitio incorpora analítica, formularios o cualquier otro tratamiento. Mientras el texto diga lo que dice, es porque no los hay. Puedes comprobarlo tú mismo, porque el código de esta web es público en github.com/sgomez-dev.

---

Más formatos legibles por máquina: [llms.txt](https://sgomez.dev/llms.txt), [agents.md](https://sgomez.dev/agents.md), [OpenAPI](https://sgomez.dev/openapi.json), [sitemap](https://sgomez.dev/sitemap.xml).

---

# Claude Canvas, caso de estudio

> Claude Canvas es un proyecto de Santiago Gómez de la Torre. Este caso cuenta el problema que resuelve, qué papel tuvo y qué resultado dio.

Canonical URL: https://sgomez.dev/work/claude-canvas

Actualizado el 2026-10-02

## El problema

En Claude Code, cuando Claude necesita que elijas un fichero, apruebes un cambio o rellenes unos datos, la respuesta va en prosa y Claude tiene que interpretarla. Claude Canvas abre un panel interactivo junto a la conversación y devuelve tu respuesta como un valor exacto.

## Mi rol

Lo bifurqué del proof of concept de David Siegel y lo amplié a fondo. Dejé una sola capa de IPC donde había dos incompatibles y añadí primitivas reutilizables, composición y nueve tipos de canvas (picker, form, table, image, diff, dashboard, calendar, document y flight).

## Stack

- TypeScript
- Bun
- React
- Ink
- tmux

## El resultado

Nueve canvas, más de 600 tests y CI en tres sistemas operativos. Funciona en kitty, Ghostty, iTerm2, WezTerm, foot, Windows Terminal y xterm. En imágenes, los bloques de cuadrante dan un 61 % menos de error que los de media celda. Publicado con licencia MIT.

## Enlaces

- [Fuente](https://claude-canvas.sgomez.dev)
- [Repositorio](https://github.com/sgomez-dev/claude-canvas)
- [Basado en dvdsgl/claude-canvas, de David Siegel](https://github.com/dvdsgl/claude-canvas)

## Otros casos

- [NudaUI Semantic Search (RAG)](https://sgomez.dev/work/nudaui-semantic-search-rag)
- [NudaUI](https://sgomez.dev/work/nudaui)

---

Más formatos legibles por máquina: [llms.txt](https://sgomez.dev/llms.txt), [agents.md](https://sgomez.dev/agents.md), [OpenAPI](https://sgomez.dev/openapi.json), [sitemap](https://sgomez.dev/sitemap.xml).

---

# NudaUI Semantic Search (RAG), caso de estudio

> NudaUI Semantic Search (RAG) es un proyecto de Santiago Gómez de la Torre. Este caso cuenta el problema que resuelve, qué papel tuvo y qué resultado dio.

Canonical URL: https://sgomez.dev/work/nudaui-semantic-search-rag

Actualizado el 2026-10-02

## El problema

NudaUI tenía 1.022 componentes y la búsqueda por palabras no encontraba lo que la gente describía, así que «un loader con puntos» no llevaba a «Pulse Dots». Hacía falta buscar por significado.

## Mi rol

Construí el pipeline de RAG completo sin frameworks de RAG, con embeddings de Voyage, similitud del coseno escrita a mano, un servicio en FastAPI desplegado en Vercel y un golden set propio de 45 consultas en 15 categorías, etiquetado a mano, para medir cada cambio.

## Stack

- RAG
- Embeddings
- Python
- FastAPI
- Evals

## El resultado

Añadir el CSS de cada componente al embedding subió el hit@1 del 66,7 % al 80 %, el hit@5 al 95,6 % y el recall@5 del 54,9 % al 59,4 %. La medición también mostró un retroceso en los efectos de texto, del 100 % al 67 %, que queda documentado. Está en vivo en nudaui.dev.

## Enlaces

- [Fuente](https://blog.sgomez.dev/rag-busqueda-semantica-nudaui)
- [Repositorio](https://github.com/sgomez-dev/nudaui-rag)

## Otros casos

- [Claude Canvas](https://sgomez.dev/work/claude-canvas)
- [NudaUI](https://sgomez.dev/work/nudaui)

---

Más formatos legibles por máquina: [llms.txt](https://sgomez.dev/llms.txt), [agents.md](https://sgomez.dev/agents.md), [OpenAPI](https://sgomez.dev/openapi.json), [sitemap](https://sgomez.dev/sitemap.xml).

---

# NudaUI, caso de estudio

> NudaUI es un proyecto de Santiago Gómez de la Torre. Este caso cuenta el problema que resuelve, qué papel tuvo y qué resultado dio.

Canonical URL: https://sgomez.dev/work/nudaui

Actualizado el 2026-10-02

## El problema

Las librerías de animaciones atan a un framework y pesan de más, y quien trabaja con Laravel, Django, Rails o HTML plano se queda fuera.

## Mi rol

La creé y la mantengo yo solo. Son animaciones en HTML y CSS, con JavaScript solo cuando hace falta, accesibles desde el principio (ARIA y prefers-reduced-motion) y con temas por variables CSS. Se copian y se pegan, sin instalar nada.

## Stack

- Next.js
- TypeScript
- CSS
- framework-agnostic

## El resultado

1.503 componentes en 81 categorías, sin dependencias y normalmente por debajo de 1 KB cada uno. Funcionan en React, Vue, Svelte, Astro, Blade, Jinja y HTML plano, con licencia MIT y una API JSON pública.

## Enlaces

- [Fuente](https://nudaui.dev)
- [Repositorio](https://github.com/sgomez-dev/nudaui)

## Otros casos

- [Claude Canvas](https://sgomez.dev/work/claude-canvas)
- [NudaUI Semantic Search (RAG)](https://sgomez.dev/work/nudaui-semantic-search-rag)

---

Más formatos legibles por máquina: [llms.txt](https://sgomez.dev/llms.txt), [agents.md](https://sgomez.dev/agents.md), [OpenAPI](https://sgomez.dev/openapi.json), [sitemap](https://sgomez.dev/sitemap.xml).
