2.8 KiB
2.8 KiB
Arquitectura — CLUB-002 · PWA Club
Objetivo
Construir la primera experiencia frontend del Club sobre el backend ya entregado en CLUB-001:
- alta/join del Club
- tarjeta digital móvil
- shell instalable tipo PWA
Análisis del frontend actual
- La tienda usa Next App Router en
project/frontend/src/app. - No existe manifiesto PWA ni rutas
/club/*todavía. - Los flujos autenticados usan proxies Next.js (
/api/auth/*) para preservar cookies same-origin. - CLUB-001 ya expone backend suficiente para esta fase:
GET /club/configPOST /club/joinGET /club/meGET /club/movements
Diseño propuesto
1) Proxy Next dedicado para Club
Añadir project/frontend/src/app/api/club/[...path]/route.ts.
Motivo:
- preservar la cookie
mdv_clubcomo same-origin - reenviar
set-cookiedel backend enPOST /club/join - evitar que componentes cliente hablen directo con
NEXT_PUBLIC_API_URL
2) Rutas frontend Club
Crear páginas:
/club→ landing/resumen del Club/club/join→ alta anónima o acceso al card si ya existe identidad Club/club/card→ tarjeta digital con member code, saldo y últimos movimientos
3) Shell móvil instalable
Añadir:
app/manifest.ts- iconos PWA a partir del branding existente
- metadatos PWA en
app/layout.tsx(themeColor,appleWebApp, manifest) - CTA de instalación desde cliente (
beforeinstallprompt) en la superficie Club
4) Estado de Club en cliente
No crear aún un provider global complejo. En CLUB-002 basta con fetch puntual desde páginas/componentes Club:
GET /api/club/configPOST /api/club/joinGET /api/club/meGET /api/club/movements
Esto minimiza acoplamiento y deja abierta una futura extracción a ClubContext si la PWA crece.
5) Tarjeta digital
La card mostrará:
- member code
- saldo actual
- estado del Club
- últimos movimientos
- superficie visual tipo credencial móvil
6) Código visual de identificación
CLUB-002 mostrará un identificador visual en la tarjeta usando datos ya emitidos por CLUB-001.
Nota de alcance:
- CLUB-003 es la fase de integración TPV/identificación en caja.
- Por tanto, CLUB-002 prioriza la UX de tarjeta digital e instalación móvil.
- La semántica exacta de escaneo en TPV se cerrará en CLUB-003 para no fijar prematuramente un contrato visual incompatible con caja.
Alcance
Sí entra
- proxy Next para Club
- landing/join/card frontend
- manifiesto e iconos PWA
- CTA de instalación
- movimientos recientes y saldo en tarjeta
No entra
- earn/redeem en TPV
- linking con usuario registrado
- recovery codes
- admin UI del Club
- contrato final de lectura en caja
Validación prevista
cd project/frontend && npm run buildcd project && npm run buildcd project && npm run typecheck./scripts/verify.sh