Contexto
lib/api/invoices-store.ts escribe a data/invoices.json usando fs. En Vercel el FS es read-only → POST /api/invoices devuelve 503 EROFS. Es el único bloqueador duro restante para producción (ver memoria faro-produccion-blockers).
Alcance
- Crear proyecto Supabase y schema:
- Tabla
invoices con todos los campos actuales (id, provider, debtor, amount, discount, dueDate, escrowId, escrowNominalId, status, providerClaimedAt, investorClaimedAt, financedAt, paidAt, etc.).
- RLS policies (por wallet address en headers).
- Refactor
lib/api/invoices-store.ts para usar @supabase/supabase-js con SUPABASE_SERVICE_ROLE_KEY (solo server-side).
- Mantener interfaz pública del store igual para no romper las routes.
- Script de migración del JSON actual a Supabase (one-shot).
- Variables nuevas en
.env.example.
Por qué NO se delega
Toca el data layer completo. Define cómo se autorizan lecturas/escrituras por rol. Requiere decisiones de arquitectura (Gerry).
Bloquea
Despliegue a producción en Vercel.
Contexto
lib/api/invoices-store.tsescribe adata/invoices.jsonusandofs. En Vercel el FS es read-only →POST /api/invoicesdevuelve 503 EROFS. Es el único bloqueador duro restante para producción (ver memoriafaro-produccion-blockers).Alcance
invoicescon todos los campos actuales (id,provider,debtor,amount,discount,dueDate,escrowId,escrowNominalId,status,providerClaimedAt,investorClaimedAt,financedAt,paidAt, etc.).lib/api/invoices-store.tspara usar@supabase/supabase-jsconSUPABASE_SERVICE_ROLE_KEY(solo server-side)..env.example.Por qué NO se delega
Toca el data layer completo. Define cómo se autorizan lecturas/escrituras por rol. Requiere decisiones de arquitectura (Gerry).
Bloquea
Despliegue a producción en Vercel.