DÍA 0 · 23 MAY 2026

Volver a construir
algo nuestro.

Tutol es la oportunidad de los cinco de Arges Lab de volver a sentarse en la misma mesa — esta vez para construir una plataforma global de tutorías on demand.

Erick Miguel Francisco Carlos Edmundo
5
Socios fundadores técnicos volviendo a coincidir
2
Mercados al lanzar: USA + México (global a mediano plazo)
~10sem
Estimación a MVP privado funcional
01 · LA IDEA

Una plataforma de tutorías on demand, con reviews y comunidad.

Erick trajo el proyecto y nos invitó a sumarnos. Hoy es idea + invitación. Lo que sigue es lo que ya tenemos definido y las decisiones que tomamos juntos.

Tutorías on demand

El alumno aprieta "necesito ayuda ahora" y matcheamos con un tutor disponible en vivo. Modelo Uber para educación.

📅

Tutorías agendadas

También soportamos el modelo Calendly: reservar con un tutor específico para un día y hora futuros. Ambos modos día uno.

Reviews y reputación

Sistema de calificaciones y perfiles públicos desde el MVP. La comunidad como tal llega en v2.

02 · EL ACUERDO

Cómo está repartido (por ahora).

Los términos legales todavía se están redactando — todo es ajustable. Esta es la estructura tentativa con la que Erick nos invitó.

51% control operativo

Erick tiene el 51% y nos invita a los cuatro a compartir ese bloque entre todos. La distribución interna del 51% queda por definir entre nosotros.

Erick — founder principal
Miguel
Francisco
Carlos
Edmundo
49% capital

Inversor capitalista + persona que hizo la conexión. Esa parte está fija desde el origen del deal.

Inversor capitalista
Persona que conectó al equipo
cap_table.tentative
51% Equipo Arges
49% Capital
⚠️ Sujeto a redacción legal. Distribución interna del 51% aún por definir entre los 5.

🟡 Preguntas abiertas que debemos resolver entre los 5

  • • ¿Cómo se reparte internamente el 51%? ¿Equal split? ¿Por rol / contribución / dedicación?
  • • ¿Vesting? ¿Cliff de 1 año? ¿4 años lineal?
  • • ¿Quién es CTO / tech lead formal de cara al inversor?
  • • ¿Hay compromiso de dedicación (full / part time) o es flexible al inicio?
  • • ¿Qué pasa si alguno se sale en 3-6-12 meses?
03 · DECISIONES DE PRODUCTO

Lo que ya definimos.

Son decisiones tomadas en la primera ronda de discusión técnica. Ajustables, pero ya son la base sobre la que avanzamos.

MODELO DUAL

On-demand + scheduled, ambos día 1

Onboarding diferenciado para tutor y estudiante. Servicios pre-request, post-request y after-session bien definidos.

CORE PROPIETARIO

Whiteboard + notas son nuestros

Real-time, código propio (sobre Yjs). El diferencial técnico vive aquí — no en el video.

VIDEO COMO COMMODITY

Externo y opcional al inicio

Arrancamos con links a Zoom / Meet. Eventualmente movemos a video in-house (LiveKit u otro SFU). Adapter pattern desde día 1.

PAGOS

Stripe Connect con escrow

Cobramos al alumno, retenemos, liberamos al tutor post-sesión. Soporta cancelaciones, no-shows, disputas. Ledger interno propio.

COMISIÓN

Configurable desde el admin

Puede variar por escuela enterprise. Default global ajustable sin deploy.

MERCADO

Global desde la concepción

Arranque en USA + México como mercados de prueba. Multi-currency, multi-timezone, i18n día 1.

MULTI-TENANT

Escuelas como tenants

El esquema soporta integración de escuelas (cada una con configs propias) desde el día uno. Retrofittear esto después es brutal.

COMUNIDAD

v2, no MVP

v1 = reviews + perfiles públicos de tutores. Foros / grupos / DMs vienen después con tracción demostrada.

04 · ARCHITECTURE

$ tutol --architecture

# Modular monolith, NO microservicios. Bounded contexts como módulos de NestJS.
# Multi-tenant con RLS en Postgres desde el modelo de datos.

