Este repositório contém a aplicação frontend construída com React e Vite para a plataforma de trocas de conhecimentos/ofertas (aulas, mentorias, etc.). A interface permite cadastro/login, criação e listagem de ofertas, agendamento de aulas e um painel de administração.
- Frontend: React + Vite
- Roteamento:
react-router-dom - Requisições HTTP:
axios(com interceptor para envio de token) - Estilização: Bootstrap 5 + CSS nos componentes
- Autenticação: integração com backend Node.js (bcrypt para senhas)
- Página inicial / Landing Page
- Cadastro e Login de usuários
- Dashboard (rota
/dashboardrenderiza a central de conhecimentos) - CRUD de ofertas (
/ofertas) — criar, editar, remover - Detalhes da oferta e agendamento de aulas (
/agendamentos) - Painel administrativo (
/admin)
O frontend espera um backend rodando em http://localhost:3000 (via proxy do Vite). Os endpoints usados incluem:
POST /users— criar usuárioPOST /users/login— autenticar (esperado retornar dados do usuário e opcionalmente umtoken)GET /users— listar usuáriosGET /ofertas— listar ofertas (a API pode retornar{count, ofertas}; o frontend trata ambos os formatos)POST /ofertas— criar ofertaPUT /ofertas/:id— editar ofertaDELETE /ofertas/:id— excluir ofertaPOST /agendamentos— agendar aula
Observação: o backend valida campos como
titulo,categoria,nivel,pessoaId. O frontend atualmente enviacategoria: 'Geral'como workaround temporário até o backend aceitar ofertas sem categoria.
- Instale dependências:
npm install- Inicie o dev server do Vite:
npm run dev- Acesse a aplicação em
http://localhost:5173(ou a porta indicada pelo Vite).
O vite.config.js inclui proxy para encaminhar chamadas à API para http://localhost:3000 (ajuste conforme seu backend).
- O frontend salva o usuário em
localStoragee, se o backend fornecer umtoken, o armazena emlocalStorage.token. - Um interceptor em
src/services/api.jsadiciona automaticamente o headerAuthorization: Bearer <token>em todas as requisições. - No logout o token e os dados do usuário são removidos.
Se o backend usar sessão/cookies ao invés de JWT, será necessário configurar axios com withCredentials e ajustar o backend para aceitar requisições cross-origin com cookies.
- Limpar Tudo: na aba "Meus Conhecimentos" há um botão
Limpar Tudoque exclui todas as ofertas do usuário (útil para reset de dados de teste). - Logs de depuração com emoji: componentes principais (Dashboard, Knowledge, Login) possuem logs com emojis (
🔄,✅,❌,🔐) para facilitar o debug.
src/components/— componentes (Navbar, Footer, rotas privadas)pages/— páginas (Knowledge, Offers, CreateOffer, EditOffer, Login, Register, etc.)services/api.js— instância axios + interceptorscontexts/AuthContext.jsx— provê autenticação
- Criar conta / Logar
- Criar uma oferta (ex.: "Aulas de Tênis")
- Verificar em
/dashboardou em "Meus Conhecimentos" se a oferta aparece - Testar exclusão individual ou usar "Limpar Tudo" para remover todas as ofertas do usuário
Contribuições são bem-vindas. Abra issues para bugs ou feature requests ou envie PRs.
Projeto aberto para uso e aprendizado. Adicione uma licença se desejar padronizar o uso.
Arquivo principal de referência: src/pages/Knowledge.jsx
Forneço exemplos de Dockerfile e um docker-compose.yml para facilitar testes locais e deploys baseados em containers.
docker/Dockerfile.frontend— multi-stage: build com Node e serve com Nginx (recomendado)docker/Dockerfile.backend— Dockerfile simples para o backend Node.js (copie para o repositório do backend)docker/nginx.conf— configuração nginx para SPA (roteamento para index.html)docker-compose.yml— exemplo que assume o backend em../api-node-prisma-avanti-bootcampe o frontend neste repositório
Uso rápido (local):
- Copie
docker/Dockerfile.backendpara o root do repositório do backend (por exemplo../api-node-prisma-avanti-bootcamp/Dockerfile). - No repositório do frontend (este), rode:
docker-compose up --build- Acesse o frontend em
http://localhost:5173e a API emhttp://localhost:3000.
Observação: ajuste caminhos e variáveis de ambiente conforme sua infraestrutura.
Incluí um template de workflow para buildar e publicar a imagem Docker do backend no GitHub Container Registry (GHCR).
- Arquivo de exemplo (coloque no repositório do backend):
.github/workflows/publish-backend-image.yml
Instruções rápidas:
- Copie
publish-backend-image.ymlpara o backend repo em.github/workflows/. - Garanta que o
Dockerfiledo backend esteja no root do repo e quenpm startseja o comando de start. - Faça um push para o branch
maindo backend — o workflow buildará a imagem e fará push paraghcr.io/<OWNER>/<REPO>.
Notas importantes:
- O workflow usa o
GITHUB_TOKENpor padrão para autenticação com GHCR; em organizações com permissões restritas você pode precisar de um PAT emsecrets.GHCR_PAT. - Verifique em
Settings → Actions → GeneraleSettings → Packagesas permissões para permitir publish de packages com o token automático.
Aqui está um fluxo recomendado para publicar a aplicação inteira usando o GitHub como repositório e o Render para o backend:
- Frontend — GitHub Pages (via GitHub Actions)
- Já adicionei um workflow em
.github/workflows/deploy-frontend.ymlque:- roda em pushes para
main - executa
npm cienpm run build - publica a pasta
distno GitHub Pages automaticamente
- roda em pushes para
- Para ativar o Pages no repositório, após o primeiro deploy vá em
Settings → Pagese selecione o branchgh-pages(ou verifique o log do Actions se usardeploy-pagesque configura automaticamente).
- Backend — Render (integração GitHub automática)
- Crie uma conta em https://render.com e conecte seu repositório do backend (separado) ou crie um novo service apontando para o repositório do backend.
- Configure o build command (
npm install && npm run buildounpm ci) e o start command (npm startounode dist/index.js/node index.js) conforme seu projeto. - Adicione as variáveis de ambiente necessárias (DATABASE_URL, JWT_SECRET, etc.) no painel do Render.
- O Render fará deploy automático a cada push no branch configurado.
- Alternativa: Railway, Heroku, Azure
- Railway e Render têm integrações GitHub muito simples. Azure Web Apps pode ser usado via GitHub Actions se preferir infraestrutura Azure.