# Panel `/reseller/` — Cómo usarlo

> Documentación operativa del panel del reseller en `bewpro.com/reseller/`.
> Vivo desde 2026-05-05. Última actualización: **2026-05-17** (Fase 5.6 + 5.7
> aplicadas — unificación demo/real, MRR removido, gestor de proyectos en vivo).

---

## 🔗 Acceso

**URL**: `https://bewpro.com/reseller/`
**Credenciales**: las recibiste por email al ser aprobado
**Recuperar password**: `https://bewpro.com/password/reset`
**Rol Spatie requerido**: `Reseller`

---

## 1. Estructura del panel

```
[Sidebar /reseller/]
├── Panel Reseller          → /reseller/                (dashboard)
├── Nuevo Proyecto          → /reseller/projects/new    (único provisionador)
├── Proyectos-Cliente       → /reseller/projects        (listado)
├── Mis Clientes            → /reseller/customers       (clientes + sus proyectos)
├── En Vivo                 → /reseller/activity        (timer 15d por proyecto)
└── Mi Portafolio           → /reseller/commissions     (KPIs sin USD + histórico)
```

---

## 2. Panel Reseller (dashboard)

URL: `/reseller/` (después del login)

### Lo que ves hoy

| Sección | Qué muestra |
|---|---|
| **KPIs principales** | Clientes · Proyectos totales · Activos (+ en progreso) · Sumados este mes |
| **Acciones rápidas** | Provisionar nuevo proyecto · Marketplace · Mis clientes · Mi Actividad |
| **Últimos proyectos** | Tabla con últimos 5 proyectos provisionados |
| **Welcome card** | Aparece solo si el reseller es fresh (< 7 días) sin customers — 3 pasos onboarding |

> **No mostramos MRR** en este panel. Los Resellers cobran su trabajo
> (desarrollo + extras + bonus volumen), no del mensual del cliente.

---

## 3. Nuevo Proyecto

URL: `/reseller/projects/new`

### Qué hacés acá

Provisionar un tenant nuevo (sitio web nuevo para un cliente que cerraste).

### Campos del form

| Campo | Obligatorio | Detalle |
|---|---|---|
| **Email** | ✅ | Cliente o prospect — quien va a recibir credenciales / activar pago |
| **Nombre** | Opcional | Para identificarlo rápido en tu lista de proyectos |
| **Nombre del proyecto** | ✅ | Aparece como "site.name" en el sitio (ej: "Estudio Jurídico Pérez") |
| **Subdomain** | ✅ | Será `{subdomain}.bewpro.com` — solo `[a-z0-9-]`, max 48 chars |
| **Core (producto)** | ✅ | Dropdown con los 9 productos publicados |
| **JSON de contenido** | Opcional | Sube un JSON con la data del cliente (acelera el provisioning) |

### Regla clave: 15 días de vida

Todo proyecto provisionado por un reseller arranca con `grace_period_end = now + 15 días`.

- Si el cliente activa pago Stripe en esos 15 días → grace clears → permanente
- Si no → el cron diario `bewpro:check-grace` lo pasa a `Paused` → `Archived`

> **No hay distinción demo vs real**. Es trabajo del reseller convertir al cliente
> en pagante dentro del plazo, o el proyecto muere automáticamente.

### Qué pasa después de submit

1. **Inmediato**: se crea un record en Airtable con `Pipeline_Status=Required`
2. **Inmediato**: se crea un `TenantProject` en la DB de producción con `parent_reseller_id=tu_id`
3. **Si subiste JSON**: se guarda en `storage/app/reseller-imports/{record_id}.json`
4. **En ~1 min**: el cron `process-airtable.sh` lo detecta y arranca la provisión
5. **En ~25 min**: la provisión termina (cPanel + DB + Laravel + seed)
6. **Pipeline_Status → On Development**
7. **Si había JSON**: el cron `apply-pending-imports.sh` aplica el JSON al tenant (~1 min más)
8. **Pipeline_Status → Active**
9. **Email automático** al cliente con sus credenciales

**Tiempo total típico**: 25-30 min desde que dejás el form hasta sitio live con la data del cliente.

### Estados del proyecto

