Desarrollo por iniciativa propia

Doce proyectos, y el estado real de cada uno por escrito.

Seis juegos en Godot 4, cuatro proyectos web y dos aplicaciones de gestión para negocios reales, escritos con IA. Lo que distingue a este portfolio no es el volumen: es que cada hito está medido antes de darse por bueno, y que cuando algo no está probado, el propio repositorio lo dice.

753.547líneas de código
7.599comprobaciones verificadas
472commits de historial
446con co-autoría de IA declarada
Cómo están hechos

Escritos con IA, y el historial lo dice desde el primer commit

El código de estos doce proyectos se ha escrito con IA, con Claude Code. 446 de los 472 commits llevan la co-autoría declarada en el propio mensaje, y en CovetBorn hay diez que tienen a la IA directamente como autora. Los 26 que no la llevan son los más viejos de Veta Serena, de antes de que la costumbre empezara. No está escondido y nunca lo ha estado: hay un CLAUDE.md en el repositorio de Veta Serena, y los documentos de estado de HungerBorn y We Need Millions están escritos como traspaso entre sesiones.

Lo pongo arriba y no al final porque un portfolio que dice contar el estado real no puede omitir cómo se hizo el trabajo. Los documentos de diseño son míos —dieciocho en CovetBorn, dieciséis en La ciudad en una maleta, escritos antes del código y mandando sobre él—, igual que las decisiones de rumbo y la disciplina de medir. El código, en su mayor parte, no.

Y esa disciplina no es una pose: está ahí porque hacía falta. La IA produce código plausible muy rápido, y plausible no es lo mismo que correcto. Estos tres casos están documentados en sus repositorios y son la razón de que haya un diario de medidas en cada proyecto.

El simulador se saboteaba a sí mismo

El jugador automático de La ciudad en una maleta desmontaba un edificio propio antes de comprobar que la pieza entrante cabía en el hueco —área no es forma—, y cuando no cabía lo había perdido igual y encima no apuntaba la amputación. 298 veces en 200 partidas.

Tres tandas de medidas se habían tomado sobre eso. El juego era más fácil de lo que decían: 66 % llegan al refugio, no 57 %.

Las cifras de fps no medían nada

En Veta Serena se citaban fps medidos con vsync puesto. «144 fps» no era el juego: era el monitor. Se vio en cuanto hizo falta saber lo que costaba algo — el sol del corral salía a 144 con sombras y a 144 sin ellas.

Ahora el modo captura apaga el vsync a propósito, porque existe justo para medir.

La revisión adversarial se quedó a medias

Una revisión multi-agente sobre Just One More Door propuso 33 defectos, pero el límite de sesión mató a 77 de los 105 agentes, así que la mayoría quedó sin verificar. Eso es peor que refutado: significa no saber cuáles son reales.

Se triaron los veintidós a mano, uno por uno. Veintiuno eran ciertos.
Cómo trabajo

Tres reglas que se cumplen en los doce repositorios

No son principios de escaparate: se pueden verificar abriendo cualquiera de los proyectos, porque están escritos dentro y con fecha.

Nada se cambia sin medirlo

Cada proyecto lleva un diario de medidas. Un ajuste de equilibrio no se da por bueno porque «se sienta mejor»: se simula, se anota el número de antes y el de después, y queda escrito cuándo se midió.

«El fotograma del campamento baja de unos 40 a 22 ms con la horda llena.»

El estado se cuenta sin adornos

Los README no dicen «terminado» cuando no lo está. Si un juego es jugable de principio a fin pero nadie lo ha probado con las manos todavía, eso aparece en la primera pantalla, en negrita, antes que cualquier logro.

«Montado y medido. Falta probarlo con gente.»

Las pruebas son red, no decoración

