# Implementer evidence — CLUB-002

## Resumen
Implementé la primera superficie frontend/PWA del Club sobre el backend de CLUB-001.

## Qué se añadió

### 1) Proxy Next.js para Club
- `project/frontend/src/app/api/club/[...path]/route.ts`

Función:
- reenviar `GET/POST/PATCH` al backend
- propagar cookies entrantes
- reenviar `set-cookie` del backend para conservar `mdv_club` same-origin

### 2) Rutas frontend del Club
- `project/frontend/src/app/club/page.tsx`
- `project/frontend/src/app/club/join/page.tsx`
- `project/frontend/src/app/club/card/page.tsx`
- `project/frontend/src/components/club/ClubExperience.tsx`

Comportamiento:
- landing Club
- alta anónima desde `POST /api/club/join`
- tarjeta digital con `memberCode`, saldo y movimientos recientes
- CTA para abrir la tarjeta cuando ya existe identidad Club en el dispositivo
- bloque de instalación PWA usando `beforeinstallprompt`

### 3) Manifest e iconos PWA
- `project/frontend/src/app/manifest.ts`
- `project/frontend/public/images/club-icon-192.png`
- `project/frontend/public/images/club-icon-512.png`

Además:
- `project/frontend/src/app/layout.tsx` ahora declara manifest + metadata Apple Web App + viewport themeColor.

### 4) Descubribilidad en storefront
- enlace `Club` añadido en header y footer.

## Decisiones de implementación
- Reutilicé un único componente cliente `ClubExperience` para `/club`, `/club/join` y `/club/card`.
- El frontend consume el backend Club vía proxy Next same-origin para que la cookie `mdv_club` quede gestionada correctamente por el navegador.
- La tarjeta muestra una credencial visual móvil basada en `memberCode` y deja el contrato final de lectura en caja para CLUB-003, como estaba previsto en la fase TPV.

## Validación ejecutada
- `cd project/frontend && npm run build` ✅
- `./scripts/verify.sh` ✅
- `git diff --check` ✅

## Riesgos / siguiente paso
- CLUB-003 debe cerrar el contrato exacto de identificación en TPV/caja para usar la tarjeta digital también en escaneo/lectura operativa.
- Conviene hacer smoke manual real en navegador/móvil para comprobar el prompt de instalación y la persistencia de `mdv_club` después de `POST /club/join`.