architecture.macro
┌─────────────────────────────────────────────────────────────┐
  Clients: Web (Next.js)  │  Mobile (RN, fase 2)  │  Admin   
└─────────────────────────────────────────────────────────────┘
              │ HTTPS/REST+GraphQL          │ WebSocket
              ▼                              ▼
┌──────────────────────────┐   ┌──────────────────────────────┐
  API Gateway (BFF)       │   │  Realtime Layer              
  Auth, rate-limit, ABAC  │   │  - Presence (tutors online)  
└──────────────────────────┘   │  - Matching dispatch           - Collab (Yjs / Hocuspocus)   - Notifications fanout      
                                 └──────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
  Modular Monolith (one deploy, clean module boundaries)     
  ┌──────────┬─────────┬──────────┬──────────┬────────────┐ 
  │ Identity │ Catalog │ Matching │ Sessions │  Payments  │ 
  │ Tenancy  │ Tutors  │ Booking  │ Whiteboard│ Stripe    │ 
  │ Auth/RBAC│ Subjects│ Dispatch │ Notes    │ Escrow     │ 
  ├──────────┼─────────┼──────────┼──────────┼────────────┤ 
  │ Reviews  │ Disputes│ Admin    │ Notif.   │  Media     │ 
  │ Ratings  │ Refunds │ Console  │ Email/SMS│  Adapter   │ 
  └──────────┴─────────┴──────────┴──────────┴────────────┘ 
└─────────────────────────────────────────────────────────────┘
              │                              │
              ▼                              ▼
┌──────────────────────────┐   ┌──────────────────────────────┐
  Postgres (system of     │   │  Worker Pool (BullMQ)        
  record, RLS por tenant) │   │  Post-session, payouts, KYC, 
  Redis (cache, presence, │   │  emails, recording transcode 
  queues, pub/sub)        │   │                              │
  S3/R2 (assets, archivos)│   │                              │
└──────────────────────────┘   └──────────────────────────────┘

// stack

stack.json
{
  "frontend_web":    "Next.js 15"      // App Router + TanStack Query + Tailwind + shadcn/ui
  "backend_api":     "NestJS 11"       // monolito modular, módulos = bounded contexts
  "realtime_collab": "Hocuspocus"      // Yjs server, proceso separado, mismo repo
  "realtime_app":    "Socket.IO"       // @nestjs/websockets + Redis adapter
  "orm":             "Prisma"          // migraciones limpias, multi-schema
  "database":        "Postgres 16"     // RLS para multi-tenant
  "cache_queues":    "Redis 7"         // presencia, BullMQ, pub/sub
  "jobs":            "BullMQ"          // @nestjs/bullmq
  "storage":         "MinIO → GCS"     // S3 API → un solo cliente entre dev y prod
  "auth":            "Better Auth"     // control total, sin vendor lock
  "email":           "Resend"          // + React Email para templates
  "payments":        "Stripe Connect Express"
  "observability":   "OpenTelemetry → Grafana Cloud"
  "i18n":            "next-intl + nestjs-i18n"
}

// estructura del repo

tree tutol/
tutol/
├── apps/
│   ├── web/          # Next.js — alumnos + tutores
│   ├── admin/        # Next.js separado — admin.tutol.com
│   ├── api/          # NestJS — el monolito modular
│   ├── collab/       # Hocuspocus server (Node standalone)
│   └── worker/       # BullMQ workers (reusa modules de api/)
├── packages/
│   ├── db/           # Prisma schema + cliente compartido
│   ├── shared/       # Tipos, DTOs, zod schemas
│   ├── ui/           # Componentes shadcn compartidos
│   └── sdk/          # Cliente tipado del API (gen de OpenAPI)
├── infra/
│   ├── docker/       # Dockerfiles
│   ├── compose/      # docker-compose.yml para MVP
│   ├── k8s/          # Helm charts (futuro)
│   └── terraform/    # GCP infra (futuro)
└── turbo.json      # Turborepo para builds incrementales

// piezas críticas

[realtime/matching]

Dispatch on-demand

Redis sorted sets para colas de matching, WebSocket fanout a tutores candidatos, accept-first-wins con timeout y fallback en cascada.

[realtime/collab]

Whiteboard + notas con Yjs

