Siete casos de estudio contados por dentro: qué problema había, qué decidí y qué aprendí. Los números vienen del código, no del deseo.
01 / Índice
Todos los proyectos.
Ordenados por lo que quiero que se me pida hacer: IA aplicada y automatización, después backend, y debajo el suelo donde corre todo.
7 de 7 proyectos visibles.
Producto propio
01
SaaS de captación comercial con IA local
Un CRM de outbound construido desde cero para un negocio de eventos: cartera de empresas, campañas con calentamiento de remitentes, entrega real por webhook y segmentación por industria con un modelo que no sale de casa. Multiempresa de raíz, con cinco roles y permisos por entidad.
Java 21Spring Boot 3.5React 18Multi-tenantOllama
103endpoints49entidades135tests21.733líneas de Java
Escucha el japonés del micrófono o del audio del PC y va pintando la traducción en una ventana flotante que se puede dejar por encima de todo. Whisper Small cuantizado a INT8 en CPU y un segundo modelo para el salto final: ni un byte de audio sale del equipo.
Pythonfaster-whisperCTranslate2PySide6100 % local
0peticiones a la nube2idiomas destino4 spor fragmento
Tres herramientas que se pasan el testigo: una recorre la web guiada por un modelo que corre en casa y entrega el ratón al humano cuando aparece un CAPTCHA; otra convierte perfiles públicos en dos sectores con reglas propias de descarte; la tercera cubre España con una retícula sobre el nomenclátor oficial enviando siempre la misma consulta.
Un juego de mesa con demasiadas reglas que acabó siendo un banco de pruebas: un modelo local pilota cada asiento por contrato JSON, cuatro estrategias comparables en tandas de cien rondas, y un cortocircuito que sigue jugando con heurística si el modelo se cae.
El calendario compartido de un grupo de rol: disponibilidad por franjas, encuestas que se convierten en sesión y avisos recurrentes programados en el propio teléfono. El backend calcula qué franja encaja con todo el grupo y guarda cada fecha en UTC mostrándola en la zona de cada mesa. Se instala en cualquier máquina con Docker y no depende de ningún servicio ajeno.
El servidor de IA con dos GPU que usa todo lo demás
Dos tarjetas gráficas y 256 GB de memoria con corrección de errores sirviendo un modelo de 125 mil millones de parámetros por una API compatible con OpenAI. El CRM, los rascadores y la demo de RAG le hablan cambiando una variable de entorno.
Edición compartida en DaVinci Resolve sobre un servidor de datos propio. El caso que explica por qué el cloud deja de ser barato cuando el volumen no baja nunca, y por qué el códec se filtra antes de descargar.
Almacenamiento de redDaVinci ResolveH.264 · AACCoste por volumen
Herramientas pequeñas que uso o he usado y que demuestran oficio más que arquitectura. Se enseñan en una línea; si interesa alguna, la abro en detalle.
Compresor de PDF Escritorio
El PDF de cuarenta megabytes que un portal administrativo no acepta, y la negativa a subirlo a una web de terceros. Busca entre once pares de resolución y calidad sobre dos perfiles de Ghostscript, mide cada intento en un temporal y se para en cuanto uno cabe; si ninguno cabe, entrega el más pequeño conseguido y lo dice. Cuando el equipo no tiene Ghostscript, se lo descarga y lo instala en la carpeta del usuario, sin administrador.
PythonGhostscriptPyInstaller
Lector por turnos Extensión
Recorre pestañas, scrollea, sigue la paginación y cierra la sesión al terminar. Ciclo de vida Manifest V3 bien resuelto: alarms, reinyección y fencing por identificador de ejecución.
JavaScriptManifest V3
Preguntas a mis apuntes RAG
Índice vectorial local con Qdrant en modo embebido y embeddings BGE-M3 sobre un modelo pequeño de Ollama. Quinientas treinta y dos líneas de Python en once módulos limpios: cortado con solape y anclaje a frontera de frase, índice persistente, y un aviso honesto sobre la limitación real de Qdrant local, que no permite dos procesos a la vez sobre el mismo almacén.
PythonQdrantRAG
Descarga por lotes Utilidad
Un fichero de enlaces, dos scripts independientes en Python. Antes de tocar la red comprueba que FFmpeg está en el PATH y sale con código 2 si no; cada enlace se captura por separado, así que uno roto no tumba la tanda y el resumen dice cuántas pasaron y cuántas no. El nombre de salida se recorta por bytes y se limpia para Windows, y la lista acepta comentarios.
Pythonyt-dlpFFmpeg
Tetris de una sola hoja Demo
Un solo fichero, cuatrocientas cincuenta y cuatro líneas de Canvas 2D. Bolsa de siete piezas barajada con Fisher-Yates, reserva con intercambio limitado a uno por pieza, pieza fantasma calculada proyectando la colisión, y puntuación y nivel oficiales: [0, 100, 300, 500, 800] por líneas, nivel cada diez, gravedad de 800 a 80 milisegundos. El bucle se mueve con tiempo delta, no con cuadros fijos, así que corre igual a 60 que a 144 hercios.