# Prompt para construir Axis3D Panel Central

Necesito crear un sistema nuevo e independiente llamado **Axis3D Panel Central**.

Este proyecto debe vivir separado del sistema Yakuza Sushi. Dentro de la carpeta actual del proyecto crear o usar una carpeta independiente:

`Axis3D Panel Central/`

No generar ZIP por ahora. Este sistema será aparte del cascarón de Yakuza y después podrá subirse a un subdominio propio, por ejemplo:

`panel.axis3d.mx`

## Objetivo general

Construir un panel central privado para administrar clientes, instalaciones por subdominio, productos/plantillas, planes, licencias, backups, tickets de soporte y autodiagnósticos.

La plataforma no debe estar pensada solo para restaurantes. Debe servir para distintos tipos de sistemas que Axis3D pueda vender después, por ejemplo:

- Menú digital para restaurantes.
- Gym digital para gimnasios.
- Punto de venta sencillo.
- Sistemas futuros por plantilla.

La idea comercial es que Axis3D tenga un panel central desde donde pueda ver todos sus productos y clientes, sin tener que entrar manualmente al `/owner` de cada instalación.

## Estructura conceptual deseada

```text
panel.axis3d.mx
  └─ Productos / Plantillas
     ├─ Menú digital
     │  ├─ Yakuza Sushi
     │  └─ El Plato Feliz
     │
     ├─ Gym digital
     │  └─ La Pesa Feliz
     │
     └─ Punto de venta sencillo
        └─ Abarrotes Luna
```

La entidad principal no debe ser “restaurante”, sino **producto/plantilla**.

Modelo mental:

```text
Producto define lo que existe.
Plan define lo que se permite.
Cliente contrata un producto.
Instalación vive en un subdominio.
Licencia controla acceso y vigencia.
Tickets registran soporte y fallas.
Autodiagnósticos reportan problemas técnicos.
```

## Módulos principales

### 1. Autenticación del panel central

Crear login privado para Axis3D.

Debe soportar:

- Usuario owner/superadmin.
- Sesión segura.
- Password hash.
- Logout.
- Protección de todas las rutas internas.

Por ahora puede existir un solo usuario administrador global, pero dejar estructura lista para más usuarios internos después.

### 2. Dashboard principal

Crear una pantalla principal inspirada en el mockup visual compartido.

Debe mostrar:

- Clientes activos.
- Licencias por vencer.
- Backups recientes.
- Incidencias/tickets abiertos.
- Tabla de instalaciones/clientes.

Tabla sugerida:

- Cliente.
- Producto/plantilla.
- Subdominio.
- Plan.
- Estado.
- Fecha de vencimiento.
- Último backup.
- Último diagnóstico.
- Acciones.

Acciones sugeridas:

- Ver detalle.
- Abrir sitio.
- Abrir owner local.
- Editar licencia.
- Ver tickets.

Diseño:

- Estilo SaaS moderno.
- Sidebar oscuro.
- Fondo claro.
- Acentos rojo/negro/blanco estilo Axis3D.
- Tarjetas limpias.
- Tabla profesional.
- Responsive móvil y escritorio.

### 3. Productos / Plantillas

Agregar CRUD para productos o plantillas.

Cada producto debe tener:

- Nombre.
- Slug interno.
- Categoría comercial.
- Giros compatibles.
- Descripción.
- Versión actual.
- Ruta o referencia del cascarón base.
- Estado activo/inactivo.
- Módulos disponibles.
- Planes disponibles.

Ejemplos:

```text
Menú digital
Giros: restaurantes, sushi, cafeterías, food trucks.
Módulos: catálogo, carrito, WhatsApp, comandas, mesas, meseros, dashboard, backups.
Planes: Presencia, Operación, Control.
```

```text
Gym digital
Giros: gimnasios, estudios, entrenadores.
Módulos: miembros, membresías, pagos, asistencias, reportes.
Planes: Básico, Pro, Control.
```

### 4. Planes por producto

Cada producto debe poder tener sus propios planes.

Cada plan debe guardar:

- Nombre.
- Slug.
- Precio mensual.
- Precio anual.
- Descripción.
- Módulos incluidos.
- Límite de usuarios/clientes/registros si aplica.
- Estado activo/inactivo.

Ejemplo para Menú digital:

- Presencia.
- Operación.
- Control.

Ejemplo para Gym digital:

- Básico.
- Pro.
- Control.

### 5. Clientes