CRDT serio (Yjs) sobre WebSocket, persistido a Postgres con snapshots a S3. TipTap para notas, tldraw o fork de Excalidraw para whiteboard.

[media/adapter]

Media Adapter Pattern

Interfaz MediaRoom con providers ZoomProviderDailyProviderLiveKitProvider. El día que movemos a in-house, ningún consumer cambia.

[payments/ledger]

Ledger interno propio

Tabla ledger_entries append-only. Stripe = fuente de verdad de dinero movido. Nuestro ledger = fuente de verdad de qué le debemos a quién.

[tenancy/rls]

Multi-tenant con RLS

tenant_id en cada tabla, RLS aplicada vía SET LOCAL app.tenant_id por request. Cuando una escuela enterprise pida aislamiento físico → schema dedicado, cero refactor.

[monolito/modular]

Procesos separados, código compartido

apps/api, apps/collab, apps/worker son procesos físicos distintos pero comparten módulos de Nest. Cero duplicación, pre-particionado para el futuro.

// hosting strategy

FASE 0-4 · MVP PRIVADO

Docker Compose + Cloudflare Tunnel

MVP corre en la PC de Edmundo. Cloudflare Tunnel expone subdominios. Cloudflare Access gatea con allowlist (free hasta 50 usuarios).

  • Postgres + Redis + MinIO en contenedores
  • Stripe webhooks llegan limpio al túnel
  • Costo: ~$0
  • ! Si apago la PC, todo se cae (está bien para <20 usuarios)
FASE 5+ · PRODUCCIÓN

Kubernetes en GCP (GKE)

Migración cuando el MVP esté validado. El código no cambia — solo el orquestador.

  • Cloud SQL (Postgres managed)
  • Memorystore (Redis managed)
  • GCS (objetos)
  • GKE Autopilot para empezar simple
  • Helm charts + ArgoCD para GitOps
⚠️ INVARIANTE

12-factor desde día 1, no opcional. Config por env vars, stateless containers, logs a stdout, migrations idempotentes. La migración Compose → K8s debe ser únicamente un cambio de orquestador, no de código.

05 · MVP SCOPE

Qué entra al MVP y qué corta.

Filosofía: lo mínimo para que el flujo end-to-end funcione con 20 usuarios reales en un túnel privado. Cada feature que recortamos hoy nos compra una semana de runway.

✅ INCLUIR EN MVP
  • • Auth email + Google
  • • Onboarding tutor (con KYC vía Stripe)
  • • Onboarding estudiante
  • • Catalog de materias (seed manual)
  • • Booking (modo Calendly)
  • • Matching on-demand (broadcast + first-accept)
  • • Sesión con whiteboard + notas Yjs
  • • Link externo a Zoom/Meet en sesión
  • • Stripe Connect + escrow + release
  • • Comisión configurable en admin
  • • Reviews 1-5 estrellas + texto
  • • Disputas: flujo manual desde admin
  • • Notificaciones email
  • • Admin console básico
🟡 CORTAR PARA V1
  • • Magic links
  • • KYC custom (más allá de Stripe)
  • • Búsqueda full-text avanzada
  • • Matching inteligente (skills, rating, distancia)
  • • Recording de sesiones
  • • Video in-house (LiveKit)
  • • Múltiples métodos de pago locales
  • • Comisiones por tier/categoría
  • • Moderación automática de reviews
  • • Flujo self-service de disputas
  • • SMS + push notifications
  • • React Native mobile app
🔵 V2 O DESPUÉS
  • • SSO SAML para escuelas
  • • Verificación de credenciales académicas
  • • Recomendaciones con ML
  • • Transcripción + resumen IA post-sesión
  • • Foros tipo Discourse
  • • Grupos por materia
  • • DMs entre alumnos
  • • Eventos en vivo / masterclasses
  • • Features mobile-only (geo, push agresivo)
  • • In-app feed social

Roadmap por fases

