Documentation Index
Fetch the complete documentation index at: https://docs.fitlocus.com/llms.txt
Use this file to discover all available pages before exploring further.
Landing Page do FitLocus
A landing page do FitLocus é desenvolvida com Next.js e serve como o portal de entrada para novos usuários, apresentando a plataforma, seus recursos e planos de assinatura. Além da página institucional, também inclui o fluxo de cadastro e assinatura para novos usuários.
Tecnologias Utilizadas
- Framework: Next.js 13+ (App Router)
- Linguagem: TypeScript
- Estilização: Tailwind CSS
- Componentes: Radix UI + Shadcn/UI
- Formulários: React Hook Form
- Validação: Zod
- Gerenciamento de Estado: React Context API
- Requisições HTTP: Axios
- Animações: Framer Motion
- Internacionalização: next-intl
Estrutura do Projeto
app/
├── (auth)/ # Rotas de autenticação
│ ├── login/ # Página de login
│ └── registro/ # Página de registro
├── dashboard/ # Área logada para usuários
│ ├── alunos/ # Gerenciamento de alunos
│ ├── configuracoes/ # Configurações de conta
│ ├── perfil/ # Perfil do usuário
│ ├── relatorios/ # Relatórios e análises
│ └── treinos/ # Gerenciamento de treinos
├── planos/ # Página de planos e assinaturas
├── api/ # Rotas de API do Next.js
│ ├── auth/ # Endpoints de autenticação
│ └── webhook/ # Webhooks para pagamentos
├── layout.tsx # Layout global da aplicação
└── page.tsx # Página inicial (home)
components/
├── client-journey/ # Componentes para jornada de alunos
│ ├── client-journey-modal.tsx # Modal principal da jornada
│ ├── payment-step.tsx # Etapa de pagamento
│ ├── plan-selection-step.tsx # Seleção de plano
│ ├── registration-step.tsx # Etapa de cadastro
│ └── welcome-step.tsx # Etapa final de boas-vindas
├── professional-journey/ # Componentes para jornada de profissionais
│ ├── professional-journey-modal.tsx # Modal principal da jornada
│ ├── payment-step.tsx # Etapa de pagamento
│ ├── plan-selection-step.tsx # Seleção de plano
│ ├── registration-step.tsx # Etapa de cadastro
│ └── welcome-step.tsx # Etapa final de boas-vindas
├── ui/ # Componentes de UI reutilizáveis
│ ├── button.tsx # Componente de botão
│ ├── card.tsx # Componente de card
│ ├── dialog.tsx # Componente de modal
│ ├── input.tsx # Componente de input
│ └── ... # Outros componentes de UI
├── layout/ # Componentes de layout
│ ├── footer.tsx # Rodapé do site
│ ├── header.tsx # Cabeçalho do site
│ └── sidebar.tsx # Barra lateral do dashboard
└── sections/ # Seções da página inicial
├── hero.tsx # Seção principal (hero)
├── features.tsx # Seção de recursos
├── pricing.tsx # Seção de preços
└── testimonials.tsx # Seção de depoimentos
hooks/
├── use-auth.tsx # Hook de autenticação
├── use-students.tsx # Hook para gerenciamento de alunos
└── use-trainings.tsx # Hook para gerenciamento de treinos
services/
├── api.ts # Configuração do cliente Axios
├── auth/ # Serviços de autenticação
│ ├── auth-service.ts # Implementação dos serviços de auth
│ └── firebase-auth.ts # Integração com Firebase Auth
└── ... # Outros serviços
types/
├── auth.ts # Tipos relacionados à autenticação
├── training.ts # Tipos relacionados a treinos
└── ... # Outros tipos
lib/
├── auth-utils.ts # Utilitários de autenticação
├── date-utils.ts # Utilitários para datas
└── ... # Outros utilitários
Fluxos Principais
Página Inicial
A página inicial apresenta a plataforma para visitantes não autenticados:
- Hero Section: Apresentação principal com call-to-action
- Features: Recursos e benefícios da plataforma
- Pricing: Planos disponíveis para alunos e profissionais
- Testimonials: Depoimentos de usuários
- FAQ: Perguntas frequentes
- CTA: Call-to-action final para registro
Jornada do Profissional
Fluxo de cadastro e assinatura para personal trainers:
- Seleção de Plano: Escolha entre os planos disponíveis (Iniciante, Basic, etc.)
- Cadastro: Formulário de registro com dados pessoais e profissionais
- Pagamento: Integração com AbacatePay para processamento do pagamento
- Boas-vindas: Confirmação e próximos passos
Jornada do Aluno
Fluxo de cadastro e assinatura para alunos:
- Seleção de Plano: Escolha entre os planos disponíveis (Freemium, Premium, etc.)
- Cadastro: Formulário de registro com dados pessoais
- Pagamento: Integração com AbacatePay para processamento do pagamento (se plano pago)
- Boas-vindas: Confirmação e próximos passos
Dashboard
Área logada para usuários autenticados:
- Alunos: Gerenciamento de alunos (apenas para profissionais)
- Treinos: Criação e gerenciamento de treinos
- Relatórios: Análises e métricas de desempenho
- Perfil: Gerenciamento de dados pessoais
- Configurações: Preferências e configurações da conta
Componentes de UI
A landing page utiliza uma biblioteca de componentes baseada em Radix UI e Shadcn/UI:
// Exemplo de componente de botão
export const Button = React.forwardRef<
HTMLButtonElement,
ButtonProps
>(({ className, variant, size, ...props }, ref) => {
return (
<button
className={cn(
"inline-flex items-center justify-center rounded-md font-medium transition-colors",
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
buttonVariants[variant],
buttonSizes[size],
className
)}
ref={ref}
{...props}
/>
);
});
A comunicação com o backend é realizada através de serviços que utilizam Axios:
// Configuração do cliente Axios
const api = axios.create({
baseURL: process.env.NEXT_PUBLIC_API_URL || 'http://localhost:8080',
headers: {
'Content-Type': 'application/json',
},
});
// Interceptor para adicionar token de autenticação
api.interceptors.request.use((config) => {
const token = getToken();
if (token) {
config.headers.Authorization = `Bearer ${token}`;
}
return config;
});
Autenticação
A landing page implementa um sistema de autenticação completo:
// Hook de autenticação
export const useAuth = () => {
const context = useContext(AuthContext);
if (!context) {
throw new Error('useAuth must be used within an AuthProvider');
}
return context;
};
// Provedor de autenticação
export const AuthProvider = ({ children }: { children: React.ReactNode }) => {
const [user, setUser] = useState<User | null>(null);
const [loading, setLoading] = useState(true);
// Métodos de autenticação...
return (
<AuthContext.Provider value={{ user, loading, login, logout, register }}>
{children}
</AuthContext.Provider>
);
};
Proteção de Rotas
A landing page utiliza middleware do Next.js para proteger rotas que requerem autenticação:
// middleware.ts
export function middleware(request: NextRequest) {
const token = request.cookies.get(TOKEN_NAME)?.value;
const isAuthRoute = request.nextUrl.pathname.startsWith('/login') ||
request.nextUrl.pathname.startsWith('/registro');
const isDashboardRoute = request.nextUrl.pathname.startsWith('/dashboard');
if (!token && isDashboardRoute) {
return NextResponse.redirect(new URL('/login', request.url));
}
if (token && isAuthRoute) {
return NextResponse.redirect(new URL('/dashboard', request.url));
}
return NextResponse.next();
}
export const config = {
matcher: ['/dashboard/:path*', '/login', '/registro'],
};
Design System
A landing page segue o design system do FitLocus com as seguintes características:
- Cores: Paleta baseada em #202020 (fundo), #B4ED00 (acento) e #F9F9F9 (texto)
- Tipografia: Hanken Grotesk como fonte principal e SUPERINE para títulos
- Espaçamento: Sistema de grid baseado em Tailwind CSS
- Componentes: Biblioteca de componentes consistente e acessível
Para mais detalhes sobre o design system, consulte a documentação de design.
Responsividade
A landing page é totalmente responsiva, adaptando-se a diferentes tamanhos de tela:
- Mobile: Layout otimizado para dispositivos móveis (< 640px)
- Tablet: Layout adaptado para tablets (640px - 1024px)
- Desktop: Layout completo para desktops (> 1024px)
SEO
A landing page implementa práticas de SEO para melhorar a visibilidade nos motores de busca:
- Metadata: Títulos, descrições e tags Open Graph
- Sitemap: Geração automática de sitemap.xml
- Structured Data: Dados estruturados para rich snippets
- Performance: Otimização de performance para melhor ranking
Ambiente de Desenvolvimento
Para configurar o ambiente de desenvolvimento:
# Clone o repositório
git clone https://github.com/logoscti/fitlocus-landing.git
# Entre no diretório
cd fitlocus-landing
# Instale as dependências
npm install
# Execute o servidor de desenvolvimento
npm run dev
Implantação
A landing page é implantada na Vercel com integração contínua:
- Desenvolvimento: Ambiente de desenvolvimento para testes
- Staging: Ambiente de homologação para validação
- Produção: Ambiente de produção para usuários finais