Plataforma SaaS de agendamento para negócios de beleza e bem-estar — barbearias, salões, estúdios de estética, personal trainers e spas em Portugal.
🔗 Produto em produção: bridclub.com
Este repositório documenta a arquitetura, decisões técnicas e funcionalidades do BridClub. O código-fonte é privado (produto comercial em produção), mas este showcase detalha como o sistema foi construído.
O BridClub nasceu para resolver um problema real: a gestão de agendamentos em negócios de beleza e bem-estar em Portugal ainda depende muito de WhatsApp manual, cadernos e folhas de Excel. A plataforma centraliza agendamento online, gestão de clientes, comunicação automatizada e descoberta de estabelecimentos num único produto.
Desenvolvido e mantido por mim como cofundador técnico na Bridamo, do design do banco de dados ao deploy em produção.
- Agendamento online com gestão de disponibilidade por profissional (não apenas por estabelecimento)
- Painel administrativo para donos gerirem clientes, horários e equipa
- Automação via WhatsApp (Meta Cloud API) para confirmações e lembretes de agendamento
- Descoberta de estabelecimentos com mapa interativo (Mapbox GL)
- Multi-segmento: barbearias, salões, estética, spas, personal trainers e tatuadores, cada um com a sua taxonomia (
establishment_type) - Notificações push via Firebase Messaging
| Camada | Tecnologia |
|---|---|
| Frontend | Next.js 15/16, React, TypeScript, Tailwind CSS |
| Backend | Next.js API Routes, Node.js |
| Banco de dados | PostgreSQL via Supabase |
| Integrações | Meta Cloud API (WhatsApp), Mapbox GL, Firebase Messaging |
| Observabilidade | Sentry, PostHog |
| Build | Turbopack |
flowchart TD
A[Cliente Web / Mobile] -->|Next.js SSR/CSR| B[Frontend Next.js]
B --> C[API Routes]
C --> D[(PostgreSQL - Supabase)]
C --> E[Meta Cloud API - WhatsApp]
C --> F[Firebase Messaging]
B --> G[Mapbox GL - Descoberta]
C --> H[Sentry / PostHog - Observabilidade]
O modelo de agendamento usa blocos de disponibilidade por profissional (weekly_schedule_block + schedule_time), permitindo que cada barbeiro/profissional tenha a sua própria agenda dentro do mesmo estabelecimento — em vez de um modelo simplista de "um horário, um estabelecimento".
- Concorrência no agendamento: corrigido um bug multi-camada onde profissionais partilhavam incorretamente a ocupação de horários — exigiu ajustes na rota de API, na cadeia de hooks/serviços, em três overloads de função PostgreSQL e num índice único (
appointment_unique_slot, incluindobarber_id). - Expansão de domínio: migração do modelo de dados de "apenas barbearias" para múltiplos tipos de negócio, mantendo compatibilidade com dados existentes via enum
establishment_type. - Performance de geocoding: identificação de um gargalo em resolução de coordenadas no caminho de leitura, com plano de otimização para geocoding assíncrono/em lote.
O BridClub está atualmente em fase de lançamento, com recrutamento ativo de estabelecimentos beta em Portugal.