| Estado | Significado | Tu acción |
|---|---|---|
| `Required` | En cola para provisionar | Esperar (max 5 min para que arranque) |
| `Processing` | Cron lo está procesando | Esperar (10-25 min) |
| `On Development` | Sitio creado, JSON aplicándose | Esperar 1-2 min más |
| `Active` | Listo y entregable | Email al cliente con credenciales |
| `Failed` | Algo se rompió | Contactar `coke@lacompaniadigital.com` |
| `Paused` | Suspendido (falta de pago) | BewPro maneja, vos no intervenís |
| `Archived` | Cancelado | Backup de datos 30 días |

### Tips para usar el form

- **Subdomain**: cuidado de no chocar con uno existente. El form valida en tiempo real.
- **Email**: usá el del cliente, NO el tuyo. Stripe le va a cobrar a ese email.
- **JSON**: si tu prospect te dio info estructurada, transformala a JSON y subila — el tenant arranca con esa data, no con placeholders.
- **Nombre del proyecto**: cuidate de typos, aparece grande en el sitio.

---

## 4. Proyectos-Cliente

URL: `/reseller/projects`

### Lo que ves

Tabla con todos los tenants que provisionaste vos:

| Columna | Detalle |
|---|---|
| Nombre del proyecto | Cliente |
| Subdomain | URL del sitio |
| Estado | Pipeline status |
| Fecha provisión | Cuándo lo creaste |
| Cpanel User | Identificador interno (útil para soporte) |
| Acciones | Ver detalles, link al sitio |

### Filtros disponibles

- Por estado (Required, Active, etc.)
- Por fecha (último mes, último trimestre, todo)
- Búsqueda por nombre/subdomain

### Acciones por proyecto

| Acción | Cuándo usar |
|---|---|
| **Ver detalles** | Información completa del tenant |
| **Ir al sitio** | Abrir el sitio en nueva pestaña |
| **Ver logs de provisión** | Si algo falló, ver qué pasó |
| **Reintentar provisión** | Si está Failed, intentar de nuevo |
| **Marcar archivado** | Si el cliente canceló |

---

## 5. Mis Clientes

URL: `/reseller/customers`

### Lo que ves

Listado de clientes únicos con la **lista expandida de sus proyectos**
(badge status + dominio + producto).

| Columna | Detalle |
|---|---|
| Cliente | Nombre + email + badge "N proyectos" |
| Proyectos asociados | Lista compacta: badge status + nombre + dominio + producto |
| Último alta | Fecha del proyecto más reciente |
| Cliente desde | Fecha de creación del User |

> **Sin MRR.** Esa columna fue removida en Fase 5.6 — Reseller no cobra del mensual.

### Por qué importa

- **Identifica oportunidades de upsell**: cliente con 1 proyecto activo desde hace 6 meses → candidato para mejora
- **Detecta cancelaciones tempranas**: cliente Past Due 7 días → llamar antes que cancele
- **Trackeo de relación**: ves la historia con cada uno

---

## 6. En Vivo

URL: `/reseller/activity`

### Lo que ves

Tu vista operativa del día a día: **todos tus proyectos con timer de 15 días**
ordenados por urgencia (los que están cerca de vencer primero).

**KPIs arriba**:
- **En vivo (grace)** — proyectos sin pago todavía, con días restantes
- **Activos (pagando)** — proyectos con suscripción Stripe activa (permanentes)
- **Expirados** — proyectos que no concretaron pago en 15 días
- **Tasa de conversión** — % de proyectos que pasaron a pagantes

**Cards por proyecto**:
- Nombre + producto + tier
- Datos del prospect/cliente
- Timer color-coded (verde > 3 días, amarillo ≤ 3 días, rojo expirado)
- Link compartible (copy + WhatsApp)
- Acciones: **+15 días** (extender grace), **Archivar** manual

**Filtros**: `En vivo (grace)` · `Pagando` · `Expirados` · `Todos`

### Cuándo usar cada acción

| Acción | Cuándo |
|---|---|
| **+15 días** | El prospect dice "necesito unos días más para decidir" — extiende grace |
| **Archivar** | El prospect te confirma que no va — dejá de aparecer en "En vivo" |
| **Compartir link (WhatsApp)** | Para que el prospect vea y use el demo en su teléfono |

---

## 7. Mi Portafolio

URL: `/reseller/commissions`

### Lo que ves

**Vista analítica sin USD** — el reseller no cobra del mensual, así que esta
vista resume actividad y conversión, no facturación.

**KPIs**:
- Proyectos totales · Sumados este mes · Activos (+ en progreso) · **No concretados**

**Histórico**: tabla con Proyecto · Cliente · Producto · Fecha · Estado.
Filtros por status (active / on_development / required / failed / archived).

