# 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: - Lista de usuarios autorizados y roles. - 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: ```env 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: ```text 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: ```env 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: ```bash 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. ## Dar o quitar acceso Desde `public.glm_hub_authorized_users`: ```sql -- Dar acceso normal insert into public.glm_hub_authorized_users (email, full_name, role, is_active) values ('persona@gomezleemarketing.com', 'Nombre de la persona', 'member', true); -- Quitar acceso sin borrar update public.glm_hub_authorized_users set is_active = false where email = 'persona@gomezleemarketing.com'; -- Reactivar update public.glm_hub_authorized_users set is_active = true where email = 'persona@gomezleemarketing.com'; ``` Los administradores están restringidos por una validación de base de datos a los cinco correos definidos en el script.