Lalabase
티켓·문서·근무시간·고객대화를 한 곳에 모아 KI로 검색, 소프트웨어 기업 고객 프로젝트용, 오픈소스로 자체 서버·독일 클라우드에 배포
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Calculadora y manual de estudio de costos, desechos y mermas en gastronomía (es/en). Prod: https://milimon.inzumer.workers.dev · Staging: https://milimon-staging.inzumer.workers.dev
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Manual de estudio y calculadoras de costos, desechos y mermas en gastronomía. Bilingüe (/es, /en), mobile-first, con modo claro y oscuro. Basado en el manual Administración y Gestión gastronómica. Plan completo en docs/PLAN.md. • Astro (salida estática) + islas de React 19 • TypeScript estricto • Tailwind CSS v4 + @inzumer/tokens • Componentes de @inzumer/ui-library • Vitest + Testing Library (cobertura mínima 90%) • ESLint 10, Prettier, cspell Detalle de versiones y excepciones: docs/adr/0002-tooling-versions.md.README 전문 보기 ↗
Manual de estudio y calculadoras de costos, desechos y mermas en gastronomía. Bilingüe
(/es, /en), mobile-first, con modo claro y oscuro.
Basado en el manual Administración y Gestión gastronómica. Plan completo en docs/PLAN.md.
@inzumer/tokens@inzumer/ui-libraryDetalle de versiones y excepciones: docs/adr/0002-tooling-versions.md.
.nvmrc; con nvm: nvm install + nvm use)npm install -g pnpm@12 o corepack enable)pnpm install
pnpm dev # http://127.0.0.1:4321 → redirige a /es; /keystatic para cargar recetas
| Script | Descripción |
|---|---|
pnpm dev | Servidor de desarrollo |
pnpm build | Build estático en dist/ |
pnpm preview | Sirve el build |
pnpm typecheck | astro check |
pnpm lint | ESLint |
pnpm test | Tests |
pnpm test:coverage | Tests con umbral de cobertura del 90% |
pnpm format | Prettier |
pnpm spellcheck | Corrector ortográfico (inglés + español) |
pnpm validate | typecheck + lint + test:coverage + build |
pnpm audit:a11y | axe-core en todas las páginas, tema claro y oscuro (requiere pnpm build y Chrome) |
pnpm og:image | Regenera las imágenes para compartir por sección public/og/og-<sección>-<idioma>.png |
El sitio es estático y se publica en Cloudflare Workers (Workers Builds). wrangler.jsonc define
un Worker por ambiente (ADR 0006):
| Worker | Rama | Deploy command | URL | API |
|---|---|---|---|---|
milimon | main | npx wrangler deploy --env production | https://milimon.inzumer.workers.dev | milimon-backend-nest.onrender.com |
milimon-staging | dev | npx wrangler deploy --env staging | https://milimon-staging.inzumer.workers.dev | milimon-backend-nest-staging.onrender.com |
Cada Worker tiene su build command (pnpm build) y sus propias variables de build (Settings → Build →
Variables): SITE_URL, BASE_PATH (/), PUBLIC_API_URL, PUBLIC_API_KEY (el WEB_API_KEY de su
API), PUBLIC_API_APP_ID (web), PUBLIC_GOOGLE_CLIENT_ID y NODE_VERSION.
CMS en staging. Con PUBLIC_KEYSTATIC_STORAGE=github el build suma el adaptador de Cloudflare:
Keystatic queda online en /keystatic (modo GitHub, sobre la rama cms/draft: al guardar, el workflow cms-to-dev arma cms/<entrada> con un solo commit, valida el build y lo mergea con squash en dev), staging muestra también los
borradores y el resto del sitio sigue estático. El editor (/keystatic-editor) pone Keystatic al
lado de la vista previa en vivo: lee la entrada de cms/draft en GitHub con el token de la sesión
del CMS y se recarga segundos después de cada guardado (en local lee los archivos). Producción no lleva esa variable. El Worker de
staging necesita además:
| Dónde | Variable | Qué es |
|---|---|---|
| Build → Variables | PUBLIC_KEYSTATIC_STORAGE | github |
| Build → Variables | PUBLIC_KEYSTATIC_GITHUB_APP_SLUG | Slug de la GitHub App de Keystatic |
| Settings → Variables and Secrets | KEYSTATIC_GITHUB_CLIENT_ID | Client ID de la GitHub App |
| Settings → Variables and Secrets | KEYSTATIC_GITHUB_CLIENT_SECRET | Client secret de la GitHub App |
| Settings → Variables and Secrets | KEYSTATIC_SECRET | Clave aleatoria para firmar sesiones |
La API de cuentas se despliega aparte, en Render (ver su repo).
Variables de entorno (ver .env.example):
| Variable | Para qué |
|---|---|
SITE_URL / BASE_PATH | Origen y ruta base del sitio (https://milimon.inzumer.workers.dev + /): canónicas, hreflang, sitemap y Open Graph |
PUBLIC_GTM_ID | Contenedor de Google Tag Manager (GTM-…). Vacío = sin analítica ni banner de cookies |
PUBLIC_API_URL | URL de la API de cuentas (milimon-backend-nest). Vacío = cuentas no disponibles |
PUBLIC_API_KEY / PUBLIC_API_APP_ID | Identificación del cliente ante la API (públicas por diseño) |
PUBLIC_GOOGLE_CLIENT_ID / PUBLIC_FACEBOOK_APP_ID | Botones de login; cada uno aparece solo si está configurado |
Para activar el login con Google y Facebook, seguí docs/ACCOUNTS.md.
src/
pages/ rutas (.astro): /[lang]/…
layouts/ layouts .astro
components/ toda la UI (atoms / molecules / organisms), calculadoras incluidas
hooks/ estado de React (una por calculadora, borradores, moneda, tema)
utils/ funciones puras: fórmulas + registry, cálculo, formato, tracking…
constants/ valores ajustables
stores/ estado persistido con zustand (configuración, borradores, historial)
services/ integraciones externas (API de cuentas, Google Tag Manager, SDKs de login)
i18n/ traducciones en carpetas kebab-case: <carpeta>/{es,en}.json
styles/ assets/ test/
docs/
PLAN.md plan maestro
adr/ decisiones de arquitectura
Ver CLAUDE.md: Conventional Commits, aliases de imports, traducciones en kebab-case, rutas en inglés, placeholders descriptivos y tokens de color para claro y oscuro.