# MSC Tracker — Vercel + Supabase

App principal del MSC Tracker.

## URLs

- App/panel: `https://msc-vercel-supabase.vercel.app/msc-api/login`
- API base: `https://msc-vercel-supabase.vercel.app/msc-api`
- API + Explorer: `https://msc-vercel-supabase.vercel.app/msc-api/docs/api`
- OpenAPI: `https://msc-vercel-supabase.vercel.app/openapi.json`

## Arquitectura

- Vercel: API pública on-demand, auth web, token management, docs/API Explorer.
- Supabase: Postgres para users, sessions, api_tokens y logs/auditoría técnica.
- VPS: worker/scraper estable. Vercel lo llama mediante bridge token interno contra `/msc-worker-bridge` en Tailscale Funnel. El legacy `/msc-api` ya no se expone por Funnel.
- Modelo producto: el consumidor llama `/track/{container}` cuando quiere consultar MSC y guarda sus propios datos/histórico. Nosotros no somos storage de negocio para Andrés/CRON PHP. Para observabilidad interna, analytics conserva screenshots solo de los últimos hits por container y poda los más viejos.

## Secretos

Guardados en Bitwarden:

- `Vercel + Supabase Tokens`
- `MSC Tracker Supabase Vercel`

No commitear service role, Vercel token ni bridge key.

## Archivos principales

- `api/app.js`: backend Vercel + renderer server-side.
- `public/static/index.html`: panel principal portado del VPS.
- `public/static/users.html`: admin users/tokens.
- `public/static/app.js`: JS compartido + UX navigation prefetch.
- `public/static/style-vps2.css`: CSS activo, look VPS.
- `public/static/doc/*.html`: docs privadas.

## Deploy

```bash
cd /home/ubuntu/msc-vercel-supabase
vercel --token "$VERCEL_TOKEN" --prod --yes --force
```

## E2E

Antes de compactar o handoff largo, leer `/home/ubuntu/HANDOVER.md` y ejecutar la checklist E2E allí documentada.

## Worker bridge

Vercel usa `WORKER_BRIDGE_BASE=https://miopenclaw-vnic.tail9799d2.ts.net/msc-worker-bridge`. La antigua ruta Tailscale `/msc-api` fue removida del Funnel público.
