Sem controlo multi-loja
Negócios com mais do que um espaço não tinham como separar horários, equipa e agenda por loja — a ferramenta não acompanhava o crescimento.
Case Study — Produto & Engenharia
Como desenhei e construí, de raiz, um sistema de agendamento para negócios com equipa — arquitetura multi-tenant, motor de disponibilidade com precedência por loja, planos com limites aplicados a sério e uma disciplina de engenharia que prova cada alteração em produção antes de a assumir como certa.
O produto
é o sistema de agenda que desenhei e construí para negócios com equipa e marcações — barbearias, cabeleireiros, clínicas, estúdios. Multi-tenant desde a primeira linha de esquema, com TanStack Start, Cloudflare Workers e Supabase Postgres.
O desafio
Negócios com marcações têm ferramentas para marcar. O que falta é operar: separar horários e equipa quando o negócio cresce para mais do que um espaço, proteger-se de faltas sem ferramenta nenhuma, e ver o dia sem abrir a agenda inteira à mão.
Negócios com mais do que um espaço não tinham como separar horários, equipa e agenda por loja — a ferramenta não acompanhava o crescimento.
Sem sinal de reserva nem histórico de faltas, um cliente que não aparece custa tempo e receita sem que o negócio tenha como se proteger.
Sem dashboard nem exportação, o dono de um negócio de marcações não tinha visão do dia sem abrir a agenda inteira à mão.
Arquitetura
Cada camada foi pensada para negócios reais — a base de dados aplica as regras mesmo quando o frontend falha, não o contrário.
Cada organização isolada por Row-Level Security no Postgres — não é o frontend a decidir o que se vê, é a base de dados.
Resolução de horários por precedência: exceção do profissional → horário do profissional na loja → horário geral do profissional → horário da loja → horário base do negócio. Coberto por testes unitários e validado com dados reais antes de cada alteração.
Três planos (Starter, Pro, Business) com limites — profissionais, SMS, funcionalidades — impostos por triggers na base de dados, não só na interface.
Filas assíncronas de email e SMS, com quota mensal por plano calculada a partir do custo real por mensagem, para proteger a margem sem cortar lembretes a um negócio ativo.
Funções sensíveis correm como SECURITY DEFINER com verificação explícita de sessão e de organização — nunca confiança implícita no cliente.
Execução
Uma sequência clara, cada fase provada em produção antes da seguinte.
Autenticação, organizações, Row-Level Security ponta a ponta, agenda interna e página pública de marcação.
Gate por convite, lista de espera e programa de indicação — para crescer com controlo em vez de abrir a torneira.
Sinal de reserva manual e online via Stripe Connect, bloqueio automático de clientes com faltas repetidas.
Quatro fases sucessivas — fundação de dados, horários por loja, escolha de loja na marcação pública, agenda e dashboard filtrados por loja — cada uma testada em produção antes da seguinte.
Quota mensal por plano, calculada a partir do custo real por mensagem, para o produto continuar sustentável enquanto cresce.
Estado atual
Sem números de negócio inflacionados: o produto está em beta fechado por convite, sem lançamento comercial ainda. O que existe é um sistema multi-tenant funcional, testado e pronto para os primeiros clientes a sério.
planos com limites reais
Starter, Pro e Business — cada limite aplicado por trigger, não só na interface.
fases de multi-loja entregues
Da fundação de dados ao dashboard filtrado por loja, cada uma provada em produção.
das migrações testadas antes de aplicar
Rollback-tests em produção — nunca uma alteração de esquema às cegas.
por convite
Crescimento controlado antes do lançamento comercial.
Sem métricas de negócio (vendas, utilizadores pagantes) por não existirem ainda de forma significativa — o produto está pré-lançamento comercial. O que se mede aqui é maturidade de engenharia, não tração.
Se reconhece a necessidade de um produto bem construído — não só uma campanha ou um site, mas um sistema que aguenta escala — vamos falar sobre o próximo passo.
Falar sobre um projeto semelhante