Voltar

Case Study — Produto & Engenharia

Marcoo — de ideia a SaaS multi-tenant em produção

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.

  • Produto: getmarcoo.com
  • Setor: SaaS · Agendamento e operações
  • Disciplinas: Product · Full-stack Engineering · Multi-tenant · Billing · Segurança

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

Agendar já não bastava — faltava controlo operacional

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.

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.

Faltas sem proteção

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.

Operação às cegas

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

Cinco pilares, um sistema multi-tenant

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.

Multi-tenant com RLS

Cada organização isolada por Row-Level Security no Postgres — não é o frontend a decidir o que se vê, é a base de dados.

Motor de disponibilidade

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.

Planos e faturação real

Três planos (Starter, Pro, Business) com limites — profissionais, SMS, funcionalidades — impostos por triggers na base de dados, não só na interface.

Comunicações com controlo de custo

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.

Segurança por definição

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

Da fundação ao multi-loja, em fases

Uma sequência clara, cada fase provada em produção antes da seguinte.

Fundação

Autenticação, organizações, Row-Level Security ponta a ponta, agenda interna e página pública de marcação.

Beta fechado

Gate por convite, lista de espera e programa de indicação — para crescer com controlo em vez de abrir a torneira.

Proteção contra faltas

Sinal de reserva manual e online via Stripe Connect, bloqueio automático de clientes com faltas repetidas.

Multi-loja

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.

Motor de SMS com margem protegida

Quota mensal por plano, calculada a partir do custo real por mensagem, para o produto continuar sustentável enquanto cresce.

Estado atual

Em beta fechado, com a arquitetura pronta para escalar

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.

3

planos com limites reais

Starter, Pro e Business — cada limite aplicado por trigger, não só na interface.

4

fases de multi-loja entregues

Da fundação de dados ao dashboard filtrado por loja, cada uma provada em produção.

100%

das migrações testadas antes de aplicar

Rollback-tests em produção — nunca uma alteração de esquema às cegas.

Beta fechado

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.

Quer um sistema assim para o seu negócio?

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