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 (`
Boas-vindas
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() {