SaaS de facturación AI-native
Un SaaS de facturación con cumplimiento fiscal europeo que construí solo. Los agentes Claude escribieron la mayor parte del código. Yo marqué la dirección, revisé cada cambio y lo fusioné.
Anonimizado a propósito: sin nombre, enlace ni capturas.
- 100%de las pull requests, revisadas y fusionadas por mí. Nada se fusiona solo
- 100%de los controles de CI, vistos fallar a propósito antes de contar
- ~90%menos auditorías de dependencias fallidas desde que entró el control de auditoría


El producto
Qué es
Un producto de facturación para autónomos y pequeñas empresas, construido para cumplir el régimen obligatorio de comunicación de facturas en tiempo real de un país europeo: las facturas se comunican a la administración tributaria en el momento de emitirlas y los registros no se pueden cambiar después.
La mayor parte del código la escribieron agentes Claude, en todas las capas: base de datos, API, aplicaciones web, infraestructura y tests. Funciona como beta privada en un entorno de staging. Todavía nadie paga por él y nunca se ha promocionado a producción.
Qué cubre
- Facturas, rectificativas y simplificadas, presupuestos y albaranes
- Clientes, catálogo de productos y gastos
- Captura de documentos asistida por IA (OCR + LLM)
- Cálculo de impuestos e informes fiscales periódicos
- Plantillas PDF y envío por email
- Conciliación bancaria con open banking (simulada en staging)
- Planes de suscripción y cobro
- Varios clientes (tenants) en una misma plataforma, aislados entre sí
- Envío en tiempo real a la administración tributaria, con registros a prueba de manipulación que solo admiten añadir
Escala
El tamaño
Es un producto grande, y de eso va este caso: una sola persona dirigiendo agentes lo cubrió entero, en todas las capas.
Apps
El producto, una consola de administración, una web de aterrizaje y la API, además de procesos en segundo plano y una simulación de la administración tributaria.
API
Cientos de endpoints detrás de las aplicaciones web.
Pantallas
Producto, administración y web de aterrizaje. Cada parte es una aplicación completa con sus propios flujos.
Base de datos
Un esquema relacional grande en PostgreSQL.
Seguridad a nivel de fila
Cientos de políticas separan los datos de cada cliente.
Trabajo en segundo plano
Procesos y tareas programadas fuera del camino de las peticiones.
Triggers
Muchos protegen registros que nunca deben cambiar.
Tests
Decenas de miles, entre backend, frontend y end to end.
Categorías de integración
- Pagos
- Open banking
- Administración tributaria
- Validación de números de IVA europeos
- Almacenamiento de objetos
- Autenticación
- Caché y colas
- Captura de documentos con IA
- Protección contra bots
- Observabilidad
- DNS, CDN, VPN y TLS
El trabajo detrás
Lo que de verdad costó
Claude escribió la mayor parte del código. Lo difícil era llegar a un código que yo estuviera dispuesto a fusionar, y esa parte era mía.
01Muchas vueltas con Claude
El trabajo solía necesitar varias vueltas. Rechazaba lo que parecía correcto pero no lo era, y seguía hasta que llegaba al listón. Que compile es donde empieza la revisión.
02Diseñar el pipeline como un producto
Diseñé el montaje multiagente y multisesión y lo fui mejorando a medida que fallaba de formas nuevas: cómo se reparte el trabajo, cómo los agentes no se pisan y qué tiene que pasar antes de fusionar nada.
03Conocer el dominio
La facturación con cumplimiento fiscal tiene reglas que un agente no puede adivinar. Entenderlas y decidir cómo las trata el producto era mi trabajo. El subagente de cumplimiento revisa. No decide.
04Decidir la arquitectura
Aislamiento entre clientes, registros que no cambian, cómo se redondea el dinero, cómo llega cada versión a staging. Esas decisiones las tomé yo, y los agentes trabajaban dentro de ellas.
05Ser el listón de calidad
Nada se fusionaba sin mi revisión. Todas las pull requests pasaban por mí, de una en una.
Quién hace qué
Un desarrollador, un equipo de agentes Claude
Yo marcaba la dirección y tomaba cada decisión de producto. Varias sesiones de Claude escribían la mayor parte del código en paralelo, y nada llegaba a la rama principal sin pasar los controles y mi revisión.
Yo
Dirección, decisiones de producto, revisión final y cada merge.
Claude como orquestador
Hace de project manager. Planifica, reparte el trabajo y vigila todo lo que está en marcha.
- Bucle continuo
- Memoria compartida
- Planifica y reparte
Escritores
Varias sesiones de Claude a la vez, cada una en su git worktree. Un límite de sesiones simultáneas mantiene estable la máquina.
Controles
84Visto en rojoLuego en verdeComprobaciones ejecutables en CI. Un control solo cuenta cuando lo he visto fallar.
Revisión
- Revisor
- Experto fiscal
Un revisor Claude de solo lectura revisa cada pull request antes que yo. Un especialista en cumplimiento se suma cuando un cambio toca dinero o impuestos.
Merge
YoFusiono las pull requests de una en una. Nada se fusiona solo.
Staging y QA
StagingUn despliegue fallido se revierte solo. Una sesión de QA de Claude prueba staging en un navegador real.
- Reglas y memoriaLo que los agentes deben saber y lo que nunca deben hacer, versionado con el código.
- SkillsSkills para los trabajos que se repiten.
- El bucle de orquestaciónClaude mantiene el trabajo en marcha y contrasta el plan con lo que de verdad ha pasado.
- ControlesComprobaciones ejecutables. Una comprobación solo cuenta cuando se ha visto en rojo, y cada arreglo debe traer un test que falle en main.
Pruebas
Cómo medí si funcionaba
Los agentes producen mucho código muy rápido, así que la pregunta que me hacía siempre era cómo saber si era correcto. La respuesta acabó en cuatro reglas.
Tres pruebas por control
Una comprobación no cuenta hasta que supera tres pruebas. Una de ellas es romper el código a propósito y ver cómo se pone en rojo.
Mutación antes de fiarse del verde
Una batería que pasa dice poco hasta que la mutación demuestra que puede fallar.
Predicciones antes de medir
Escribo lo que espero antes de medir, para que el resultado pueda llevarme la contraria.
Un test de regresión por arreglo
Tiene que fallar contra main. Si pasa con el código roto, no demuestra el arreglo.
Mutación en la calculadora de impuestos
Después de corregir qué tests seleccionaba la pasada, casi todos los mutantes supervivientes desaparecieron. La pasada se volvió algo más lenta.
El pipeline, antes y después de pasar a un flujo multiagente orquestado
- Antes
- una muestra de pull requests de una ventana anterior al cambio
- Después
- todas las pull requests fusionadas en una ventana de la misma duración después
| Medida | Cambio | Valoración |
|---|---|---|
| Ritmo de merges | Más altomejor | mejor |
| Tamaño de las pull requests más grandes (percentil 90) | Un 36 % menoresmejor | mejor |
| Tamaño mediano de pull request | Parecidoalgo mayor | algo mayor |
| Tiempo de apertura a merge, mediana | Más largo, merges de uno en unopeor | peor |
Después de pasar a un flujo multiagente orquestado, se fusionaron más pull requests y las más grandes bajaron un 36 %, mientras que la mediana del tiempo hasta el merge subió porque los merges se hacían de uno en uno. Esa fila está porque es verdad.
La comparación es observacional, no controlada. Las dos ventanas cuentan poblaciones distintas, cambiaron otras cosas a la vez y la segunda ventana estuvo dominada por una racha de arreglos fusionados uno detrás de otro.
No doy cifras de cobertura de tests. No la he medido, y he visto un control en verde que no probaba nada.
Ritmo
El ritmo
Cómo avanzaba el trabajo.
Actividad de merges
En paralelo
Varias sesiones de Claude a la vez, cada una en su git worktree y con su propia tarea.
Un solo revisor
Todas las pull requests pasaban por mí, y las fusionaba de una en una.
Constante
Los merges llegaban con frecuencia. El trabajo avanzaba pull request a pull request.
Herramientas
Stack
Backend
- Python
- FastAPI
- Pydantic v2 (estricto)
- SQLAlchemy asíncrono
- Dinero en decimal
Frontend
- TypeScript (estricto)
- React
- Vite
- Tailwind
- shadcn/ui
- TanStack
- Zustand
- Zod
Datos
- PostgreSQL
- Aislamiento entre clientes en la base de datos
- Registros inmutables
Infraestructura
- Terraform
- Kubernetes (K3s)
- CDN y DNS
- Red privada (VPN)
- Paneles de métricas, logs y alertas
Entrega
- Pipelines de CI
- Runners propios
- Staging con rollback automático
- Workflow de promoción
Testing
- pytest
- Tests con base de datos real
- pgTAP
- Vitest
- Playwright
- mutmut
Pagos
- Pagos con tarjeta y suscripciones
IA en el producto
- Captura de documentos con OCR y un LLM
Herramientas de IA
- Claude Code: orquestador, escritores, revisor, cumplimiento, QA
En qué punto está
Beta privada
Una beta privada pequeña y por invitación en staging. Sin clientes de pago, sin ningún envío real a la administración tributaria y sin versión en producción.
Qué falta para producción
- El alta ante la administración tributaria para enviar facturas en nombre de los usuarios
- Devoluciones y disputas de pago en las suscripciones
- La infraestructura de producción y la primera versión promocionada
¿Quieres saber más de cómo se construyó?
Si buscas perfiles de ingeniería de producto AI-native, te enseño con gusto la arquitectura, el montaje de los agentes y las decisiones de diseño en una llamada.
Por qué no tiene nombre aquí
Mantengo el producto anónimo en esta web, así que no hay nombre, enlace ni capturas. Encantado de entrar en detalle en una conversación.
Nota de ChispiCada control de esta página tuvo que fallar a propósito antes de contar.