Fase 0 · sem 1-2
Repo + Docker Compose + Auth + Tenant + skeleton de módulos
Fase 1 · sem 3-5
Onboarding (tutor + estudiante) + Catalog + Booking
Fase 2 · sem 6-7
Sesión: Yjs whiteboard + notas + link Zoom externo
Fase 3 · sem 8-9
Stripe Connect + escrow + ledger + comisión admin
Fase 4 · sem 10
Matching on-demand + reviews + disputas manuales
🎯 MVP PRIVADO
Live en el túnel de Cloudflare con los primeros 20 usuarios
Fase 5 · sem 11-14
Migración a GKE + Cloud SQL + CI/CD + observability prod
Fase 6 · sem 15-18
Beta público USA + MX, pulir, métricas
06 · RIESGOS Y MÉTRICAS

Lo que nos puede salir caro.

⚠️ Riesgos técnicos

Real-time collab a escala

Yjs + Hocuspocus está battle-tested, pero la persistencia con muchas sesiones simultáneas requiere snapshots inteligentes. Mitigación: load tests tempranos.

Stripe Connect + multi-país

Pagar a tutores en MX desde una entidad USA tiene fricciones. Compliance, FX, retenciones. Necesitamos asesoría legal/contable temprano.

Matching cold-start

Sin tutores online no hay producto on-demand. Mitigación: enfoque inicial en scheduled hasta tener masa crítica de tutores.

Compose en PC personal

Si Edmundo apaga la PC o se va el internet, MVP cae. Está bien para 20 usuarios privados, pero es un single point of failure.

📊 Métricas tempranas a definir

Activation

% de estudiantes que completan primera sesión dentro de 7 días del signup. % de tutores que aceptan primera request en < 24h.

Liquidez del marketplace

Tiempo medio de matching on-demand. % de requests on-demand que terminan en sesión vs caen al modo scheduled.

Calidad

Rating promedio + % de sesiones con dispute. % de sesiones con whiteboard usado > 5 min (señal de engagement profundo).

Negocio

GMV semanal, take rate efectivo (después de cancelaciones/refunds), CAC vs LTV de tutores y estudiantes.

👥 Roles a llenar (entre los 5)

No están asignados — son los "sombreros" que alguien tiene que ponerse para que el proyecto funcione. Una persona puede tener varios.

Tech Lead / Arquitecto
Decisiones técnicas, code review estratégico, tradeoffs
Product Lead
Roadmap, priorización, user research
Diseño / UX
Flow design, system, branding visual
Backend ownership
Módulos críticos: Matching, Payments, Sessions
Frontend ownership
Web + admin + futura RN
DevOps / SRE
Compose → K8s, CI/CD, observability
Growth / Marketing
Adquisición de tutores y estudiantes
Operaciones / Soporte
Disputas, KYC review, atención inicial
07 · WORKFLOW

$ Claude Code,
--multi-agent

La propuesta: que los 5 de Arges trabajemos en decisiones estratégicas y dirección de producto, mientras Claude Code ejecuta implementación en paralelo con múltiples agentes coordinados.

// arges hace

Strategy & Direction

  • Decidir qué construir y por qué
  • Aprobar planes de implementación
  • Code review de cambios sensibles (pagos, auth, schema)
  • Diseño UX y branding
  • Decisiones de producto basadas en feedback real
  • Hablar con tutores y estudiantes (cosa de humanos)
// claude code hace

Execution & Plumbing

  • Implementación de features según spec aprobado
  • Tests unitarios, integración, e2e
  • Refactors y migraciones de schema
  • Code review automático en cada PR
  • Documentación de APIs y módulos
  • Boilerplate de NestJS, Prisma migrations, etc.

// mecánicas que ya existen y vamos a usar

git worktrees
Agentes en paralelo, aislados

Cada subagente trabaja en su propio worktree (rama temporal). N implementaciones simultáneas sin pisarse.

subagent types
Explore / Plan / General-purpose

Explore = búsqueda rápida read-only. Plan = arquitecto. General = ejecutor full-stack.

slash commands custom
Nuestros propios skills

/new-module, /new-endpoint, /add-stripe-flow, /scaffold-yjs-doc — capturamos repetición.

hooks
Disciplina automática

Pre-commit: lint + typecheck + tests. Post-edit: verificar boundaries de módulos.

/code-review
Review automático en cada PR

Skill built-in que analiza el diff. Capturamos los hallazgos como comentarios en GitHub.

/ultrareview
Multi-agent cloud review

