Lalabase
Tickets, Doku, Zeiterfassung und Kundengespräche an einem Ort, durchsuchbar per KI. Für Softwarefirmen mit Kundenprojekten. Open Source: auf deinem eigenen Server oder in unserer Cloud in Deutschland.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
resto — plataforma SaaS de reservas multi-local Plataforma multi-tenant de reservas para gastronomía: cada local tiene su propia página de reservas, su plano de salón y su panel de staff, todo corriendo sobre la misma plataforma. Asignación automática de mesas, lista de espera, notificaciones multi-canal y reservas por WhatsApp. No hace falta ninguna cuenta en la nube para trabajar en la Fase 1. El esquema usa Postgres estándar, así que lo que corre local corre igual en Supabase, Neon o Railway.查看完整 README ↗
Plataforma multi-tenant de reservas para gastronomía: cada local tiene su propia página de reservas, su plano de salón y su panel de staff, todo corriendo sobre la misma plataforma. Asignación automática de mesas, lista de espera, notificaciones multi-canal y reservas por WhatsApp.
No hace falta ninguna cuenta en la nube para trabajar en la Fase 1. El esquema usa Postgres estándar, así que lo que corre local corre igual en Supabase, Neon o Railway.
npm install
npm run db:start # levanta Postgres, crea la base y aplica migraciones
npm run db:demo # carga un local de prueba con reservas
npm run db:migrar # aplica migraciones pendientes (necesita DATABASE_URL_OWNER)
npm run dev # panel en http://localhost:3000
npm test # 304 tests
npm run test:unit # solo el motor, sin base de datos
npm run humo # recorrido de humo en navegador (requiere el server andando)
npm run humo:salon # recorrido de humo sobre la carga del salón
npm run humo:horarios # recorrido de humo sobre horarios y turnos
npm run humo:equipo # recorrido de humo sobre el equipo y los permisos
npm run humo:publico # recorrido de humo sobre la web pública y el widget
npm run humo:plano # recorrido de humo sobre el salón en vivo y la reasignación
npm run humo:google # recorrido de humo sobre lo que ve Google
npm run humo:espera # recorrido de humo sobre la lista de espera
Cada recorrido de humo deja la base cambiada (carga reservas, mueve mesas, marca
feriados). Corré npm run db:demo antes de cada uno: si no, el siguiente falla por lo
que dejó el anterior y no por un problema de verdad.
Usuarios de prueba que deja db:demo:
| Dónde | Usuario | Contraseña |
|---|---|---|
Panel del local (/login) | [email protected] | bar-demo-123 |
Plataforma (/admin/login) | [email protected] | plataforma-123 |
La página pública del local de demo queda en /r/bar-demo. No pide usuario: es la que
ve alguien de la calle.
Fase 1 completa. Un local se puede dar de alta y operar de punta a punta:
/admin): alta de locales con su dueño, suspender y reactivar.Fase 2 en curso. El local ya toma reservas de la calle:
La página del local (/r/<local>): elegir día y cantidad, ver los horarios que
tienen lugar de verdad, y reservar dejando nombre y teléfono. Sin cuenta, sin seña.
El widget: una línea de <script> mete el mismo formulario adentro de la web del
local, ajustándose solo al alto que necesita.
La reserva del cliente (/r/<local>/reserva/<token>): vuelve a su reserva con el
link que le quedó, y cancela desde ahí. La mesa se libera en el acto.
Reservas web (/panel/publico): prender o apagar la página, los datos que se
muestran y los cuatro límites con los que el local acepta reservas de gente que no
conoce.
El salón en vivo (en la planilla del día): el plano a escala a la hora que se mire, con cada mesa pintada según quién la tiene. Tocar una mesa ocupada y después una libre mueve la reserva entera. Solo se ofrecen las mesas que aguantan el turno completo: una mesa libre a las 21:00 pero tomada a las 21:15 no sirve, y ofrecerla sería mandar al mozo a un rechazo con el cliente esperando.
Para que la encuentren: la página de cada local se declara como restaurante, con su
dirección, su teléfono, su horario y su acción de reservar, más sitemap.xml y
robots.txt. El objetivo es aparecer cuando alguien busca ese local por su nombre;
competir por "restaurante" no es alcanzable (D18).
Fase 3 en curso. Avisos y lista de espera andando:
Falta de la Fase 3: el bot de WhatsApp, que necesita una cuenta de Meta y plata.
src/
dominio/ lógica pura, sin I/O: motor, turnos, combinaciones, identidad, passwords
datos/ esquema SQL, migraciones, repositorios, conexiones por rol
servicios/ casos de uso: reservas, auth, panel, administración
web/ helpers del panel: sesión, formato de fecha y hora
app/ pantallas (Next.js App Router)
Todo lo que vive en dominio/ es función pura: recibe datos, devuelve decisiones. No
toca la base, no conoce transacciones, no sabe qué es un tenant. Es lo que permite
testear el motor sin levantar un servidor.
Leer en orden:
| Doc | Contenido |
|---|---|
| 00 — Decisiones tomadas | lo que ya está definido y por qué |
| 01 — Viabilidad y riesgos | qué es viable, los cinco puntos caros del brief |
| 02 — Stack y arquitectura | stack recomendado con alternativas, multi-tenancy, hosting, proveedores y costos |
| 03 — Modelo de datos y asignación | tablas, el motor de mesas, concurrencia, auditoría |
| 04 — Notificaciones | motor multi-canal, resolución de canal, consentimiento, outbox |
| 05 — Preguntas abiertas | lo que falta definir antes de la Fase 1 |
| 06 — Cómo desplegar | pasar de la máquina a internet: base, hosting y qué falta para producción |
tenant_id + Row Level Security de Postgres.EXCLUDE USING gist sobre (mesa, periodo).