01 — RUNBOOK: Clonar a un Cliente Nuevo

Índice de la página
  1. 01Step-by-step técnico (manual + automatizado)
  2. 020. Pre-requisitos
  3. 031. Provisioning automatizado (clone-script)
  4. 1.1 Lo que el script automatiza (target v2.0)
  5. 1.2 Manual hasta que exista el script (v1.0 — proceso de hoy)
  6. 042. Provisioning manual (lo que NO se puede automatizar)
  7. 2.1 Pasarelas de pago — del cliente
  8. 2.2 Cuenta Meta Ads
  9. 2.3 Equipo de ventas (closer)
  10. 2.4 Decisiones de branding
  11. 053. Validación E2E (post-clone)
  12. 064. Caso especial: cliente con dominio propio
  13. 075. Lo que falta automatizar (backlog v2.0)
  14. 086. Roll-back / kill-switch
  15. 09CHANGELOG

Step-by-step técnico (manual + automatizado)

Pasos exactos que ejecuta Eric (o quien herede el rol DevOps) para llevar un cliente firmado a "infra lista". El objetivo de v2.0 es que el 80% de esto sea 1 click; en v1.0 todavía hay pasos manuales.

Versión: 0.1 (pre-script)
Última actualización: 2026-05-05
Tiempo estimado total: 4-6 horas (v1.0) → 30-60 min (v2.0 con clone_client.py)


0. Pre-requisitos

Antes de tocar este runbook, validar:

  • Acuerdo comercial firmado con cliente.
  • Cuestionario 03_DECISIONES_CLAVE.md completo y firmado por cliente.
  • _CONFIG.md del cliente armado en clientes-tooaudience/<slug>/_CONFIG.md con todas las decisiones del cuestionario.
  • Slug del cliente decidido y único (validar que no choque con otro cliente). Convención: <nombre-apellido> o <marca-slug>. Solo lowercase, sin acentos, separar con guiones.
  • Cliente ya dio acceso a: Meta Business Manager, YouTube Studio, Hotmart productor, dLocal productor, datos transferencia bancaria.

1. Provisioning automatizado (clone-script)

En v1.0 esto es manual paso a paso. Eric construye scripts/clone_client.py después del launch de Martín, idealmente en Python con CLI tipo python3 clone_client.py --slug=<slug> --config=_CONFIG.md.

1.1 Lo que el script automatiza (target v2.0)

Paso API Output
Crear proyecto Supabase Supabase Management API supabase_url, anon_key, service_role_key
Aplicar schema multi-tenant psql contra el nuevo proyecto tablas creadas con RLS habilitado
Insertar fila en clients INSERT con datos de _CONFIG.md client_id UUID
Crear servicio Railway Railway API railway_service_id, deploy URL
Conectar repo bot a nuevo Railway service Railway API env vars seteadas
Crear nueva ruta en Vercel (no requiere deploy nuevo) escribir en app/<slug>/page.tsx desde template commit a repo tooaudience-paraguas
Generar client_config.json desde _CONFIG.md parseo + render del template archivo en repo
Crear carpeta Drive 01 — CLIENTES/<Nombre Cliente>/ Drive API folder ID
Replicar estructura _CLIENT_TEMPLATE/ en Drive Drive API copy árbol PARA en blanco
Clonar 19 checklists desde clientes-tooaudience/martin-rieznik/checklists/ con find-replace de martin<slug> python script local nuevas checklists en clientes-tooaudience/<slug>/checklists/

1.2 Manual hasta que exista el script (v1.0 — proceso de hoy)

Ejecutar UNO POR UNO en este orden:

Paso 1 — Supabase

  • Login a supabase.com con cuenta TooAudience.
  • New Project → nombre tooaudience-<slug> → región sa-east-1 → password fuerte → DB engine PostgreSQL 16.
  • Esperar provisioning (1-2 min).
  • Copiar URL, anon key, service_role key → guardar en _CONFIG.md > infra.supabase.
  • Aplicar schema (mismo de Martín, en db/schema_multitenant.sql del repo tooaudience-paraguas):
    bash psql "<supabase_db_url>" < db/schema_multitenant.sql
  • Validar tablas creadas: clients, leads, eventos, compras, mensajes_wa, miembros_grupo, variantes.
  • Habilitar RLS en todas las tablas (Supabase UI → Authentication → Policies → enable RLS).
  • Insertar fila inicial:
    sql INSERT INTO clients (slug, nombre, config_json) VALUES ( '<slug>', '<Nombre Cliente>', '<JSON desde _CONFIG.md>' );

