Docs

Panel admin (roadmap)

Módulos del /oculto-admin oculto, estado de implementación y siguientes pasos.

El panel vive en /oculto-admin (ruta no obvia, SPA, noindex, fuera del sitemap). Solo entran usuarios con role: 'admin'. Fase 1 usa tu email como admin inicial (seed); después se agregan más desde el propio panel (módulo Admins).

Estado

  • Fase 1 — MVP: Resumen, Eventos, Pagos, Dominios, Inbox contacto, Admins (altas por email).
  • Fase 2 — Soporte: bloquear usuarios, reset de contraseña, reintentar webhook/alta Dokploy desde la UI, marcar mensaje resuelto.
  • Fase 3 — Salud y auditoría: chequeo de envs (Stripe/SendGrid/Dokploy/Turnstile), estado de migraciones, bitácora de acciones admin.
  • Fase 4 — Crecimiento: cupones de Stripe, banners/anuncios globales, export contable (CSV de pagos).

Módulos (detalle)

Resumen

KPIs: ingresos cobrados (suma de planes publicados), eventos por estado (borrador/publicado), conversión creado → pagado → publicado, links activos por vigencia, RSVPs últimos 7/30 días.

Eventos

Tabla con filtro por estado, plan y pago. Detalle: dueño, links público + preview, conteo invitados/RSVPs, dominio. Acciones: publicar/despublicar, regenerar preview, desconectar dominio, eliminar.

Pagos

Cruza sesiones de Stripe contra stripeSessionId en DB. Detecta "pagado pero en borrador" (webhook fallido). Acciones: marcar pagado manual, reenviar a Stripe para reintento, reembolsar (desde dashboard de Stripe + reflejo local).

Dominios

Lista dominios conectados, pendientes manuales y fallos de alta en Dokploy. Acciones: re-verificar CNAME, reintentar alta, desconectar.

Inbox contacto

Mensajes del formulario /contacto con estado pendiente/resuelto y respuesta por email.

Admins

Altas y bajas de admins por email. El primer admin es tu correo (seed por env ADMIN_EMAIL). Nadie puede quitarse a sí mismo.

Decisiones

  • Auth: misma sesión better-auth; guard requireAdmin en API + middleware admin en rutas. 403 si no es admin.
  • Roles: hoy role: 'user' | 'admin' en User. Si luego necesitas permisos finos (soporte vs finanzas), se agrega tabla AdminRole; no se necesita ahora.
  • Oculto: /oculto-admin/** con ssr: false, robots: noindex, fuera de sitemap.xml y sin links desde el sitio público.