02 — Catálogo de Variables Parametrizables

Índice de la página
  1. 01Todo lo que NO debe estar hardcoded
  2. 02Cómo se usa
  3. 031. Identidad del cliente
  4. 042. Branding
  5. 053. Identidad social
  6. 064. Voz y mecanismo único
  7. 075. Webinar
  8. 086. Oferta y SKUs (precio dinámico)
  9. 097. Pasarelas de pago
  10. 108. Tracking
  11. 119. WhatsApp
  12. 1210. Equipo
  13. 1311. Acuerdo comercial
  14. 1412. Infraestructura
  15. 1513. Touchpoints operativos
  16. 1614. KPIs target
  17. 1715. Variables INVENTADAS por agentes (a validar)
  18. 1816. Anti-patterns (NO HACER)
  19. 1917. Validación pre-launch (grep test)
  20. 20CHANGELOG

Todo lo que NO debe estar hardcoded

Si un valor podría cambiar entre el cliente Martín y el cliente #2, debe estar en este catálogo y debe leer de client_config.json (frontend) o clients.config_json (backend) o _CONFIG.md (documental). Es la fuente de verdad para validar el "multi-tenant readiness" del sistema.

Última actualización: 2026-05-05
Owner: Eric (técnico) + Jesús (estratégico)


Cómo se usa

  1. Antes de cerrar la fase de "multi-tenant ready" del piloto Martín → grep el repo entero buscando cada string de la columna "Hardcoded prohibido". Si aparece, refactorear.
  2. Al lanzar un cliente nuevo → todas las variables de este catálogo deben estar pobladas en _CONFIG.md antes de ejecutar el clone-script.
  3. Si una nueva variable aparece durante el desarrollo → agregarla acá + a _CONFIG.template.md + a client_config.json.template.

1. Identidad del cliente

Variable Tipo Ejemplo Martín Hardcoded prohibido
client_slug string lowercase martin nunca uses "martin" en código
client_name string Martín Rieznik nunca uses "Martín Rieznik" en plantillas
brand_name string LevantArte nunca uses "LevantArte" en copies
country ISO-2 AR
language ISO 639-1 es
timezone IANA tz America/Argentina/Buenos_Aires
client_short_bio string ≤200 chars "CEO de LevantArte, escuela de habilidades sociales desde 2008"
client_years_in_field int 17

2. Branding

Variable Tipo Ejemplo Martín
branding.color_primary hex #1a1a1a (a definir)
branding.color_secondary hex #d4af37 (a definir)
branding.font_primary string CSS 'Playfair Display', serif
branding.font_secondary string CSS 'Inter', sans-serif
branding.logo_url URL https://deacademia.com/clients/martin/logo.png
branding.favicon_url URL https://deacademia.com/clients/martin/favicon.ico

3. Identidad social

Variable Tipo Ejemplo Martín
social.web URL https://levantarte.com/
social.youtube_channel URL https://www.youtube.com/@LEVANTARTE
social.youtube_channel_id string UCCjrYNYSdbz5niVK5wWa_ow
social.instagram string @martinrieznik
social.facebook URL https://facebook.com/RieznikMartin
social.tiktok string (si tiene)

4. Voz y mecanismo único

Variable Tipo Ejemplo Martín
voice.tone_descriptor string "Directo, irreverente, científico (apoya en Andrés). Argentino sin clichés."
voice.examples_path path R/YouTube/Transcripciones/ (corpus para parametrizar bot)
voice.banned_words array ["chabon", "loco"] (si aplica)
mechanism.name string "La Ciencia de la Seducción"
mechanism.short_pitch string ≤200 chars (extraído del scraping)
mechanism.proof_assets array links a videos+entrevistas+TEDx

5. Webinar

Variable Tipo Ejemplo Martín
webinar.day_of_week int 1-7 1 (lunes)
webinar.hour_local string HH:MM 20:00
webinar.platform enum skool (default desde 2026-05-05); alternativas streamyard+youtube_live, zoom, obs_youtube
webinar.mode enum evergreen (default desde 2026-05-05); alternativa live_recurrente
webinar.duration_min int 90
webinar.registration_url URL {base_url}/{slug}/
webinar.replay_url URL {base_url}/{slug}/replay
webinar.qa_live_opcional bool / freq false o mensual o semanal (decisión cliente)
webinar.regrabacion_triggers array criterios para regrabar (default cada 6 meses)

