Descrição
SaaS de agendamento que construí sozinho, com cerca de 27 mil linhas. A cliente marca por um widget embutido no site do próprio negócio, a dona administra tudo por um painel, e os dados de cada tenant ficam isolados por Row Level Security.
Funcionalidades
- Row Level Security forçado em toda tabela de tenant, inclusive para o dono da tabela
- Widget de agendamento que se embute em sites de terceiros
- Painel da dona com semana, pedidos pendentes, bloqueios e serviços
- Roda em VPS com Docker Compose, proxy reverso e rotina de backup diário
- 299 testes sobre regra de negócio e política de acesso, em Vitest e Playwright
Desafios
- Impedir overbooking de vez, o que virou uma constraint de exclusão no Postgres em vez de uma verificação no código
- Manter o cálculo de disponibilidade num lugar só, compartilhado pelo widget, pelo painel e pela API
- Tirar tudo de uma plataforma gerenciada sem reescrever as regras de negócio
Aprendizados
- Que um invariante que o banco consegue garantir não deveria morar no código da aplicação
- O quanto vale um arquivo de migration versionado no dia em que você troca de plataforma
- Testar o que quebra caro, regra de negócio e política de acesso, em vez de perseguir cobertura