diff --git a/README.md b/README.md index dd6e3e4..b0639d5 100644 --- a/README.md +++ b/README.md @@ -1,47 +1,120 @@ # Website APP - Associação Portuguesa de Powerlifting -## Overview +## Visão Geral -- Next.js (App Router) + TypeScript + Tailwind -- Strict accessibility (WCAG 2.1 AA) -- Bilingual support: Portuguese (default) and English -- Markdown content with sticky Table of Contents -- OpenPowerlifting integration (meets scraping + results CSV parsing) -- Cloudflare Turnstile on Contatos page +Site oficial da Associação Portuguesa de Powerlifting, construído com tecnologias modernas e com foco em acessibilidade e desempenho. -## Getting Started +**Stack Tecnológico:** +- Next.js 16 (App Router) com TypeScript +- Tailwind CSS 4 para estilos +- React 19.2 +- Markdown com remark e rehype para processamento de conteúdo +- Integração com OpenPowerlifting para dados de provas -1. Install dependencies: +**Características Principais:** +- Acessibilidade rigorosa (WCAG 2.1 AA) com suporte completo a leitores de ecrã +- Suporte bilingue: Português (predefinido) e Inglês +- Conteúdo em Markdown com Tabela de Conteúdos fixa na navegação lateral +- Integração com OpenPowerlifting (scraping de provas + análise CSV de resultados) +- Proteção contra bots com Cloudflare Turnstile na página Contactos + +## Começar + +### Pré-requisitos +- Node.js 18+ instalado +- npm ou yarn + +### Instalação + +1. Instalar dependências: ```bash npm install ``` -2. Set environment variables in `.env.local`: +2. Configurar variáveis de ambiente em `.env.local`: ```bash NEXT_PUBLIC_TURNSTILE_SITE_KEY=your_site_key_here ``` -3. Run the dev server: +Contacte a equipa para obter a chave do Turnstile. + +3. Executar o servidor de desenvolvimento: ```bash npm run dev ``` -Open http://localhost:3000 — you will be redirected to /pt. +Abra http://localhost:3000 — será redirecionado automaticamente para /pt. -## Key Paths +## Scripts Disponíveis -- Portuguese: [src/app/pt](src/app/pt) -- English: [src/app/en](src/app/en) -- Content: [content](content) -- Markdown API: [src/app/api/content/route.ts](src/app/api/content/route.ts) -- Meets API: [src/app/api/openpowerlifting/meets/route.ts](src/app/api/openpowerlifting/meets/route.ts) -- Results API: [src/app/api/openpowerlifting/results/route.ts](src/app/api/openpowerlifting/results/route.ts) +```bash +npm run dev # Servidor de desenvolvimento com hot reload +npm run build # Construir para produção +npm start # Iniciar servidor de produção +npm run lint # Validar código com ESLint +``` -## Accessibility Notes +## Estrutura do Projeto -- Skip link and clear focus indicators present -- Semantic headings and ARIA labels on navigation -- Tables include headers and caption +``` +app/ +├── src/ +│ ├── app/ +│ │ ├── pt/ # Rotas em Português +│ │ ├── en/ # Rotas em Inglês +│ │ └── api/ # Endpoints da API +│ └── components/ # Componentes React reutilizáveis +├── content/ +│ ├── pt/ # Conteúdo em Português (Markdown) +│ └── en/ # Conteúdo em Inglês (Markdown) +└── public/ # Assets estáticos +``` + +## Caminhos Principais + +### Rotas +- **Português:** [src/app/pt](src/app/pt) +- **Inglês:** [src/app/en](src/app/en) + +### API +- **API de Conteúdo (Markdown):** [src/app/api/content/route.ts](src/app/api/content/route.ts) — obtém e processa ficheiros Markdown +- **API de Provas:** [src/app/api/openpowerlifting/meets/route.ts](src/app/api/openpowerlifting/meets/route.ts) — lista próximas provas +- **API de Resultados:** [src/app/api/openpowerlifting/results/route.ts](src/app/api/openpowerlifting/results/route.ts) — resultados de provas passadas + +### Conteúdo +- **Conteúdo em Markdown:** [content](content) — todas as páginas dinâmicas + +## Notas de Acessibilidade + +O projeto segue as normas WCAG 2.1 Nível AA: + +- **Navegação:** Skip link no topo da página e indicadores de foco claros em todos os elementos interativos +- **Estrutura:** Títulos semânticos (`

`, `

`, etc.) e etiquetas ARIA apropriadas na navegação +- **Tabelas:** Incluem cabeçalhos estruturados, legendas e suporte a leitores de ecrã +- **Imagens:** Todos os `` têm atributo `alt` descritivo +- **Cores:** Contraste suficiente entre texto e fundo (ratio mínimo 4.5:1) + +## Dependências Principais + +| Pacote | Versão | Uso | +|--------|--------|-----| +| `next` | 16.1.1 | Framework React com SSR e otimizações | +| `react` | 19.2.3 | Biblioteca UI | +| `react-markdown` | 10.1.0 | Renderizar Markdown em React | +| `cheerio` | 1.1.2 | Web scraping para OpenPowerlifting | +| `papaparse` | 5.5.3 | Parsing de CSV | +| `tailwindcss` | 4 | Framework CSS utilitário | + +## Deployment + +O site está pronto para ser deployado em plataformas como Vercel: + +```bash +npm run build # Construir bundle de produção +npm start # Testar localmente antes de fazer deploy +``` + +Assegurar que as variáveis de ambiente estão configuradas no provider de hosting. diff --git a/src/app/pt/page.tsx b/src/app/pt/page.tsx index 77943a2..e4f9b97 100644 --- a/src/app/pt/page.tsx +++ b/src/app/pt/page.tsx @@ -26,7 +26,7 @@ export default function PtHome() {

Boas-vindas

Aqui é casa para atletas, treinadores e clubes

- Falar connosco + Falar connosco

Boas-vindas ao site da Associação Portuguesa de Powerlifting! Estás na casa para todos os recursos relacionados com powerlifting na IPF, em português.

@@ -69,8 +69,8 @@ export default function PtHome() {
- Resultados - Fotos + Resultados + Fotos
diff --git a/src/components/layout/Navigation.tsx b/src/components/layout/Navigation.tsx index ea63df3..3d363d2 100644 --- a/src/components/layout/Navigation.tsx +++ b/src/components/layout/Navigation.tsx @@ -119,13 +119,12 @@ export function Navigation() { ))}
  • - PT + PT (Português)