Panel Admin GroupGarre

Panel de administración full-stack para GroupGarre — estado actual, arquitectura y pendientes

project Modificado: 15/4/2026 project_admin_panel.md

Panel Admin GroupGarre — admin.lucasgarre.com

Estado: ✅ LIVE EN PRODUCCIÓN (2026-03-31) URL: https://admin.lucasgarre.com (SSL activo, NPM cert ID 24)

Arquitectura

Stack

  • Frontend: React 18 + TypeScript + Vite + Tailwind CSS
  • Backend: Node.js + Express + TypeScript + JWT auth
  • DB: PostgreSQL 16 (contenedor groupgarre-admin-db)
  • Proxy: NPM → 100.126.176.115:4211 via Tailscale (proxy host ID 14)

Estructura en servidor (srv-principal 217.154.106.6)

/opt/groupgarre/admin/
├── frontend/src/     # React + Vite source
├── frontend/dist/    # Build compilado (servido por nginx)
├── backend/src/      # Express TypeScript source
├── backend/dist/     # JS compilado (node:20-alpine lo ejecuta)
├── nginx.conf        # Proxy /api/ → backend:4210
└── docker-compose.yml

Contenedores Docker (red n8n_default)

Nombre Imagen Puerto Estado
groupgarre-admin-db postgres:16-alpine 5432 interno ✅ running
groupgarre-admin-backend node:20-alpine 4210 ✅ running
groupgarre-admin-frontend nginx:alpine 4211 ✅ running

Docker-compose comando backend

command: sh -c 'npm install --omit=dev && npm start'

IMPORTANTE: El backend se compila antes via docker run one-off con node:20-alpine. NODE_ENV=production skippea devDeps (TypeScript), por eso el comando no incluye build.

Para recompilar después de cambios en src/:

docker compose stop groupgarre-admin-backend
docker run --rm -v /opt/groupgarre/admin/backend:/app -w /app node:20-alpine sh -c 'npm install && ./node_modules/.bin/tsc'
docker compose up -d groupgarre-admin-backend

Credenciales

Panel admin

Base de datos

  • DB: groupgarre_admin
  • Usuario: admin_user
  • Contraseña: Adm1n_Gg4rr3_2025!

NPM (srv-proxy 5.250.186.137)

Schema DB

users, clients, appointments, conversations  -- ver descripción original
claude_accounts (NUEVO 2026-03-31):
  id, name, type (teams/pro), description, session_data (TEXT - JSON credenciales),
  is_active (bool), created_at, updated_at

Módulos implementados

  • ✅ /login — JWT auth
  • ✅ /dashboard — stats cards
  • ✅ /clients — tabla + búsqueda + crear
  • ✅ /appointments — lista citas Aria
  • ✅ /conversations — historial WhatsApp
  • ✅ /users — gestión usuarios panel
  • ✅ /settings — Agente Aria, Cuentas Claude, DB, Perfil

Cuentas Claude (en Settings)

3 cuentas pre-cargadas en claude_accounts:

  1. Teams Principal (is_active=true) — cuenta activa actual
  2. Teams Backup (is_active=false)
  3. Pro (is_active=false)

Script de switch: C:\Users\lucas\switch-claude.ps1

  • Llama a GET /api/claude-accounts/active-session con x-api-key: gg_switch_2025
  • Escribe las credenciales en ~/.claude/.credentials.json
  • Falta: capturar session_data de cada cuenta y guardarla en el panel

Pendientes para 2026-04-01

  1. Capturar session_data de las 3 cuentas Claude y subirlas al panel
  2. Probar switch-claude.ps1 end-to-end
  3. Integrar agente WhatsApp → POST /appointments y POST /conversations/ping desde n8n
  4. (Jueves) Instalar Claude Code en srv-principal para sesiones 24/7

Why: Lucas quiere panel CRM completo para GroupGarre y sistema de switch de cuentas Claude para no quedarse sin contexto. How to apply: Panel en producción. Para reanudar, consultar pendientes arriba.