Fitofan
Plataforma desportiva: web, apps móveis e o backend por trás delas
Uma plataforma para atletas, treinadores, clubes e adeptos: uma web app em 11 línguas, apps para iOS e Android e um único backend de que me ocupo de ponta a ponta.
- Função
- Senior Full-Stack & Mobile Engineer
- Período
- 2024 – 2026


Contexto
A Fitofan serve atletas, treinadores, pais, clubes e ligas com uma web app em Next.js, apps Flutter para iOS e Android e um backend em NestJS. Sou responsável pela entrega em toda a stack: arquitetura, APIs, dados, infraestrutura e lançamentos, e desde 2026 mantenho a app móvel sozinho.
O desafio
Manter um produto coerente entre três bases de código e 11 línguas enquanto se acrescentam dados desportivos ao vivo, pagamentos, publicação social e funcionalidades de IA sem abrandar os lançamentos.
Construído em todas as camadas
- Web app em Next.js 16 sobre Feature-Sliced Design: mais de 140 páginas, 11 locales, cerca de 10 000 chaves de tradução com paridade verificada em CI
- Backend em NestJS com mais de 90 módulos, PostgreSQL e mais de 290 migrações, Swagger e verificações de estado
- Sincronização orientada a eventos sobre RabbitMQ com consumidores idempotentes, uma fila de mensagens falhadas e ids de correlação
- Cache em Redis com invalidação por decoradores; gateways Socket.IO para comentários e sessões ao vivo
- Jogos, resultados e odds ao vivo da Sportmonks e da API-Football; publicação social em Meta, TikTok, LinkedIn e YouTube
- Subscrições Finix mais verificadores de pagamento para Stripe, Square, PayPal, LiqPay, Mercado Pago, GCash e Monopay
- Assistente OpenAI com chamadas a ferramentas, transcrição com Whisper e geração de imagens com Replicate
- App Flutter: BLoC, cache offline com Hive, Socket.IO, notificações push, AdMob, Live Activities no iOS, 12 locales, mais de 360 testes
- CI/CD: gates de lint e i18n, Jest, Docker multi-stage, registo de contentores, deploy por SSH; web na Vercel
- Pacotes partilhados de registo e criação de clubes reutilizados pelo GymTeam através de um contrato de host injetável
- I&D de IA e visão no mesmo ecossistema: uma app de avaliação desportiva infantil com estimativa de pose no dispositivo em Flutter e subscrições in-app, e uma análise de técnica de taekwondo no browser com MediaPipe e TensorFlow.js
Destaques de engenharia
- Consumidores de eventos idempotentes: cada mensagem é registada antes de ser confirmada, por isso repetições e replays nunca se aplicam duas vezes
- Arquitetura imposta pelas ferramentas: regras de camadas, uma baseline de lint congelada que só pode encolher, verificação de ciclos de dependências e paridade de i18n em cada pull request
- Live Activities nativas do iOS controladas a partir do Flutter através de uma ponte de method channel
- Um único fluxo de registo empacotado atrás de um contrato de host e consumido por dois produtos
O que permite
As funcionalidades chegam à web, ao mobile e ao backend numa só alteração, e a plataforma troca dados de clubes com o GymTeam em tempo real.