Console
Panel SaaS interno de ixiclinic — mismo stack que el admin pero para gestionar clientes, planes, demos y organizaciones. Cookies saas- y endpoints /api/saas/*.
La console (apps/console) es el panel interno del equipo ixiclinic para administrar el negocio
SaaS: clientes (tenants), suscripciones y planes, solicitudes de demo, organizaciones y
membresías. No la usa ningún laboratorio: es de uso interno.
| Stack | Next.js 16 (App Router), Tailwind 4, shadcn/ui |
| Puerto local | 3001 |
| Producción | console.ixiclinic.com (Vercel) |
| Paquete | @ixiclinic/console |
| Audiencia | Equipo interno (superadmin) |
Comparte el stack y las convenciones del admin (Next.js 16 App
Router, Tailwind 4, shadcn/ui, react-hook-form + Zod, @tanstack/react-table, recharts,
sonner, server actions). Las diferencias están en la autenticación y los endpoints.
Route group (saas) (apps/console/src/app/)
| Grupo | Contenido |
|---|---|
(auth)/ | login (sin layout de app). |
(saas)/ | Workspace interno, protegido por requireAuth() en su layout.tsx. |
Secciones del (saas):
| Sección | Para qué |
|---|---|
dashboard | Métricas globales del SaaS. |
clients | Clientes/tenants (clients/[id] para el detalle). |
subscriptions | Planes y suscripciones. |
demos | Pipeline de solicitudes de demo (las crea la landing). |
organizations | Organizaciones y enlace con tenants (organizations/[id]). |
memberships | Membresías de usuarios. |
entities | Búsqueda transversal de entidades. |
settings | Ajustes del SaaS. |
Auth y comunicación con el API
La console usa cookies con prefijo saas- (saas-accessToken, saas-refreshToken) para no
colisionar con las cookies del admin de tenant. Todos los endpoints están bajo /api/saas/*
y exigen el rol superadmin (preHandler requireSuperadmin en el API).
El cliente HTTP está en apps/console/src/lib/api-client.ts, con el mismo patrón server-side que
el admin (apiGet, apiPost, apiPatch, apiDelete) y refresco automático de token contra
/api/saas/auth/refresh. El gateo de sesión lo hace requireAuth() (apps/console/src/lib/auth.ts),
invocado en el layout.tsx del grupo (saas).
Las server actions viven en apps/console/src/actions/: auth.ts, clients.ts, demos.ts,
entities.ts, memberships.ts, organizations.ts, settings.ts, subscriptions.ts.
Nota: La auth de superadmin es independiente de la de tenant. En el JWT, el superadmin lleva valores centinela
tenantId: '__saas__'ybranchId: '__saas__', y los usuarios se guardan en la tablasaas_users. Ver Autenticación.
Build y despliegue
Despliega automáticamente en Vercel al hacer push a main. Ver Operaciones.