Files
glm-hub/README-IMPLEMENTACION-COMPLETA.md

6.3 KiB

GLM Hub — Implementación compartida con Supabase e íconos con Gemini

Este proyecto queda preparado para que el catálogo sea compartido por todo el equipo. Las aplicaciones ya no se guardan como catálogo operativo en el navegador: se almacenan en Supabase y se actualizan en las sesiones abiertas mediante Realtime.

Archivos principales

  • SUPABASE-GLM-HUB-COMPLETO.sql: crea o actualiza todo lo necesario en Supabase.
  • n8n/GLM-Hub-Generar-Icono-Gemini.json: workflow importable de n8n.
  • .env: variables de la app web.

Orden correcto de implementación

1. Ejecutar el SQL completo en Supabase

En Supabase Studio abre SQL Editor, pega el contenido completo de:

SUPABASE-GLM-HUB-COMPLETO.sql

Luego ejecútalo una sola vez. El script es reutilizable: usa if not exists, reemplaza funciones y recrea políticas de forma controlada.

El script configura:

  • Acceso automático para el dominio @gomezleemarketing.com.
  • Tabla de administradores y bloqueos excepcionales.
  • Los cinco administradores definidos para GLM Hub.
  • Catálogo compartido glm_hub_apps.
  • Favoritos personales glm_hub_favorites.
  • Accesos recientes personales glm_hub_recent_apps.
  • Bucket público glm-hub-icons con máximo de 1 MB.
  • Políticas RLS: todos los usuarios activos ven el catálogo publicado; solo administradores pueden crear, editar y eliminar.
  • Publicación de cambios de aplicaciones en Supabase Realtime.
  • Función segura glm_hub_icon_generation_access() para validar desde n8n que quien solicita el ícono sea administrador.

2. Importar y configurar el workflow de n8n

Importa:

n8n/GLM-Hub-Generar-Icono-Gemini.json

Configura estas variables de entorno en la instancia de n8n:

SUPABASE_URL=https://dbit.digitalcompass.agency
SUPABASE_ANON_KEY=TU_CLAVE_ANON_DE_SUPABASE
GEMINI_API_KEY=TU_API_KEY_DE_GEMINI

Reinicia n8n después de añadirlas, abre el workflow y actívalo.

Webhook de producción esperado:

https://agenteit.digitalcompass.agency/webhook/glm-hub-generar-icono

El workflow:

  1. Recibe nombre y descripción desde GLM Hub.
  2. Verifica el JWT activo de Supabase.
  3. Confirma en la base de datos que el usuario sea administrador.
  4. Genera un ícono cuadrado sin texto con Gemini.
  5. Devuelve la imagen al formulario como PNG.

La clave de Gemini debe permanecer únicamente en n8n. No debe añadirse al .env de Vite ni enviarse al navegador.

3. Revisar las variables del frontend

El .env incluido contiene:

VITE_SUPABASE_URL="https://dbit.digitalcompass.agency"
VITE_SUPABASE_ANON_KEY="..."
VITE_ICON_GENERATOR_WEBHOOK_URL="https://agenteit.digitalcompass.agency/webhook/glm-hub-generar-icono"

Cambia la URL del webhook solamente si el workflow se publica en otro dominio o ruta.

4. Instalar, validar y compilar

Desde la carpeta raíz del proyecto:

npm install
npm run typecheck
npm run build

La compilación queda en dist/.

5. Migrar las aplicaciones que ya estaban creadas

Después de ejecutar el SQL y desplegar esta versión:

  1. Inicia sesión como administrador desde el mismo navegador donde estaban guardadas las aplicaciones anteriores.
  2. La app compara el catálogo local con glm_hub_apps y migra solamente las aplicaciones cuyo nombre todavía no exista en Supabase.
  3. Los íconos se suben al bucket glm-hub-icons.
  4. Desde ese momento, cualquier usuario autorizado verá el mismo catálogo publicado al iniciar sesión.

La comparación por nombre evita duplicados y permite reanudar la migración en otro inicio de sesión si una carga anterior quedó incompleta. Cuando termina correctamente, el navegador registra la migración como completada para que una aplicación eliminada después desde Supabase no vuelva a crearse desde el catálogo local antiguo.

Funcionamiento del Hub

  • Acceso rápido: incluye todas las aplicaciones marcadas como favoritas por el usuario. Si todavía tiene menos de tres favoritas, se completa temporalmente con recientes o aplicaciones disponibles. Se muestran seis por página y la paginación aparece solo cuando hace falta.
  • Todas las aplicaciones: muestra diez por página en Todas, Administración, Recursos Humanos y CDC. En cada filtro, los favoritos se ordenan antes que el resto y después se aplica la paginación.
  • Administración: también pagina el catálogo cada diez registros.
  • Cambios compartidos: al crear, editar o eliminar una aplicación, el cambio se guarda en Supabase y llega al resto de sesiones abiertas.
  • Favoritos y recientes: son personales para cada usuario; no afectan la vista de los demás.

Generación del ícono

El botón Generar ícono con IA se habilita solamente cuando se completan:

  • Nombre de la aplicación.
  • Descripción breve.

Mientras Gemini está trabajando:

  • Se muestra una pantalla de carga bloqueante.
  • No se puede publicar, cancelar, editar ni salir accidentalmente de la página.
  • Al finalizar, el ícono aparece en la vista previa y puede publicarse junto con la aplicación.

Administradores y bloqueos

Todo correo @gomezleemarketing.com entra como Usuario sin requerir una fila. La tabla public.glm_hub_authorized_users se utiliza únicamente así:

-- Convertir en administrador
insert into public.glm_hub_authorized_users (email, full_name, role, is_active)
values ('persona@gomezleemarketing.com', 'Nombre de la persona', 'admin', true)
on conflict (email) do update
set full_name = excluded.full_name, role = 'admin', is_active = true, updated_at = now();

-- Volver a usuario normal
delete from public.glm_hub_authorized_users
where email = 'persona@gomezleemarketing.com';

-- Bloquear excepcionalmente
insert into public.glm_hub_authorized_users (email, full_name, role, is_active)
values ('persona@gomezleemarketing.com', 'Nombre de la persona', 'member', false)
on conflict (email) do update
set full_name = excluded.full_name, role = 'member', is_active = false, updated_at = now();

Los administradores están restringidos por una validación de base de datos a los cinco correos definidos en el script.

Regla de acceso al Hub

Cualquier cuenta @gomezleemarketing.com puede iniciar sesión como Usuario. La tabla glm_hub_authorized_users se reserva para administradores y bloqueos excepcionales; el acceso específico a cada portal se administra dentro de esa aplicación.