尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證PWA personal para gastos, presupuesto y lista de compras
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
App personal de finanzas: gastos, ingresos, gastos fijos (compartidos, en dólares, con vencimiento), tarjeta con cuotas, análisis del mes y lista de compras con recetas. Es una PWA offline-first: se instala en el celular y anda sin conexión. • Producción: https://cashlist-app.vercel.app (rama main) • Staging: https://cashlist-staging.vercel.app (rama develop, detrás del login de Vercel) Requisitos: Node 24 (.nvmrc) y pnpm 11 (packageManager en package.json; con corepack enable se usa la versión correcta). Docker solo hace falta para el Supabase local.檢視完整 README ↗
App personal de finanzas: gastos, ingresos, gastos fijos (compartidos, en dólares, con vencimiento), tarjeta con cuotas, análisis del mes y lista de compras con recetas. Es una PWA offline-first: se instala en el celular y anda sin conexión.
main)develop, detrás del login de Vercel)Requisitos: Node 24 (.nvmrc) y pnpm 11 (packageManager en package.json; con
corepack enable se usa la versión correcta). Docker solo hace falta para el Supabase local.
pnpm install
pnpm dev
Listo: pnpm dev corre en modo local, sin cuenta ni sync y con datos de ejemplo. No hace falta
configurar nada, y desarrollar nunca escribe en producción.
| Dónde | Datos | Para qué |
|---|---|---|
pnpm dev | Modo local, datos de ejemplo en el navegador | Desarrollar el día a día |
pnpm dev:sync | Supabase local en Docker (pnpm db:start antes) | Trabajar en login, sync o migraciones |
pnpm dev:prod | Supabase de producción (.env.local) | Solo a propósito, cuando hace falta |
| Preview de Vercel por PR | Modo local, datos de ejemplo | Ver un cambio en el celular antes de mergear |
Staging (develop) | Modo local, datos de ejemplo | Probar lo integrado antes de producción |
Producción (main) | Supabase de producción | La app real |
VITE_SUPABASE_URL / VITE_SUPABASE_ANON_KEY la app arranca sin login ni
sync, y un navegador vacío se llena con tres meses de datos de ejemplo relativos a hoy. El
perfil tiene "Volver a los datos de ejemplo". Cada navegador tiene su copia: no se comparte
entre dispositivos.pnpm dev:sync crea la primera vez el usuario [email protected] / cashlist-dev en el
Supabase local y se niega a correr contra otra cosa que no sea local.pnpm dev:prod necesita .env.local con las claves del proyecto (copiá .env.example,
valores en Supabase → Project Settings → API). Lo que hagas ahí es real.vite.config.ts).vite-plugin-pwa (Workbox); cuando hay
versión nueva, la app ofrece recargar.src/lib/db/). Un motor de sync
propio (src/lib/sync/) los sube y baja de Supabase: last write wins por updatedAt, borrados
lógicos (deleted) y cambios pendientes marcados con pending. Sincroniza al abrir, al volver
la conexión o la app al frente, cada minuto, y cuando Realtime avisa que otro dispositivo
cambió algo.src/ui/<Componente>/, con CSS
Modules. Mobile-first.src/
app/ layout (barra inferior con notch, header), router, pantallas de error, recarga
features/ un dominio por carpeta: analysis, auth, card, expenses, fixed, home, incomes,
month, profile, shopping
lib/ db (Dexie + migraciones), sync, supabase, demo (datos de ejemplo), cotización del dólar
ui/ componentes compartidos
utils/ fechas, moneda, texto, errores
supabase/
migrations/ schema de Postgres (RLS por usuario)
scripts/ size.mjs (tamaño del bundle), dev-sync.mjs (pnpm dev:sync)
Los datos existen en dos lados y tienen que cambiar juntos:
pnpm db:new <nombre> y escribirla en supabase/migrations/. Tiene que
aplicar sobre una base vacía (el CI lo verifica).src/lib/db/index.ts, con su test de migración.src/lib/sync/tables.ts.pnpm db:reset (o pnpm db:start) + pnpm dev:sync.main: pnpm db:push:check muestra qué
se aplicaría, y pnpm db:push la aplica. Las dos necesitan el proyecto linkeado una vez:
pnpm exec supabase link --project-ref juxvyttkoubunlqzadlz (pide la contraseña de la base).La migración más vieja es 20261005000024_baseline.sql: todo el schema hasta esa fecha, unificado
desde las migraciones anteriores y verificado igual a producción. No se edita: los cambios van en
migraciones nuevas. Nunca aplicar SQL a mano en producción (SQL Editor, MCP): el historial de
migraciones dejaría de coincidir con los archivos y db push volvería a ser peligroso.
develop: feature/<descripcion>.develop. Corre Preflight y Vercel arma un preview.develop se ve en staging.develop a main, mergeado con merge commit (no squash, así
las dos ramas no divergen).main y develop están protegidas: solo entran PRs, con verify y migrations en verde.
.github/workflows/preflight.yml): verify (formato, lint, typecheck, tests,
build) y migrations (todas las migraciones desde cero en un Postgres local + supabase db lint).develop; las majors se hacen a mano.
Las alertas de seguridad abren PR enseguida, majors incluidas.feat: shared fixed expenses).| Comando | Qué hace |
|---|---|
pnpm dev | Dev server en modo local (ver Ambientes) |
pnpm dev:sync | Dev server contra el Supabase local |
pnpm dev:prod | Dev server contra producción |
pnpm check | Lo mismo que verify en el CI: typecheck, lint, formato, tests |
pnpm test | Tests (Vitest; test:watch en modo watch) |
pnpm lint:fix | oxlint con autofix |
pnpm format | Prettier sobre todo el repo |
pnpm build | Build de producción |
pnpm size | Build + tamaño gzip del JS que carga al arrancar (informativo) |
pnpm db:start | Supabase local en Docker, con todas las migraciones |
pnpm db:stop | Lo apaga |
pnpm db:reset | Recrea la base local desde las migraciones |
pnpm db:new | Migración nueva vacía |
pnpm db:lint | Lint del schema de la base local |
pnpm db:push:check | Qué migraciones se aplicarían en producción (dry run) |
pnpm db:push | Aplica las migraciones pendientes en producción |
Los tests van junto al código (*.test.ts); IndexedDB se simula con fake-indexeddb.