Stiven Ruiz

Abierto a nuevas oportunidades

Desarrollador de software · Colombia

Desarrollador full-stack: de la arquitectura al despliegue en producción.

Trabajo en todo el ciclo de un producto: arquitectura, frontend, backend, despliegue y operación. He construido aplicaciones web, móviles y de escritorio, bots, infraestructura y herramientas con IA.

días trabajados en proyectos personales
118
proyectos publicados aquí
08
en producción hoy
06

Proyectos

01Infraestructura y DevOpsEn producción

DevOps Hub

Centro de control de despliegues, clústeres y equipos

Una aplicación de escritorio y móvil que reúne en un solo lugar todo lo que un equipo de desarrollo necesita para publicar cambios, vigilar sus sistemas y organizar su trabajo, sin tener que saltar entre diez herramientas distintas.Monorepo full-stack en TypeScript (React 19 + Tauri 2 + dos backends NestJS 11) que orquesta GitLab, Kubernetes/GKE, MongoDB, Docker y Google Cloud Monitoring, con un módulo de gestión de equipos sobre PostgreSQL, RBAC por permisos y asistente de IA multi-proveedor.

  • Despliegues con un clic y con red de seguridad: la app impide actuar sobre el entorno equivocado y nunca pisa el trabajo local del desarrollador.Merge, deploy y bump de versiones en GitLab ejecutados con git commit-tree y worktrees desechables (sin tocar el working copy), lock por repositorio (409), pushes sin force y lista blanca de keywords de CI/CD validada en backend y frontend; toda acción destructiva en Kubernetes/Mongo requiere clúster explícito y --context por comando.
  • Una misma base de código funciona como programa instalable en Windows y Linux, como app móvil y se actualiza automáticamente.Tauri 2 con backend NestJS empaquetado como sidecar binario (pkg), updater firmado con Ed25519 y manifiesto generado en CI, build PWA separado (vite-plugin-pwa/Workbox) desplegado en Cloudflare Pages; releases disparados por tags con keywords.
  • Visibilidad en tiempo real de los servidores: estado, registros y alertas de salud de varios clústeres, además de copias de seguridad y restauraciones de bases de datos verificadas.Watcher de pods con SSE filtrado por clúster y suscriptor, logs de kubectl en streaming, integración con Google Cloud Monitoring (ADC) con caché compartida, backups/restores de MongoDB con verificación de conteos e importación por streaming (mongodump/mongorestore) para colecciones grandes sin agotar memoria.
Ver proyecto77 días trabajados
02Automatización e IAEn producción

GH Inspector

Auditor de código con IA para toda la empresa

Un asistente automático que cada semana revisa todos los proyectos de la empresa, propone ideas, mejora el código y busca fallos de seguridad, dejando cada propuesta lista para que una persona la apruebe.Orquestador en TypeScript sobre GitHub Actions que ejecuta Claude Code en modo headless y aislado sobre N repos, con control de presupuesto de uso, verificación en Docker y salida en PRs/issues de GitHub y resúmenes en Discord.

  • Diseñó un sistema para que la IA pueda revisar código privado sin poder acceder a contraseñas ni a la infraestructura de la empresa.Sandbox por capas para el agente: sin Bash, WebFetch ni WebSearch; escritura solo dentro del clon y lectura bloqueada en procfs, sysfs y el directorio temporal del sistema. Usa un HOME efímero por ejecución y una allowlist de variables de entorno sin tokens de GitHub ni de Discord. Ignora los `.claude/` y `.mcp.json` del repo auditado y comprueba la integridad de `.git` con huellas antes de usar credenciales. Todo lo que sale del modelo pasa por un sanitizado de secretos y los PRs llevan `[skip ci]` para que no corra CI con secretos sobre código no revisado.
  • Hizo que el bot administre por sí solo el consumo de la suscripción de IA, para que nunca deje al equipo sin cuota.Mide el uso semanal y el de la sesión de 5 horas leyendo la statusline de Claude Code en un pseudo-terminal, porque el modo `-p` no lo reporta, con un diagnóstico propio para calibrarlo. Aplica topes acumulados distintos por tarea y reserva margen para seguridad. Estima el gasto y la duración de cada repo con su historial y vuelve a medir durante la ejecución, cada pocos minutos. Si pierde la lectura, se detiene (fail-closed).
  • Las mejoras de código solo se proponen si se demuestra que no rompen nada.Verificación en Docker con `--cap-drop ALL`, `no-new-privileges` y límites de memoria, CPU y PIDs, sobre una copia sin `.git` ni secretos. Detecta automáticamente proyectos Node (npm/pnpm/yarn), Python y Rust, o usa una receta propia por repo. Toma una línea base y solo abre el PR si todos los chequeos que pasaban siguen pasando; el PR incluye una tabla de antes y después. Nunca toca manifiestos, lockfiles, CI ni lógica de autenticación.
