Você deverá desenvolver o frontend de um Sistema de Gerenciamento de Voluntários que consumirá uma API REST já existente. Este desafio avaliará seus conhecimentos em React, Vite, TypeScript, gerenciamento de estado, UI, organização do código e boas práticas.
O layout da aplicação deve seguir como referência o modelo disponível no Figma: https://www.figma.com/design/JO0vsAS75zlc0Vrx0tA5WZ/Desafio-Desenvolvedor-junior?node-id=0-1&t=OiZVkJwKOB4I7uSH-1
O projeto deve obrigatoriamente ser desenvolvido usando React com TypeScript, podendo ser criado de duas formas:
(configuração mais simples e rápida — recomendada)
(permitido para quem preferir estrutura com rotas nativas e SSR/ISR)
Criar um painel administrativo simples para:
- Cadastrar voluntários
- Listar voluntários
- Filtrar voluntários
- Atualizar dados
- Inativar voluntários (soft delete)
- nome (obrigatório)
- email (obrigatório)
- telefone (obrigatório)
- cargo_pretendido (obrigatório)
- disponibilidade (opções fixas)
- status (ativo/inativo)
- data de inscrição (somente leitura)
- React
- Vite
- TypeScript
- TanStack Query (para consumo da API)
- Axios (ou Fetch)
- TailwindCSS
- Componente UI
- Criar voluntário
- Listar voluntários
- Editar voluntário
- Inativar voluntário (soft delete)
- status
- cargo
- disponibilidade
- busca por nome ou email
- Validação no frontend
- Exibir erro de email duplicado (409) vindo da API
- Loading
- Empty state
- Error state
- Feedbacks (toast)
Estrutura clara e componentizada.
- Tabela com nome, email, telefone, cargo, disponibilidade, status e data
- Botão para criar voluntário
- Botão para editar
- Botão para inativar
- Filtros avançados (status, cargo, disponibilidade)
- Formulário completo
- Validação de campos obrigatórios
- Envio POST para a API
- Formulário populado
- PUT para atualizar
- Permitir alterar status
Aqui está a seção revisada exatamente como pediu, deixando claro que o candidato deve consumir a própria API que ele mesmo desenvolveu no desafio backend, eliminando a opção de mock e reforçando que o frontend depende diretamente da API criada por ele.
O frontend deve obrigatoriamente consumir a API FastAPI criada pelo próprio candidato no desafio backend. Não será permitido uso de mocks, JSON Server ou qualquer API externa.
- A API deve estar rodando localmente (ex:
http://localhost:8000) - O frontend deve consumir exatamente os endpoints definidos no desafio backend
- Configurar um arquivo
.envcontendo a URL base da API:
VITE_API_URL=http://localhost:8000
-
Recomenda-se o uso de React Query (TanStack Query) para:
- requisições
- cache
- estados de loading / error
- invalidação após mutações
A seguinte estrutura é sugerida:
src/
├── api/
│ ├── volunteers.ts
│ └── apiClient.ts
├── components/
├── hooks/
│ └── useVolunteers.ts
├── pages/
│ ├── VolunteersList/
│ ├── VolunteerCreate/
│ ├── VolunteerEdit/
├── App.tsx
└── main.tsx
Utilize a seguinte estrutura como referência:
GET /voluntarios
GET /voluntarios/{id}
POST /voluntarios
PUT /voluntarios/{id}
DELETE /voluntarios/{id}
- Uso correto do Vite
- Tela de listagem
- Criar voluntário
- Editar voluntário
- Soft delete funcionando
- Filtros funcionando
- React Query implementado corretamente
- Validação de formulários
- Tratamento elegante de erros da API
- UI consistente (shadcn/ui, Chakra, Radix, etc)
- Loading skeleton
- Paginação
- Deploy (Vercel/Netlify)
- Testes (Vitest + Testing Library)
- Código limpo, organizado e legível
- Componentização correta
- Pastas e arquivos bem estruturados
- Commits descritivos
- README claro
Sugestão de testes:
test("deve criar voluntário com dados válidos", () => {});
test("não deve permitir email duplicado", () => {});- Publique no GitHub/GitLab
- Commits frequentes
- Branch main limpa
Inclua no README:
-
Como rodar o projeto:
pnpm install pnpm dev -
Como configurar
.env -
Lista de páginas
-
Estrutura de pastas
-
Decisões técnicas
-
Se usou mock, como rodar
Envie para: claudiosilva.one@gmail.com
Inclua:
- Link do repositório
- Observações importantes
- Se usou mock ou integrou com a API real
Preencha também o Forms de Entrega: 🔗 https://forms.gle/Rpj82v33CoB8tRea8
- CRUD funcionando
- Filtros
- UX limpa
- React Query bem implementado
- Domínio de React
- Organização
- Capacidade de seguir especificações
- Boas práticas de código
- Uso correto da stack proposta
- Autenticação
- Context API se React Query já resolver
- Design complexo