Lalabase
티켓·문서·근무시간·고객대화를 한 곳에 모아 KI로 검색, 소프트웨어 기업 고객 프로젝트용, 오픈소스로 자체 서버·독일 클라우드에 배포
레스토랑 예약 서비스로 전용 페이지와 자동 배정 테이블, 대기 패널 제공, 회원가입·보증금 없이 예약합니다
Reservas para restaurantes: página propia, mesas asignadas solas y un panel para el turno. El comensal reserva sin registrarse y sin dejar seña.
비즈니스TypeScript · JavaScriptGitHub @leankon온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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).