7.599 comprobaciones. Con matiz, porque es lo honesto: tres de los seis juegos tienen arnés y los otros tres no, y sus README lo dicen en la primera pantalla en vez de esconderlo. De esas 7.599, 1.292 están verificadas ejecutando el arnés en la última medida de este sitio y las otras 6.307 son la última batería ejecutada que cada proyecto deja anotada y fechada en su repositorio. Las 7.599 son de tres proyectos, no de los doce: las dos aplicaciones de gestión tienen 424 ficheros de prueba entre las dos, pero ninguna publica todavía un total consolidado de una sola ejecución, así que no se suman aquí. Sumar un recuento de ficheros a una cifra de comprobaciones ejecutadas sería mezclar dos cosas distintas. Ya no hay ninguna «contada sobre el código»: el arnés que no informaba del resultado ahora imprime las comprobaciones y los milisegundos de cada suite mientras corre, y eso convirtió 1.554 recuentos en 3.815 resultados. Y uno de los tres arneses no corre sin pantalla: cuatro de sus comprobaciones miran nodos que sin render no existen, y eso está dicho en su repositorio.

«Verificar ejecutando, nunca por código de salida: un Parse Error sale con EXIT 0.»
Juegos

Seis proyectos en Godot 4

Todos en GDScript, todos jugables o con prototipo jugable, y todos con su documento de diseño y su diario de medidas dentro del repositorio.

Veta Serena

Minería tranquila en primera persona. El proyecto se decidió sin artista y sin animador, y eso obligó a que cada cosa que se ve y se oye saliera de código: la malla del terreno con oclusión por vértice, el pico, los faroles, los árboles que se caen cuando les cortas el pie, las partículas y el polvo. No hay una sola textura ni una sola fuente tipográfica en el repositorio, y los créditos lo declaran.

La excavación no rompe celdas enteras: se lleva un bocado esférico de roca, con celdas de 25 cm, para que el ritmo sea de unos veintiocho golpes por metro de galería. Incluye servidor autoritativo y capa de red propios.

Su arnés dejó de ser un recuento: ahora imprime las comprobaciones y los milisegundos de cada suite mientras corre, así que las 3.815 son una batería ejecutada y comparar su salida con la anterior es lo que caza las regresiones. De ahí salió lo más caro de la última tanda: seis millones y medio de celdas reservadas y puestas a cero en cada golpe de pico, que era una puerta de memoria disfrazada de puerta de tiempo.

Prototipo avanzado, y con rumbo fechado: un juego completo para Steam, con economía interna. Las monedas y los minerales son del juego y no salen de él: ni criptomonedas, ni conversión a dinero real, ni dependencia de ningún servicio financiero. Y no hay reloj: nada crece por esperar. Las dos decisiones cripto anteriores están marcadas como descartadas, y con ellas se borró la capa de código que las servía. El proyecto más grande y, con diferencia, el más probado del lote.
90.458 líneas 3.815 comprobaciones 47 suites de prueba 220 commits Godot 4.7
Galeria de la mina por dentro: roca de pocos poligonos iluminada por dos faroles, una veta blanca en la pared y el pico en primera persona El patio al aire libre: la boca de la mina, robles, la chimenea del taller humeando y pilas de tablones La fachada del taller excavada en un monticulo, entre robles y con niebla al fondo Interior del taller: el tablon de encargos, la fundicion encendida y la puerta abierta al patio

We Need Millions

Clicker de goblins. Un árbol de evoluciones de seis ramas y treinta y nueve estrellas, un mundo repartido en diez biomas con paleta, clima y defensas propias, tres partidas independientes, y diez efectos de sonido y cuatro temas musicales sintetizados por script, sin un solo fichero de audio.

No tiene progreso mientras no juegas, y eso es una decisión y no una carencia: el laboratorio que lo medía se quedó a medias y está en pausa, con el código retirado guardado aparte y con su explicación para que la decisión se pueda deshacer sobre lo que ya estaba medido.

Trae un banco de pruebas que juega el árbol entero y pone precio a cada estrella, y una pasada de rendimiento medida: el fotograma del campamento con la horda llena baja de unos 40 ms a 22.

Jugable y camino a una beta. Tres partidas, el asalto acabado, el modo trono desatascado —existía y no era un modo, y se vio con un banco— y un inventario de licencias y procedencia hecho para una posible venta. En el repositorio están también las fotos y los CSV que cada medida cita, porque si no las citas apuntarían a la nada.
127.102 líneas 2.492 comprobaciones 110 commits Godot 4.7
El campamento con cientos de goblins, la lista de mejoras del gremio y el boton de invocar Asalto a una ciudad: la horda cruzando, tres anillos de muralla con arqueros, fuegos y globos Arbol de evoluciones: una constelacion con seis ramas de colores y treinta y nueve estrellas

