Synaplan
기업을 위한 오픈소스 AI 플랫폼
미용업 종사자를 위한 일정·고객·온라인 예약·지표 제공, 관리 시간 줄이고 예약 손실 감소, 고객 재방문 증가
Agenda, clientes, agendamento online e indicadores para profissionais e negócios de beleza. Menos tempo administrando, menos horários perdidos e mais clientes voltando.
비즈니스TypeScript · JavaScriptGitHub @290784온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
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.