Ver proyecto11 días trabajados
03Automatización e IAEn producción

Cartógrafo

De la conversación en Discord a la especificación técnica

Un asistente de Discord que lee lo que el equipo conversa sobre un producto y lo convierte, solo, en un documento de requisitos ordenado, con cada punto enlazado al mensaje donde se dijo.Bot de Discord en TypeScript que aplica Spec-Driven Development a la inversa (conversación → spec): un pipeline MAP/REDUCE con LLMs extrae afirmaciones de hilos de foro, las reconcilia en una spec append-only con IDs estables y requisitos EARS validados, y la publica en Discord y GitHub con aprobación por botón.

  • Cada punto del documento enlaza al mensaje exacto donde se dijo; lo que no se puede rastrear no se publica. Así se evita que la IA se invente requisitos.Trazabilidad obligatoria como defensa anti-alucinación: los message_ids citados por el modelo se validan contra los de la ventana enviada, las afirmaciones con fuentes inventadas o de canales fuera de alcance se descartan y se cuentan en el informe, y un descarte masivo (>1 elemento y >30%) aborta la publicación.
  • Si algo falla a mitad (la IA, Discord o GitHub), no se pierde trabajo ni se paga dos veces: el bot reintenta lo pendiente en la siguiente ejecución.Outbox transaccional en SQLite: reconciliación, cursores, render y estado se confirman en una única transacción por producto y la entrega a Discord/Git es un paso idempotente posterior. Cerrojo con arrendamiento (latido) entre procesos, cursores que solo avanzan hasta la última ventana procesada con éxito y detección explícita del intent MessageContent desactivado para no marcar como leído un histórico vacío.
  • No depende de un único proveedor de IA: si uno se cae o se queda sin saldo, pasa automáticamente al siguiente y controla el gasto con un presupuesto máximo.Cadena de proveedores configurable desde Discord (Anthropic con salida estructurada nativa, varios proveedores compatibles con la API de OpenAI validados con Zod, y el CLI de Claude Code aislado sin herramientas, sin MCP, con HOME temporal y sin secretos en su entorno), backoff exponencial sobre la cadena completa, streaming en la síntesis y contador de coste con corte duro.
Ver proyecto13 días trabajados
04Automatización e IAEn producción

GG Forge Ops

La operación de una empresa automatizada sobre Discord

Un equipo de ocho asistentes automáticos que llevan la oficina digital de una empresa en Discord: organizan el espacio de trabajo, lo protegen, hacen copias de seguridad, vigilan los sistemas, recuerdan pagos, dan la bienvenida al personal y a los clientes y responden dudas sobre los productos.Ecosistema de 8 bots Python (discord.py, asyncio) desplegados en 7 servicios de Railway con Docker, que cubren infraestructura como código para Discord, seguridad y anti-nuke, detección de secretos, respaldos cifrados, observabilidad de producción, onboarding/offboarding y un asistente RAG, apoyados en una librería compartida versionada.

  • Arquitecto: la organización completa del servidor (roles, canales, permisos y quién tiene qué rol) vive en un archivo. Se propone un cambio, el bot enseña qué hará, un fundador lo aprueba con un botón y queda un historial de quién cambió qué y cuándo.Infraestructura como código para Discord con ciclo export → plan → apply: un planificador puro y determinista compara el YAML deseado con la foto actual y genera operaciones mínimas (sin id se crea, lo ausente no se toca, borrar es explícito); la exportación es estable para que git log sea la auditoría; detecta deriva (cambios manuales), la conserva campo a campo y ofrece «Deshacer»; ejecuta tareas puntuales idempotentes (copiar o publicar en foros) y tolera fallos transitorios de GitHub.
  • Centinela: si alguien intenta abrir una zona privada del servidor, el bot lo deshace en menos de un segundo, aísla al autor y avisa. También frena borrados o expulsiones masivas.Bóveda autorreparable basada en reconciliación de estado (no en deshacer el último cambio): calcula las reparaciones mínimas de los permisos de cada canal protegido, es idempotente para no entrar en bucles, revierte primero y consulta el registro de auditoría después, aplica cuarentena y retira Administrator no autorizado; clasifica el audit log por severidad, anti-nuke con ventana deslizante y ventanas de mantenimiento pedidas por otros bots.
  • Sabueso: si alguien pega por error una contraseña o clave en el chat, el mensaje desaparece, la persona recibe instrucciones para cambiarla y el caso queda abierto hasta que se confirma que se cambió.Detector puro con 26 reglas inspiradas en gitleaks, ordenadas de lo específico a lo genérico, más entropía de Shannon y filtrado de placeholders; revisa mensajes nuevos y editados, embeds y adjuntos de texto; nunca almacena ni republica el secreto (solo versiones censuradas) y gestiona incidentes con recordatorio cada 24 h hasta la rotación.
Ver proyecto15 días trabajados
05Automatización e IAEn desarrollo