HungerBorn

Juego de mazmorra con combate, evoluciones y progresión, con arte generado con IA a partir de prompts propios y una web de presentación. Localizado a doce idiomas, incluidos chino, ruso, japonés y coreano.

Y no solo la interfaz: son 256 claves de rótulos por un lado y 3.609 de prosa de combate por otro, en tablas separadas porque son dos problemas distintos —256 rótulos se revisan de un vistazo y 1.852 frases no—. Hizo falta una auditoría dedicada a cazar el texto que nunca llegaba a las tablas: cadenas construidas en código que el envoltorio de traducción no podía ver, y que salían en inglés en las doce versiones sin que nada fallara.

Jugable, con localización completa y sin arnés de pruebas, y su README lo dice en la primera pantalla. El proyecto estuvo meses sin control de versiones y un documento de traspaso hacía de memoria; hoy está versionado, y ese documento llega a avisar por escrito de los huecos que tiene él mismo en vez de disimularlos. La última tanda sacó del juego el último panel azul violeta que quedaba —y era el primero que ve un jugador nuevo— y puso los colores y los titulares de la casa en un solo sitio.
63.931 líneas 12 idiomas 22 commits Godot 4
Portada de HungerBorn: la puerta de una mazmorra iluminada por antorchas, con ojos rojos en la oscuridad y cuatro aventureros de espaldas Corte vertical de la mazmorra: cinco pisos apilados con escaleras, antorchas y salas

La ciudad en una maleta

Estrategia y supervivencia por turnos. Rescatas edificios de un mundo que desaparece, los guardas en una maleta con forma de puzle y construyes dentro una ciudad que tiene que seguir funcionando durante todo el viaje: comida, energía, esperanza y trabajadores, con la niebla avanzando tres leguas cada jornada, viajes o no.

Cuarenta encuentros, tres maletas, veinticuatro edificios y varios epílogos. Cuatro hitos, cada uno montado y medido antes de empezar el siguiente.

Jugable de principio a fin y medido, y con dos cosas abiertas dichas con su cifra. Las cuatro maletas se midieron por fin una a una, y no son cuatro problemas de la misma dificultad como pedía el diseño: llegan al refugio el 58 %, el 31 %, el 13 % y el 1 % de las partidas. Dos de ellas estaban en el 2 % y el 0 %, y la causa no era ninguna cifra de equilibrio: las dos empezaban sin taller, que es la puerta de los dos únicos escapes del juego. Y hay dos combinaciones que el juego ofrece y son injugables, clavadas con dos comprobaciones que llevan el porcentaje en el mensaje. Falta el arte, y falta probarlo con gente.
22.554 líneas 1.292 comprobaciones 12 suites de prueba 16 documentos de diseño Godot 4
La maleta: una rejilla con edificios colocados como piezas de puzle y el panel de recursos de la noche Pantalla de viaje: tres destinos con su coste en leguas, energia y comida, y la niebla avanzando Un encuentro con su texto y tres opciones, cada una con su coste y lo que compromete

Just One More Door

Roguelite de cartas para Steam. Un isekai de mazmorra: te arrastran a un sótano con un contrato firmado que no recuerdas haber firmado, abres una puerta detrás de otra, y todo depende de cuál abras. Runs de quince a veinte minutos con muerte permanente.

Antes existió un prototipo web jugable que sirvió para probar el concepto rápido. Se pensó conservarlo como banco de pruebas de equilibrio y se descartó con un argumento medido: la simulación headless de Godot tarda segundos y usa el contenido bueno, así que tener el contenido en dos sitios solo garantizaba desincronizarlo.

Jugable de principio a fin, exportado a Windows, Linux y Mac, y jugado con las manos. Tiene sala de espera y bajada en grupo por Steam, y la lista de defectos a cero: salió de una revisión adversarial multi-agente que propuso 33 fallos, y los veintidós que quedaron sin verificar se triaron a mano uno por uno. Lo que más ha cambiado el juego no es código: una tarde con un amigo y dos ordenadores movió más cosas que cualquier banco, y desde entonces el repositorio escribe que lo que diga una tarde jugando manda sobre los bots. Para publicarlo falta el App ID de Steam de verdad: hoy va con el de pruebas.
29.801 líneas banco de 500 partidas 3 plataformas contenido en JSON Godot 4.7
El rellano: el rotulo del juego, una puerta dibujada a mano, el cuaderno, los desafios y el contador de bajadas La mesa de una bajada: dos puertas sobre papel cuadriculado bajo el rotulo que pregunta cual abres

