Synaplan
Open-source AI platform for companies: self-hosted AI agents, GDPR-compliant chatbot widget, RAG knowledge base, WhatsApp and Outlook AI, MCP, multi-model routing. Docker, Kubernetes or hosted in Germ
Agenda, clientes, agendamento online e indicadores para profissionais e negócios de beleza. Menos tempo administrando, menos horários perdidos e mais clientes voltando.
Translation pending
BusinessTypeScript · JavaScriptGitHub @290784OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Plataforma SaaS multi-tenant de gestão para profissionais e negócios de beleza e estética: agenda inteligente, agendamento online, CRM de clientes, registro de pagamentos e indicadores.
Proposta de valor: menos tempo administrando, menos horários perdidos e mais clientes voltando.
| Área | Situação |
|---|---|
| Landing page, cadastro, login, sessão | ✅ funcional |
| Onboarding guiado (negócio → horários → serviços) | ✅ funcional |
| Multi-tenancy com RLS no PostgreSQL + papéis | ✅ funcional e testado |
| Agenda dia/semana/mês, criação, reagendamento, status, encaixe, bloqueios | ✅ funcional |
| Proteção contra reserva duplicada (lock + restrição de exclusão) | ✅ testado com concorrência |
Página pública de agendamento (/b/<slug>) | ✅ funcional |
| Clientes: ficha, histórico, segmentos, duplicados, consentimento, CSV | ✅ funcional |
| Serviços e profissionais (expediente, pausas, serviços habilitados) | ✅ funcional |
| Pagamentos: sinal, parcial, integral, estorno auditável | ✅ funcional (registro manual) |
| Painel com métricas reais definidas | ✅ funcional |
| Notificações internas | ✅ funcional |
| Fila de mensagens (idempotente, retentativas) | ✅ motor pronto · ⚠️ nenhum canal conectado |
| Assinaturas e planos | ⚠️ modelo + regras de acesso prontos · cobrança não integrada |
| Financeiro completo, comissões, relatórios, marketing, estoque | 🔜 próximas fases (roadmap) |
src/app/globals.css)postgres (porsager) — SQL explícito, sem ORMdate-fns + @date-fns/tz para fusosDecisões e justificativas: docs/ARQUITETURA.md.
Pré-requisitos: Node 20.9+ e PostgreSQL 15+ (local, Docker ou Supabase).
npm install
cp .env.example .env.local # ajuste DATABASE_URL
npm run db:migrate # aplica db/migrations/*.sql
DEMO_PASSWORD=uma-senha npm run db:seed-demo # opcional: conta de demonstração isolada
VITRINE_PASSWORD=uma-senha npm run db:seed-vitrine # opcional: salão vitrine com ~4 meses de números realistas
npm run dev # http://localhost:3000
A conta de demonstração ([email protected], e-mail de teste local) é uma organização marcada como is_demo;
a interface exibe um aviso permanente e os dados ficam isolados pelo mesmo RLS das contas reais.
A conta vitrine ([email protected], "Salão Lumi") serve para apresentações: 3 profissionais e ~4 meses
de agenda contando a história "faturava ~R$ 14 mil por mês e, em 3 meses com a Gê, chegou a ~R$ 17,6 mil"
(por mês típico de 21,7 dias de atendimento). O crescimento vem de premissas explícitas no topo de
scripts/seed-vitrine.ts: faltas de ~14% para ~5%, agendamento online de 0% para ~35%, serviço adicional
de ~3% para ~15%. É relativa à data em que roda (o 3º mês é o mês atual); RESET=1 recria do zero.
Também é is_demo, e os telefones das clientes são fictícios em sequência ((11) 90000-0001…).
O seed é bloqueado em produção, a menos que ALLOW_DEMO_SEED=1.
npm run typecheck # tsc --noEmit
npm run lint # eslint
npm run test # unitários + integração (precisa de PostgreSQL, ver abaixo)
npm run build
BASE_URL=http://localhost:3000 npm run test:e2e # com o app rodando e a conta demo criada
Os testes de integração usam TEST_DATABASE_URL
(padrão postgres://[email protected]:5432/beauty_os_test) e recriam o schema app desse banco.
Nunca aponte para um banco com dados reais.
O teste ponta a ponta cria uma conta nova a cada execução; o limite de cadastros por IP
(10/hora) pode bloquear execuções repetidas — limpe app.rate_limits no banco local.
db/migrations/ SQL versionado (schema, RLS, papéis)
scripts/ migrate.ts, seed-demo.ts, seed-vitrine.ts
src/domain/ regras puras: disponibilidade, status, permissões, planos, métricas
src/server/ acesso a dados e casos de uso (rodam no servidor)
db.ts withTenant (RLS) / withSystem
auth/ senha (scrypt) e sessões
modules/ agenda, clientes, serviços, equipe, pagamentos, mensagens, painel, público
src/app/ rotas (landing, auth, onboarding, /app/*, /b/[slug], API de cron)
src/components/ design system (ui/), shell, gráficos
tests/unit|integration|e2e
docs/ arquitetura, roadmap, integrações, segurança/LGPD
Pensado para Vercel + Supabase (PostgreSQL). Passos em docs/DEPLOY.md.
Gê — o nome aparece em cursiva (Allura) com o monograma "G" sobre o degradê Royal Violet. Tema escuro com a escala de violetas da marca; detalhes em docs/design/tema-royal-violet.md.