Asistente de búsqueda de empleo con aprobación humana

Un asistente que encuentra ofertas que encajan con tu perfil y prepara las postulaciones, pero la última palabra es siempre tuya: nada se envía sin que lo revises y apruebes.Plataforma multi-app en TypeScript (NestJS + Playwright, Expo/React Native, Tauri y un backend cloud en Railway) que asiste la búsqueda, el filtrado y la preparación de postulaciones con IA multiproveedor, con revisión humana obligatoria antes de cada envío.

  • Construyó solo un producto completo que funciona en escritorio (Windows y Linux), web y Android, con un servicio en la nube para cuentas y suscripciones.Cuatro aplicaciones coordinadas en un monorepo: NestJS local empaquetado como sidecar en Tauri v2 (Rust), Expo Router/React Native Paper para web y Android, y una API NestJS + PostgreSQL desplegada en Railway con migraciones versionadas.
  • Usa inteligencia artificial de forma responsable: nunca inventa habilidades que el usuario no tiene y siempre pide confirmación antes de enviar una postulación real.Autocompletado en tres capas con fallback entre 7 proveedores de IA ordenables por el usuario, clasificación tipada (sí/no, elegir opción) sobre claves que define el código, mitigación de prompt injection en el emparejamiento de respuestas y un freno de envío automático bloqueado hasta la primera revisión humana.
  • El celular funciona como control remoto del PC: puedes iniciar búsquedas, ver el progreso en vivo y aprobar postulaciones, incluso si el PC se conecta más tarde.Sincronización last-write-wins por registro con lápidas y cursor de secuencia, canal WebSocket con handshake autenticado, espejo del estado del PC principal y cola de comandos cifrada (AES-GCM) con toma atómica, expiración y ejecución exactamente una vez mediante un registro local.
Ver proyecto27 días trabajados

Otros proyectos

Proyectos más pequeños que hago por gusto: para aprender algo nuevo o resolver algo propio.

Automatización e IAEn producción

ESO Trade Tracker: alertas de ofertas en el mercado de The Elder Scrolls Online

Un programa que vigila el mercado entre jugadores de The Elder Scrolls Online y avisa al momento, por Discord o Telegram, cuando alguien vende un objeto por debajo del precio que el usuario ha fijado, indicando precio, cantidad, vendedor y dónde está la tienda.Scraper asíncrono en Python 3.12 que consulta periódicamente el sitio de precios del mercado del juego mediante dos rutas (peticiones HTTP a través de proxy residencial y un navegador Playwright local como respaldo), filtra ofertas por umbral y ahorro mínimo, las persiste en SQLite y notifica por Discord (API REST con botones de acción) y Telegram.

  • Web scraping y automatización de navegador
  • Programación asíncrona
  • Integración de APIs de mensajería
  • Python 3.12
  • asyncio
  • httpx
  • Playwright
  • Proxy residencial
Última actividad: septiembre de 202616 días trabajados
SeguridadPrototipo

Lockout: bloqueo de teclado y ratón en Windows con desbloqueo por combinación de teclas

Una pequeña herramienta para Windows que deja el computador sin respuesta al teclado y al ratón hasta que el usuario escribe una combinación secreta de teclas, acompañada de una interfaz de escritorio para activarla.Proyecto en dos piezas: un ejecutable nativo en C++ con la API Win32 que intercepta todo el teclado y el ratón mediante hooks globales de bajo nivel y solo los libera al detectar una secuencia de desbloqueo, y una interfaz de escritorio en Electron + React desde la que se activa el bloqueo.

  • Programación de sistemas en Windows
  • Captura y gestión de entrada de teclado y ratón
  • Desarrollo de aplicaciones de escritorio
  • C++
  • Win32 API
  • Visual Studio
  • Electron
  • electron-vite
Sin actividad reciente
Automatización e IAEn producción

Bot de pesca para Black Desert Online: automatización guiada por visión por computadora

Experimento personal que automatiza la pesca del videojuego Black Desert Online: el programa mira la pantalla, reconoce en qué fase está la partida y pulsa las teclas que corresponden.Aplicación de escritorio en Python que lee el estado del juego a partir de capturas de pantalla (coincidencia de plantillas con OpenCV y análisis de color por píxeles con NumPy) y controla teclado y ratón con keyboard y PyAutoGUI, orquestado como una máquina de estados en bucle.

  • Visión por computadora
  • Automatización de escritorio
  • Reconocimiento de imágenes por plantillas
  • Python
  • OpenCV
  • NumPy
  • PyAutoGUI / PyScreeze
  • keyboard
Última actividad: noviembre de 20251 día trabajado

Actividad en mis proyectos personales

Cada cuadro es un día del último año: cuanto más intenso el color, más avance hubo. Se actualiza solo cada semana.

Pasa el mouse por un día para ver en qué se trabajó esa semana.