Suite 101 · arquitectura
Dónde están las pantallas, dónde el servidor, dónde las bases de datos y por dónde viaja la información. Tal como está desplegado hoy, más lo que falta para que dar de alta una empresa sea automático y para venderla en un dominio propio.
La suite se explica en cuatro niveles de personas. Cada nivel tiene ya una pieza construida; el nombre comercial y el nombre del repositorio no siempre coinciden, y aquí van los dos.
MASTER101
Nosotros, los dueños de la suite.
Hoy: master101. Abre y suspende empresas, prende y apaga apps, nombra superadmins, administra licencias.
DIRECTOR101
La persona que la empresa cliente designa para administrar a su gente.
Hoy: workshop101 (rol owner o admin). Da de alta a su personal, roles y a qué apps entra cada quien.
suite101
Los usuarios de la empresa, con correo y contraseña o cuenta de Google.
Hoy: dash101, quote101, quell101, roster101. Una sola sesión sirve para todas. SUPERVISOR se retira: sus funciones pasan a quell101.
apps 101
Usuarios finales: clientes del taller, público, o quien compra una licencia.
Hoy: peek101 (portal del cliente, sólo lectura) y draw101, nest101, shape101 en Windows con licencia por suscripción.
Todas las pantallas web son Workers de Cloudflare y ninguna toca una base de datos directamente: hablan con un solo servidor, suite101-api, que es quien decide quién es cada quien y de qué empresa. Cada empresa tiene su propia base de datos, separada de las demás.
s101 que sólo el servidor puede leer. Cada app le dice a la API quién es (cabecera X-App) y la API contesta si esa app está prendida para esa empresa y con qué rol entra la persona.Hoy el alta la hace MASTER101 y tarda un minuto. La base de la empresa nace sola y vacía, con el esquema al día. Lo que sigue muestra lo que ya ocurre y, en punteado, lo que falta para que el alta sea completa sin intervención nuestra.
draw101, nest101 y shape101 no son pantallas web: se instalan en Windows. Su permiso para funcionar es un token firmado por la API que la app puede verificar sin internet, y que se renueva con un latido diario.
Un repositorio por pieza. Cada Worker tiene su copia de staging; la API y las pantallas se publican por separado y se hablan por contrato con número de versión.
| Pieza | Repositorio | Qué es | Dónde corre | Sus datos |
|---|---|---|---|---|
| suite101-api | suite101-api | El servidor de toda la suite | Worker (Hono) | D1 maestra · un Durable Object por empresa · R2 |
| master101 | master101 | Panel de MASTER101 | Worker | por la API |
| workshop101 | workshop101 | Panel del director de la empresa | Worker | por la API |
| dash101 | dash101 | El negocio: proyectos, cotizaciones, finanzas, conciliación semanal | Worker (Next.js) | por la API |
| quote101 | cotizador-t101 | Cotizador | Worker | por la API |
| peek101 | peek101 | Portal del cliente final, sólo lectura | Worker | por la API |
| quell101 | bitacora-obra | Bitácora de obra con fotos y punchlist | Worker | D1 y R2 propios por mudar |
| roster101 | t101-portal-trabajadores | Expedientes de trabajadores | Worker (Hono) | D1 y R2 propios por mudar |
| SUPERVISOR | taller101 | El mapa del taller: mueble por etapa. se retira Sus funciones se integran en quell101 más adelante. | Worker (todavía en línea) | D1 propio |
| draw101 · nest101 · shape101 | draw101 · nest101 · shape101 | Programas de escritorio para Windows | En la máquina del cliente | archivos locales · licencia por la API |
| descargas | descargas | Los instaladores y su sitio | GitHub Releases + sitio | — |
| wall101 | wall101 | El muro de entregas para Mike | Cloudflare Pages | — |
| heredado conta-master, cuenta-taller101, cotizador en Netlify | conta-master · … | Versiones anteriores, todavía en línea | Netlify + Firebase | Firestore |
Los dominios de hoy son los de Cloudflare (*.mike-929.workers.dev). Ninguna pantalla tiene todavía dominio propio; ponerlo es un paso de configuración, no de código, y es el mismo mecanismo que se usará para el dominio de cada empresa.
Esto es lo que se puede afirmar hoy, porque cada punto está construido y se prueba en cada publicación. Sirve tal cual para una ficha comercial.
Los datos de una empresa viven en una base separada de las demás. No existe una consulta que pueda cruzar dos empresas: la API abre la base de la empresa de la sesión y de ninguna otra.
Todas las pantallas preguntan al mismo servidor. Suspender una empresa la apaga en todas sus apps al instante; apagar una app la apaga para todos sus usuarios.
Código de un solo uso por correo, contraseña opcional con intentos limitados, o cuenta de Google. La sesión va en una cookie que el navegador no deja leer a ningún script.
Dueño, administrador, socio y personal. Sólo un dueño nombra dueños, y el último dueño no se puede quitar. MASTER101 ve todo y lo deja apuntado en una bitácora.
Cada cambio se publica primero en una copia idéntica, se prueba con un navegador real y con 219 pruebas del servidor, y sólo entonces se publica en producción, donde se vuelve a medir.
Los permisos de los programas de escritorio van firmados con criptografía de llave pública (Ed25519). La llave privada nace en el servidor y no sale de ahí; las apps sólo llevan la pública.
Las llaves de correo, Google y Cloudflare viven en los secretos de GitHub y del Worker, nunca en los repositorios. Los repositorios son públicos y se puede auditar cada línea.
Todo corre en la red de Cloudflare: sin máquinas que parchar, escala sola y responde desde el punto más cercano al usuario, en México o donde esté.
Sí, y sin apagar nada, pero no es «sencillo»: es un proyecto de semanas, no de días, y una pieza cambia de forma. La razón por la que es posible es la misma que hace robusta a la suite: todas las pantallas hablan con un solo servidor por contrato, y ese servidor está escrito en Hono, que corre igual en Cloudflare, en AWS Lambda o en un contenedor.
| Hoy en Cloudflare | Equivalente en AWS | Qué tan directo |
|---|---|---|
| Workers (pantallas y API) | Lambda detrás de CloudFront y API Gateway, o contenedores en Fargate | directo el código es el mismo; cambia el empaquetado |
| R2 (archivos) | S3 | directo R2 habla el mismo protocolo que S3; se copia con una herramienta estándar |
| Pages (wall101) | S3 + CloudFront | directo |
| D1 (base maestra) | Aurora Serverless (PostgreSQL) o RDS | moderado es SQL estándar; hay que cambiar el dialecto de SQLite a PostgreSQL y las llamadas del Worker |
| Un Durable Object por empresa | No tiene equivalente directo: un esquema por empresa en Aurora, o una base SQLite por empresa en EFS con Lambda | cambia de forma es la pieza que hay que rediseñar; el aislamiento por empresa se conserva, el mecanismo no |
| Service bindings (pantallas → API) | Llamadas HTTPS internas dentro de la VPC, o una función por pantalla | moderado |
| GitHub Actions (publicar y probar) | Igual: GitHub Actions publicando a AWS | directo |
Recomendación: no moverse ahora. Cloudflare cuesta hoy una fracción de lo que costaría AWS para el mismo tráfico, no hay máquinas que administrar, y nada de lo que se está construyendo (dominio por empresa, alta automática, cobro) ata más la suite a Cloudflare de lo que ya está. Lo que sí conviene desde hoy, y ya se cumple: mantener la API en Hono, los archivos en R2 con protocolo S3 y el SQL sin extensiones raras. Así la puerta a AWS queda abierta sin pagarla por adelantado.