# Front-end ## Nivel 1 - [ ] **HTML - Fundamentos**: - Aprender quais tags são necessárias para um HTML básico - Criar um parágrafo de texto - Exibir uma imagem - Conhecer a diferença entre 'h1', 'h2', 'h3', etc - Criar um texto com hyperlink - Criar um formulário com campos relevantes - Criar uma lista de itens ordenada ou não ordenada - Criar uma lista de itens dentro de uma lista suspensa (dropdown list) - Conectar com um arquivo de CSS - Criar uma tabela - Adicionar IDs e classes - [ ] **CSS - Fundamentos**: - Aprender a estrutura visual de uma página, com 'margin' e 'padding' - Estabelecer o tamanho com 'width' e 'height' - Aprender sobre a posição de um elemento ('static', 'relative' ou 'absolute) - Aprender sobre o 'display' de exibição de um elemento ('block', 'inline', 'inline-block') - Aprender a posicionar imagens em relação ao texto - Aprender sobre alinhamento - Aprender sobre estilo de fontes - Aprender as diferenças e vantagens de usar as diferentes unidades de medida em CSS (%, relativas, etc) - Conectar com os elementos (IDs, classes) de um arquivo HTML - Alterar características de um elemento quando o mouse passar por cima dele ('hover') - Aprender box-sizinh - Aprender Flexbox - Aprender Grid - [ ] **JavaScript - Fundamentos**: - Conhecer os tipos primitivos - Declarar variáveis, considerando a diferença entre 'var', 'let' e 'const' - Usar estruturas condicionais ('if', 'else') - Conhecer os operadores de comparação ('=', '==', '===') - Usar estruturas de repetição e laços ('while', 'for') - Usar funções, passando parâmetros e argumentos - Manipular arrays e listas - Aprender o conceito de Orientação a Objetos - Fazer um CRUD - Obter dados de uma API - Fazer chamadas assíncronas usando 'Async/Await', 'Promise', etc - [ ] **DOM - Fundamentos**: - Entender como funciona a árvore do DOM - Acessar e manipular elementos do HTML e CSS - Acessar os pais e filhos de um elemento - Inserir um novo elemento na árvore - Remover um elemento da árvore - Esperar por um evento em certo elemento da página usando 'addEventListener()' - [ ] **Acessibilidade em Javascript**: - Escrever código com acessibilidade em mente - [ ] **Estratégias de SEO**: - Escolher palavras-chave - Entender como o Google classifica páginas - Conhecer os fatores de rankeamento - Fazer Link Building - [ ] **Design Responsivo**: - Ajustar suas páginas para o tamanho da tela do usuário - Media queries - Conhecer o conceito de Mobile first ## Nivel 2 - [ ] **JavaScript - Callbacks e Promises**: - Entender o conceito de assincronicidade em programação - Escrever código assíncrono entendendo o conceito de promessas em JavaScript - Utilizar os métodos, palavras-chaves e objetos do JavaScript para manipulação de promessas como 'Async/Await', '.then()', 'Promise', etc - Aprender em quais situações é necessário o uso de programação assíncrona - Fazer chamadas em APIs com `fetch()` - [ ] **JavaScript - Testes**: - Usar testes unitários - Usar testes de integração - Usar testes de comportamento (behavior) - Usar mocks - [ ] **JavaScript - Manipulação de Erros**: - Conhecer e tratar as exceções mais comuns - Saber quais os tipos de erros do Node.js e em quais situações eles podem ocorrer - Entender como o Node.js faz o manejo de erros - Usar 'try' e 'catch' para tratamento de erros - Em que ocasiões e de que forma utilizar o `throw` - Criar exceções específicas de acordo com a necessidade de sua aplicação - [ ] **YARN**: - Gerenciar pacotes - Gerenciar dependências - Instalação de pacotes offline - Comandos - Arquivo yarn.lock - [ ] **JavaScript - ES6**: - Conhecer as diferenças dessa versão do JavaScript - [ ] **JavaScript - Modularização**: - Isolar partes do código em módulos - Usar import e export - [ ] **Versionamento Semântico para Front-end**: - Organizar as dependências de um projeto - [ ] **Jest**: - Testar componentes - [ ] **Cypress**: - Criar e executar testes ## Nivel 3 - [ ] **Estruturas de Dados**: - Conhecer as principais estruturas de dados - Implementar as principais estruturas de dados - [ ] **Conceitos de Orientação a Objetos**: - A Programação Orientada a Objetos é um paradigma de programação de software baseado na composição e interação entre diversas unidades chamadas de 'objetos' e as classes, que contêm uma identidade, propriedades e métodos). Ela é baseada em quatro componentes da programação: abstração digital, encapsulamento, herança e polimorfismo. - Como funcionam objetos - Criar e utilizar construtores - O que são classes - Criar e utilizar métodos - Como funciona encapsulamento - O que é herança - O que é polimorfismo - Como funcionam interfaces - O que são abstrações - [ ] **JavaScript - Armazenamento**: - Armazenar dados no front-end com localStorage - Manipular dados armazenados - Persistir dados armazenados - [ ] **JavaScript - Concorrência**: - Conhecer o conceito de programação concorrente em JavaScript - Executar tarefas paralelamente - [ ] **TypeScript - Fundamentos**: - Entender a fundo o que são tipos e a importância da tipagem - Aprender o que é o TypeScript, por que foi criado, como ele funciona e sua relação com o JavaScript - Conhecer as ferramentas do TypeScript (integração com o editor de código, verificador estático e compilador) - Escrever código em TypeScript com suas ferramentas (interfaces, enum, decorators, etc) - Desenvolver aplicações em TypeScript - [ ] **GraphQL**: - Aprender o que é GraphQL e por que foi criado - Entender como o GraphQL é utilizado no desenvolvimento de APIs - Criar APIs utilizando as bibliotecas e frameworks para GraphQL - [ ] **Apollo Client**: - Utilizar o Apollo para criar um servidor GraphQL - Conectar com uma API ## Habilidade Auxiliar: Infraestrutura e Back-end - [ ] **Design Systems**: - Criar e manter bibliotecas que serão consumidas e usadas como padrão para a construção de um projeto - [ ] **Figma - Fundamentos**: - Criar layouts de páginas e componentes - [ ] **Componentes de design**: - Conhecer os componentes descrevem um layout ou interface - [ ] **Sistemas de cores**: - Definir uma paleta de cores que faça sentido para determinada interface - [ ] **Como usar fontes**: - Escolher a fonte mais adequada para determinado projeto ## Habilidade Auxiliar: UX e Design - [ ] **Design Systems**: - Criar e manter bibliotecas que serão consumidas e usadas como padrão para a construção de um projeto - [ ] **Figma - Fundamentos**: - Criar layouts de páginas e componentes - [ ] **Componentes de design**: - Conhecer os componentes descrevem um layout ou interface - [ ] **Sistemas de cores**: - Definir uma paleta de cores que faça sentido para determinada interface - [ ] **Como usar fontes**: - Escolher a fonte mais adequada para determinado projeto