# VulneraFix Admin — Panel de Administración Interno

## Identificación del Proyecto

| Campo              | Valor                                               |
|--------------------|------------------------------------------------------|
| **ID**             | PROJ-W02                                             |
| **Nombre**         | VulneraFix Admin — Panel Interno + Link Manager      |
| **Tipo**           | Panel de administración interno + oferta B2B         |
| **Worker CF**      | `lucky-bush-a6e2`                                    |
| **Dominio**        | `admin.vulnerafix.com` (route pendiente)             |
| **Marca**          | VulneraFix / ATAPAudit                               |
| **Responsable**    | Daniel (dev) · Cloudflare (infra)                   |
| **Fecha registro** | 2026-03-10                                           |
| **Estado**         | ✅ LIVE — 95% (route dominio propio pendiente)        |
| **Prioridad**      | ALTA                                                 |

---

## Descripción

Panel de administración interno desplegado sobre Cloudflare Workers + D1. Sirve una UI embebida directamente desde el Worker (HTML embebido sin assets externos) e incluye un Link Manager tipo Linktree para gestionar links de servicios ATAPAudit, con click tracking y sistema de permisos granular por usuario y recurso.

Además de uso interno, se ofrece como herramienta a clientes B2B del sector ciberseguridad que necesiten un panel de administración ligero y seguro bajo su propio dominio.

### Propuesta de valor
- Panel listo para producción sobre infraestructura serverless edge
- Auth segura: PBKDF2 + cookie firmada + sesiones en D1 con TTL
- Link Manager tipo Linktree con click analytics
- Permisos granulares: control por usuario y recurso
- Sin dependencias de frontend externas: UI servida 100% por el Worker

---

## Arquitectura

```
Administrador (Browser)
    → Cloudflare DNS + CDN
        → CF Worker lucky-bush-a6e2 (Router + Auth)
            → UI HTML embebida (/admin, /admin/login)
            → D1 SQL (users, sessions, permissions, links, clicks)
                → Link Manager + Click Tracking
                → CRUD Usuarios + Permisos Granulares
```

### Stack Tecnológico

| Capa             | Tecnología                  | Estado          |
|------------------|-----------------------------|-----------------|
| Runtime          | Cloudflare Workers          | Desplegado ✅   |
| Base de datos    | Cloudflare D1 (`DB`)        | Schema migrado ✅ |
| Auth             | PBKDF2 + Cookie firmada + D1 sessions | Implementado ✅ |
| UI               | HTML embebido en Worker     | Implementado ✅ |
| Dominios         | `admin.vulnerafix.com`      | Route pendiente |
| DNS              | CNAME GoDaddy → workers.dev | Pendiente       |

---

## Funcionalidades Implementadas

### Autenticación y sesiones
- Login con PBKDF2 (hash de contraseña) + firma de cookie (`COOKIE_SECRET`)
- Sesiones persistidas en D1 con TTL de 24h
- Rutas protegidas: `/admin` y `/admin/login`

### UI de administración
- Interfaz HTML embebida servida directamente por el Worker
- Sin dependencias de CDN o assets externos
- Rutas principales: `GET /admin` (dashboard) y `GET /admin/login` (formulario)

### Link Manager (tipo Linktree)
- Gestión de links: slug → URL destino, sort_order, activo/inactivo
- CRUD completo de links
- Click tracking por link_id

### Gestión de usuarios
- CRUD de usuarios (admin puede crear otros admins y users)
- Bootstrap de primer admin: `POST /api/bootstrap` con `BOOTSTRAP_KEY`

### Sistema de permisos
- Permisos granulares por usuario y recurso
- Recursos controlados: `links`, `stats`, `users`

### Analytics
- Stats de clicks agrupados por link_id

---

## Bindings Cloudflare

| Tipo    | Nombre en wrangler.toml | Recurso                        | UUID                                   | Estado          |
|---------|-------------------------|--------------------------------|----------------------------------------|-----------------|
| D1      | `DB`                    | `vulnerafix_db`                | `0a24b289-71e3-471e-bdcc-c6a1b524c1ca` | Configurado ✅  |
| Secret  | `ADMIN_TOKEN`           | Token de admin                 | —                                      | Configurado ✅  |
| Secret  | `BOOTSTRAP_KEY`         | Clave de bootstrap inicial     | —                                      | Configurado ✅  |
| Secret  | `COOKIE_SECRET`         | Firma de cookies de sesión     | —                                      | Configurado ✅  |