Paso 2 — Railway

  • Login a railway.app con cuenta TooAudience.
  • New Project → conectar repo tooaudience-bot-whatsapp → branch main.
  • Service name: tooaudience-<slug>-bot.
  • Env vars (copiar de Martín y adaptar):
  • CLIENT_SLUG=<slug>
  • CLIENT_ID=<UUID de la fila clients>
  • SUPABASE_URL=<del paso 1>
  • SUPABASE_SERVICE_KEY=<del paso 1>
  • WA_API_TOKEN=<del paso 5>
  • WA_PHONE_NUMBER_ID=<del paso 5>
  • WA_VERIFY_TOKEN=<random string>
  • OPENAI_API_KEY=<TooAudience shared>
  • Otros: ver templates/_CONFIG.template.md > infra.
  • Trigger deploy → validar logs sin errores → obtener Railway URL.

Paso 3 — Vercel (ruta nueva, no proyecto nuevo)

  • El proyecto Vercel tooaudience-paraguas ya existe (creado para Martín). NO se crea uno nuevo.
  • En el repo tooaudience-paraguas:
    bash git checkout -b add-client-<slug> cp -r app/martin app/<slug> # find-replace en app/<slug>/* de "martin" → "<slug>"
  • Generar public/configs/<slug>.json desde templates/client_config.json.template (sustituir todas las variables).
  • Commit + push.
  • Vercel auto-deploya → validar que https://deacademia.com/<slug>/ carga correctamente.

