尚未检测到更新。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.