Todos os projetos

Estudo de caso

Gestão e Agendamento para Barbearias

Um produto multi-tenant com três superfícies conectadas a uma API central: gestão interna, reserva pública e landing comercial. O desafio reúne isolamento de dados, regras de disponibilidade e operação em fusos horários diferentes.

Minha responsabilidade

Produto, arquitetura, interfaces Flutter Web, integração da landing Next.js, backend, banco de dados e deploy.

Status de entrega

API em produção

API colocada em produção na semana de 3 de outubro de 2026. Camisa 10 é a primeira landing personalizada ao vivo; a disponibilidade de todas as interfaces e a adoção do produto não estão estabelecidas.

Contexto e solução

Plataforma para operação de barbearias e agendamento de clientes. O ERP Flutter Web reúne equipe, serviços, horários e agendamentos; uma SPA pública Flutter Web resolve a barbearia por slug e permite reservar sem login. A landing Next.js direciona o visitante para esse fluxo.

Visão de produto

A proposta conecta operação e aquisição de clientes: cada barbearia pode ter uma experiência pública com identidade própria, conduzindo visitantes ao agendamento online. Camisa 10 é a primeira implementação ao vivo dessa camada de marca.

Experiência pública personalizada

Experiência pública

A Barbearia Camisa 10 é a primeira landing personalizada ao vivo dessa estratégia. Sua identidade visual apresenta a marca e os serviços, enquanto os CTAs conduzem à SPA Flutter Web de agendamento, no slug da barbearia.

Landing real da Barbearia Camisa 10: primeira experiência pública personalizada
Captura real da landing Camisa 10 · camada pública de marca do produto
Ver landing ao vivo ↗
  1. 01Landing personalizada
  2. 02Agendamento público
  3. 03API central
  4. 04Gestão interna

Agendamento público · Flutter Web

Captura da SPA de agendamento será adicionada após o redesign da interface.

Experiência de gestão interna

O ERP Flutter Web organiza equipe, serviços, horários e reservas por funcionalidades, com Riverpod, go_router e Dio. A gestão e o agendamento público compartilham a API central; os fluxos internos são protegidos por JWT.

Arquitetura

Monólito modular Python/FastAPI, contratos Pydantic, persistência SQLAlchemy/psycopg e migrações Alembic. A landing Next.js, a SPA pública Flutter Web e o ERP Flutter Web compõem superfícies distintas do mesmo produto.

Landing comercialNext.jsAgendamento público
Agendamento públicoFlutter WebSlug público, sem login
Gestão internaFlutter WebFluxos protegidos por JWT
API central · monólito modularPython / FastAPI
PostgreSQLIsolamento lógico por tenant_id
Docker Compose em VPS DigitalOcean · Nginx · Alembic

Diagrama da arquitetura implementada. A confirmação de produção refere-se à API; CI/CD e garantias PostgreSQL contra reservas concorrentes fazem parte da evolução planejada.

Multi-tenancy e autorização

Tabelas PostgreSQL compartilhadas usam isolamento lógico por tenant_id. Papel e tenant vêm do usuário persistido nos fluxos internos. Na entrada pública, a barbearia é resolvida por slug e as associações entre tenant, serviço e profissional são validadas.

Agendamento e fusos horários

A disponibilidade considera horários de trabalho, intervalos, duração do serviço e reservas existentes. Cada tenant tem um fuso IANA: apresentação no horário local e persistência/comparação em UTC. No ERP, Riverpod, go_router e Dio apoiam a organização por funcionalidades.

Entrega e resultado

API e PostgreSQL em Docker Compose em VPS DigitalOcean, com Nginx e migrações versionadas. O produto combina gestão interna com agendamento público e um modelo reutilizável de tenants. O backend foi colocado em produção.

Restrições e trade-offs

O monólito modular evita complexidade prematura de microsserviços. O isolamento por tenant_id depende de aplicação consistente das regras de acesso. O cálculo de disponibilidade não substitui uma garantia transacional: a checagem seguida de inserção ainda pode permitir disputa entre reservas simultâneas.

Qualidade e próximos passos

Existem testes backend para isolamento e agendamentos, além de testes Flutter. Os testes backend usam SQLite em memória e não provam comportamento específico do PostgreSQL. Garantias transacionais contra reservas concorrentes, testes PostgreSQL, revisão de autorização, validação de horários no servidor, observabilidade e CI/CD são próximos passos, ainda não concluídos.

Tecnologias utilizadas

  • Flutter Web
  • Dart
  • Riverpod
  • go_router
  • Dio
  • Next.js
  • React
  • TypeScript
  • Tailwind
  • Python / FastAPI
  • Pydantic
  • SQLAlchemy / psycopg
  • PostgreSQL
  • Alembic
  • Docker Compose
  • Nginx
  • JWT
  • DigitalOcean VPS

Próximo estudo de caso

Olá Cliente