Paso 4 — Carpeta del cliente en repo Cortex

  • Crear estructura local:
    bash mkdir -p "clientes-tooaudience/<slug>/checklists" cp -r clientes-tooaudience/martin-rieznik/checklists/* clientes-tooaudience/<slug>/checklists/ cp clientes-tooaudience/martin-rieznik/00_CONTEXTO.md clientes-tooaudience/<slug>/00_CONTEXTO.md cp clientes-tooaudience/martin-rieznik/02_PLAN_INTERNO_EQUIPO.md clientes-tooaudience/<slug>/02_PLAN_INTERNO_EQUIPO.md
  • Find-replace de martin<slug> y Martín Rieznik<Nombre Cliente> y LevantArte<marca> en todos los archivos clonados.
  • Editar manualmente 00_CONTEXTO.md con datos específicos del nuevo cliente (hermano, web, decisiones, etc.).
  • Crear _CONFIG.md desde sop/lanzar-cliente/templates/_CONFIG.template.md.

Paso 5 — WhatsApp Cloud API (Meta)

  • En Meta Business Manager (cuenta TooAudience), agregar al cliente como Business Account o crear sub-account.
  • WhatsApp → Setup → comprar nuevo número (provisión dura ~30 min).
  • Display name: <Marca> (debe ser aprobado por Meta, ~24-48h).
  • Configurar webhook: https://<railway-url>/webhook/whatsapp con verify token.
  • Aprobar plantillas de mensajes (hello_world, recordatorio_pre_webinar, post_compra_taller, etc.) — ~24h Meta.
  • Capturar phone_number_id, whatsapp_business_account_id, access_token → guardar en _CONFIG.md > infra.wa_cloud_api.
  • Iniciar calentamiento del número: ver clientes-tooaudience/<slug>/checklists/11_WHATSAPP_API_NUMEROS.md (curva 14 días).

Paso 6 — Drive del cliente

  • En Drive TooAudience (0AO3iOcjP6K-PUk9PVA):
  • Copiar carpeta 00 — SISTEMA TOOAUDIENCE/Templates/_CLIENT_TEMPLATE/01 — CLIENTES/<Nombre Cliente>/.
  • Compartir carpeta con cliente (rol Editor o Comentarista según preferencia).
  • Subir _CONFIG.md y _ROADMAP.md a la raíz de la carpeta del cliente.
  • Crear subcarpeta R — Recursos/ y subir lo recolectado del scraping.

2. Provisioning manual (lo que NO se puede automatizar)

Estos pasos requieren interacción humana porque dependen de UIs externas o aprobaciones de terceros.

2.1 Pasarelas de pago — del cliente

Esto lo hace el cliente con guía nuestra. Tiempo: 3-5 días dependiendo de aprobación de cuentas.

  • Hotmart: cliente abre cuenta de productor, da acceso al equipo TooAudience. Crear 6 productos (TALLER_LUNES, TALLER_MARTES, TALLER_FULL, MEMBRESIA_ANUAL_1PAGO, MEMBRESIA_MENSUAL, MEMBRESIA_6_MESES). Capturar 6 checkout URLs.
  • dLocal: cliente abre cuenta productor, da acceso. Crear 6 productos. Capturar URLs/IDs.
  • Shopify: definir titularidad (TooAudience como master tienda multi-tenant es el default v1.0). Crear 6 productos. Capturar URLs.
  • Skool (opcional): si cliente tiene comunidad Skool con productos pagos, crear 3 SKUs de membresía.
  • Transferencia: cliente da datos bancarios (alias/CBU/banco/titular/CUIT). Cortex genera instructivo PDF desde templates/transferencia_instructivo.template.md.

Ver checklist completa: clientes-tooaudience/<slug>/checklists/16_PASARELAS_PAGO.md.

2.2 Cuenta Meta Ads

Solo cliente puede dar acceso. Tiempo: < 1h.

  • Cliente comparte Meta Business Manager con email TooAudience (rol Admin).
  • Equipo TooAudience valida: Pixel ID + Conversions API access + Ad Account ID + permission Ads_Management.
  • Configurar CAPI server-side desde Vercel /api/capi-meta con Pixel ID + Access Token del cliente.

2.3 Equipo de ventas (closer)

Si el cliente comparte closer con otros, no requiere reclutamiento. Si no, ver checklist 15.

  • Asignar closer principal + backup.
  • Onboarding (2 sesiones de training con cliente y Jesús).
  • Configurar handoff bot WA → closer (criterios + tooling).

2.4 Decisiones de branding

Solo cliente puede definir su identidad visual.

  • Color primario hex.
  • Color secundario hex.
  • Tipografía (web-safe o Google Font).
  • Logo (PNG transparente alta resolución + SVG si tiene).
  • Subir logos a public/clients/<slug>/logo.png en repo tooaudience-paraguas.

3. Validación E2E (post-clone)

Antes de declarar "cliente listo":

  • Entrar a https://deacademia.com/<slug>/ desde dispositivo limpio (incógnito + WiFi distinto).
  • Completar quiz → ser redirigido a WhatsApp con mensaje pre-llenado.
  • Mandar mensaje al WA del cliente → bot responde dentro de 60 seg con voz parametrizada del cliente.
  • Validar que el lead aparece en Supabase con client_id correcto.
  • Validar que evento Lead llega a Meta Events Manager con match rate > 70%.
  • Visitar /<slug>/taller y /<slug>/membresia → precio correcto, todas las URLs de pasarelas funcionan.
  • Hacer compra test de $1 con tarjeta de testing en cada pasarela → validar webhook → registro en Supabase tabla compras con client_id correcto.
  • Validar que el bot pone al lead en grupo pre-webinar.
  • Validar que el cron job del recordatorio pre-webinar dispara (testear con timestamp adelantado).

4. Caso especial: cliente con dominio propio

Default: cliente vive en deacademia.com/<slug>. Si quiere su propio dominio (<marca>.com):

  • Cliente compra dominio.
  • Cliente apunta DNS a Vercel project tooaudience-paraguas (mismo proyecto, otro dominio asociado).
  • En Vercel: agregar dominio custom + esperar SSL.
  • En client_config.json > infra.base_url, cambiar a https://<marca>.com.
  • En el repo, crear redirect de //<slug> para el dominio nuevo (Next.js middleware).

5. Lo que falta automatizar (backlog v2.0)

Tarea manual hoy Cómo automatizarla
Crear proyecto Supabase Supabase Management API + script Python
Crear servicio Railway Railway GraphQL API
Find-replace en archivos clonados Script Python con jinja2 + variables del _CONFIG.md
Approval de plantillas WA NO se puede — depende de Meta. Mitigación: tener pool de plantillas pre-aprobadas reusables.
Aprobación cuentas Hotmart/dLocal NO se puede — depende del cliente. Mitigación: enviar tutorial + checklist 1-pager al cliente día -7.
Configurar branding (logo + colores) Parcial: subida automática del logo a Vercel public folder; colores leen del JSON automáticamente.
Calentamiento WA número NO se puede — proceso de 7-14 días definido por Meta. Mitigación: tener pool de números calentados rotativos.

6. Roll-back / kill-switch

Si un cliente termina contrato:

  • Pausar todas las campañas Meta del cliente (script: pause_client_ads.py --slug=<slug>).
  • Dejar funnel + bot en lectura solo (no procesa nuevos leads, sí responde "el programa terminó").
  • Exportar todos los datos del cliente desde Supabase (CSV completo de leads + compras + mensajes).
  • Entregar exportes al cliente.
  • Después de 90 días: archivar carpeta Drive + suspender Supabase project + Railway service.
  • Conservar carpeta clientes-tooaudience/<slug>/ con bandera STATUS=archived.

CHANGELOG

  • 2026-05-05 — JT — v0.1 inicial. Pasos manuales documentados. clone_client.py queda como TODO post-Martín.