al día se ve como una pila de cartas. Debajo hay una máquina que cosecha por seis llaves, redacta con tu voz, espera cinco segundos por si te arrepientes y ejecuta en el canal correcto. Este es su plano: la base, las clases, las secuencias y dónde viven las llaves. El prototipo es el spec — la máquina se construye para no traicionarlo.
La PWA habla solo con Supabase. Las APIs externas hablan solo con el routine y el despachador. Ninguna llave cruza jamás hacia el teléfono — esa es la regla que ordena todo el mapa.
cards y digestsSin NestJS en la v1: la PWA consume Supabase directo y la lógica de servidor vive en edge functions. Menos piezas, mismo contrato.
Toda tabla lleva RLS user_id = auth.uid(): cada quien ve solo su pila, sus llaves, su voz. Pasa el cursor por una tabla para ver con quién se relaciona. La línea punteada ámbar es la única que sale del esquema: la llave real vive en el Vault, nunca en una tabla nuestra.
En pantallas angostas las relaciones se leen en cada tarjeta (⇢); en anchas, se dibujan.
El corazón del dominio es ChannelAdapter. El routine cosecha por ella, el despachador ejecuta por ella, y ninguno sabe qué proveedor tiene enfrente. Agregar WhatsApp mañana es un adapter más — cero migración, cero cambio en la PWA.
Cómo nace una carta, qué pasa cuando firmas, y cómo entra una llave. La segunda está viva: apruébala tú.
execute_after = ahora + 5 sEl poka-yoke del diseño, como arquitectura: aprobar no envía — encola con cinco segundos de ventana. Deshacer borra la fila y no pasó nada. El despachador solo ejecuta lo que ya venció.
vault_secret_id.Una llave por espacio conectado, como manda el diseño. Cada una pide lo mínimo que su canal necesita: leer para armar la pila, escribir únicamente en el momento de ejecutar.
gmail.readonly + gmail.sendcalendar.eventschat:writeLa llave se escribe una vez, se lee en un solo lugar, y el teléfono jamás la ve.
revoke().El routine no tiene personalidad propia. Antes de redactar, lee el manual de marca en vivo — la sección de voz ya es fetchable en producción y trae su AI prompt listo — y le suma tus últimas ediciones como ejemplos. Cada corrección tuya vale más que cualquier prompt.
El redactor opera con un skill, no con un prompt suelto.
cresco-skills— fija exactamente qué cosecha, cómo filtra, cómo arma el prompt de voz, qué inserta y qué jamás hace. Cambiar el comportamiento del redactor es un PR con revisión, no editar un prompt en un dashboard. Y cuando el routine se reemplace, el skill queda: es la especificación ejecutable del oficio.Se instala desde el navegador con el manifest en tinta y lino. La pila viaja contigo: decidir offline funciona — las decisiones caen a una cola local que sincroniza al volver la señal. Y una sola notificación al día, a la hora de tu parte.
Este es el checklist de fidelidad que heredan los goals: pixel-perfect no es una aspiración — es una lista con once filas, y cada una se verifica.
El orden de construcción que se vuelve goals. Ninguna fase abre hasta que la anterior verificó — y verificar siempre incluye mirar el prototipo al lado.
El capítulo VII del diseño dejó seis preguntas abiertas «para no olvidarlas». Esta página existe para contestarlas.