尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Web app para gestionar listas de compras de supermercado
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗Web app para gestionar listas de compras de supermercado.
Estado actual: proyecto inicializado. Todavía no hay funcionalidades implementadas.
.nvmrc)npm install
npm run dev
Abrir http://localhost:3000 en el navegador.
| Comando | Descripción |
|---|---|
npm run dev | Servidor de desarrollo con recarga en caliente |
npm run build | Build de producción |
npm run start | Sirve el build de producción |
npm run lint | Ejecuta ESLint |
npm run typecheck | Genera tipos de rutas y comprueba con tsc |
npm run format | Formatea el código con Prettier |
npm run format:check | Comprueba el formato sin modificar archivos |
npm test | Tests unitarios con Vitest |
npm run test:watch | Vitest en modo watch |
npm run test:e2e | Tests end-to-end con Playwright (requiere npm run build y npx playwright install chromium) |
El backend es Supabase (ADR 0002).
En local corre con Docker mediante la CLI de Supabase, que está instalada
como dependencia de desarrollo: no hace falta instalarla aparte, se usa con
npx supabase o con los scripts de abajo.
Requisitos: Docker Desktop en marcha y unos 10 GB libres en disco la primera vez, para descargar las imágenes.
| Comando | Descripción |
|---|---|
npm run db:start | Levanta Supabase en local (base, auth, realtime, API, Studio, Mailpit) |
npm run db:stop | Detiene los contenedores |
npm run db:reset | Recrea la base aplicando supabase/migrations/ y supabase/seed.sql |
npm run db:types | Regenera src/lib/supabase/database.types.ts desde la base local |
Primera vez:
npm run db:start.
npx supabase status muestra las URLs y las claves del entorno local.
Crear .env.local en la raíz del proyecto con estos valores:
NEXT_PUBLIC_SUPABASE_URL=<Project URL, normalmente http://127.0.0.1:54331>
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=<clave Publishable, empieza por sb_publishable_>
.env.local está en .gitignore y no se versiona. La clave secreta
(sb_secret_... o service_role) nunca va en variables NEXT_PUBLIC_
ni en el cliente.
Con el entorno levantado:
La API local escucha en el puerto 54331 en vez del 54321 habitual porque CleanMyMac ocupa el 54321 en la máquina de desarrollo. El resto de los puertos son los de Supabase por defecto.
Para cambiar el esquema se crea una migración nueva con
npx supabase migration new <nombre>, se aplica con npm run db:reset y se
regeneran los tipos con npm run db:types. Las migraciones ya mergeadas no
se editan.
La configuración local (auth anónima, email con enlace y código OTP, URLs de
redirección) está en supabase/config.toml y las plantillas de correo en
supabase/templates/.
Sin registro previo (ADR 0004):
SessionProvider (src/components/session-provider.tsx,
montado en src/app/(app)/layout.tsx) restaura la sesión guardada o crea
un usuario anónimo de Supabase. Si Supabase no responde, la app se muestra
igual con el aviso "Sin conexión" y reintenta sola con backoff.src/app/auth/callback/route.ts y vuelve
a / con ?account=... para que el menú muestre el resultado.La sesión vive en cookies (@supabase/ssr) y se lee en el navegador: los
layouts no llaman a cookies() y siguen siendo estáticos. No hay proxy.ts:
el cliente del navegador renueva su propio token.
En cada entorno de Supabase, Auth tiene que aceptar <origen>/auth/callback
como URL de redirección (en local ya está en supabase/config.toml; en
staging y producción se agrega en el dashboard, junto con el dominio de las
previews de Vercel).
Tests e2e contra el stack local (los que dependen de Supabase se saltean si
no está E2E_SUPABASE=1, como en CI):
npm run db:start
npm run build # con .env.local apuntando al stack local
E2E_SUPABASE=1 npm run test:e2e
src/
app/ Rutas, layouts y páginas (App Router)
components/ Componentes de React reutilizables
lib/ Utilidades y lógica compartida
types/ Tipos de TypeScript compartidos
public/ Archivos estáticos
supabase/ Configuración local, migraciones, seed y plantillas de correo
docs/ Documentación del proyecto
La app es instalable. El manifest está en src/app/manifest.ts, los iconos en
public/icons/ y la página sin conexión en src/app/offline/page.tsx.
El service worker (src/app/sw.ts, Serwist) se compila con
@serwist/turbopack y se sirve desde /serwist/sw.js (route handler en
src/app/serwist/[path]/route.ts). Se registra desde el layout raíz con
SerwistProvider, solo en producción. Precachea el app shell, los assets y
/offline; las peticiones a Supabase y a /api/ nunca se cachean.
Instalar:
Verificar el manifest en un build de producción:
npm run build && npm run start
Abrir http://localhost:3000, DevTools, pestaña Application: en Manifest se ve
el manifest; en Service Workers, /serwist/sw.js activado; en Cache Storage,
el precache incluye /offline. Para probar el fallback: marcar Offline en
Network y navegar a una ruta no visitada.