Frontend web do Buffs, construído com Next.js (App Router) e TypeScript, com autenticação, i18n e módulos por perfil (proprietário, gerente, funcionário e veterinário).
O Buffs Frontend é uma aplicação web modular que consome APIs internas para gerenciar propriedades, rebanho, grupos, equipe e ingestão de dados. O sistema separa as telas por perfil e protege as rotas com base na sessão do usuário.
- Next.js 16 (App Router)
- React 19
- TypeScript
- Tailwind CSS 4
- React Query para cache e sincronização de dados
- Zustand para estado global (auth e contexto de propriedade)
- Axios com interceptors e refresh token
- next-intl para i18n
- React Hook Form + Zod para formulários
- Recharts para gráficos
- Leaflet/React-Leaflet para mapas
- Node.js 18+ (recomendado)
- NPM
npm installConfigure o endpoint da API em .env:
NEXT_PUBLIC_API_URL=http://localhost:3001npm run devAplicação disponível em http://localhost:3000.
npm run build
npm run startnpm run lintAs rotas vivem em src/app. O projeto é multi-idioma e as páginas ficam dentro de src/app/[locale], com subrotas organizadas por perfil:
- src/app/[locale]/(buffs)/proprietario
- src/app/[locale]/(buffs)/gerente
- src/app/[locale]/(buffs)/funcionario
- src/app/[locale]/(buffs)/veterinario
Rotas públicas/estado:
- src/app/[locale]/auth/login
- src/app/not-authenticated.tsx
- src/app/not-authorized.tsx
- src/app/not-found.tsx
- O middleware de idioma está em src/proxy.ts.
- Configuração de rotas i18n em src/i18n/routing.ts.
- Carregamento de mensagens em src/i18n/request.ts.
- Mensagens em src/messages/pt.json e src/messages/en.json.
- Instância Axios em src/lib/apiClient.ts com:
- Injeção automática do token Bearer.
- Refresh token automático em caso de 401.
- Serviços por domínio em src/services (ex.: propriedades, lotes, usuários, dashboard).
Hooks encapsulam o consumo de serviços e o cache do React Query:
- src/hooks
- Padrão:
useXchamax.service.tse expõedata,isLoading,mutate.
- Autenticação em src/stores/auth.store.ts
- Contexto de propriedade em src/stores/propriedade.store.ts
- src/providers/AuthProvider.tsx
- Protege rotas por cargo
- Hidrata o perfil no refresh da página
- Controla telas de não autenticado e não autorizado
- src/providers/QueryProvider.tsx
- Configura o QueryClient e cache
- Layout geral em src/components/layout
- Componentes de UI reutilizáveis em src/components/ui
- Módulos específicos do proprietário em src/components/proprietario
- Imagens em public/images
- Documentos de apoio em docs
- As páginas do App Router chamam hooks em src/hooks.
- Os hooks usam serviços em src/services.
- Os serviços consomem a API via src/lib/apiClient.ts.
- O AuthProvider valida sessão e restringe acesso por cargo.
- O React Query mantém cache e sincronização dos dados.
- A sessão é salva em
localStoragecom a chave@Buffs:session. - O token é injetado no header Authorization por src/lib/apiClient.ts.
- Em caso de 401, o refresh token é usado para renovar a sessão.
- O AuthProvider redireciona conforme o cargo do usuário.
- Prefixo de idioma obrigatório nas rotas:
/pte/en. next-intlé responsável por navegar e carregar mensagens.
- Componentes com
use clientquando necessário. - Hooks isolam efeitos e chamadas HTTP.
- Serviços por domínio, facilitando manutenção e testes.
- UI com Tailwind e componentes reutilizáveis.
Para dúvidas ou ajustes, consulte os arquivos de referência em docs e os serviços em src/services.