BeautyLink
SaaS multi-tenant onde cada salão ganha uma página pública própria com serviços, galeria e agendamento, mais um painel administrativo completo.
salão pequeno agenda por mensagem e caderno: horário some, cliente esquece, e não existe uma página própria para mostrar serviços, preços e trabalhos feitos.
cada salão tem um endereço próprio dentro da plataforma, com página pública gerada a partir do que ele mesmo cadastra, e agendamento que respeita a agenda real de cada profissional. do outro lado, um painel com agenda, serviços, clientes, produtos, galeria e disparo de mensagens.
como as peças se conectam
- Navegadorpágina pública e painel
- NginxHTTPS e proxy
- Next.jstelas e rotas de API
- PostgreSQLum banco, tenant por endereço
o que existe dentro
Página pública
no arvitrine por endereço próprio: serviços, preços, galeria, banner e agendamento online.
Agenda
no arslots calculados por profissional, serviço e duração, com bloqueio de horário ocupado.
Cadastros
no arprofissionais, serviços, produtos e clientes.
Disparos
no arenvio de lembretes e campanhas pela integração de mensageria.
Superadmin
no argestão dos tenants e métricas de uso da plataforma.
o que foi usado
decisões técnicas e o porquê
multi-tenant compartilhado
um banco só, com o tenant resolvido pelo endereço da página. mais simples de operar e de custear do que um banco por cliente.
imagem processada no upload
redimensionamento e compressão com sharp na entrada, para não servir foto de celular crua na página pública.
sessão em JWT assinado
sem tabela de sessão: o token carrega o tenant e o papel, e a verificação acontece na borda.
o que ficou
- multi-tenant compartilhado é simples até a primeira consulta esquecer o filtro de tenant — o filtro tem que morar na camada de acesso a dados, nunca na tela.
- a parte difícil de agendamento não é gravar o horário, é calcular os slots livres: duração do serviço, jornada do profissional e intervalos precisam ser uma função só.