O objetivo deste desafio é criar uma lista de tarefas com armazenamento persistente de dados. A lista de tarefas deve ser estilizada com Tailwind CSS e, também, suportar a adição/conclusão de tarefas.
Não existem regras ou limitações na UI/UX da aplicação, ela deve ser pensada para o usuário e conter uma separação visual clara dos componentes. O resultado final deve garantir uma interface: intuitiva, simples e funcional.
- [Obrigatório] O usuário deve ser capaz de adicionar tarefas a uma lista;
- As tarefas adicionadas devem ser ordernadas com a mais recente ao topo;
- [Obrigatório] O usuário deve ser capaz de marcar tarefas adicionadas como concluídas;
- As tarefas concluídas devem ser ordernadas com a mais antiga ao topo.
- [Obrigatório] O usuário deve visualizar em um cabeçalho a quantidade de tarefas adicionadas, concluídas (em porcentagem) e pendentes (em porcentagem);
- Para as tarefas pendentes, se a porcentagem for
>= 50%
deve ser exibida em vermelho, caso contrário, em verde; - Para as tarefas concluídas, se a porcentagem for
>= 50%
deve ser exibida em verde, caso contrário, em vermelho.
- Para as tarefas pendentes, se a porcentagem for
- O usuário deve conseguir rever suas tarefas novamente, mesmo que feche o navegador ou atualize a página;
- O usuário deve conseguir migrar do modo claro para o modo escuro e vice-versa.
- [Obrigatório] Utilizar
useEffect
,useState
,useCallback
euseMemo
no projeto; - [Obrigatório] Seguir o padrão de projeto com ESLint, Prettier e organizar os recursos do projeto em pastas dentro de
/src/core
; - [Obrigatório] Utilizar Redux ou Contexto para gerenciar o estado da aplicação - com TypeScript;
- [Obrigatório] As definições de tipos - com TypeScript - devem ser aplicadas em todos os componentes, funções e hooks;
- Apresentar uma boa interface de usuário.
- É permitido consulta somente às documentações oficiais do React, Redux, NextJS, TypeScript e Tailwind CSS;
- Não é permitido o uso de ferramentas de inteligência artificial (como Chat GPT ou Github Copilot) e nem consultas no Google, fóruns ou similares;
- Os arquivos de configuração não devem ser alterados, se necessário utilize o arquivo
.vscode/settings.json
para alinhar as configurações do seu VSCode com as configurações do projeto (ESLint, Prettier, etc); - Não é permitido adicionar nenhuma dependência ao projeto, somente as que já estão instaladas.