Los módulos son la respuesta de Korat al problema de hacer una sola app para restaurantes, hoteles, clínicas y tiendas: la versión honesta son cuatro apps compartiendo un inicio de sesión. La versión deshonesta es una app con una pantalla de ajustes tan grande que cada negocio ve sobre todo cosas que no le aplican. Korat toma un tercer camino: el tipo de negocio selecciona un módulo, el módulo construye la interfaz, y ni la página pública ni la consola del propietario tienen dentro un conocimiento fijo de qué es un restaurante.
El contrato de módulo
Un módulo declara un conjunto fijo de cosas y la app ensambla el resto a partir de ellas. Aporta un id; los tipos de negocio que reclama, que deciden si el módulo aplica a una tienda concreta; una etiqueta y un título de catálogo; una acción principal, el botón con el que arranca la página del cliente; y una vista de catálogo — una carta para comida, tipos de habitación para alojamiento, servicios para una clínica, productos para comercio.
Otras cuatro declaraciones son opcionales, y ahí es donde el sistema se gana el sueldo. Un módulo puede declarar capacidades, que se convierten en permisos nuevos para los roles del equipo; módulos de consola, que aparecen en la parrilla del panel; una pantalla de consola propia; y una sección de la página pública, inyectada en la página de la tienda. Un módulo que no declara ninguna de las cuatro es un catálogo puro; uno que declara las cuatro reconfigura los dos lados de la app a la vez.
Hay además un kit de interfaz compartido — botón de acción principal, fila de catálogo, chip, etiqueta de sección y estado vacío — y se espera que los módulos construyan con él. No es estilo de la casa por gusto: es lo que hace que un módulo escrito aparte parezca parte de la app y no un widget incrustado.
Los cuatro módulos base son los tipos de negocio
Los cuatro módulos base no son complementos: son lo que significa un tipo de negocio. Comida reclama restaurante y cafetería. Alojamiento reclama alojamiento, hotel, resort, apartamento, condominio y casa — seis etiquetas, un módulo, porque el alquiler de un condominio y una noche de pensión se diferencian en las palabras, no en el mecanismo. Servicios reclama servicio y clínica, donde la variante clínica reetiqueta la interfaz a citas, pacientes y cursos de tratamiento sin bifurcar el código. Comercio reclama comercio.
Como son módulos y no ramas dentro de una pantalla gigante, la pantalla de cocina y los grupos de opciones del módulo de comida no existen para un hotel: no están ocultos tras una bandera ni desactivados, están ausentes. La superficie que ve una tienda es función de lo que declaró ser.
Siete complementos instalables, y valen para cualquier tipo
Sobre los módulos base hay siete complementos, todos aplicables sea cual sea el tipo de negocio. Permisos de equipo es el más interesante, porque está hecho de los demás módulos: construye un editor de permisos a partir de las capacidades declaradas por cada módulo instalado, así que instalar un módulo nuevo trae sus permisos al editor sin que nadie actualice una lista. Esas mismas capacidades las lee después has_capability() en la base de datos, descrita en la página de seguridad.
Canales de pago añade un módulo de consola para configurar los canales aceptados y una lista visible para el cliente en la página pública — un complemento escribiendo en los dos lados a través de dos ranuras de declaración. Membresías y suscripciones introduce planes que un cliente puede comprar directamente desde la página de la tienda. Recordatorios de renovación se ocupa del seguimiento que generan las membresías y los cursos. Cada uno es un módulo propio ya publicado, escrito contra el mismo contrato que usaría alguien de fuera: una disciplina deliberada, porque un contrato solo es real si también ata a quien lo escribió.
Instalar y desinstalar, por tienda
Los complementos se gestionan desde la tienda de plugins dentro de la consola, y la instalación es por negocio. Quien lleva dos tiendas puede instalar membresías en una y no en la otra, y los dos paneles quedan realmente distintos.
Desinstalar va detrás de una confirmación, y la confirmación dice algo concreto: los datos no se borran. Esto importa más de lo que parece. La razón por la que la gente duda ante un botón de desinstalar es que lo supone destructivo, así que deja instalados módulos que no usa y la consola se llena de cosas que nadie abre. Decir qué *no* pasa es lo que hace usable el botón. Después de desinstalar, el complemento no aporta nada — ni módulos de consola, ni permisos en el editor de roles, ni sección en la página pública — pero sus registros sobreviven a una reinstalación.
Lo que esto todavía no es
Los plugins de terceros no están abiertos. La propia tienda de plugins lo dice, en vez de insinuar lo contrario con una estantería vacía de «próximamente». Lo que existe hoy es una arquitectura modular con un contrato real, cuatro módulos base y siete complementos propios escritos contra él, todos cargando por el mismo camino de registro. El envío por terceros es el siguiente paso declarado, no un mercado en marcha: no hay portal de desarrollo, ni cola de revisión, ni SDK publicado.
Lo describimos así porque la arquitectura es la parte interesante y es cierta hoy, mientras que un mercado es una afirmación sobre el futuro. La prueba del contrato es si un módulo escrito íntegramente contra él — módulos de consola, capacidades y sección de página, sin tocar código base — se comporta como parte nativa de la app. Cuatro lo hacen. Abrir eso a gente de fuera es más un problema de política y revisión que técnico, y no está resuelto.
Por qué módulos y no banderas de función
Una bandera de función apaga algo. Un módulo aporta algo. La diferencia se ve en el editor de permisos: con banderas, alguien mantiene una lista maestra de capacidades y tiene que acordarse de ampliarla. Con el contrato, el complemento de permisos de equipo pregunta a cada módulo instalado qué declara y construye el editor con las respuestas, así que la lista no puede quedarse vieja. El mismo patrón vale para la parrilla del panel y para la página pública: ninguno enumera funciones, todos preguntan.
También acota el coste de un vertical nuevo. Añadir un tipo de negocio que Korat aún no cubre es un módulo: declarar los tipos que reclama, un catálogo, una acción principal y las ranuras opcionales que necesite, sin tocar la consola, el renderizador de páginas ni el sistema de permisos. Eso es lo que hace tratable una súper app en vez de una acumulación lenta de casos especiales.
No hay mercado de plugins de terceros. Todo lo instalable hoy es propio, y la tienda lo dice dentro de la app. El envío por terceros es el siguiente paso declarado: todavía no hay portal de desarrollo ni SDK publicado contra el que construir.
El código de los plugins además sigue viajando dentro del APK en vez de cargarse por plugin al usarlo. Es una limitación conocida y el requisito evidente para abrir la tienda a alguien de fuera del proyecto.
- Declaraciones obligatorias
- id · tipos de negocio reclamados · etiqueta · título de catálogo · acción principal · vista de catálogo
- Declaraciones opcionales
- capacidades · módulos de consola · pantalla de consola · sección de página pública
- Módulos base
- Comida · Alojamiento · Servicios · Comercio
- Complementos
- Permisos de equipo · Canales de pago · Membresías y suscripciones · Recordatorios de renovación
- Alcance de la instalación
- por tienda
- Desinstalación
- detrás de una confirmación que dice que los datos no se borran
- Terceros
- no abierto — solo complementos propios