diff --git a/.github/workflows/generate-download-files.yml b/.github/workflows/generate-download-files.yml
new file mode 100644
index 000000000..35a92ed17
--- /dev/null
+++ b/.github/workflows/generate-download-files.yml
@@ -0,0 +1,28 @@
+name: Generate - Download Files
+on:
+ pull_request:
+ types: [opened, synchronize]
+ schedule:
+ - cron: "0 * * * *"
+
+env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+jobs:
+ generate_downloadable_files:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v2
+ - uses: actions/setup-node@v2
+ with:
+ node-version: '16'
+ - name: Call Script
+ run: |
+ echo "[START]"
+ yarn install
+ yarn dev:scripts:createShareableGuides
+ git add .
+ git commit -m "docs: update downloadable files" || echo "Up to date with main"
+ git push origin HEAD
+ echo "[END]"
diff --git a/_data/downloadFiles/pt_BR/csharp.md b/_data/downloadFiles/pt_BR/csharp.md
new file mode 100644
index 000000000..5732d0744
--- /dev/null
+++ b/_data/downloadFiles/pt_BR/csharp.md
@@ -0,0 +1,207 @@
+# C#
+
+## Nivel 1
+- [ ] **C# - Fundamentos**:
+ - Conhecer os tipos primitivos
+ - Declarar variáveis, considerando os diferentes tipos
+ - 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 métodos
+ - Manipular arrays e listas
+ - Obter dados de uma API
+ - Fazer chamadas assíncronas, etc
+ - Criar construtores
+- [ ] **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
+- [ ] **C# - Coleções**:
+ - Aprender os usos e diferenças entre Dictionary, List, Queue, SortedList e Stack
+ - Saiba trabalhar com ArrayList e HashTable
+ - Iterators
+- [ ] **NuGet**:
+ - Gerenciar pacotes
+ - Compartilhar bibliotecas
+- [ ] **C# - System.IO**:
+ - Ler dados de arquivos
+ - Escrever dados em arquivos
+ - Gerenciar arquivos com Using
+- [ ] **C# - Gerenciamento de Memória**:
+ - Entender como a memória é administrada
+ - Conhecer o Garbage Collector
+ - Entender sobre o Stack e o Heap gerenciado
+- [ ] **ADO.NET**:
+ - Manipular bancos de dados
+ - Conhecer o DataSet e DataTable
+ - Realizar conexões
+ - Manipular documentos XML
+- [ ] **Entity Framework Core**:
+ - Manipular bancos de dados usando objetos .NET
+ - Criar modelos correspondentes a um banco de dados
+ - Realizar consultas
+- [ ] **WPF**:
+ - Criar aplicativos para Windows
+ - Usar marcação e code-behind
+ - Criar um layout
+ - Criar modelos
+ - Desenvolver uma interface
+
+## Nivel 2
+- [ ] **CLR**:
+ - Entender como o CLR funciona
+ - Entender o gerenciamento de memória
+ - Conhecer a CIL e o JIT
+- [ ] **LINQ**:
+ - Criar consultas
+ - Conhecer as cláusulas Select e Where
+ - Consultar coleções de objetos em memória
+ - Mapear o banco de dados com Linq to Sql
+- [ ] **C# - Testes**:
+ - Usar testes unitários
+ - Usar testes de integração
+ - Usar testes de comportamento (behavior)
+ - Usar mocks
+- [ ] **C# - Serialização**:
+ - Enviar um objeto para um aplicativo remoto usando um serviço Web
+ - Passar um objeto como uma cadeia de caracteres JSON ou XML
+ - Manter informações específicas do usuário ou de segurança entre aplicativos
+- [ ] **C# - Rede e Sockets**:
+ - Abrir uma sessão de comunicação interativa entre o navegador do usuário e um servidor
+ - Enviar mensagens para um servidor e receber respostas sem consultar o servidor
+- [ ] **ASP.NET Core**:
+ - Criar aplicativos e serviços Web
+ - Manter um aplicativo MVC
+ - Desenvolver de interface do usuário da Web do lado do cliente
+ - Criar uma API Web
+- [ ] **Dapper**:
+ - Realizar consultas a bancos de dados
+ - Manipular bancos de dados
+- [ ] **Injeção de Dependências**:
+ - Padrão de projeto no qual uma classe solicita dependências de fontes externas ao invés de criá-las
+ - Evitar o alto nível de acoplamento de código dentro de uma aplicação
+ - Implementar a inversão de controle
+- [ ] **SOLID**:
+ - Conhecer boas práticas no desenvolvimento de software
+
+## Nivel 3
+- [ ] **C# - Delegates e eventos**:
+ - Entender o conceito de delegate
+ - Criar uma referência para uma função com uma certa lista de parâmetros
+ - Entender o conceito de evento
+ - Manipular diferentes tipos de eventos
+- [ ] **Contêineres**:
+ - Isolar seu software para funcionar independentemente
+ - Implantar software em clusters
+ - Modularizar seu sistema em pacotes menores
+ - Conhecer a plataforma Docker
+ - Conhecer Kubernetes
+- [ ] **Design Patterns**:
+ - Na engenharia de software, um "padrão de projeto" (Design Pattern em inglês) é uma solução geral e reutilizável para um problema que ocorre normalmente dentro de um determinado contexto de projeto de software.
+ - Conhecer e aplicar os principais Design Patterns
+- [ ] **Clean Architecture**:
+ - Conhecer a metodologia a ser usada na codificação, a fim de facilitar o desenvolvimento códigos, permitir uma melhor manutenção, atualização e menos dependência
+- [ ] **C# - Métodos anônimos e lambda expressions**:
+ - Criar funções anônimas que você pode usar para criar delegates
+ - Criar funções locais que podem ser passadas como argumentos
+- [ ] **Reflection e atributos**:
+ - Escrever código que lê as informações e metadados de objetos em tempo de execução
+ - Obter nomes de classes em tempo de execução e criar objetos de uma classe
+- [ ] **C# - Multithreading**:
+ - Executar múltiplas tarefas simultaneamente
+ - Entender como threads são executadas
+- [ ] **Estruturas de Dados**:
+ - Conhecer as principais estruturas de dados
+ - Implementar as principais estruturas de dados
+- [ ] **MAUI**:
+ - Criar aplicativos móveis e desktop nativos com C# e XAML
+ - Criar aplicativos multiplataforma
+ - Compartilhar o layout e o design da interface do usuário entre plataformas
+
+## Habilidade Auxiliar: Infraestrutura e boas práticas
+- [ ] **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
+- [ ] **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
+- [ ] **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
+
+## Habilidade Auxiliar: Front-end
+- [ ] **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
+- [ ] **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
+- [ ] **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
diff --git a/_data/downloadFiles/pt_BR/data-scientist.md b/_data/downloadFiles/pt_BR/data-scientist.md
new file mode 100644
index 000000000..6650f9d0b
--- /dev/null
+++ b/_data/downloadFiles/pt_BR/data-scientist.md
@@ -0,0 +1,187 @@
+# Data Scientist
+
+## Nivel 1
+- [ ] **Ciência de Dados - Fundamentos**:
+ - Utilizar algoritmos e sistemas para extrair, organizar e analisar dados a partir de diversas fontes, a fim de detectar padrões e tomar decisões de negócios
+ - As áreas de aplicação são infindáveis, como em negócios, biologia, medicina, engenharia, etc.
+- [ ] **Feature Engineering**:
+ - Gerar novas variáveis a partir dos dados disponíveis
+ - Transformar dados brutos em características
+ - Realçar os problemas dos modelos preditivos
+ - Melhorar a precisão do modelo para novos dados
+- [ ] **Extração e Tratamento de Dados**:
+ - Obter os dados que serão analisados
+ - Tratar os dados obtidos, transformando-os, alterando sua estrutura e valores a fim de deixar a base de dados mais coerente e garantir que os dados que serão trabalhados estejam nas melhores condições para serem analisados
+- [ ] **Python para Ciência de Dados**:
+ - Python é uma linguagem de programação interpretada de alto nível e que suporta múltiplos paradigmas de programação, como imperativo, orientado a objetos e funcional. É uma linguagem com tipagem dinâmica e gerenciamento automático de memória.
+ - Aprender lógica de programação em Python
+ - Aprenda os fundamentos da linguagem como variáveis, funções, listas, condicionais e imports
+ - Criar análises de dados
+ - Utilizar o Matplotlib para gerar gráficos
+ - Usar e manipular listas para agrupar dados
+ - Conhecer a biblioteca NumPy
+ - Conhecer a biblioteca Pandas
+- [ ] **R para Ciência de Dados**:
+ - R é uma linguagem de programação comumente usada em estatística computacional e análise de dados.
+ - Aprender a analisar, limpar e visualizar dados
+ - Elaborar gráficos
+ - Juntar bancos de dados
+ - Tirar sumários estatísticos
+ - Aprender modelos preditivos no R
+- [ ] **Estatística e Matemática - Fundamentos**:
+ - Equações, funções e limites
+ - Logaritmos
+ - Matrizes, determinantes, vetores e espaço vetorial
+ - Derivadas e integrais
+ - Diferença entre média, mediana e moda
+ - Distribuição de frequência
+ - Variância e desvio padrão
+ - Distribuição binomial, poisson e normal
+ - Nível e intervalo de confiança
+ - Técnicas de amostragem
+ - Regressão linear
+ - Séries temporais
+- [ ] **Machine Learning - Fundamentos**:
+ - O Aprendizado de Máquina ou Machine Learning é um subcampo da Engenharia e da Ciência da Computação que evoluiu do estudo de reconhecimento de padrões e da teoria do aprendizado computacional em inteligência artificial.
+ - Aprendizado supervisionado
+ - Utilizar algoritmos de classificação
+ - Utilizar algoritmos de regressão
+ - Utilizar o Scikit-learn para criar modelos de machine learning
+- [ ] **Visualização de Dados**:
+ - A visualização de dados é uma expressão contemporânea da comunicação visual que consiste na representação visual de dados.
+ - Mapear dados abstratos em representações visuais
+ - Representar visualmente os dados que estão presentes no nosso mundo real
+
+## Nivel 2
+- [ ] **Machine Learning - Aprendizado Não Supervisionado**:
+ - O clustering ou análise de agrupamento de dados é o conjunto de técnicas de prospecção de dados (data mining) que visa fazer agrupamentos automáticos de dados segundo o seu grau de semelhança.
+ - Conhecer a análise exploratória
+ - Utilizar os métodos K-means, DBSCAN e Mean shift para agrupar dados sem classificação
+ - Avaliar a qualidade de uma clusterização
+ - Parametrizar métodos de clusterização através do máximo coeficiente de silhueta
+ - Entender a matemática por trás das métricas de validação Silhouette, Davies Bouldin e Calinski Harabasz
+ - Conhecer técnicas de redução de dimensionalidade
+- [ ] **Machine Learning - Avaliação de Modelos**:
+ - O uso de métricas de avaliação nos ajuda a identificar se um modelo treinado terá um bom desempenho de previsão quando exposto a novos conjuntos de dados.
+ - Conhecer diferentes estratégias de avaliação e otimização de modelos
+ - Utilizar um pipeline para treino e validação
+ - Métricas de avaliação de modelos de machine learning
+- [ ] **SQL - Fundamentos**:
+ - Conhecer os comandos mais comuns do SQL
+ - Usar SELECT para consultar uma tabela
+ - Usar INSERT para inserir dados em uma tabela
+ - Usar UPDATE para atualizar uma tabela
+ - Usar DELETE para remover dados de uma tabela
+ - Usar JOIN para conectar os dados de múltiplas tabelas
+ - Conhecer as cláusulas (FROM, ORDER BY, etc)
+- [ ] **Web Scraping**:
+ - Web scraping ou raspagem de dados na web é a extração de dados de websites.
+ - Usar o BeautifulSoup e Python para coletar dados
+ - Pesquisar e navegar no HTML
+ - Acessar o conteúdo e atributos das tags HTML
+ - Construir datasets com os resultados das raspagens
+- [ ] **Testes Estatísticos**:
+ - Criar intervalos de confiança para amostras
+ - Comparar grupos de amostras
+ - Executar testes estatísticos
+ - Planejar experimentos para a coleta de dados
+ - Propor modelos matemáticos para entender um dado problema
+ - Construir mapas de cores para auxiliar a interpretação dos dados
+
+## Nivel 3
+- [ ] **Deep Learning**:
+ - Deep Learning é um ramo de Machine Learning baseado em um conjunto de algoritmos que tentam modelar abstrações de alto nível de dados usando um grafo profundo com várias camadas de processamento, compostas de várias transformações lineares e não lineares.
+ - Construir e treinar modelos com Keras
+ - Construir e treinar modelos com Tensorflow
+ - Selecionar as camadas de um modelo
+ - Classificar imagens
+ - Entender os conceitos de pesos e vieses
+ - Redes neurais para regressão
+ - Entender o conceito de Redes recorrentes
+- [ ] **Aprendizado por Reforço**:
+ - O Aprendizado por Reforço é uma área de Machine Learning que se preocupa com a forma como agentes inteligentes devem tomar medidas num ambiente, a fim de maximizar a noção de recompensa cumulativa.
+ - Entender os conceitos de agente e recompensa
+ - Entender a diferença entre reforço positivo e negativo
+ - Conhecer o modelo Markov Decision Process
+ - Entender o conceito de Retorno
+ - Utilizar o algoritmo Q-learning
+- [ ] **Visão Computacional**:
+ - Visão Computacional é um campo científico interdisciplinar que lida com a forma como os computadores podem ganhar conhecimentos de alto nível a partir de imagens ou vídeos digitais. Da perspectiva da engenharia, procura compreender e automatizar tarefas que o sistema visual humano pode fazer.
+ - Extrair regiões de interesse de uma imagem
+ - Normalizar e pré-processar dados de imagens
+ - Construir classificadores para reconhecimento de faces
+ - Extrair regiões do rosto humano baseado em marcos faciais
+ - Analisar diferentes condições de cada componente do rosto humano
+- [ ] **Processamento de Linguagem Natural**:
+ - Processamento de língua natural (PLN) é uma subárea da inteligência artificial e da linguística que estuda os problemas da geração e compreensão automática de línguas humanas naturais.
+ - Análise de Sentimento
+ - Criar visualizações para facilitar a análise de dados textuais
+ - Conhecer as bibliotecas NLTK e Scikit-Learn
+ - Normalizar textos
+ - Usar TF-IDF e Ngrams para melhorar a classificação
+ - Utilizar o SKlearn
+ - Utilizar Regex em PLN
+ - Conhecer o Word2Vec
+ - Combinar vetores de palavras para representar textos e classificá-los
+
+## Habilidade Auxiliar: Business e Soft skills
+- [ ] **Big Data e Engenharia de Dados**:
+ - Big data é a área do conhecimento que estuda como tratar, analisar e obter informações a partir de conjuntos de dados grandes demais para serem analisados por sistemas tradicionais.
+ - Engenharia de Dados envolve o desenvolvimento e organização de processos para coleta, armazenamento e transformação de dados em grande escala.
+ - Criar um pipeline de dados
+ - Conhecer o Apache Airflow
+ - Conhecer o Apache Spark
+ - Conhecer o conceito de Data Lake
+ - Interagir com servidores na nuvem
+ - Criar aplicações Spark
+- [ ] **Cloud - Fundamentos**:
+ - Cloud, ou computação em nuvem é a distribuição de serviços de computação pela Internet usando um modelo de preço pago conforme o uso. Uma nuvem é composta de vários recursos de computação, que abrangem desde os próprios computadores (ou instâncias, na terminologia de nuvem) até redes, armazenamento, bancos de dados e o que estiver em torno deles. Ou seja, tudo o que normalmente é necessário para montar o equivalente a uma sala de servidores, ou mesmo um data center completo, estará pronto para ser utilizado, configurado e executado.
+ - Conhecer a diferença entre IaaS, PaaS e SaaS
+ - Conhecer os maiores provedores de cloud
+ - Especializar-se em algum provedor
+- [ ] **Git e GitHub - Fundamentos**:
+ - Criar um repositório
+ - Clonar um repositório
+ - Fazer commit, push e pull de e para o repositório
+ - Reverter um commit
+ - Lidar com merge e conflitos
+- [ ] **Linux - Fundamentos**:
+ - Linux é um termo popularmente empregado para se referir a sistemas operacionais que utilizam o Kernel Linux. As distribuições incluem o Kernel Linux, além de softwares de sistema e bibliotecas.
+ - Conhecer o sistema de diretórios do Linux
+ - Compactar e descompactar arquivos
+ - Editar arquivos no console com o VI
+ - Gerenciar os processos rodando na máquina
+ - Conhecer as variáveis de ambiente e o PATH
+ - Gerenciar pacotes
+ - Realizar comunicação remota com o SSH e SCP
+
+## Habilidade Auxiliar: Cloud, Big Data e Sistemas
+- [ ] **Big Data e Engenharia de Dados**:
+ - Big data é a área do conhecimento que estuda como tratar, analisar e obter informações a partir de conjuntos de dados grandes demais para serem analisados por sistemas tradicionais.
+ - Engenharia de Dados envolve o desenvolvimento e organização de processos para coleta, armazenamento e transformação de dados em grande escala.
+ - Criar um pipeline de dados
+ - Conhecer o Apache Airflow
+ - Conhecer o Apache Spark
+ - Conhecer o conceito de Data Lake
+ - Interagir com servidores na nuvem
+ - Criar aplicações Spark
+- [ ] **Cloud - Fundamentos**:
+ - Cloud, ou computação em nuvem é a distribuição de serviços de computação pela Internet usando um modelo de preço pago conforme o uso. Uma nuvem é composta de vários recursos de computação, que abrangem desde os próprios computadores (ou instâncias, na terminologia de nuvem) até redes, armazenamento, bancos de dados e o que estiver em torno deles. Ou seja, tudo o que normalmente é necessário para montar o equivalente a uma sala de servidores, ou mesmo um data center completo, estará pronto para ser utilizado, configurado e executado.
+ - Conhecer a diferença entre IaaS, PaaS e SaaS
+ - Conhecer os maiores provedores de cloud
+ - Especializar-se em algum provedor
+- [ ] **Git e GitHub - Fundamentos**:
+ - Criar um repositório
+ - Clonar um repositório
+ - Fazer commit, push e pull de e para o repositório
+ - Reverter um commit
+ - Lidar com merge e conflitos
+- [ ] **Linux - Fundamentos**:
+ - Linux é um termo popularmente empregado para se referir a sistemas operacionais que utilizam o Kernel Linux. As distribuições incluem o Kernel Linux, além de softwares de sistema e bibliotecas.
+ - Conhecer o sistema de diretórios do Linux
+ - Compactar e descompactar arquivos
+ - Editar arquivos no console com o VI
+ - Gerenciar os processos rodando na máquina
+ - Conhecer as variáveis de ambiente e o PATH
+ - Gerenciar pacotes
+ - Realizar comunicação remota com o SSH e SCP
diff --git a/_data/downloadFiles/pt_BR/front-end-angular.md b/_data/downloadFiles/pt_BR/front-end-angular.md
new file mode 100644
index 000000000..f1ef46c6a
--- /dev/null
+++ b/_data/downloadFiles/pt_BR/front-end-angular.md
@@ -0,0 +1,107 @@
+# Front-end Angular
+
+## Nivel 1
+- [ ] **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
+- [ ] **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
+- [ ] **RxJS - Fundamentos**:
+ - Criar programas assíncronos
+ - Criar programas baseados em eventos
+ - Entender o conceito de observables e sequências de observables
+ - Entender como usar Observers, Subscription, Subject
+- [ ] **Angular - Fundamentos**:
+ - Construir interfaces utilizando HTML, CSS e TypeScript
+ - Criar aplicações SPA
+ - Construir aplicações web, mobile ou desktop
+ - Integrar dados com API’s REST
+ - Utilizar a composição para criar componentes reutilizáveis
+ - Utilizar serviços do tipo Resolver
+ - Manipular requisições criando serviços do tipo Interceptor
+- [ ] **O Pattern Observer**:
+ - Entender o que são Design Patterns
+ - Atualizar diversos elementos simultaneamente
+ - Declarar os Subjects
+ - Criar programas baseados em eventos
+
+## Nivel 2
+- [ ] **Angular - Templates**:
+ - Como usar os templates
+- [ ] **Angular - Renderização**:
+ - Exibir uma página Angular no navegador
+ - Realizar renderização no lado do servidor
+- [ ] **Angular - Services**:
+ - Criar dados que estarão sempre disponíveis
+ - Dividir a aplicação web em diversas partes
+- [ ] **Angular - Roteamento**:
+ - Navegar até um componente
+ - Incluir um parâmetro de rota
+ - Controlar o fluxo de navegação do seu usuário com guarda de rotas
+- [ ] **Angular - CLI (Interface de Linha de Comando)**:
+ - Inicializar, desenvolver e manter aplicações Angular a partir da interface de linha de comando
+
+## Nivel 3
+- [ ] **Angular - Gerenciamento de Estado**:
+ - Atualizar componentes em tempo real
+ - Esperar por alterações em algum componente e executar alterações
+- [ ] **Angular - Formulários**:
+ - Criar formulários com Template Forms
+ - Criar formulários com reativos com Reactive Forms
+- [ ] **Angular - Módulos**:
+ - Registrar componentes
+ - Declarar quais componentes podem ser usados por componentes de outros módulos
+ - Declarar quais services serão injetados
+ - Aprender a modularizar uma aplicação
+- [ ] **Angular - Injeção de Dependências**:
+ - Declarar as dependências de suas classes
+ - Injetar dependências em um componente
+- [ ] **Angular - Testes**:
+ - Usar testes unitários
+ - Usar testes de integração
+ - Usar testes de comportamento (behavior)
+ - Usar mocks
+- [ ] **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
diff --git a/_data/downloadFiles/pt_BR/front-end.md b/_data/downloadFiles/pt_BR/front-end.md
new file mode 100644
index 000000000..eaed627f5
--- /dev/null
+++ b/_data/downloadFiles/pt_BR/front-end.md
@@ -0,0 +1,156 @@
+# 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
diff --git a/_data/downloadFiles/pt_BR/java.md b/_data/downloadFiles/pt_BR/java.md
new file mode 100644
index 000000000..f443567fd
--- /dev/null
+++ b/_data/downloadFiles/pt_BR/java.md
@@ -0,0 +1,195 @@
+# Java
+
+## Nivel 1
+- [ ] **Java - Fundamentos**:
+ - Conhecer os tipos primitivos
+ - Declarar variáveis, considerando os diferentes tipos
+ - 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 métodos
+ - Manipular arrays e listas
+ - Obter dados de uma API
+ - Fazer chamadas assíncronas 'Future', etc
+ - Criar construtores
+- [ ] **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
+- [ ] **Java - Manipulação de Erros**:
+ - Tratar exceções pré-definidas
+ - Uso de 'try' e 'catch'
+ - Criar exceções específicas
+ - Fazer o processo de Debug
+- [ ] **Java - Coleções**:
+ - Aprender os usos e diferenças entre List, Set e Map
+ - Aprender os usos e diferenças entre Equals e HashCode
+ - Saiba trabalhar com ArrayList, LinkedList ou Vector
+ - Classes Wrappers
+- [ ] **Java - Pacotes**:
+ - Use imports e organize o seu código através de packages
+ - Conhecer a java.lang
+ - Entender a imutabilidade e a classe String
+ - Entender a classe java.lang.Object
+ - Conhecer a java.io
+- [ ] **Java - Gerenciamento da Memória**:
+ - Entender como funciona a memória e seu gerenciamento em Java
+ - Entender como funciona a memória o Garbage Collector
+- [ ] **Java - Concorrência**:
+ - Executar tarefas simultaneamente
+ - Colocar tarefas para aguardar até que um determinado evento ocorra
+ - Entender como a memória funciona nessa situação
+- [ ] **Java - Persistência**:
+ - Entender sobre JDBC e JPA
+ - Comunicar-se com um banco de dados relacional
+ - Entender a diferença entre relacionamentos EAGER e LAZY
+ - Planejar queries com join fetch
+ - Encapsular o acesso em um DAO
+ - Entender como a memória funciona nessa situação
+
+## Nivel 2
+- [ ] **JVM**:
+ - Entender como funciona a máquina virtual do Java
+- [ ] **Spring Framework**:
+ - Entender os usos do Spring Framework
+ - Entender o conceito de Injeção de Dependências
+ - Entender o padrão MVC
+- [ ] **Java Build Tools**:
+ - Conheça as principais ferramentas de build do Java
+ - Aprenda a usar uma delas
+- [ ] **Java - Testes**:
+ - Usar testes unitários
+ - Usar testes de integração
+ - Usar testes de comportamento (behavior)
+ - Usar mocks
+- [ ] **Java - Serialização**:
+ - Realizar a criação de um objeto a partir de um fluxo de bytes e vice-versa
+- [ ] **Java - Rede e Sockets**:
+ - Abrir uma sessão de comunicação interativa entre o navegador do usuário e um servidor
+ - Enviar mensagens para um servidor e receber respostas sem consultar o servidor
+- [ ] **Java - Servlets**:
+ - Criar páginas web dinâmicas em Java
+ - Lidar com requisições para um servidor
+ - Conhecer o ciclo de vida de um servlet
+
+## Nivel 3
+- [ ] **Contêineres**:
+ - Isolar seu software para funcionar independentemente
+ - Implantar software em clusters
+ - Modularizar seu sistema em pacotes menores
+ - Conhecer a plataforma Docker
+ - Conhecer Kubernetes
+- [ ] **Spring Boot**:
+ - Criar aplicações Spring standalone
+ - Usar os servidores HTTP embutidos
+- [ ] **Estruturas de Dados**:
+ - Conhecer as principais estruturas de dados
+ - Implementar as principais estruturas de dados
+- [ ] **Design Patterns**:
+ - Na engenharia de software, um "padrão de projeto" (Design Pattern em inglês) é uma solução geral e reutilizável para um problema que ocorre normalmente dentro de um determinado contexto de projeto de software.
+ - Conhecer e aplicar os principais Design Patterns
+- [ ] **SOLID**:
+ - Conhecer boas práticas no desenvolvimento de software
+- [ ] **Clean Architecture**:
+ - Conhecer a metodologia a ser usada na codificação, a fim de facilitar o desenvolvimento códigos, permitir uma melhor manutenção, atualização e menos dependência
+- [ ] **Reflection e atributos**:
+ - Escrever código que lê as informações e metadados de objetos em tempo de execução
+ - Obter nomes de classes em tempo de execução e criar objetos de uma classe
+- [ ] **JSF**:
+ - Escrever e manter aplicações executadas em um servidor
+ - Renderizar a interface de usuário
+ - Migrar os dados da aplicação para a interface
+- [ ] **JMS**:
+ - Enviar e receber mensagens
+- [ ] **Java - Logging**:
+ - Realizar logging de mensagens para indicar o comportamento de determinada aplicação
+- [ ] **Java Swing**:
+ - Renderizar os componentes da interface gráfica de um sistema
+
+## Habilidade Auxiliar: Infraestrutura e boas práticas
+- [ ] **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
+- [ ] **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
+- [ ] **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
+
+## Habilidade Auxiliar: Front-end
+- [ ] **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
+- [ ] **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
+- [ ] **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
diff --git a/_data/downloadFiles/pt_BR/nodejs.md b/_data/downloadFiles/pt_BR/nodejs.md
new file mode 100644
index 000000000..465635a98
--- /dev/null
+++ b/_data/downloadFiles/pt_BR/nodejs.md
@@ -0,0 +1,141 @@
+# Node.js
+
+## Nivel 1
+- [ ] **Node.js - Fundamentos**:
+ - Conhecer e aprender mais sobre o Node.js, ambiente de execução do JavaScript fora no navegador
+ - Descobrir as possibilidades de desenvolvimento do Node.js e por que é tão utilizado
+ - Entender as partes principais do ecossistema Node.js e como usamos cada uma delas
+- [ ] **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 - 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
+- [ ] **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
+- [ ] **Node.js - Testes**:
+ - Aprender o que são testes unitários
+ - Aprender o que são testes de integração
+ - Trabalhar com frameworks de testes e suas ferramentas
+ - Criar mocks para seus testes
+ - Aprender os conceitos de BDD (Behavior-Driven Development) e TDD (Test-Driven Development)
+
+## Nivel 2
+- [ ] **SOLID**:
+ - Conhecer boas práticas no desenvolvimento de software
+- [ ] **Node.js - Express**:
+ - Utilizar o framework Express para criação de APIs REST com Node.js
+ - Conhecer as diversas bibliotecas e frameworks do ecossistema Node.js para APIs
+- [ ] **Node.js - ORM**:
+ - Entender o que são ORMs e para que são utilizados
+ - Conhecer o SQL e seus gerenciadores de bancos de dados
+ - Trabalhar com o Sequelize, ORM para uso com Node.js
+ - Conhecer outros ORMs Node.js como Prisma
+- [ ] **Node.js - Autenticação e Tokens**:
+ - Construir um sistema de autenticação usando tokens
+ - Entender o funcionamento do JSON Web Token (JWT)
+ - Construir uma allowlist para guardar tokens opacos
+ - Implementar métodos de atualização de tokens
+- [ ] **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
+
+## Nivel 3
+- [ ] **Microsserviços**:
+ - Aprender o conceito de arquitetura planejada para microsserviços
+ - Realizar a comunicação usando APIs
+ - Melhorar a escalabilidade de um sistema
+- [ ] **Nest.js - Fundamentos**:
+ - Aprender o que é o NestJS e por que é utilizado
+ - Desenvolver APIs usando o NestJS
+ - Utilizar recursos específicos do NestJS
+- [ ] **WebSockets**:
+ - Conhecer o protocolo WebSocket e seu uso na comunicação cliente-servidor
+ - Aprender sobre os diversos usos do WebSocket na web
+ - Criar aplicações que utilizam WebSockets com as APIs e bibliotecas do Node.js
+- [ ] **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: Front-end
+- [ ] **Git e GitHub - Fundamentos**:
+ - Criar um repositório
+ - Clonar um repositório
+ - Fazer commit, push e pull de e para o repositório
+ - Reverter um commit
+ - Lidar com merge e conflitos
+- [ ] **HTTP - Fundamentos**:
+ - Entender a diferença dos verbos HTTP
+ - Testar os requests e ver os status codes no navegador
+ - Saber fazer uma requisição HTTP na linha de comando com WGET
+ - Baixar uma imagem com WGET
+ - Fazer um post
+- [ ] **Design Patterns**:
+ - Na engenharia de software, um "padrão de projeto" (Design Pattern em inglês) é uma solução geral e reutilizável para um problema que ocorre normalmente dentro de um determinado contexto de projeto de software.
+ - Conhecer e aplicar os principais Design Patterns
+- [ ] **Linha de comando - Fundamentos**:
+ - Conhecer os principais comandos
+- [ ] **Cloud - Fundamentos**:
+ - Cloud, ou computação em nuvem é a distribuição de serviços de computação pela Internet usando um modelo de preço pago conforme o uso. Uma nuvem é composta de vários recursos de computação, que abrangem desde os próprios computadores (ou instâncias, na terminologia de nuvem) até redes, armazenamento, bancos de dados e o que estiver em torno deles. Ou seja, tudo o que normalmente é necessário para montar o equivalente a uma sala de servidores, ou mesmo um data center completo, estará pronto para ser utilizado, configurado e executado.
+ - Conhecer a diferença entre IaaS, PaaS e SaaS
+ - Conhecer os maiores provedores de cloud
+ - Especializar-se em algum provedor
+- [ ] **Contêineres**:
+ - Isolar seu software para funcionar independentemente
+ - Implantar software em clusters
+ - Modularizar seu sistema em pacotes menores
+ - Conhecer a plataforma Docker
+ - Conhecer Kubernetes
+
+## Habilidade Auxiliar: Infraestrutura e boas práticas
+- [ ] **Git e GitHub - Fundamentos**:
+ - Criar um repositório
+ - Clonar um repositório
+ - Fazer commit, push e pull de e para o repositório
+ - Reverter um commit
+ - Lidar com merge e conflitos
+- [ ] **HTTP - Fundamentos**:
+ - Entender a diferença dos verbos HTTP
+ - Testar os requests e ver os status codes no navegador
+ - Saber fazer uma requisição HTTP na linha de comando com WGET
+ - Baixar uma imagem com WGET
+ - Fazer um post
+- [ ] **Design Patterns**:
+ - Na engenharia de software, um "padrão de projeto" (Design Pattern em inglês) é uma solução geral e reutilizável para um problema que ocorre normalmente dentro de um determinado contexto de projeto de software.
+ - Conhecer e aplicar os principais Design Patterns
+- [ ] **Linha de comando - Fundamentos**:
+ - Conhecer os principais comandos
+- [ ] **Cloud - Fundamentos**:
+ - Cloud, ou computação em nuvem é a distribuição de serviços de computação pela Internet usando um modelo de preço pago conforme o uso. Uma nuvem é composta de vários recursos de computação, que abrangem desde os próprios computadores (ou instâncias, na terminologia de nuvem) até redes, armazenamento, bancos de dados e o que estiver em torno deles. Ou seja, tudo o que normalmente é necessário para montar o equivalente a uma sala de servidores, ou mesmo um data center completo, estará pronto para ser utilizado, configurado e executado.
+ - Conhecer a diferença entre IaaS, PaaS e SaaS
+ - Conhecer os maiores provedores de cloud
+ - Especializar-se em algum provedor
+- [ ] **Contêineres**:
+ - Isolar seu software para funcionar independentemente
+ - Implantar software em clusters
+ - Modularizar seu sistema em pacotes menores
+ - Conhecer a plataforma Docker
+ - Conhecer Kubernetes
diff --git a/_data/downloadFiles/pt_BR/php.md b/_data/downloadFiles/pt_BR/php.md
new file mode 100644
index 000000000..f199fcfbe
--- /dev/null
+++ b/_data/downloadFiles/pt_BR/php.md
@@ -0,0 +1,168 @@
+# PHP
+
+## Nivel 1
+- [ ] **PHP - Fundamentos**:
+ - Conhecer os tipos primitivos
+ - Declarar variáveis
+ - 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
+- [ ] **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
+- [ ] **PHP - Manipulação de Erros**:
+ - Tratar exceções pré-definidas
+ - Uso de 'try' e 'catch'
+ - Criar exceções específicas
+- [ ] **PHP - Testes**:
+ - Usar testes unitários
+ - Usar testes de integração
+ - Usar testes de comportamento (behavior)
+ - Usar mocks
+- [ ] **PHP - Persistência**:
+ - Conhecer o PDO
+ - Fazer inserções, alterações e remoções em um banco de dados
+ - Fazer consultas em um banco de dados usando filtros
+- [ ] **PHP - Arquivos e Streams**:
+ - Abrir, ler e manipular arquivos
+ - Aplicar wrappers e filtros nos streams
+ - Usar streams
+ - Conhecer encodings e character sets
+
+## Nivel 2
+- [ ] **PHP - Composer**:
+ - Gerenciar dependências
+ - Incluir bibliotecas de terceiros
+- [ ] **PHP - MVC**:
+ - Entender o conceito do padrão MVC (Model-View-Controller)
+ - Separar as responsabilidades entre as camadas MVC
+- [ ] **Laravel**:
+ - Conhecer as características do framework Laravel
+ - Trabalhar com rotas
+ - Usar arquivos Blade
+- [ ] **PHP - Symfony**:
+ - Conhecer as principais características do framework
+ - Utilizar componentes
+ - Definir recursos e rotas
+ - Templates Twig
+- [ ] **PHP - XDebug**:
+ - Usar e aprimorar o var_dump com XDebug
+ - Analisar e entender a stack (pilha) de execução
+ - Depurar o código
+ - Depurar remotamente com Docker
+
+## Nivel 3
+- [ ] **PHP Assíncrono**:
+ - Entender sobre programação assíncrona
+ - Aprender a usar sockets
+ - Conhecer bibliotecas de programação reativa
+ - Aprender sobre corrotinas
+- [ ] **PHP Funcional**:
+ - Entender a fundo sobre funções em PHP
+ - Conhecer funções de manipulação de arrays
+ - Realizar composição de funções usando pipelines
+- [ ] **SOLID**:
+ - Conhecer boas práticas no desenvolvimento de software
+- [ ] **Design Patterns**:
+ - Na engenharia de software, um "padrão de projeto" (Design Pattern em inglês) é uma solução geral e reutilizável para um problema que ocorre normalmente dentro de um determinado contexto de projeto de software.
+ - Conhecer e aplicar os principais Design Patterns
+- [ ] **Clean Architecture**:
+ - Conhecer a metodologia a ser usada na codificação, a fim de facilitar o desenvolvimento códigos, permitir uma melhor manutenção, atualização e menos dependência
+- [ ] **Object Calisthenics**:
+ - Conhecer as regras de Object Calisthenics
+ - Simplificar classes e métodos
+ - Manter o código mais curto e coeso
+- [ ] **Reflection e atributos**:
+ - Escrever código que lê as informações e metadados de objetos em tempo de execução
+ - Obter nomes de classes em tempo de execução e criar objetos de uma classe
+
+## Habilidade Auxiliar: Front-end
+- [ ] **Git e GitHub - Fundamentos**:
+ - Criar um repositório
+ - Clonar um repositório
+ - Fazer commit, push e pull de e para o repositório
+ - Reverter um commit
+ - Lidar com merge e conflitos
+- [ ] **HTTP - Fundamentos**:
+ - Entender a diferença dos verbos HTTP
+ - Testar os requests e ver os status codes no navegador
+ - Saber fazer uma requisição HTTP na linha de comando com WGET
+ - Baixar uma imagem com WGET
+ - Fazer um post
+- [ ] **JSON**:
+ - Criar um objeto
+ - Transformar em string
+ - Transformar uma string em objeto
+ - Manipular um objeto
+- [ ] **Linha de comando - Fundamentos**:
+ - Conhecer os principais comandos
+- [ ] **Cloud - Fundamentos**:
+ - Cloud, ou computação em nuvem é a distribuição de serviços de computação pela Internet usando um modelo de preço pago conforme o uso. Uma nuvem é composta de vários recursos de computação, que abrangem desde os próprios computadores (ou instâncias, na terminologia de nuvem) até redes, armazenamento, bancos de dados e o que estiver em torno deles. Ou seja, tudo o que normalmente é necessário para montar o equivalente a uma sala de servidores, ou mesmo um data center completo, estará pronto para ser utilizado, configurado e executado.
+ - Conhecer a diferença entre IaaS, PaaS e SaaS
+ - Conhecer os maiores provedores de cloud
+ - Especializar-se em algum provedor
+- [ ] **Contêineres**:
+ - Isolar seu software para funcionar independentemente
+ - Implantar software em clusters
+ - Modularizar seu sistema em pacotes menores
+ - Conhecer a plataforma Docker
+ - Conhecer Kubernetes
+- [ ] **SQL - Fundamentos**:
+ - Conhecer os comandos mais comuns do SQL
+ - Usar SELECT para consultar uma tabela
+ - Usar INSERT para inserir dados em uma tabela
+ - Usar UPDATE para atualizar uma tabela
+ - Usar DELETE para remover dados de uma tabela
+ - Usar JOIN para conectar os dados de múltiplas tabelas
+ - Conhecer as cláusulas (FROM, ORDER BY, etc)
+
+## Habilidade Auxiliar: Infraestrutura e boas práticas
+- [ ] **Git e GitHub - Fundamentos**:
+ - Criar um repositório
+ - Clonar um repositório
+ - Fazer commit, push e pull de e para o repositório
+ - Reverter um commit
+ - Lidar com merge e conflitos
+- [ ] **HTTP - Fundamentos**:
+ - Entender a diferença dos verbos HTTP
+ - Testar os requests e ver os status codes no navegador
+ - Saber fazer uma requisição HTTP na linha de comando com WGET
+ - Baixar uma imagem com WGET
+ - Fazer um post
+- [ ] **JSON**:
+ - Criar um objeto
+ - Transformar em string
+ - Transformar uma string em objeto
+ - Manipular um objeto
+- [ ] **Linha de comando - Fundamentos**:
+ - Conhecer os principais comandos
+- [ ] **Cloud - Fundamentos**:
+ - Cloud, ou computação em nuvem é a distribuição de serviços de computação pela Internet usando um modelo de preço pago conforme o uso. Uma nuvem é composta de vários recursos de computação, que abrangem desde os próprios computadores (ou instâncias, na terminologia de nuvem) até redes, armazenamento, bancos de dados e o que estiver em torno deles. Ou seja, tudo o que normalmente é necessário para montar o equivalente a uma sala de servidores, ou mesmo um data center completo, estará pronto para ser utilizado, configurado e executado.
+ - Conhecer a diferença entre IaaS, PaaS e SaaS
+ - Conhecer os maiores provedores de cloud
+ - Especializar-se em algum provedor
+- [ ] **Contêineres**:
+ - Isolar seu software para funcionar independentemente
+ - Implantar software em clusters
+ - Modularizar seu sistema em pacotes menores
+ - Conhecer a plataforma Docker
+ - Conhecer Kubernetes
+- [ ] **SQL - Fundamentos**:
+ - Conhecer os comandos mais comuns do SQL
+ - Usar SELECT para consultar uma tabela
+ - Usar INSERT para inserir dados em uma tabela
+ - Usar UPDATE para atualizar uma tabela
+ - Usar DELETE para remover dados de uma tabela
+ - Usar JOIN para conectar os dados de múltiplas tabelas
+ - Conhecer as cláusulas (FROM, ORDER BY, etc)
diff --git a/_data/downloadFiles/pt_BR/python.md b/_data/downloadFiles/pt_BR/python.md
new file mode 100644
index 000000000..c7101b0e0
--- /dev/null
+++ b/_data/downloadFiles/pt_BR/python.md
@@ -0,0 +1,181 @@
+# Python
+
+## Nivel 1
+- [ ] **Python - Fundamentos**:
+ - Conhecer os tipos primitivos
+ - Declarar variáveis, considerando os diferentes tipos
+ - 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 métodos
+ - Manipular arrays e listas
+ - Obter dados de uma API
+ - Fazer chamadas assíncronas
+ - Criar construtores
+ - Funções anônimas
+- [ ] **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
+- [ ] **Estruturas de Dados**:
+ - Conhecer as principais estruturas de dados
+ - Implementar as principais estruturas de dados
+- [ ] **Python - Métodos Especiais**:
+ - Entender o conceito de métodos especiais (ou mágicos)
+ - Conhecer os principais métodos mágicos e como usá-los
+- [ ] **Python - Coleções**:
+ - Utilizar listas e tuplas
+ - Utilizar polimorfismo nas coleções
+ - Utilizar conjuntos e dicionários
+
+## Nivel 2
+- [ ] **Python - Testes**:
+ - Usar testes unitários
+ - Usar testes de integração
+ - Usar testes de comportamento (behavior)
+ - Usar mocks
+- [ ] **Flask**:
+ - Criar aplicações web
+ - Definir rotas, redirecionamentos e templates
+ - Validar formulários
+- [ ] **Design Patterns**:
+ - Na engenharia de software, um "padrão de projeto" (Design Pattern em inglês) é uma solução geral e reutilizável para um problema que ocorre normalmente dentro de um determinado contexto de projeto de software.
+ - Conhecer e aplicar os principais Design Patterns
+- [ ] **Python - Mixins**:
+ - Usar orientação a objetos
+ - Entender o uso de herança múltipla
+- [ ] **Python - Sobrecarga de operadores**:
+ - Definir métodos para um operador
+ - Realizar operações com objetos
+- [ ] **Django**:
+ - Criar aplicações web
+ - Entender a arquitetura de uma aplicação feita com Django
+ - Criar o admin de uma página
+ - Utilizar templates e rotas
+ - Criar formulários
+- [ ] **Django Rest Framework**:
+ - Desenvolver APIs
+ - Trabalhar com modelos, serializers e views
+ - Incluir filtros, buscas e ordenação
+ - Limitar o número de requisições
+
+## Nivel 3
+- [ ] **Python - Tipagem estática**:
+ - Utilizar tipagem estática em Python
+- [ ] **Python - Corrotinas**:
+ - Escrever aplicações assíncronas
+ - Lidar com concorrência
+ - Conhecer o conceito de objetos aguardáveis
+ - Criar tarefas concorrentemente
+- [ ] **Python - Geradores**:
+ - Criar objetos iteradores
+ - Usar avaliação preguiçosa
+ - Executar tarefas simultâneas
+ - Uso da palavra reservada yield
+- [ ] **Python - Metaprogramação**:
+ - Escrever um programa que manipula outros programas
+- [ ] **Python - MVC e MTV**:
+ - Entender o padrão MVC
+ - Entender o padrão MTV
+ - Compreender a diferença entre os padrões MVC e MTV
+- [ ] **Python - Pooling de processos**:
+ - Executar processos em paralelo
+ - Conhecer a classe Pool
+
+## Habilidade Auxiliar: Infraestrutura e boas práticas
+- [ ] **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
+- [ ] **Estratégias de SEO**:
+ - Escolher palavras-chave
+ - Entender como o Google classifica páginas
+ - Conhecer os fatores de rankeamento
+ - Fazer Link Building
+
+## Habilidade Auxiliar: Front-end
+- [ ] **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
+- [ ] **Estratégias de SEO**:
+ - Escolher palavras-chave
+ - Entender como o Google classifica páginas
+ - Conhecer os fatores de rankeamento
+ - Fazer Link Building
diff --git a/_data/downloadFiles/pt_BR/react.md b/_data/downloadFiles/pt_BR/react.md
new file mode 100644
index 000000000..999b15491
--- /dev/null
+++ b/_data/downloadFiles/pt_BR/react.md
@@ -0,0 +1,177 @@
+# Front-end ReactJS
+
+## Nivel 1
+- [ ] **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()'
+- [ ] **Conceitos SPA**:
+ - Entender o que é uma SPA
+ - Estabelecer rotas para outras páginas
+ - Conhecer frameworks SPA
+ - Comunicação com APIs
+- [ ] **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
+- [ ] **React - Componentes**:
+ - Para que servem e como funcionam componentes
+ - Conhecer a biblioteca Styled Components
+- [ ] **React - Props**:
+ - Como passar props
+ - Como manipular props
+- [ ] **React Hooks - State**:
+ - Controlar o estado de componentes
+ - Manipular variáveis
+ - Atualizar o valor de elementos
+- [ ] **Criar uma aplicação React**:
+ - Estruturar um novo projeto React
+ - Criar uma aplicação funcional do zero
+- [ ] **React Hooks - Effect**:
+ - Executar um componente somente após a renderização
+ - Acessar as props de um elemento
+ - Fazer chamadas a APIs
+
+## Nivel 2
+- [ ] **React Hooks - Memo**:
+ - Controlar o estado de variáveis externas
+- [ ] **React Hooks - Callback**:
+ - Retornar uma versão memoizada do callback caso as entradas tenham sido alteradas
+- [ ] **React Hooks - Ref**:
+ - Criar objetos mutáveis
+- [ ] **Bibliotecas de Design System**:
+ - Criar e manter bibliotecas que serão consumidas e usadas como padrão para a construção de um projeto
+- [ ] **React Developer Tools**:
+ - Executar o 'debugging' de aplicações
+- [ ] **Versionamento Semântico para Front-end**:
+ - Organizar as dependências de um projeto
+- [ ] **CSS-in-JS**:
+ - Lidar com código CSS usando JavaScript
+ - Utilizar styled-components
+ - Conhecer Styled-JSX
+- [ ] **Styled Components**:
+ - Lidar com código CSS em componentes
+- [ ] **Roteamento web para React**:
+ - Manipular a navegação entre interfaces e componentes
+- [ ] **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
+- [ ] **YARN**:
+ - Gerenciar pacotes
+ - Gerenciar dependências
+ - Instalação de pacotes offline
+ - Comandos
+ - Arquivo yarn.lock
+- [ ] **React Testing Library**:
+ - Testar componentes React
+- [ ] **Jest**:
+ - Testar componentes
+- [ ] **Cypress**:
+ - Criar e executar testes
+- [ ] **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 - 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
+- [ ] **Babel - Fundamentos**:
+ - Compreender como Babel converte a sintaxe para JavaScript
+
+## Nivel 3
+- [ ] **Lottie**:
+ - Criar animações
+- [ ] **Framer Motion**:
+ - Criar animações
+- [ ] **Service Workers**:
+ - Melhorar a performance e trabalhar offline
+- [ ] **React Hooks - Form**:
+ - Gerenciar formulários
+- [ ] **Lodash**:
+ - Melhorar o código e a performance
+- [ ] **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
+- [ ] **Redux Saga**:
+ - Criar e manter chamadas assíncronas e efeitos
+- [ ] **NextJS - Fundamentos**:
+ - Construir interfaces Web
+ - Diminuir o tempo de carregamento das páginas
+ - Renderizar páginas no lado do servidor
+ - Melhorar a performance em React
+ - Construir rotas de API com funções serveless
+ - CSS-in-JS
+
+## 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
diff --git a/_data/locale/pt-BR.json b/_data/locale/pt-BR.json
index f951375d4..420f9a111 100644
--- a/_data/locale/pt-BR.json
+++ b/_data/locale/pt-BR.json
@@ -46,6 +46,8 @@
"PATH.T_BLOCK_SUGGESTED_CONTENT.CHALLENGE.COLOR": "#FFFFFF",
"TSHAPE.BUTTON.BACK_TO_HOME": " Voltar para seleção de carreiras",
+ "TSHAPE.BUTTON.DOWNLOAD_T_FILE": "Baixar esse guia",
+
"FOOTER.DESCRIPTION": "Desenvolva sua Carreira em <T> · Versão: ",
"FOOTER.OPEN_SOURCE_CTA": "O Techguide.sh é um projeto open source, ",
diff --git a/_scripts/infra/log/index.ts b/_scripts/infra/log/index.ts
new file mode 100644
index 000000000..eb36d02d9
--- /dev/null
+++ b/_scripts/infra/log/index.ts
@@ -0,0 +1,2 @@
+// eslint-disable-next-line no-console
+export const log = console.log;
diff --git a/_scripts/modules/createShareableGuides/index.test.ts b/_scripts/modules/createShareableGuides/index.test.ts
new file mode 100644
index 000000000..40feb711a
--- /dev/null
+++ b/_scripts/modules/createShareableGuides/index.test.ts
@@ -0,0 +1,8 @@
+import { createShareableGuides } from "./index";
+
+describe("sample test", () => {
+ it("should pass", () => {
+ createShareableGuides();
+ expect(true).toBe(true);
+ });
+});
diff --git a/_scripts/modules/createShareableGuides/index.ts b/_scripts/modules/createShareableGuides/index.ts
new file mode 100644
index 000000000..62e01dbe7
--- /dev/null
+++ b/_scripts/modules/createShareableGuides/index.ts
@@ -0,0 +1,110 @@
+import path from "path";
+import fs from "fs";
+import {
+ GuideExpertise,
+ HomeGetAllGuidesDocument,
+ PathScreenGetGuideBySlugDocument,
+ SiteLocale,
+} from "@src/gql_types";
+import { initializeApollo } from "@src/infra/apolloClient";
+import { log } from "../../infra/log";
+import { GuideBlock, GuideCollaboration } from "@api/gql_types";
+
+log("module/createShareableGuides");
+main();
+
+export async function main() {
+ const apolloClient = initializeApollo();
+ const locale = SiteLocale.PtBr;
+
+ const { data } = await apolloClient.query({
+ query: HomeGetAllGuidesDocument,
+ variables: {
+ locale,
+ },
+ });
+
+ data.guides.forEach(async ({ slug, name }) => {
+ const filePath = path.resolve(
+ ".",
+ "_data",
+ "downloadFiles",
+ locale,
+ `${slug}`
+ );
+
+ const { data } = await apolloClient.query({
+ query: PathScreenGetGuideBySlugDocument,
+ variables: {
+ input: {
+ slug,
+ },
+ locale,
+ },
+ });
+
+ log(`Creating shareable guide: ${filePath}`);
+ // log(data);
+
+ fs.writeFileSync(
+ `${filePath}.md`,
+ templateMarkdown({
+ name,
+ level1: data.guide.expertises[0],
+ level2: data.guide.expertises[1],
+ level3: data.guide.expertises[2],
+ collaboration1: data.guide.collaborations[0],
+ collaboration2: data.guide.collaborations[1],
+ })
+ );
+ });
+}
+
+// ==============================
+// ==============================
+
+interface MarkdownTemplate {
+ name: string;
+ level1: GuideExpertise;
+ level2: GuideExpertise;
+ level3: GuideExpertise;
+ collaboration1: GuideCollaboration;
+ collaboration2: GuideCollaboration;
+}
+function templateMarkdown({
+ name,
+ level1,
+ level2,
+ level3,
+ collaboration1,
+ collaboration2,
+}: MarkdownTemplate) {
+ const template = `
+# ${name}
+
+## Nivel 1
+${level1.blocks.map(formatBlock).join("\n")}
+
+## Nivel 2
+${level2.blocks.map(formatBlock).join("\n")}
+
+## Nivel 3
+${level3.blocks.map(formatBlock).join("\n")}
+
+## Habilidade Auxiliar: ${collaboration1.name}
+${collaboration2.blocks.map(formatBlock).join("\n")}
+
+## Habilidade Auxiliar: ${collaboration2.name}
+${collaboration2.blocks.map(formatBlock).join("\n")}
+`;
+ return template.split("\n").slice(1).join("\n");
+
+ function formatBlock(block: GuideBlock) {
+ return `
+- [ ] **${block.item.name}**:
+${block.item.keyObjectives.map((ko) => ` - ${ko.name}`).join("\n")}`
+ .split("\n")
+ .slice(1)
+ .join("\n");
+ }
+}
diff --git a/jest.config.ts b/jest.config.ts
index 1d1c7ff81..4209a5b6a 100644
--- a/jest.config.ts
+++ b/jest.config.ts
@@ -186,10 +186,7 @@ const customJestConfig = {
// transform: undefined,
// An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation
- // transformIgnorePatterns: [
- // "/node_modules/",
- // "\\.pnp\\.[^\\/]+$"
- // ],
+ transformIgnorePatterns: ["node_modules/(?!chalk)"],
// An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them
// unmockedModulePathPatterns: undefined,
diff --git a/package.json b/package.json
index c92c60e3b..4d7c9e89b 100644
--- a/package.json
+++ b/package.json
@@ -1,77 +1,85 @@
-{
- "name": "tshapeddev",
- "version": "0.7.0",
- "main": "index.js",
- "repository": "git@github.com:alura/tshapeddev.git",
- "author": "Mario Souto <13791385+omariosouto@users.noreply.github.com>",
- "license": "MIT",
- "scripts": {
- "start": "next start",
- "dev": "next dev",
- "build": "next build",
- "build:static": "next build && next export",
- "lint": "eslint './src/**/*.{ts,tsx}' './_api/**/*.{ts,tsx}' && yamllint ./_data/**/*.yaml",
- "test": "jest",
- "generate:types": "yarn generate:types:back && yarn generate:types:front",
- "generate:types:back": "graphql-codegen --config codegen.yml",
- "generate:types:front": "graphql-codegen --config codegen-front.yml"
- },
- "dependencies": {
- "@apollo/client": "^3.6.9",
- "@graphql-codegen/typed-document-node": "^2.3.2",
- "@skynexui/responsive_stylesheet": "^1.10.3",
- "@testing-library/react": "^13.3.0",
- "@types/styled-components": "^5.1.25",
- "@urql/core": "^2.6.1",
- "apollo": "^2.34.0",
- "apollo-server-core": "^3.10.0",
- "apollo-server-micro": "^3.10.0",
- "d3": "^7.6.1",
- "deepmerge": "^4.2.2",
- "graphql": "^16.5.0",
- "graphql-scalars": "^1.17.0",
- "graphql-tag": "2.12.6",
- "html-react-parser": "^3.0.1",
- "lodash": "^4.17.21",
- "micro": "^9.3.4",
- "micro-cors": "^0.1.1",
- "next": "^12.2.4",
- "react": "^18.2.0",
- "react-dom": "^18.2.0",
- "react-is": "18.2.0",
- "read-yaml-file": "^2.1.0",
- "sift": "^16.0.0",
- "styled-components": "^5.3.5",
- "uuid": "^8.3.2",
- "yaml-lint": "^1.7.0"
- },
- "devDependencies": {
- "@types/graphql": "^14.5.0",
- "@types/lodash": "^4.14.182",
- "@graphql-codegen/cli": "2.6.2",
- "@graphql-codegen/introspection": "2.1.1",
- "@graphql-codegen/typescript": "2.4.8",
- "@graphql-codegen/typescript-operations": "2.3.5",
- "@graphql-codegen/typescript-react-apollo": "3.2.11",
- "@graphql-codegen/typescript-resolvers": "2.6.1",
- "@next/eslint-plugin-next": "^12.2.3",
- "@testing-library/jest-dom": "^5.16.4",
- "@types/jest": "^28.1.6",
- "@types/node": "^18.6.3",
- "@types/react": "^18.0.15",
- "@typescript-eslint/parser": "^5.31.0",
- "eslint": "8.14.0",
- "eslint-config-prettier": "^8.5.0",
- "eslint-plugin-jest": "^26.6.0",
- "eslint-plugin-jsx-a11y": "^6.6.1",
- "eslint-plugin-prettier": "^4.2.1",
- "eslint-plugin-react": "^7.30.1",
- "jest": "^28.1.3",
- "jest-environment-jsdom": "^28.1.3",
- "jest-styled-components": "^7.0.8",
- "prettier": "2.6.2",
- "ts-jest": "^28.0.7",
- "ts-node": "^10.9.1",
- "typescript": "^4.7.4"
- }
-}
+{
+ "name": "tshapeddev",
+ "version": "0.7.0",
+ "main": "index.js",
+ "repository": "git@github.com:alura/tshapeddev.git",
+ "author": "Mario Souto <13791385+omariosouto@users.noreply.github.com>",
+ "license": "MIT",
+ "scripts": {
+ "start": "next start",
+ "dev": "next dev",
+ "build": "next build",
+ "build:static": "next build && next export",
+ "lint": "eslint './src/**/*.{ts,tsx}' './_api/**/*.{ts,tsx}' && yamllint ./_data/**/*.yaml",
+ "test": "jest",
+ "generate:types": "yarn generate:types:back && yarn generate:types:front",
+ "generate:types:back": "graphql-codegen --config codegen.yml",
+ "generate:types:front": "graphql-codegen --config codegen-front.yml",
+ "dev:scripts:createShareableGuides": "nodemon -e ts --exec 'yarn scripts:createShareableGuides' --ignore '_data/*'",
+ "scripts:createShareableGuides": "ts-node -r tsconfig-paths/register ./_scripts/modules/createShareableGuides/index.ts"
+ },
+ "dependencies": {
+ "@apollo/client": "^3.6.9",
+ "@graphql-codegen/typed-document-node": "^2.3.2",
+ "@skynexui/responsive_stylesheet": "^1.10.3",
+ "@swc-node/register": "^1.5.2",
+ "@testing-library/react": "^13.3.0",
+ "@types/styled-components": "^5.1.25",
+ "@urql/core": "^2.6.1",
+ "apollo": "^2.34.0",
+ "apollo-server-core": "^3.10.0",
+ "apollo-server-micro": "^3.10.0",
+ "d3": "^7.6.1",
+ "deepmerge": "^4.2.2",
+ "graphql": "^16.5.0",
+ "graphql-scalars": "^1.17.0",
+ "graphql-tag": "2.12.6",
+ "html-react-parser": "^3.0.1",
+ "lodash": "^4.17.21",
+ "micro": "^9.3.4",
+ "micro-cors": "^0.1.1",
+ "next": "^12.2.4",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0",
+ "react-is": "18.2.0",
+ "read-yaml-file": "^2.1.0",
+ "sift": "^16.0.0",
+ "styled-components": "^5.3.5",
+ "uuid": "^8.3.2",
+ "yaml-lint": "^1.7.0"
+ },
+ "devDependencies": {
+ "@graphql-codegen/cli": "2.6.2",
+ "@graphql-codegen/introspection": "2.1.1",
+ "@graphql-codegen/typescript": "2.4.8",
+ "@graphql-codegen/typescript-operations": "2.3.5",
+ "@graphql-codegen/typescript-react-apollo": "3.2.11",
+ "@graphql-codegen/typescript-resolvers": "2.6.1",
+ "@next/eslint-plugin-next": "^12.2.3",
+ "@swc/core": "^1.3.4",
+ "@testing-library/jest-dom": "^5.16.4",
+ "@types/graphql": "^14.5.0",
+ "@types/jest": "^28.1.6",
+ "@types/lodash": "^4.14.182",
+ "@types/node": "^18.6.3",
+ "@types/react": "^18.0.15",
+ "@typescript-eslint/parser": "^5.31.0",
+ "eslint": "8.14.0",
+ "eslint-config-prettier": "^8.5.0",
+ "eslint-plugin-jest": "^26.6.0",
+ "eslint-plugin-jsx-a11y": "^6.6.1",
+ "eslint-plugin-prettier": "^4.2.1",
+ "eslint-plugin-react": "^7.30.1",
+ "jest": "^28.1.3",
+ "jest-environment-jsdom": "^28.1.3",
+ "jest-styled-components": "^7.0.8",
+ "nodemon": "^2.0.20",
+ "prettier": "2.6.2",
+ "ts-jest": "^28.0.7",
+ "tsconfig-paths": "^4.1.0",
+ "typescript": "^4.7.4"
+ },
+ "engines" : {
+ "node" : ">=16.0.0 <19.0.0"
+ }
+}
diff --git a/src/screens/PathScreen/patterns/TShape/index.tsx b/src/screens/PathScreen/patterns/TShape/index.tsx
index 33647427e..6c70f0144 100644
--- a/src/screens/PathScreen/patterns/TShape/index.tsx
+++ b/src/screens/PathScreen/patterns/TShape/index.tsx
@@ -152,7 +152,7 @@ export default function TShape({ guide }: TShapeProps) {
}}
>
+ {i18n.content("TSHAPE.BUTTON.DOWNLOAD_T_FILE")}
+
+