6. Oferta y SKUs (precio dinámico)

Variable Tipo Ejemplo Martín
oferta.taller.precio_lunes_usd int 5
oferta.taller.precio_martes_usd int 10
oferta.taller.precio_mie_jue_vie_usd int 15
oferta.taller.deadline_compra datetime ISO (calculado por server según TZ)
oferta.taller.stack_items array [{name, value_usd, description}]
oferta.taller.bonus_items array [{name, value_usd, description}]
oferta.taller.garantia_dias int 7
oferta.membresia.anual_1_pago_usd int 97
oferta.membresia.mensual_usd int 17
oferta.membresia.cuotas_6_usd int 67 (×6)
oferta.membresia.stack_items array mismo formato
oferta.membresia.bonus_items array mismo formato
oferta.membresia.garantia_dias int 30

7. Pasarelas de pago

Estructura: por pasarela, un objeto con un checkout_url por SKU.

Variable Tipo Ejemplo Martín
pasarelas.hotmart.taller_lunes_url URL (capturada al crear)
pasarelas.hotmart.taller_martes_url URL
pasarelas.hotmart.taller_full_url URL
pasarelas.hotmart.membresia_anual_url URL
pasarelas.hotmart.membresia_mensual_url URL
pasarelas.hotmart.membresia_6_meses_url URL
pasarelas.dlocal.* (mismo set 6) URL
pasarelas.shopify.* (mismo set 6) URL
pasarelas.skool.* (mismo set 6 si aplica) URL
pasarelas.transferencia.alias string (cliente da)
pasarelas.transferencia.cbu string (cliente da)
pasarelas.transferencia.banco string
pasarelas.transferencia.titular string
pasarelas.transferencia.cuit_cuil string
pasarelas.transferencia.cuenta_usd object con CBU/SWIFT (si aplica para compradores no-AR)

8. Tracking

Variable Tipo Ejemplo Martín
tracking.meta_pixel_id string (cliente da)
tracking.meta_capi_token secret env var (cliente da)
tracking.tiktok_pixel_id string (si aplica)
tracking.google_ads_id string (si aplica)
tracking.google_ads_conversion_label string
tracking.provesource_site_id string (TooAudience puede compartir si quiere)
tracking.hyros_account_id string (ACTIVO desde MVP — Hyros confirmado 2026-05-05)
tracking.hyros_tracking_domain string i.deacademia.com (default, con cliente_slug en path)
tracking.hyros_call_id string (ACTIVO desde MVP — solo si el cliente tiene call tracking; opcional)
tracking.ga4_measurement_id string (opcional)

9. WhatsApp

Variable Tipo Ejemplo Martín
wa.bsp_provider enum meta_cloud_api (default) o twilio o 360dialog
wa.phone_number E.164 +5491155555555 (a comprar)
wa.display_name string LevantArte (aprobación Meta)
wa.phone_number_id string (Meta Cloud API ID)
wa.business_account_id string (Meta)
wa.access_token secret env var
wa.webhook_verify_token secret env var random string
wa.webhook_url URL https://<railway-url>/webhook/whatsapp
wa.system_prompt_path path clientes-tooaudience/martin-rieznik/bot/system_prompt.md
wa.intents array lista de intents reconocidos
wa.handoff_threshold float 0-1 0.6 (confianza mínima antes de handoff a humano)
wa.fallback_human_wa E.164 número del closer principal

10. Equipo

Variable Tipo Ejemplo Martín
team.closer_principal_wa E.164 (a asignar)
team.closer_principal_email email
team.closer_backup_wa E.164
team.tech_contact_email email eric@tooaudience.com
team.am_email email jesus@tooaudience.com
team.cliente_wa E.164 (Martín)
team.cliente_email email (Martín)

11. Acuerdo comercial

Variable Tipo Ejemplo Martín
commercial.profit_share_tooaudience float 0-1 0.5
commercial.profit_share_cliente float 0-1 0.5
commercial.gastos_compartidos_50_50 array ["ads", "comisiones_pasarelas", "closers", "wa_email", "ia"]
commercial.scope_inclusion array ["taller", "membresia"]
commercial.scope_exclusion array ["mentoria_1_1", "libros", "eventos_propios"]
commercial.fecha_inicio date 2026-06-08
commercial.compromiso_minimo_meses int 3
commercial.budget_inicial_semanal_usd int 1500
commercial.budget_techo_semanal_usd int 5000
commercial.cadencia_balance enum mensual
commercial.commission_closer_pct float 0-1 0.07 (default desde 2026-05-05 — 7% flat)