Agregar CRUD de clientes.

Cada cliente debe tener:

- Nombre comercial.
- Razón social opcional.
- Contacto principal.
- Teléfono.
- WhatsApp.
- Email.
- Dirección.
- Notas internas.
- Estado: prospecto, activo, pausado, cancelado.
- Fecha de alta.

### 6. Instalaciones / Subdominios

Cada cliente puede tener una o más instalaciones.

Cada instalación debe tener:

- Cliente.
- Producto/plantilla.
- Subdominio.
- Ruta del hosting.
- URL pública.
- URL de owner local.
- Plan contratado.
- Estado de licencia.
- Fecha de inicio.
- Fecha de vencimiento.
- Token/API key de comunicación.
- Versión instalada.
- Último backup reportado.
- Último diagnóstico.
- Notas técnicas.

Importante:

Al crear una instalación, por ahora el panel debe permitir capturar manualmente:

- Subdominio.
- Ruta del hosting.
- URL pública.
- URL owner local.

Ejemplo:

```text
Subdominio: yakuza.axis3d.mx
Ruta hosting: /home/axis3d/yakuza.axis3d.mx
URL pública: https://yakuza.axis3d.mx
Owner local: https://yakuza.axis3d.mx/owner/
```

### Nota sobre crear subdominios desde el panel

No asumir que el panel puede crear subdominios automáticamente desde el inicio.

Para crear subdominios directamente desde el panel central se necesitaría integrar la API de cPanel/WHM con token seguro.

Dejar el sistema preparado para futuro:

- Campo `cpanel_account`.
- Campo `document_root`.
- Campo `subdomain`.
- Espacio para token/configuración futura.
- Botón futuro “Crear subdominio”, deshabilitado por ahora o marcado como fase 2.

En la primera versión, el flujo será:

1. Crear subdominio manualmente en cPanel.
2. Subir/copiar el cascarón correspondiente.
3. Capturar la ruta y URL en Axis3D Panel Central.
4. Asignar producto, plan y licencia.

### 7. Licencias

El panel central debe administrar licencias por instalación.

Campos:

- Plan.
- Estado: activa, pausada, vencida, cancelada.
- Fecha de inicio.
- Fecha de vencimiento.
- Días restantes.
- Renovación anual.
- Notas de renovación.
- Precio contratado.
- Método de pago opcional.

Debe mostrar alertas:

- Vence en 30 días.
- Vence en 15 días.
- Vence en 7 días.
- Vencida.
- Pausada.

Por ahora no es necesario que bloquee remotamente la instalación, pero debe quedar preparado para enviar licencia al sistema cliente mediante API.

### 8. Backups

El panel central debe registrar backups reportados por cada instalación.

Campos:

- Instalación.
- Fecha/hora.
- Tamaño.
- Tipo: manual, automático, pre-restore.
- Estado: correcto, fallido.
- URL/ruta si aplica.
- Notas.

Por ahora puede ser registro informativo. Después se podrá integrar descarga remota o almacenamiento central.

### 9. Tickets / Reportes de soporte

Agregar módulo de tickets.

Cada ticket debe tener:

- Cliente.
- Instalación.
- Producto.
- Tipo: falla, duda, mejora, cobro, capacitación, autodiagnóstico.
- Prioridad: baja, media, alta, crítica.
- Estado: nuevo, en revisión, en progreso, resuelto, cerrado.
- Título.
- Descripción.
- URL donde ocurrió.
- Navegador/dispositivo.
- Versión del sistema.
- Capturas/archivos opcionales.
- Comentarios internos.
- Historial de cambios.
- Fecha de creación.
- Fecha de resolución.

Debe haber vistas:

- Todos los tickets.
- Tickets por cliente.
- Tickets por producto.
- Tickets abiertos.
- Tickets críticos.
- Tickets resueltos.

### 10. Base de conocimiento interna

Agregar módulo simple de base de conocimiento.

Debe permitir guardar:

- Problema recurrente.
- Producto afectado.
- Causa.
- Solución.
- Versión donde ocurrió.
- Versión donde se corrigió.
- Tags.

Objetivo:

Cuando se repita una falla, Axis3D puede consultar cómo se resolvió antes.

### 11. Autodiagnósticos

El panel central debe estar preparado para recibir autodiagnósticos desde instalaciones cliente.

Crear endpoint futuro/protegido, por ejemplo:

```text
POST /api/diagnostics.php
```