> **Antes era "Mis Comisiones"** con tier badge y bonus USD. Esa vista quedó
> reservada para uso interno (CD lleva el tracking de bonuses por backoffice
> via tabla `commissions`). El Reseller no necesita ver eso día a día.

---

## 8. Gaps abiertos (post-audit 2026-05-17)

Estos flujos están **diseñados pero NO implementados** — para usuarios en
producción todavía hay que coordinar manual:

| Gap | Workaround actual |
|---|---|
| **Link de checkout para el cliente** | El reseller manda al cliente al marketplace `bewpro.com/products-catalogue` para comprar manualmente |
| **Email automático al cliente con CTA "Activá tu pago"** | Reseller manda mail propio explicando los 15 días |
| **Sync TenantProject reseller ↔ Stripe webhook** | Si el cliente compra por marketplace, se crea OTRO TenantProject. CD tiene que linkearlos manualmente |
| **Banner in-app "X proyectos por vencer"** | Reseller debe entrar a `/reseller/activity` filtro "En vivo" y revisar timers |
| **Notificación visual de bonus alcanzados (Silver/Gold)** | CD revisa tabla `commissions` y avisa por WhatsApp |

Spec completa de estos gaps: ver `fase-5-spec-completo.md` sección 3.8.

---

## 9. Roadmap futuro

| Feature | Prioridad | Estimado |
|---|---|---|
| Endpoint `/projects/{slug}/activate?token={uuid}` (Gap A) | **Alta** | Q3 2026 |
| Webhook sync con tenant existente del reseller (Gap B) | **Alta** | Q3 2026 |
| Cron check-grace extendido a `Required` (Gap C) | Media | Q3 2026 |
| Banner in-app de vencimientos (Gap D) | Media | Q3 2026 |
| Email cliente "Activá tu pago" (Gap E) | **Alta** | Q3 2026 |
| Centro de Recursos embedded (videos + docs) | Media | Q4 2026 |
| Panel separado `/setter/` con link tracking (ya hay base en Fase 5.3) | **Alta** | Q3 2026 |
| Bulk provisioning desde panel (CSV upload) | Baja | 2027 |

---

## 8. Soporte para problemas del panel

| Tipo de problema | Canal |
|---|---|
| Bug visual / UX raro | WhatsApp a CD / lead asignado |
| Provisión que no arranca | Email `soporte@bewpro.com` con record_id |
| Login fallido | Reset password / `soporte@bewpro.com` |
| Comisión que no aparece | Email a `coke@lacompaniadigital.com` con detalle |

---

## 9. Detalles técnicos (para curiosos)

### Stack

- Laravel 9 + Spatie permissions
- Vista server-side blade
- Panel admin con tema Metronic

### Modelos relevantes

- `User` con rol Spatie `Reseller` + `airtable_reseller_record_id`
- `TenantProject` con `parent_reseller_id`
- `ResellerApplication` (form de aplicación)

### Controllers

- `app/Modules/Clients/Controllers/Reseller/*`
  - `ResellerProjectsController.php` (Nuevo Proyecto + listado)
  - `ResellerCustomersController.php` (Mis Clientes)
  - `ResellerActivityController.php` (Mi Actividad)

### Rutas

- `routes/modules/clients.php` — grupo `/reseller/` con middleware `permission:reseller.dashboard`

---

## 10. Convenciones de uso

### Para todos los resellers

✅ **Sí**:
- Provisionar tenants en horario laboral (más probable que el cron VPS1 esté disponible)
- Documentar en tu CRM externamente además del panel
- Reportar bugs a CD inmediatamente

❌ **No**:
- Hacer reload constante del panel (consume recursos)
- Compartir tu password con nadie
- Provisionar tenants "de prueba" con emails reales (usá emails descartables)
- Cambiar el subdomain una vez provisionado (no es soportado)

---

## Referencias

- Accesos del reseller: [`../onboarding-reseller/accesos-y-herramientas.md`](../onboarding-reseller/accesos-y-herramientas.md)
- Provisión de tenants (detalle): [`provisión-de-tenants.md`](provisión-de-tenants.md)
- Facturación y cobros: [`facturación-y-cobros.md`](facturación-y-cobros.md)
- Pricing y comisiones: [`../kit-comercial/pricing-y-comisiones.md`](../kit-comercial/pricing-y-comisiones.md)
- Documentación técnica del panel: [`../../paneles/`](../../paneles/) (interno backend team)
