Lalabase
티켓·문서·근무시간·고객대화를 한 곳에 모아 KI로 검색, 소프트웨어 기업 고객 프로젝트용, 오픈소스로 자체 서버·독일 클라우드에 배포
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Plataforma SaaS multi-rubro para gestión y agendamiento online de citas, diseñada para barberías, peluquerías, salones de uñas, spas y centros de estética.
barbers → staff):
businesses.category: barberia, peluqueria, unas, spa, estetica, otro).brand_color) por local./panel):
/panel/login):
/panel/*.business_members) y políticas RLS para dueños y profesionales./reserva/[token]):
cancel_notice_min).max_active_per_phone).EXCLUDE USING gist).| Ruta | Descripción |
|---|---|
/reservar/[slug] | Página pública de reservas (ej. /reservar/barber-studio, /reservar/aura-nails, /reservar/salon-lumiere). |
/reserva/[token] | Portal privado del cliente para ver, agregar al calendario o cancelar su cita. |
/ | Sitio comercial. |
/registro, /login, /recuperar | Cuenta del negocio con correo y contraseña (verificación por correo). |
/onboarding | Asistente: negocio → equipo → horarios → servicios → publicar. |
/dashboard | Panel de control diario para dueños y profesionales del local. |
/dashboard/plan | «Mi plan»: estado de la suscripción, planes y pagos del negocio (owner/admin). |
/admin | Panel de plataforma (Clikium): ingresos, suscripciones, negocios, planes y pagos. |
/panel, /panel/login | Rutas históricas: redirigen a /dashboard y /login. |
El proyecto incluye 3 negocios de prueba listos para usar sin necesidad de configurar base de datos:
/reservar/barber-studio) — Rubro barbería (color café tostado)./reservar/aura-nails) — Rubro salón de uñas (color rosa ciruela)./reservar/salon-lumiere) — Rubro peluquería (color índigo).npm install
Copy-Item .env.example .env.local # En Windows PowerShell
npm run dev
Abre http://localhost:3000/dashboard o cualquiera de las páginas de reserva públicas. Las reservas y cambios de estado en modo demo se guardan en memoria.
supabase/aurabook_setup.sql en el SQL Editor y ejecutarlo una vez (son todas las
migraciones en una transacción). Proyecto existente: ejecutar solo las migraciones nuevas, en orden:
20261023000000_init.sql (esquema, RLS, RPCs y restricción GiST anti-solapamiento).20261024100000_saas_roles_and_permissions.sql (rol admin, onboarding, reserva manual).20261025000000_phase1_tenant_hardening.sql (integridad multi-tenant y endurecimiento).20261026000000_phase2_onboarding.sql (onboarding: perfil, equipo, servicios, horarios, publicar).20261027000000_platform_billing.sql (planes, suscripciones, pagos y panel de plataforma).20261028000000_business_branding.sql (logo y color de cada negocio).20261029000000_booking_notifications.sql (correo del cliente, avisos y recordatorios).20261030000000_booking_rules.sql (anticipación, días hacia adelante y plazo de cancelación).20261031000000_legal_acceptances.sql (aceptación de documentos legales).20261101000000_overbooking_and_revenue.sql (sobrecupos e ingresos por rango).20261102000000_plan_entitlements.sql (planes Free y Premium y sus límites).20261103000000_premium_price.sql (precio de Premium: $15.990 IVA incluido).20261104000000_premium_launch_promo.sql (precio de lanzamiento: $12.990 los primeros 6 meses).20261105000000_time_off_management.sql (bloqueos de agenda: crear y quitar).20261106000000_business_deletion.sql (eliminar un negocio desde «Mi cuenta»).20261107000000_plans_v2.sql (planes v2: límites de Free, adicionales, prueba al publicar e historial).20261108000000_plans_v3.sql (planes v3: logo en Free, colores y ocultar marca en Premium, cuota por mes de la cita).20261109000000_insights_no_shows.sql (estadísticas y control de ausencias).20261110000000_payment_requests.sql (contratar Premium por transferencia, con aprobación en /admin).20261111000000_input_hardening.sql (rechaza nombres de cliente con HTML, enlaces o caracteres de control).DEMO_MODE=false
NEXT_PUBLIC_SUPABASE_URL=https://TU-PROYECTO.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=TU_ANON_KEY
SUPABASE_SERVICE_ROLE_KEY=TU_SERVICE_ROLE_KEY
# Cloudflare Turnstile (opcional en desarrollo, recomendado en producción):
NEXT_PUBLIC_TURNSTILE_SITE_KEY=
TURNSTILE_SECRET_KEY=
En Supabase > Authentication > URL Configuration: definir Site URL (ej. https://aurabook.cl;
en desarrollo http://localhost:3000) y agregar a Redirect URLs: https://aurabook.cl/auth/confirm** y
http://localhost:3000/auth/confirm**. Definir también NEXT_PUBLIC_SITE_URL con el mismo dominio.
En Authentication > Sign In / Providers > Email: mantener activo Confirm email y fijar el largo mínimo de contraseña en 8 (la app exige lo mismo).
En Authentication > Emails > Templates, reemplazar el enlace de estas plantillas para que la confirmación funcione aunque el correo se abra en otro dispositivo o navegador:
<a href="{{ .SiteURL }}/auth/confirm?token_hash={{ .TokenHash }}&type=email&next=/onboarding">Confirmar mi cuenta</a><a href="{{ .SiteURL }}/auth/confirm?token_hash={{ .TokenHash }}&type=recovery&next=/cuenta/nueva-clave">Crear nueva contraseña</a>Sin este cambio también funciona, pero solo si el enlace se abre en el mismo navegador donde se pidió.
En Authentication > SMTP Settings: configurar un SMTP propio (Resend, Postmark, etc.). El SMTP incluido en Supabase tiene un límite de envíos muy bajo y no sirve para pilotos con negocios reales.
Tras aplicar migraciones, revisar Advisors > Security en el dashboard de Supabase.
Acceso al panel de plataforma (/admin): regístrate en la app con tu correo, confírmalo y luego ejecuta en
el SQL Editor (reemplaza el correo):
insert into public.platform_admins (user_id)
select id from auth.users where email = '[email protected]';
Para cualquier otro usuario /admin responde 404. Desde ahí creas los planes (no hay precios en el código).
Opcional: NEXT_PUBLIC_BILLING_CONTACT_WHATSAPP (ej. 56912345678) y NEXT_PUBLIC_BILLING_CONTACT_EMAIL
habilitan los botones de contacto en «Mi plan».
Para vincular manualmente a un usuario registrado a un negocio existente (los negocios nuevos se crean en /onboarding):
insert into public.business_members (business_id, user_id, role)
values ('11111111-1111-4111-8111-111111111111', '<UUID_DEL_USUARIO_EN_AUTH_USERS>', 'owner');
npm test # unitarias + base de datos (PostgreSQL embebido con PGlite, sin Docker)
npm run typecheck
npm run build
Arquitectura, modelo de datos, decisiones y plan por fases: docs/ARQUITECTURA.md.
app/
reservar/[slug]/page.tsx Página pública adaptable según rubro
reserva/[token]/page.tsx Portal del cliente (detalles, calendario, cancelación)
panel/page.tsx Panel de agenda y control del local
panel/login/page.tsx Login con Magic Link
api/availability/route.ts GET horarios disponibles en tiempo real
api/bookings/route.ts POST nueva reserva con rate limit y captcha
api/bookings/[token]/cancel/ POST cancelación por el cliente
api/panel/bookings/ GET agenda filtrada por día y negocio
api/panel/bookings/[id]/status/ POST cambio de estado (completar, no-show, cancelar)
globals.css Sistema de diseño neutro premium + white-label
components/
booking-experience.tsx Flujo de agendamiento en 4 pasos con chips de día
managed-booking-view.tsx Vista de ticket, calendario y cancelación del cliente
panel-experience.tsx Tablero interactivo de agenda diaria y métricas
lib/
types.ts Tipos de dominio multi-rubro (staff, category, bookings)
theme.ts Copia por rubro y generación de variables CSS white-label
business.ts Consulta de catálogo público
panel.ts Operaciones de agenda y membresías con sesión
bookings.ts Servicios de reserva gestionada por token
rate-limit.ts Rate limiter por ventana fija en PostgreSQL
turnstile.ts Verificación de Turnstile server-side
permissions.ts Matriz de roles para la UI (la autorización real está en la BD)
redirects.ts Validación de redirecciones internas post-login
supabase/
migrations/ Esquema PostgreSQL + RLS + RPCs (aplicar en orden)
002_demo_seed.sql Semillas para barbería, uñas y peluquería
legacy/ Esquema obsoleto con `barbers` (no ejecutar)
tests/
core-validation.test.mjs Pruebas unitarias de lib/
db/ Pruebas de RLS, aislamiento, solapamiento y onboarding
docs/ARQUITECTURA.md Decisiones técnicas y plan por fases
supabase/002_demo_seed.sql (datos de prueba multi-rubro; no usar en producción).supabase/legacy/ es histórico: no ejecutar..env.local: