01 — Definición de proyecto — VOLTA
1. Identidad
| Campo | Valor |
|---|
| Nombre | VOLTA |
| Significado | Vuelta a la cancha: el hueco que te espera en el grupo del barrio |
| Eslogan | ”Tu plaza en la cancha.” |
| Una frase | Web del club de barrio para pedir plaza en clases y panel del coach que gestiona esas solicitudes. |
| Sector | Fitness comunitario / club de barrio |
| Tipo | Web club + solicitud pública + inbox coach JWT — Nivel 1 |
| Plataforma | Web responsive (móvil-first visitante + desktop coach) |
| Mercado demo | España (club de barrio, Valencia en copy) |
| Idioma | es-ES |
| Fecha caso | 2026-08-08 |
2. Problema
Principal (hipótesis de diseño)
Los clubs de barrio gestionan listas de plaza por WhatsApp, notas en el mostrador y mensajes perdidos. El visitante no sabe si su mensaje llegó; el coach no tiene un inbox con estado (nuevo / contactado / confirmado).
Secundarios
| Problema | Quién lo sufre | Efecto |
|---|
| “Apúntame al HIIT del jueves” en hilos | Visitante | No hay acuse ni código de referencia |
| Listas en papel / Excel local | Coach | Difícil priorizar contactos del día |
| Sin tipo de clase ni franja preferida | Ambos | Llamadas de ida y vuelta |
| Sin máquina de estados | Coach | Se pierde quién ya fue contactado |
Supuestos (no investigación primaria propia)
- S1: Clubs pequeños–medianos no necesitan un CRM enterprise; sí un inbox de solicitudes con estado.
- S2: El visitante prefiere un form de 1 pantalla a crear cuenta o descargar app.
- S3: El valor inmediato está en captura estructurada + pipeline de estado, no en aforo live ni pagos.
Hipótesis de producto
| ID | Hipótesis | Señal de validación (futura) |
|---|
| H1 | Un form público con tipo de clase y franja reduce mensajes ambiguos | ↓ “¿a qué hora?” post-solicitud |
| H2 | Inbox con estados NEW→CONTACTED→CONFIRMED acelera el cierre de plaza | Mediana tiempo NEW→CONFIRMED |
| H3 | Códigos cortos VO-MMDD-XXX facilitan referencia oral | Uso del código en WhatsApp/llamada |
No se afirman estadísticas de mercado inventadas. Todo lo anterior es razonamiento de diseño etiquetado.
3. Propuesta de valor
| Para | Valor |
|---|
| Visitante (Marc) | Pide plaza en 1 minuto: clase, día y franja sin cuenta. |
| Coach (Nora) | Ve solicitudes nuevas, marca contacto y confirma o cancela. |
| Club | Canal digital mínimo viable sin marketplace ni ERP de socios. |
No es VOLTA
| Excluido | Por qué |
|---|
| Marketplace de entrenadores o clubs | Eso sería CORREA-like; no es el club propio |
| Tool de finca / logística / legal | Dominios de otros días de la serie |
| SaaS multi-sede con billing | Complejidad L3/L4 |
| App fitness con wearables / planes IA | Fuera del job “plaza en la cancha” |
4. Objetivos
Negocio / caso de estudio
- Demostrar vertical slice L1 fitness con JWT coach y dominio ClassRequest.
- Portfolio coherente: Paper + docs + app runnable.
Usuario
| Rol | Objetivo medible en demo |
|---|
| Visitante | Enviar solicitud en < 2 min; ver código en success |
| Coach | Marcar CONTACTED / CONFIRMED en < 3 taps desde el inbox |
No objetivos v1 (explícitos)
- Pagos y cuotas mensuales
- Aforo en tiempo real por clase
- Chat in-app
- Multi-coach con permisos granulares
- Export contable
5. Roles y permisos (resumen)
| Acción | Público | COACH |
|---|
| Ver home / clases | Sí | Sí |
| POST solicitud | Sí | Sí (mismo form) |
| Login JWT | No (no cuenta socio) | Sí |
| Listar solicitudes | No (401) | Sí |
| Ver stats summary | No | Sí |
| Ver detalle | No | Sí |
| Cambiar status | No | Sí |
6. Métricas (modelo, no instrumentadas en v1 salvo base)
| Tipo | Métrica | Definición |
|---|
| North Star | Solicitudes CONFIRMED / semana | Plazas realmente cerradas |
| Activación | 1ª solicitud pública | POST create |
| Ops | % NEW contactadas en 24 h | NEW → CONTACTED |
| Calidad | Tasa error API en create/list | 4xx/5xx |
| UX | Tiempo form complete | Mediana en analytics futuro |
7. Alcance funcional v1 (L1)
| Módulo | Incluido |
|---|
| Home pública | Hero, clases, horarios teaser, CTAs |
| Solicitud | Form + POST /api/requests |
| Success | Código + mensaje |
| Auth | POST /api/auth/login → JWT |
| Inbox | GET list, GET stats, GET by id, PATCH status |
| UI estados | Loading implícito, empty, error de red |
| Seed | 1 coach, 5 solicitudes |
8. Criterios de aceptación de producto
- Un visitante puede enviar una solicitud sin autenticación y recibir un código
VO-….
- Sin token, GET/PATCH
/api/requests* responden 401.
- Un coach puede iniciar sesión y ver el inbox ordenado (createdAt desc) con stats.
- El detalle permite transicionar estados NEW | CONTACTED | CONFIRMED | CANCELLED.
- La home comunica club de barrio y plaza, no marketplace ni gym chain genérico.
- Tipos de clase soportados: HIIT, YOGA, BASKET, KIDS, OPEN.
9. Stack y artefactos
| Capa | Detalle |
|---|
| Frontend | Angular + Tailwind · puerto 4200 |
| Backend | NestJS · puerto 3008 |
| DB | Neon PostgreSQL · Prisma · project delicate-mountain-11765167 |
| Auth | JWT (passport/strategy en API) |
| Diseño | Paper 01KZG2VRQFF2QF0PRDB10D4AG7 |
| Repo app | /Users/cristian/orca/volta-app/ · GitHub Criscode2022/volta-app |
10. Riesgos y mitigaciones
| Riesgo | Impacto | Mitigación v1 |
|---|
| Spam en form público | Inbox ruidoso | Validación server; honeypot futuro L1+ |
| Expectativa de aforo live | Decepción | Copy “solicitud”; coach confirma |
| Confundir con ClassPass | Expectativa marketplace | Marca club único, no multi-sede |
| PII en solicitudes | Privacidad | Solo coach autenticado lista; doc 11 |
11. Glosario
| Término | Definición en VOLTA |
|---|
| Plaza | Hueco en una clase o cancha abierta del club |
| Solicitud | ClassRequest con preferencias y estado |
| Coach | Usuario autenticado que opera el inbox |
| Código VO- | Identificador corto oral (VO-0808-01) |
| OPEN | Tipo de clase “cancha abierta” / libre |