2b74335e035798b7327487c9b0813c930d3969d0
GLM ID Card Generator
¿Qué hace este proyecto?
Sistema de generación de ID corporativas para el departamento de RRHH de GomezLee Marketing (GLM), que opera en 14 países. El sistema permite:
- Generar IDs (frente y reverso) de empleados de forma individual o por lote (Excel/CSV).
- Editar fotos con IA: usa Google Gemini para vestir al empleado con un uniforme Columbia, bordar el logo de GLM en el pecho derecho y reemplazar el fondo por blanco.
- Códigos QR: cada ID incluye un QR único que redirige a
https://digitalcompass.agency/empleado?id=Xpara verificar en tiempo real el estatus del empleado contra BambooHR. - Exportación a PNG: descarga los ID como PNG listos para impresión CR80 o envío por WhatsApp.
- Verificación pública: cualquier persona puede escanear el QR y ver la foto, nombre, puesto, país y estatus del empleado.
Arquitectura
- Frontend Generator: React + Vite (
glm-card-generator/) - Frontend Verificación QR: React + Vite (
glm-card-qr/) - Workflow de IA: n8n con Google Gemini para edición de fotos
- Base de datos: Supabase (PostgreSQL)
- Almacenamiento: Supabase Storage + Google Drive
- Verificación: BambooHR API
Instalación y ejecución
Requisitos
- Node.js >= 18
- npm
1. Clonar el repositorio
git clone <repo-url>
cd GLM ID Card Generator
2. Configurar variables de entorno
# Para el generador de IDs
cp glm-card-generator/.env.example glm-card-generator/.env
# Para el visor QR
cp glm-card-qr/.env.example glm-card-qr/.env
Editar los archivos .env con los valores correspondientes.
3. Instalar dependencias y ejecutar
Generador de IDs:
cd glm-card-generator
npm install
npm run dev
Abre en: http://localhost:5173/empleado-id/
Visor QR:
cd glm-card-qr
npm install
npm run dev
Abre en: http://localhost:5173/empleado
4. Build para producción
# Generador
cd glm-card-generator
npm run build
# El output está en glm-card-generator/dist/
# Visor QR
cd glm-card-qr
npm run build
# El output está en glm-card-qr/dist/
Variables de entorno
glm-card-generator/.env.example
VITE_SUPABASE_ANON_KEY=J5JS7HG...
VITE_SUPABASE_URL=https://tudominio
VITE_WEBHOOK_TOKEN=6d4g56d4fgd...
VITE_N8N_WEBHOOK_URL=https://tudominio/webhook/carnet
glm-card-qr/.env.example
VITE_SUPABASE_URL=https://tudominio
VITE_SUPABASE_ANON_KEY=J5JS7HG...
Descripción de variables
| Variable | Descripción |
|---|---|
VITE_SUPABASE_URL |
URL del proyecto Supabase |
VITE_SUPABASE_ANON_KEY |
Clave anónima de Supabase |
VITE_WEBHOOK_TOKEN |
Token de autenticación para el webhook de n8n |
VITE_N8N_WEBHOOK_URL |
URL del webhook en n8n (/webhook/carnet) |
Explicación del workflow de n8n
Archivo: n8n-workflow/GLM ID Card Generator.json
El workflow "GLM ID Card Generator" se ejecuta cuando el frontend envía una foto de empleado al webhook POST /webhook/carnet autenticado con el token en el header.
Flujo
- Webhook — Recibe la solicitud POST con la foto del empleado (y opcionalmente un array de empleados para lote).
- IF: "Es un binario y employeeId?" — Determina si es un envío individual (tiene
employeeIdy foto binaria) o por lote. - IF: "Es un binario?" — Verifica si el body contiene
empleados(array de empleados en modo lote). - Split Out + Loop Over Items — En modo lote, separa el array y procesa cada empleado uno por uno.
- Download file (Google Drive) — Descarga la foto del empleado desde Google Drive (según URL recibida).
- Descargar logo GLM (HTTP Request) — Obtiene el logo de GLM desde Supabase Storage.
- Edit an image (Google Gemini) — Edita la foto del empleado con IA:
- Modelo:
gemini-3-pro-imageogemini-3.1-flash-image - Viste a la persona con un uniforme Columbia (camisa de botones color
#2d3748) - Borda el logo de GLM en el pecho derecho
- Reemplaza el fondo por blanco sólido
- Modelo:
- Extract from File — Extrae el binario de la imagen editada.
- Guardar foto (Google Drive) — Guarda la foto editada en la carpeta "Fotos Temporal Carnet Empleados".
- Hacer url publica (Google Drive) — Comparte la imagen públicamente.
- Actualizar foto del empleado (Supabase) — Actualiza el registro del empleado en la tabla
empleados_glmcon laphoto_urly marcaphoto_uploaded = FALSE. - Merge — Combina los resultados.
- Respond to Webhook — Devuelve la URL de la foto editada al frontend.
Credenciales usadas
| Tipo | Nombre |
|---|---|
| HTTP Header Auth | GLM ID Generator |
| Google Drive OAuth2 | Eidan - Google Drive account |
| Google Gemini API | Eidan - Google Gemini(PaLM) Api account |
| Supabase API | Sofia test - Supabase account |
Description
Herramienta web que permite al equipo de RRHH generar carnets corporativos GLM listos para imprimir en formato CR80 o enviar digitalmente, con verificación de autenticidad via QR conectado a BambooHR en tiempo real.
Languages
JavaScript
83.5%
CSS
15.7%
HTML
0.8%