12. Infraestructura

Variable Tipo Ejemplo Martín
infra.base_url URL https://deacademia.com
infra.client_path string /martin
infra.client_own_domain URL nullable (null en Martín)
infra.supabase_url URL https://<proj>.supabase.co
infra.supabase_anon_key secret env var
infra.supabase_service_role_key secret env var
infra.supabase_region string sa-east-1
infra.railway_service_id string (Railway UUID)
infra.railway_service_url URL
infra.vercel_project_name string tooaudience-paraguas (compartido)
infra.vercel_domain string deacademia.com (compartido)
infra.openai_api_key secret env var TooAudience shared
infra.client_id_uuid UUID (de tabla clients de Supabase)

13. Touchpoints operativos

Variable Tipo Ejemplo
ops.prewebinar_group_url URL link de invitación al grupo WA
ops.compradores_group_url URL
ops.miembros_group_url URL
ops.comprobante_form_url URL {base_url}/{slug}/transferencia/comprobante
ops.soporte_email email soporte@tooaudience.com
ops.soporte_horario string Lun-Vie 10-18hs ART
ops.zoom_link_webinar URL (si aplica)
ops.youtube_live_url URL (si aplica)
ops.skool_community_url URL (si platform=skool) link a la comunidad principal del cliente
ops.skool_classroom_url URL (si platform=skool) link a las clases on-demand
ops.crm_atencion_provider enum wati / respond_io / front / null (default wati)
ops.crm_atencion_url URL URL del inbox del CRM atención

14. KPIs target

Variable Tipo Ejemplo Martín
kpi.cpl_captacion_max_usd float 1.50
kpi.cpl_retargeting_max_usd float 0.80
kpi.roas_min float 1.5
kpi.tasa_cierre_closer_min float 0.20
kpi.attendance_webinar_min_pct float 0.30 (de registrados)

15. Variables INVENTADAS por agentes (a validar)

Variables que aparecieron durante el armado del SOP que no estaban claramente en el plan base. Validar con Jesús/Eric antes de cerrar v1.0.

Variable Origen Por qué se inventó
infra.supabase_region Decisión técnica Default sa-east-1 por proximidad LATAM.
wa.bsp_provider Decisión técnica Default meta_cloud_api.
commercial.gastos_compartidos_50_50 Plan base extraído Validado contra § 4 del 00_CONTEXTO.md.
voice.banned_words Buena práctica Para evitar errores de tono del bot.

16. Anti-patterns (NO HACER)

  • ❌ NO hardcodear nombres del cliente en componentes React (<h1>Bienvenido a LevantArte</h1>).
  • ❌ NO hardcodear URLs de checkout en HTML.
  • ❌ NO hardcodear precios en client-side (siempre lee del config + reloj servidor).
  • ❌ NO hardcodear webhook URLs (siempre process.env.RAILWAY_URL o equivalente).
  • ❌ NO hardcodear el día de la semana del webinar en cron jobs (parametrizar desde webinar.day_of_week).
  • ❌ NO hardcodear el client_id UUID en queries (siempre extraer de la sesión / del slug del path).
  • ❌ NO inventar variables nuevas sin agregarlas a este catálogo + a los templates.

17. Validación pre-launch (grep test)

Antes de declarar "multi-tenant ready", correr en el repo tooaudience-paraguas:

# debería devolver 0 matches
grep -ri "martin\|martín\|levantarte\|rieznik" app/ lib/ components/ --include="*.ts" --include="*.tsx" --include="*.js"

# debería devolver 0 matches en código (sí matches en docs y CSS si aplica)
grep -ri "deacademia.com/martin" app/ lib/ components/ --include="*.ts" --include="*.tsx"

Si alguno devuelve matches → refactor pendiente.


CHANGELOG

  • 2026-05-05 — JT — v0.1 inicial con catálogo de ~150 variables.
  • 2026-05-05 — JT — Hyros confirmado como ACTIVO desde MVP (variables hyros_account_id, hyros_tracking_domain, hyros_call_id). Webinar default = skool + mode=evergreen. Sumadas commercial.commission_closer_pct=0.07, ops.skool_*, ops.crm_atencion_*. Quitada fila tracking.jairo_pixel_* de § 15.