← Voltar para projetos
Freelance2024 – 2026Remoto, Brasil
Viaza / GoMilhas
Viaza / GoMilhas

Lançar a próxima marca sem refazer nada: Viaza e GoMilhas em um código só

Plataforma whitelabel completa para venda de passagens com milhas — busca, checkout PIX e pós-venda. Viaza e GoMilhas rodam no mesmo repositório, com tema, conteúdo e regras de marca trocando em tempo real. A próxima marca entra adicionando um arquivo de configuração — sem time novo, sem retrabalho.

Next.js 15React 19TypeScriptMUI 7EmotionReact QueryZustandReact Hook FormZodNextAuthKeycloakVitestPlaywright
Viaza / GoMilhas·2024 – 2026
Lançar a próxima marca sem refazer nada: Viaza e GoMilhas em um código só
2
Marcas em produção
1
Codebase compartilhado
Em andamento
Duração
Contexto

O cenário do cliente

A operação roda duas marcas comerciais — Viaza e GoMilhas — atendendo públicos distintos com a mesma stack de busca, motor de tarifas e integração de gateway. O desafio era manter um único código capaz de comutar branding, rotas, conteúdo de CMS e tema em runtime conforme o domínio acessado.

Desafio

O problema a resolver

Construir uma arquitetura whitelabel real: tema, logos, OG images, splash screens, rotas habilitadas e até copy de CMS variando por marca, sem hardcode espalhado pelo código. Tudo isso em cima de um stack moderno (Next 15 + React 19 + MUI 7) e mantendo PWA, SEO e conformidade com fluxos sensíveis de pagamento e autenticação.

No fluxo de auth coexistem três abordagens (keycloak-js no client, NextAuth e BFF custom com cookie httpOnly) — exigindo cuidado redobrado para não quebrar nenhum caminho de usuário em cada deploy.

Solução

Como atacamos

Implementamos resolução de marca em duas camadas: server-side via NEXT_PUBLIC_BRAND alimentando getServerBranding(), e client-side via atributo data-brand no <html> + ThemeProvider Emotion. Tudo o que muda entre marcas (logos, cores, assets, rotas desabilitadas) vive em src/styles/branding.ts como fonte única da verdade.

Estruturamos o frontend com App Router, React Query para data fetching, Zustand para estado de sessão/checkout e React Hook Form + Zod para os formulários críticos. A camada api/ separa contratos (interfaces) de implementação concreta (axios + Keycloak), inspirada em Clean Architecture, facilitando testes e troca futura de backend.

Pagamento via PIX integrado com Tuna (com criptografia de campos sensíveis), checkout reativo a status em tempo real via polling, fluxo completo testado em Vitest (unit) e Playwright (E2E). PWA com next-pwa para reengajamento e atribuição customizada para tracking de conversão.

Resultado

O impacto entregue

Plataforma em produção sob duas marcas, com pipelines independentes de deploy, integração com CMS proprietário (cms.viaza.com.br) e checkout PIX/cartão funcional. Time consegue lançar uma nova marca whitelabel adicionando apenas um objeto de branding e os assets correspondentes — sem tocar em rota, componente ou serviço.

Entregas

O que foi construído

  • Arquitetura whitelabel multi-marca (Viaza + GoMilhas) num único repositório
  • Tema MUI 7 dinâmico por marca via Emotion + data-brand no <html>
  • Middleware reescrevendo rotas desabilitadas por marca + UTMs em cookie
  • Auth Keycloak com 3 fluxos coexistindo (keycloak-js, NextAuth, BFF httpOnly)
  • Checkout PIX (Tuna) com criptografia de campos e polling de status em tempo real
  • Camada api/ inspirada em Clean Architecture com DI e interfaces tipadas
  • PWA com next-pwa, Service Worker e atribuição custom
  • Testes em Vitest (unit) e Playwright (E2E)

Tem um projeto parecido em mente?

Conte para gente o que você está construindo. Respondemos em até 24h úteis.