Saltar al contenido
Andrés Sanabria
Todos los proyectos

Mikasa

En vivo

Una app web que genera cursos completos a partir de un tema y una meta, con un Tutor que responde preguntas y un Tailor que edita el curso.

Problema

Aprender bien un tema técnico necesita un curso construido para ti: tu contexto, tu profundidad, tu meta. Los cursos que existen son estáticos. Asumen una sola audiencia y no se doblan.

Generar uno con un modelo no es un prompt con botón. Un curso mezcla narración, código ejecutable y ejercicios, y las piezas tienen que sostenerse entre lecciones. Una sola llamada grande al modelo colapsa: pierde estructura, se desvía, y es cara justo donde falla. El problema difícil es ingeniarse la generación para que el curso se sostenga como un todo mientras cada lección sigue siendo buena por sí sola.

Decisiones

Generar el curso en dos fases

Elección

Primero un outline con un modelo por defecto, moldeado por el estudiante; las lecciones se generan bajo demanda con un modelo más potente.

La división sigue dónde viven el costo y la intención. El outline es barato de producir y es donde se fija la intención del estudiante, así que es la parte que vale la pena moldear a mano. Las lecciones son donde vive la calidad, y se piden de a una, así que el modelo más potente solo corre sobre material que alguien va a leer de verdad.

Descartado

  • Una sola llamada para el curso completoLa calidad colapsa con la longitud, y pagas de una vez por lecciones que el estudiante quizá nunca abra.
  • Generar todo antes de que el estudiante lea nadaEl estudiante espera, y cada corrección implica regenerar trabajo que ya estaba bien.

Manejar los agentes con el Vercel AI SDK

Elección

Un runtime de agente a través del AI Gateway, con dos niveles de modelo direccionados como string IDs.

La primera alternativa descartada deja rastro: la iteración anterior de este proyecto (github.com/andy-spike/dolphin, ahora archivado) planeaba la generación con harnesses de agentes de código corriendo en sandboxes de Daytona, y los ADRs lo decían con detalle. Escribí ese diseño, lo pensé bien, y reescribí en vez de construirlo. El diseño de harnesses resuelve un problema que la generación de cursos no tiene.

Descartado

  • Harnesses de agentes de código en sandboxes en la nubeLa iteración anterior estaba diseñada así. Los harnesses están hechos para trabajar dentro de codebases, no para escribir material de curso, y una sandbox por curso es lenta y costosa para generar texto.
  • Un SDK por proveedorCada cambio de proveedor significa pegamento nuevo. El Gateway mantiene una llave y una interfaz para ambos niveles.

Mantener el curso mutable después de generarlo

Elección

Un Tailor que propone planes de cambio que el estudiante aprueba cambio por cambio, con undo por cambio.

Dos agentes, un trabajo cada uno. El Tutor responde preguntas ancladas en el curso pero nunca lo cambia. El Tailor cambia el curso pero solo mediante un plan que el estudiante aprueba, un cambio a la vez. Ninguno puede hacer lo que hace el otro, y eso es lo que mantiene al estudiante al control de su propio curso.

Descartado

  • Regenerar el curso en cada peticiónBotar lecciones que al estudiante ya le gustaban, y hacer que cada arreglo pequeño cueste una generación completa.

Reconstruir la app en Next.js

Elección

Next.js como una sola app en vez de un monorepo con un servicio en Workers.

La reescritura botó andamiaje, no diseño. Las decisiones de dominio sobrevivieron en CONTEXT.md y los ADRs; el monorepo, la división en servicios y la elección de base de datos no.

Descartado

  • TanStack Start en Cloudflare WorkersLa primera iteración web. Buenos pedazos, la cantidad equivocada de infraestructura para un producto que aún no se ganaba un monorepo, un servicio en Workers y D1.

Resultado

Mikasa generando el outline de un curso de TanStack Query, con fuentes y outline listos y conexiones en progreso
Generación del outline para un curso de TanStack Query: fuentes y outline listos, conexiones de lecciones en progreso.
Lección generada en Mikasa con el outline a la izquierda y el panel del Tutor a la derecha
Una lección generada, con el outline a la izquierda y el Tutor a la derecha.

Mikasa está terminado y funciona de punta a punta: generación en dos fases, lecciones bajo demanda, un Tutor anclado en el curso y un Tailor que edita mediante planes aprobados.

Grabaciones

Mikasa01 / 03
Grabación — pendiente

Una app web que genera cursos completos a partir de un tema y una meta, con un Tutor que responde preguntas y un Tailor que edita el curso.

Pregunta sobre mi trabajo