CovetBorn

City builder de fantasía cuyo tema no es el dinero, sino la avaricia. No se conquista con combate: se conquista con economía, comercio e influencia. No existe «ganar», solo llegar a uno de varios finales.

La restricción de diseño que lo define: el jugador nunca abandona su ciudad y solo conoce el mundo a través del Consejero, que nunca miente. Las ciudades reaccionan al historial completo de acciones, no a una decisión aislada.

Diseño cerrado y base de código en marcha. Dieciocho documentos de diseño, de la diplomacia a los finales, incluido uno de deuda pendiente: la aduana, los agravios, las caravanas y la crónica ya están en el código.
24.927 líneas 96 commits 18 documentos de diseño Godot 4
El mapa del mundo generado por procedimiento, con la barra de recursos arriba y el Consejero hablando en un bocadillo
Web

Cuatro proyectos web, sin empaquetador

HTML, CSS y JavaScript a pelo, sin dependencias ni paso de compilación: se abren y funcionan. Uno de ellos está en uso en un negocio real.

Muestrario

Veintiuna webs de ejemplo en quince sectores, con la complejidad deliberadamente variada: desde una página casi sin JavaScript hasta buscadores con filtros, reservas y simuladores. Cada una con su propia paleta, su tipografía y su funcionalidad.

Y todas en cuatro idiomas —español, inglés, chino y árabe, este último de derecha a izquierda—, con el idioma tomado del navegador. El índice filtra por sector y por complejidad, que es lo que hace falta cuando le enseñas esto a un cliente que todavía no sabe cuánto quiere.

Veintiuna terminadas y siete sectores más con la carpeta creada y todavía vacía. Todas las marcas son ficticias y se declara en cada pie de página.
21 webs 15 sectores 4 idiomas 0 dependencias
Indice del muestrario: el titular Veintiuna webs de ejemplo de minimas a complejas, con cuatro cifras y filtros por sector y complejidad NOVA, farmacia online: cabecera clara con catalogo, filtros por categoria, cesta y tarjetas de servicio BLANC, estetica dental: fondo negro con tipografia serif elegante y el titular La sonrisa que ya tenias Noctambulo, cocteleria: serif dorada sobre azul muy oscuro y un indicador de abierto ahora FORJA, gimnasio: tipografia condensada enorme en verde fluor sobre negro, con cifras del centro y reserva de plaza Hoja y Tallo, floristeria: fondo crema, serif con cursiva rosa y el titular Flor de temporada cortada esta manana

FUSE

Web comercial para una bebida ficticia, al estilo de las webs de agencia premium: tipografía enorme, scroll cinematográfico y cursor propio. Con un módulo propio de animación por scroll y el contenido separado del marcado.

En cuatro idiomas, árabe incluido. Lo que demuestra el proyecto es que el efecto de agencia no necesita trescientos kilobytes de dependencias: no hay empaquetador, no hay node_modules y no hay paso de compilación.

Terminada. Marca ficticia y ejercicio de diseño, y así se declara en el propio sitio.
3.070 líneas 4 idiomas animación propia 0 dependencias
Portada de FUSE: el rotulo FUSE enorme en blanco sobre una botella iluminada en naranja, con navegacion, selector de idioma y una banda de reclamos abajo

Boca Pizza · Sala

Web app instalable (PWA) para el personal de una pizzería: estado de las mesas en vivo, reservas y un editor del plano de la sala. Varias tablets viendo lo mismo a la vez, con sincronización en tiempo real y funcionamiento local si no hay conexión configurada.

PWA completa —manifest, service worker e iconos— para que se instale en la pantalla de inicio y se abra como una app.