Para cambios grandes: bundle de revisores en paralelo. Lo invocan los humanos antes de mergear cosas críticas.

/loop + /schedule
Tareas recurrentes

Babysit PRs, check dependency updates, alertar sobre tests rotos cada mañana.

MCPs
Integraciones con nuestras tools

Linear/GitHub/Slack como contexto vivo del agente. Lee tickets, comenta, transiciona estados.

// demo: una feature, un comando

Ejemplo: Carlos decide que vamos a construir el flujo de "cancelación con reembolso parcial". Esto es lo que pasa cuando lo lanzamos.

~/tutol · claude-code
// lo que importa de la demo

Carlos escribió 1 línea. Claude Code orquestó 5 agentes en paralelo (plan + 3 implementadores en worktrees aislados + reviewer). Cada uno hizo su parte, hubo merge automático cuando los diffs eran disjuntos, y la última palabra fue de Carlos aprobando el PR.

El equipo de Arges no está en el camino crítico de cada línea de código — está en las decisiones importantes (qué construir, por qué, cómo se siente para el usuario, dónde está el negocio).

// disciplinas no negociables

1
CLAUDE.md vivo

El repo tiene un CLAUDE.md con convenciones, comandos, boundaries. Es la "memoria del equipo" para todos los agentes.

2
Tests son contrato

Agentes que rompen tests no merguean. Pre-commit hook lo asegura. Sin esto, los agentes alucinan refactors.

3
Plans antes de código

Cualquier tarea no trivial pasa por un Plan agent y un humano aprueba antes de que el ejecutor escriba código.

4
Humanos revisan diffs sensibles

Pagos, auth, schema de DB, RLS policies: review humano obligatorio. Lo demás, review humano probable.

5
Worktrees efímeros

Cada agente vive en su worktree. Si su PR no merguea, se descarta sin afectar a nadie más.

6
Decisiones se documentan

ADRs (Architecture Decision Records) en /docs/adr/. Cuando un agente decide algo no trivial, lo registra.

08 · SIGUIENTES PASOS

Esta semana, este mes, este trimestre.

ESTA SEMANA

Alinear como equipo

  • • Junta de los 5 para alinear este documento
  • • Cerrar: distribución del 51%, vesting, roles
  • • Confirmar stack y arquitectura propuesta
  • • Asignar ownership de módulos críticos
  • • Decidir cadencia de syncs (diaria? 3x/semana?)
ESTE MES

Foundations

  • • Crear repo + monorepo skeleton
  • • CLAUDE.md inicial + ADR 001 (stack)
  • • Docker Compose funcionando localmente
  • • Auth + Tenancy módulos completos
  • • Setup Cloudflare Tunnel + Access
  • • CI básico (lint + tests + build)
  • • Definir métricas instrumentadas desde día 1
ESTE TRIMESTRE

MVP privado live

  • • Onboarding tutor + estudiante funcional
  • • Booking + matching simple operativo
  • • Sesión con whiteboard + notas + Zoom link
  • • Stripe Connect end-to-end
  • • Admin console básico
  • • 20 usuarios reales usando el túnel
  • • Primeras métricas reales para iterar
// para discutir en la primera junta

Preguntas abiertas

EQUIPO

¿Cómo distribuimos internamente el 51%? ¿Vesting? ¿Dedicación esperada de cada uno?

PRODUCTO

¿Empezamos B2C (estudiantes directos) o B2B2C (cerrar 1-2 escuelas piloto primero)?

MERCADO

¿USA y MX en paralelo o secuencial? Implicaciones de pagos, idioma, soporte legal.

TÉCNICO

¿Quién es CTO? ¿Quién tiene la última palabra en arquitectura cuando no llegamos a consenso?

NEGOCIO

¿Comisión inicial? ¿15%? ¿20%? ¿Tarifa fija mínima por sesión? Benchmarks con Wyzant, Preply, etc.

OPERACIÓN

¿Cómo manejamos KYC y compliance MX? ¿Asesor legal? ¿Contador? ¿Cuándo y quién lo busca?

// el siguiente commit es nuestro

Volvemos a estar en la mesa.
Esta vez hagámoslo bien.

Documento vivo. Comentarios, correcciones y desacuerdos son bienvenidos en la primera junta de Arges.