Auditoría y Simplificación de Servicios Auxiliares · plan multi-fase
Apodo canónico del plan
“Plan Servicios” (registrado s66 · 16-05-2026 tarde). Cualquier referencia en futuras sesiones a “Plan Servicios” debe resolverse a este ADR + catálogo asociado.
Contexto
Tras 6+ meses de desarrollo intensivo del SaaS CreaRack Pro + plataforma Workspace + método claude-method, el sistema ha crecido en alcance y dependencias externas a una velocidad superior a la capacidad de cualquier humano del equipo (de 3 personas) para mantener el mapa mental completo.
Preocupación operativa explícita del CEO (Edu · 16-05-2026):
“Hemos creado innumerables sistemas de automatización para disparar crons, o enlazar servicios (Resend, Cloudflare, GitHub, servidores en Hetzner, etc.). Soy incapaz de recordar todo este enjambre de servicios auxiliares de los que depende el SaaS CreaRack y nuestra plataforma Workspace, incluso nuestro claude-method. Me pregunto qué podemos hacer para unificar y poner en orden, es decir simplificar todo esto.”
Síntomas observables:
- No existe inventario centralizado de servicios externos (cuentas, costes, owners, criticidad).
- Credenciales dispersas (Dokploy panel · CF Pages env · GitHub secrets/vars · Hetzner SSH keys ·
.envlocales ·settings.local.json· MEMORY personal de Claude). - Crons distribuidos entre GitHub Actions, servidor STAGE Hetzner, cron del PC personal de Edu (residual, ya migrado en s39 según Regla 17), y Cloudflare Workers.
- Servicios SaaS contratados (algunos free, otros paid) sin auditoría reciente: ¿pago algo que no uso? ¿hay duplicidades?
- Sensación de “perder el control” a medida que se delega cada vez más en SaaS externos.
Decisión
Ejecutar plan en 3 fases independientes. Cada fase entrega valor por sí sola sin depender de las siguientes — punto de parada/evaluación tras cada una.
Fase A · Auditoría y Catálogo (prioridad ALTA · estimado 1-2 sesiones)
Objetivo: tener un mapa completo y vivo de TODOS los servicios externos del proyecto.
Entregables:
- Wiki page tech
entity--ops--catalogo-servicios-externos(workspace-tech) con tabla completa:- Nombre del servicio · función · proveedor
- Cuenta (Edu / CreaRackSL / Esferic Labs / personal) · email asociado
- Coste mensual estimado · plan contratado
- Criticidad (alta = PROD caería · media = degradación · baja = nice-to-have)
- Dónde viven las credenciales (sitio canónico)
- Owner funcional (Edu / Dani / Txell)
- Qué hace si cae · ¿hay fallback?
- Última verificación / revisión
Dashboard visual en el workspace (→ DESCARTADO 16-05-2026 tarde: refinamiento UX directo de la wiki page del catálogo en lugar de página nueva. Valor entregado equivalente sin código adicional (sección “Si esto cae, cae el negocio” + tabla “Para Txell · qué facturamos” agrupada por cuenta pagadora + columna Panel billing en tabla resumen)./serviceso panel en/dashboard)- Memoria personal Claude actualizada con referencias.
Criterio de éxito:
- Si Edu/Dani/Txell preguntan “qué servicios usamos para X” se puede contestar en <30 seg con doc en mano.
- Total coste mensual aproximado conocido (suma de los planes contratados).
Fase B · Limpieza (prioridad MEDIA · estimado 1 sesión)
Objetivo: eliminar redundancias y desorden detectados en Fase A.
Acciones esperadas (priorizadas tras auditoría):
- Cerrar cuentas abiertas y no usadas (servicios probados y abandonados).
- Consolidar servicios duplicados (típico: ¿UptimeRobot + CF Healthcheck + Prometheus = todos miran lo mismo?).
- Matar crons huérfanos (Task Scheduler personal residual, Workers Cloudflare obsoletos).
- Centralizar credenciales en un sitio canónico (probablemente página wiki cifrada o gestor estilo Bitwarden personal del equipo).
- Documentar cada eliminación con razón.
Criterio de éxito: ≥3 cuentas/servicios eliminados o consolidados. Credenciales con sitio canónico documentado.
Fase C · Migración selectiva a Hetzner (prioridad BAJA · multi-sesión · OPCIONAL)
Objetivo: migrar a infraestructura propia SOLO los servicios donde el cálculo de “control + ahorro” supera al de “mantenimiento + complejidad”.
Lista probable a migrar (revisar tras Fase A):
- ✅ GitHub Actions self-hosted runner: minutos ilimitados sin cap. 1 runner en STAGE Hetzner cubre ambos repos.
- ✅ Uptime monitoring: Uptime Kuma self-host (Docker) reemplaza UptimeRobot · más checks + status page propia.
- ✅ Crons Bibliotecario (Curator/Lint/Catalog/Utility/Weekly-Report): mover a cron del host Hetzner · sin Actions ni cap.
- ⚠️ Status page / alertas centralizadas: candidato menor, evaluar.
Lista explícita de NO migrar (decisión consciente · refractaria a “second-system effect”):
| Servicio | Por qué se mantiene SaaS |
|---|---|
| Cloudflare (DNS+CDN+WAF+Access+Pages+Workers+D1) | Replicar la edge geográfica + WAF + DDoS protection a esta escala es económica y operativamente inviable. |
| GitHub (code+PR+Actions UI+Issues) | $4/mes Pro. Self-host Gitea/Forgejo no añade control real (es tu cuenta) y suma mantenimiento. |
| Resend (transactional email) | IP reputation + DKIM/DMARC + bounce handling = pesadilla mainteable a volumen bajo. |
| Zoho Mail (humano corporativo) | Mismo argumento que Resend × 10. Email humano es donde MENOS quieres tener dolores. |
| Anthropic API (Claude) | No se puede self-host. 80% del coste IA del proyecto. |
| Google AI Studio (Gemma 4) | pve-epyc-02 self-host dado de baja en s53 por coste eléctrico/mantenimiento (decisión ya tomada). |
| Holded (contabilidad/facturación) | Cumplimiento Hacienda. No se self-host contabilidad de una SL. |
| Hetzner Cloud (PROD + STAGE) | Es el proveedor base, no es servicio a “migrar”. |
Criterio de éxito: solo se aborda si Fase A+B revelan dolor real persistente. Cada migración individual debe pasar test “¿da más control neto o más mantenimiento?”.
Alternativas consideradas y descartadas
Alternativa 1 · Self-host everything en un Hetzner dedicado
Rechazada — el cálculo no sale:
- Cloudflare edge no es replicable a esta escala.
- Email reputation requiere IPs con historial limpio (meses-años de “warm-up”).
- Code hosting + CI propio = más mantenimiento que valor añadido.
- Tiempo del equipo (3 personas) es 10x más caro que los $30-50/mes en SaaS.
Alternativa 2 · No hacer nada
Rechazada — el problema crece. Cada nuevo servicio añade peso al “enjambre” sin documentar el anterior.
Alternativa 3 · Solo auditoría y documentación (sin Fase B/C)
Válida y conservadora. Plan elegido incluye Fase B (limpieza) porque tras documentar suelen aparecer obvios. Fase C queda explícitamente opcional.
Consecuencias
Esperadas positivas
- Mapa mental claro para los 3 miembros del equipo (igualdad de accesos · Regla 24).
- Ahorro tiempo búsqueda de info (“¿dónde está la API key de Resend?” → 1 click).
- Reducción de la angustia operativa del CEO.
- Ahorro €/mes marginal (cuentas no usadas · planes sobre-dimensionados).
- Posibilidad de recuperar control real sobre componentes específicos (Fase C).
Esperadas negativas / riesgos
- Tiempo invertido en auditoría (estimado 3-5h totales · A+B).
- Si Fase C avanza demasiado, riesgo de “second-system effect”: querer migrar más de lo razonable.
- Documentación que requiere mantenimiento (drift como cualquier doc).
Mitigaciones
- Fases independientes con puntos de parada explícitos.
- Lifecycle de la wiki page del catálogo:
refresh-30d(el Bibliotecario marcará verification_pending para forzar revisión mensual). - Tras cada fase, revisar valor entregado vs coste y decidir si continuar.
Criterios de éxito globales (medibles a 3 meses)
- A: 0 servicios externos sin documentar en el catálogo. ✅ 22 servicios catalogados (16-05-2026).
- B: ≥3 cuentas eliminadas o consolidadas + credenciales centralizadas. 2/3 + pendiente (DeepSeek + GroupDocs revocadas · credenciales centralizadas pendiente decisión equipo task #33).
- C (si se aborda): ≥1 servicio migrado con éxito a Hetzner sin regresiones. No iniciada (declarada OPCIONAL).
- Subjetivo CEO: Edu reporta menos angustia operativa al pensar en “todo lo que depende el proyecto”. Pendiente evaluar a 3 meses.
Estado
- 16-05-2026 (s66 mañana): ADR firmado por Edu. Inicio Fase A.
- 16-05-2026 (s66 tarde): Fase A cerrada al 90% — audit completo (22 servicios catalogados · 5 descubrimientos resueltos: DeepSeek ⛔ inactivo, groupdocs ⛔ inactivo, Zoho solo Mail, CF Workers AI crítico, Spinetix no-SaaS). Fase B parcialmente avanzada como bonus — 2 cleanups quirúrgicos ejecutados (PR #36 DeepSeek
bcebf38b-36 LOC · PR #37 groupdocs465782c0-94 LOC) + 1 security fix bonus detectado por audit crons (PR #38 python-multipart66a4e753CVE GHSA-pp6c-gr5w-3c5g resuelto, Agent v2.0.20). 3 acciones manuales completadas por Edu (revocación API keys DeepSeek + GroupDocs + rebuild Agent + distribución). - 16-05-2026 (s66 noche · CIERRE OPERATIVO 95%): Plan Servicios declarado cerrado operativamente al 95% (decisión Edu). Fase A 95% (refinamiento UX wiki commit
ee33e8bfcierra dashboard descartado). Fase B 50% (cleanups + audit crons + security bonus + Agent .exe subido a release). Fase C OPCIONAL, postponed. Los 2 pendientes restantes (#31 costes reales · #33 decisión credenciales) quedan vivos en MCP tasks workspace con due_date — no bloquean nada técnico y se irán resolviendo asíncronamente. ADR queda como referencia viva del estado; cualquier reapertura futura (ej. iniciar Fase C) crea nueva entrada de estado fechada.
Pendientes vivos (delegados a tasks MCP workspace)
Los 2 pendientes que quedan abiertos tras cierre operativo, ambos con due_date y owner:
- Costes mensuales reales (task MCP #31 · Edu · due 23-05-2026) — Anthropic Plan Max × 3 + Google AI Studio Paid + Holded + Zoho Mail + Tailscale. Requiere acceso de Edu a paneles externos. Estimado 30min total. Actualizar tabla “Coste mensual aproximado” del catálogo wiki al recopilar.
- Decisión credenciales centralizadas (task MCP #33 · Equipo · due 30-05-2026) — Bitwarden Free/Premium Families vs 1Password Teams vs KeePass self-host vs status quo. Requiere reunión Edu+Dani+Txell. ADR resultante
decision--202605XX--credenciales-centralizadas. Estimado 30min reunión + escritura ADR.
Los pendientes originales #32 (dashboard /services) y “crons huérfanos” están resueltos (refinamiento wiki + audit 0 huérfanos respectivamente).
Reapertura futura
Reabierta el 10-09-2026 (s320) como decisión nueva: plan
public/supercontext/stack-servicios/PLAN_STACK_SERVICIOS.md(task #298), en tres tiempos: mapa vivo (hecho ese día: catálogo refrescado + inventario automático semanal en OPS con aviso ainfra@), estrategia de hospedaje propio (storm → roast → ADR nuevo), migraciones una a una. De la lista “probable a migrar” de la fase C ya están hechas de facto: runners self-hosted y crons del Bibliotecario en OPS (julio 2026); Uptime Kuma sigue como candidato. La lista de “NO migrar” se mantiene como principio, salvo GitHub, que con Forgejo en espejo (F1) pasa a deliberación.
Fase C (migración Hetzner) puede iniciarse en cualquier momento futuro como sub-iniciativa independiente. Crear nueva ADR decision--202607XX--fase-c-migracion-hetzner si se decide proceder (no reabrir este ADR — cada fase con su trazabilidad).
Catálogo de servicios (entity--ops--catalogo-servicios-externos): mantenimiento continuo vía lifecycle: refresh-30d. El Bibliotecario marca verification_pending cada 30 días. Owner del refresh: Edu.
Véase también
- [[ia-tech—automatismos—metodo—github-actions-presupuesto]]
- [[ia-tech—inventario-automatismos]]
- [[decision—20260514—saneamiento-docs-periodico]]