En uso en un local. Es el único proyecto hecho para un negocio real, y por eso su repositorio es privado y la captura está vacía a propósito: el plano con datos dentro es del cliente, no mío.
PWA instalable tiempo real tablet y móvil
Editor del plano de sala de Boca Pizza, vacio: los tres tipos de mesa arriba y la rejilla del plano debajo

Just One More Door · prototipo

El prototipo en JavaScript del roguelite de cartas, jugable de principio a fin. Se hizo antes que la versión de Godot y sirvió para probar el concepto con las manos, rápido y sin motor.

Se pensó conservarlo como banco de equilibrio porque simular en JavaScript parecería más rápido, y resultó falso: la simulación headless de Godot tarda segundos y usa el contenido bueno.

Congelado a propósito. Se conserva como registro del concepto, no como herramienta. La fuente de verdad del contenido está en el proyecto de Godot.
2.327 líneas dibujo por código 0 dependencias
Portada del prototipo web: una figura de palo junto a una puerta dibujada a mano sobre papel cuadriculado, el rotulo del juego y el boton BAJAR
Gestión

Dos aplicaciones de gestión para negocios reales

Los dos proyectos más grandes del portfolio, y los dos con IA dentro del producto y no solo escribiéndolo. Entraron en control de versiones en octubre de 2026, así que su historial es corto y su código no.

Asistente del local

Gestión para bares, locales y empresas pequeñas, multiempresa y con alcance por local. Lleva el género que entra, el que se vende y el que se pierde, y dice qué hay que comprar: catálogo y formatos, proveedores y suministros, pedidos con sus recepciones, caja y jornada, documentos y obligaciones económicas, y exportaciones para la gestoría.

Las respuestas las calcula código normal, no la IA. Qué comprar, qué ha desaparecido o cuánto vale el almacén son cuentas exactas, instantáneas y gratis, haya modelo o no. La IA solo sirve para entender una pregunta escrita a lo bruto y para redactar el resumen, y por eso un modelo pequeño y gratuito llega de sobra. Es la decisión de diseño que explica el resto del proyecto.

En desarrollo activo, con un piloto preparado y sin validar esta tanda. Separa a propósito cuatro cosas que un gestor suele mezclar: lo que pasó, lo que se debe, lo que el programa recomienda y lo que una persona ha confirmado. Una sugerencia no se presenta como un pedido enviado ni una estimación como contabilidad cerrada. Dos reglas duras: nada borra bases —cada cambio de esquema deja respaldo y registro— y la demostración se da con enlaces de acceso en vez de repartir contraseñas.
200.812 líneas 193 ficheros de prueba 40 escenarios en navegador TypeScript · Prisma

Residy

Gestor de habitaciones para centros: app Android nativa en Kotlin y Compose para localizar una habitación sobre el plano, abrir su ficha desde el mapa, una etiqueta NFC o un código QR, y consultar sus ocupantes y sus campos configurables. Con servidor propio en Ktor y PostgreSQL, y un panel web para PC sobre los mismos endpoints que la tablet.

Lo que más lo define es lo que hace con la IA: desde la entrega 23 una nota de voz dictada en la tablet se transcribe en el propio servidor, con whisper.cpp instalado aparte. El audio no sale de la máquina, no hay proveedor externo y no hace falta ninguna credencial de pago. El texto nace «Generado con IA · Pendiente de revisión» y lo coteja una persona desde el panel; el que salió del motor se conserva siempre al lado del corregido.

Cuarenta y una entregas, y nada probado nunca en una tablet real. Eso es lo que el repositorio no puede afirmar, y lo dice: hay una sección por entrega con lo que habría que comprobar a mano y están todas pendientes. El motor de voz está medido con cuatro audios de voz sintética, y la medida enseña que se equivoca de formas que cambian el sentido de una frase —«no sierra bien» por «no cierra bien»— y que sobre silencio se inventa texto. Por eso nace pendiente de revisión.
176.664 líneas 231 ficheros de prueba 41 entregas Kotlin · Ktor · PostgreSQL
Acceso al código

Los repositorios son privados. El acceso se da en un minuto.

Los doce proyectos están en GitHub como repositorios privados, cada uno con su historial, su documento de diseño y su diario de medidas. Si estás valorando mi perfil y quieres leer el código, escríbeme y te doy acceso de lectura a los que te interesen, o a todos.