尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Analyze and organize expenses based on CFDI 4.0 XML invoices, directly in your browser.
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗Análisis de gastos del Coworking Café. Es una página web (Next.js, desplegada en Vercel) para analizar las facturas de gastos (CFDI 4.0 XML) que los proveedores le emiten al coworking café. La persona usuaria arrastra los archivos al navegador; las facturas se procesan en el navegador y nunca se guardan en una base de datos. Solo si la persona lo pide, se envían a DeepSeek descripciones de conceptos y nombres de proveedor (nunca RFC, UUID ni montos). La usan el dueño, sus socios y su contador con una contraseña compartida.
Requisitos: Node.js 24.x y pnpm 11.5.2 (fijado en packageManager).
pnpm install
Crea un archivo .env.local (está ignorado por git) con dos valores aleatorios:
echo "APP_PASSWORD=$(openssl rand -base64 18)" > .env.local
echo "SESSION_SECRET=$(openssl rand -base64 48)" >> .env.local
Después:
pnpm dev # servidor de desarrollo en http://localhost:3000
pnpm verify # lint + typecheck + pruebas + build
pnpm build && pnpm smoke:auth # prueba de la contraseña y de la ruta de agrupar productos contra un servidor de producción
.env.example documenta cada variable. Nunca uses el prefijo público de Next.js con APP_PASSWORD, SESSION_SECRET ni DEEPSEEK_API_KEY.
El proyecto de Vercel lo crea quien administra la cuenta (D-26) y se usa el dominio *.vercel.app que Vercel asigna por defecto (D-27).
Sube el repositorio a GitHub. Este repositorio todavía no tiene remoto: crea un repositorio en GitHub, luego git remote add origin <url> y git push -u origin main. La carpeta Facturas/ está en .gitignore, así que no se sube. Alternativa: usar la CLI de Vercel desde una copia del proyecto sin la carpeta Facturas/ (.vercelignore también la excluye, junto con .env*).
Crea el proyecto: Vercel Dashboard > Add New > Project > importa el repositorio. Framework: Next.js.
Versión de Node: Project > Settings > General > Node.js Version = 24.x.
Variables de entorno (Project > Settings > Environment Variables), para Production y Preview:
APP_PASSWORD: contraseña compartida larga y aleatoria (12 caracteres o más).SESSION_SECRET: salida de openssl rand -base64 48.DEEPSEEK_API_KEY: clave de acceso a DeepSeek que usa el servidor para agrupar productos. Solo vive en el servidor: no la pegues en el código ni uses un prefijo público.DEEPSEEK_MODEL (opcional): modelo de DeepSeek que se usa; si falta, se usa deepseek-flash.ENABLE_EXPERIMENTAL_COREPACK = 1: pnpm 11 no está en la lista oficial de Vercel; con Corepack activado, Vercel instala con la versión fijada en packageManager.Cambiar APP_PASSWORD o SESSION_SECRET cierra la sesión de todas las personas.
Despliega (o vuelve a desplegar) después de guardar las variables.
Revisa el log de build: debe indicar que se instaló con pnpm 11.5.2 y que el build terminó bien. Si la instalación falla con un error de versión de pnpm, el plan alternativo es cambiar packageManager a pnpm 10 y regenerar pnpm-lock.yaml (la configuración allowBuilds de pnpm-workspace.yaml necesitaría el equivalente de pnpm 10).
Antes de desplegar, ejecuta localmente:
node scripts/check-bundle-secrets.mjs # compila con valores centinela y busca secretos en .next/static y en las páginas .html y .rsc prerrenderizadas
pnpm audit --prod --audit-level high # sin avisos altos o críticos en dependencias de producción
El análisis del build cubre también la clave de DeepSeek (DEEPSEEK_API_KEY): ni su valor ni los nombres DEEPSEEK_API_KEY y DEEPSEEK_MODEL pueden aparecer en lo que llega al navegador. Además, pnpm build && pnpm smoke:auth prueba la ruta /api/llm/group contra un servidor de producción: sin sesión responde 401, un cuerpo mal formado responde 400 y, con la clave vacía, responde 500 server_not_configured; nunca llama a DeepSeek de verdad.
Confirma en la URL real (ventana privada): cualquier ruta, por ejemplo / o /cualquier-cosa, lleva a /login; la contraseña correcta entra; recargar y volver a visitar más tarde sigue dentro; "Cerrar sesión" regresa a /login. La fase solo se cierra cuando esto queda confirmado en la URL real (D-28).
Requiere Google Chrome instalado (Playwright usa el canal chrome).
pnpm test:e2e
Levanta un build de producción en el puerto 3210 con una contraseña de prueba, arma una carpeta sintética de facturas en el directorio temporal del sistema y comprueba: la puerta de acceso, la carga de la carpeta, que ninguna petición de red lleve contenido XML, el aviso al recargar y el cierre de sesión.
Para correr además la muestra real, solo en esta máquina (nunca se sube a ningún lado):
E2E_FACTURAS_DIR=Facturas/2025 pnpm test:e2e
Estas pruebas no forman parte de pnpm verify. Variables opcionales: E2E_APP_PASSWORD, E2E_SESSION_SECRET y E2E_FACTURAS_DIR.