Cada instalación cliente podrá enviar:

- installation_id.
- api_token.
- product_slug.
- version.
- license_state.
- php_version.
- sqlite_status.
- writable_paths.
- last_backup_at.
- errors_detected.
- current_url opcional.
- user_agent opcional.
- timestamp.

Si el diagnóstico contiene errores críticos, el panel debe crear un ticket automático.

Reglas anti-spam:

- No crear tickets duplicados si ya existe uno abierto del mismo tipo para la misma instalación.
- Incrementar contador de ocurrencias.
- Actualizar `last_seen_at`.
- Subir prioridad si se repite mucho.

Tipos de fallas detectables:

- SQLite no responde.
- No se puede escribir en base de datos.
- No se puede escribir en backups.
- No se puede subir imagen.
- Licencia vencida.
- Versión desactualizada.
- Error PHP reciente.
- Endpoint crítico falla.
- Backup no generado en varios días.
- Configuración incompleta.

### 12. API de comunicación con instalaciones

Dejar preparada una API segura para que las instalaciones reporten datos al panel central.

Endpoints sugeridos:

```text
POST /api/heartbeat.php
POST /api/diagnostics.php
POST /api/tickets.php
POST /api/backups.php
GET  /api/license.php?installation_id=...
```

Seguridad:

- Cada instalación debe tener un token único.
- Validar token antes de aceptar información.
- No aceptar datos anónimos.
- Registrar IP y fecha.
- Rate limit básico.

Para primera versión, puede bastar con guardar tokens y preparar endpoints mínimos.

### 13. Almacenamiento

Usar SQLite desde el inicio.

Base sugerida:

`app/database/axis3d_panel.sqlite`

No usar MySQL por ahora.

No usar dependencias externas.

Mantener compatibilidad con hosting cPanel y PHP 7.2.

Crear helpers para:

- Leer/escribir SQLite.
- Migrar/crear schema.
- Backups.
- JSON de configuración si se necesita.
- Respuestas JSON.
- Autenticación.
- CSRF.

### 14. Estructura sugerida

Dentro de `Axis3D Panel Central/`:

```text
Axis3D Panel Central/
├─ app/
│  ├─ config/
│  ├─ database/
│  ├─ lib/
│  └─ backups/
├─ public/
│  ├─ index.php
│  ├─ login.php
│  ├─ logout.php
│  ├─ api/
│  └─ assets/
│     ├─ css/
│     ├─ js/
│     └─ img/
├─ docs/
│  ├─ SETUP.md
│  └─ ARCHITECTURE.md
└─ README.md
```

### 15. Pantallas mínimas de la primera versión

Construir estas pantallas:

1. Login.
2. Dashboard principal.
3. Productos/plantillas.
4. Detalle de producto con planes y módulos.
5. Clientes.
6. Instalaciones.
7. Licencias.
8. Tickets.
9. Base de conocimiento.
10. Backups.
11. Configuración del panel.

### 16. UX visual

Basarse en el mockup generado:

- Sidebar negro.
- Logo Axis3D.
- Acentos rojos.
- Cards superiores.
- Tabla principal de instalaciones.
- Status pills:
  - Verde: activo.
  - Amarillo: por vencer/en revisión.
  - Rojo: vencido/pausado/crítico.
  - Gris: inactivo/prospecto.
- Diseño responsive.
- En móvil, sidebar compacta o menú superior.

No hacer landing page. La primera pantalla después del login debe ser el dashboard operativo.

### 17. Restricciones

- PHP 7.2 compatible.
- SQLite.
- Sin dependencias nuevas.
- No generar ZIP.
- No mezclar con Yakuza.
- No modificar el proyecto Yakuza.
- Mantener todo dentro de `Axis3D Panel Central/`.
- Preparar para cPanel.
- Código claro, modular y mantenible.

### 18. Resultado esperado

Un sistema inicial funcional de panel central donde Axis3D pueda:

- Administrar productos/plantillas.
- Definir planes y módulos por producto.
- Registrar clientes.
- Registrar instalaciones por subdominio.
- Controlar licencias.
- Ver vencimientos.
- Registrar backups.
- Recibir o crear tickets.
- Consultar base de conocimiento.
- Prepararse para autodiagnósticos y comunicación futura con instalaciones cliente.

La primera versión no necesita crear subdominios automáticamente. Debe permitir capturarlos manualmente y dejar preparado el diseño para integración futura con API de cPanel.