---

## Tablas D1

| Tabla         | Descripción                                          | Estado              |
|---------------|------------------------------------------------------|---------------------|
| `users`       | Usuarios del panel (admin + users)                   | Migrada ✅ 2026-03-10 |
| `sessions`    | Sesiones activas con TTL 24h                         | Migrada ✅ 2026-03-10 |
| `permissions` | Permisos granulares por usuario y recurso            | Migrada ✅ 2026-03-10 |
| `links`       | Links del Link Manager (slug, URL, sort_order, activo) | Migrada ✅ 2026-03-10 |
| `clicks`      | Registro de clicks por link_id                       | Migrada ✅ 2026-03-10 |

---

## Estado por fases

### Fase 1 — Core (COMPLETADA — 85%)
- [x] Worker desplegado en Cloudflare (`lucky-bush-a6e2`)
- [x] Auth con PBKDF2 + cookie firmada + sesiones D1 (TTL 24h)
- [x] UI HTML embebida: `/admin` y `/admin/login`
- [x] Link Manager: CRUD de links (slug, URL, sort_order, activo/inactivo)
- [x] Click tracking por link_id
- [x] Permisos granulares por usuario y recurso (links, stats, users)
- [x] CRUD de usuarios (admin puede crear admins y users)
- [x] Stats de clicks agrupados por link
- [x] Bootstrap endpoint `POST /api/bootstrap`
- [x] Schema D1 migrado (users, sessions, permissions, links, clicks)
- [ ] **Agregar route `admin.vulnerafix.com/*` en CF Dashboard**

### Fase 2 — DNS y acceso (PENDIENTE)
- [ ] Crear registro DNS CNAME en GoDaddy: `admin.vulnerafix.com` → `lucky-bush-a6e2.workers.dev`
- [ ] Verificar propagación DNS y acceso via dominio propio

### Fase 3 — Bootstrap y contenido (PENDIENTE)
- [ ] Bootstrap primer admin: `POST /api/bootstrap {"key":"$BOOTSTRAP_KEY","email":"...","password":"...","name":"Admin"}`
- [ ] Documentar y cargar links de servicios ATAPAudit en el panel

### Fase 4 — Oferta B2B (FUTURO)
- [ ] Documentar oferta para clientes B2B de ciberseguridad
- [ ] Template de onboarding para nuevos clientes bajo dominio propio
- [ ] Integración con VulneraFix API (PROJ-003)

---

## Agentes responsables

| Agente     | Responsabilidad sobre este proyecto                         |
|------------|-------------------------------------------------------------|
| Daniel     | Código Worker, D1 schema, deploy Wrangler, bootstrap admin  |
| Cloudflare | Infra edge: Worker, D1, Routes, DNS, Secrets               |

---

## Acciones pendientes (próximos pasos)

- [ ] **[Cloudflare]** Agregar route en CF Dashboard: `admin.vulnerafix.com/*` → Worker `lucky-bush-a6e2`
- [ ] **[Cloudflare / GoDaddy]** Crear CNAME DNS: `admin.vulnerafix.com` → `lucky-bush-a6e2.workers.dev`
- [ ] **[Daniel]** Bootstrap primer admin:
  ```
  POST /api/bootstrap
  {"key":"$BOOTSTRAP_KEY","email":"admin@vulnerafix.com","password":"...","name":"Admin"}
  ```
- [ ] **[Daniel]** Cargar links de servicios ATAPAudit en el Link Manager del panel
- [ ] **[Daniel]** Documentar modelo de oferta B2B para clientes de ciberseguridad

---

## Links de referencia

- Worker activo: `https://lucky-bush-a6e2.workers.dev`
- Dominio objetivo: `https://admin.vulnerafix.com`
- Sitio principal: https://vulnerafix.com/
- Cloudflare Dashboard: https://dash.cloudflare.com/
- Workers Docs: https://developers.cloudflare.com/workers/
- D1 Docs: https://developers.cloudflare.com/d1/
