{
  "name": "Next.js.e.Django.Crie.um.Web.Chat.em.Tempo.Real-2025-CL",
  "modules": [
    {
      "name": "001. Introducao",
      "lessons": [
        {
          "name": "001. Apresentando o Projeto",
          "files": [
            {
              "id": "7b0108bdc9be5aab8be4ba26cab51783",
              "name": "Aula.mp4",
              "path": "../001. Introducao/001. Apresentando o Projeto/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 363.113651,
              "subtitles": []
            }
          ],
          "lessons": []
        },
        {
          "name": "002. Suporte ao Curso",
          "files": [
            {
              "id": "8e5bd64bca7553da9d8c0c87d5c3912f",
              "name": "descricao.html",
              "path": "../001. Introducao/002. Suporte ao Curso/descricao.html",
              "mime": "text/html",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        }
      ]
    },
    {
      "name": "002. Preparando o ambiente de desenvolvimento",
      "lessons": [
        {
          "name": "001. Verificando se voce ja possui o Node.Js e o Python instalado",
          "files": [
            {
              "id": "cd4f2c71ee3e5a8eb438f5e99de8fbc8",
              "name": "descricao.html",
              "path": "../002. Preparando o ambiente de desenvolvimento/001. Verificando se voce ja possui o Node.Js e o Python instalado/descricao.html",
              "mime": "text/html",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "002. Instalando o Node",
          "files": [
            {
              "id": "a54a50bc6cc259d994d2a1b271aa0a02",
              "name": "descricao.html",
              "path": "../002. Preparando o ambiente de desenvolvimento/002. Instalando o Node/descricao.html",
              "mime": "text/html",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "003. Instalando o Python",
          "files": [
            {
              "id": "30ce51ddd25a5323888472bc8ccdabba",
              "name": "descricao.html",
              "path": "../002. Preparando o ambiente de desenvolvimento/003. Instalando o Python/descricao.html",
              "mime": "text/html",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "004. Instalando o MySQL",
          "files": [
            {
              "id": "b54bc4021fb652e08bf6f36c6b03baad",
              "name": "descricao.html",
              "path": "../002. Preparando o ambiente de desenvolvimento/004. Instalando o MySQL/descricao.html",
              "mime": "text/html",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "005. Instalando o sistema de gerenciamento de banco de dados SGBD",
          "files": [
            {
              "id": "7a7786705187540180f4dc3175eb9754",
              "name": "descricao.html",
              "path": "../002. Preparando o ambiente de desenvolvimento/005. Instalando o sistema de gerenciamento de banco de dados SGBD/descricao.html",
              "mime": "text/html",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "006. Instalando o Postman ou utilizando o Resttest",
          "files": [
            {
              "id": "1c11f647bb2f5136be67f1c6b4895234",
              "name": "descricao.html",
              "path": "../002. Preparando o ambiente de desenvolvimento/006. Instalando o Postman ou utilizando o Resttest/descricao.html",
              "mime": "text/html",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "007. Entendendo a diferenca entre IDE e Editor de Codigo Fonte",
          "files": [
            {
              "id": "d4c2f4381c1352e984ea6bc56c5de685",
              "name": "descricao.html",
              "path": "../002. Preparando o ambiente de desenvolvimento/007. Entendendo a diferenca entre IDE e Editor de Codigo Fonte/descricao.html",
              "mime": "text/html",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        }
      ]
    },
    {
      "name": "003. Criando e Configurando Nossa API",
      "lessons": [
        {
          "name": "001. Ambientes Virtuais no Python",
          "files": [
            {
              "id": "141bb078f60659879067067ffa78d337",
              "name": "descricao.html",
              "path": "../003. Criando e Configurando Nossa API/001. Ambientes Virtuais no Python/descricao.html",
              "mime": "text/html",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "002. Criando o projeto com Django",
          "files": [
            {
              "id": "09857d0f15a9580db4bebb0a143ecea7",
              "name": "Aula.mp4",
              "path": "../003. Criando e Configurando Nossa API/002. Criando o projeto com Django/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 679.370748,
              "subtitles": []
            },
            {
              "id": "8e609468703b53298ee8bde2674328af",
              "name": "Documenta-o-do-Django.url",
              "path": "../003. Criando e Configurando Nossa API/002. Criando o projeto com Django/Documenta-o-do-Django.url",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "003. Criando e Configurando nosso Banco de Dados",
          "files": [
            {
              "id": "c9bf64abcf275e8b86ce338152c25aad",
              "name": "Aula.mp4",
              "path": "../003. Criando e Configurando Nossa API/003. Criando e Configurando nosso Banco de Dados/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 337.850998,
              "subtitles": []
            }
          ],
          "lessons": []
        },
        {
          "name": "004. Conhecendo o Painel Django admin",
          "files": [
            {
              "id": "837c98ab48a55d5fa14e4858bc02a9ba",
              "name": "Aula.mp4",
              "path": "../003. Criando e Configurando Nossa API/004. Conhecendo o Painel Django admin/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 283.65551,
              "subtitles": []
            }
          ],
          "lessons": []
        },
        {
          "name": "005. Instalando as dependencias do Projeto",
          "files": [
            {
              "id": "6f05908228b053dca1846b496c74766b",
              "name": "Aula.mp4",
              "path": "../003. Criando e Configurando Nossa API/005. Instalando as dependencias do Projeto/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 534.431519,
              "subtitles": []
            },
            {
              "id": "3fd1016487075046bb3ecf9552263724",
              "name": "Django-Rest-Framework.url",
              "path": "../003. Criando e Configurando Nossa API/005. Instalando as dependencias do Projeto/Django-Rest-Framework.url",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            },
            {
              "id": "bacc1a9e8d9b500bb8e5f1ae49e54fe1",
              "name": "core.zip",
              "path": "../003. Criando e Configurando Nossa API/005. Instalando as dependencias do Projeto/core.zip",
              "mime": "application/zip",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "006. Instalando e Configurando o CORS no Projeto",
          "files": [
            {
              "id": "c0e5c472b8e05b8792129cef5552a187",
              "name": "Aula.mp4",
              "path": "../003. Criando e Configurando Nossa API/006. Instalando e Configurando o CORS no Projeto/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 354.290748,
              "subtitles": []
            },
            {
              "id": "4d6b91693d885906a7d0b14ba379e35d",
              "name": "Django-Cors-Headers.url",
              "path": "../003. Criando e Configurando Nossa API/006. Instalando e Configurando o CORS no Projeto/Django-Cors-Headers.url",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "007. Trabalhando com autenticacao para APIs",
          "files": [
            {
              "id": "373efbe60807578ca1a5850161ccbcc2",
              "name": "Aula.mp4",
              "path": "../003. Criando e Configurando Nossa API/007. Trabalhando com autenticacao para APIs/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 342.448549,
              "subtitles": []
            },
            {
              "id": "e1cc5d1cb4cb5cef83517282e640299d",
              "name": "Simple-JWT.url",
              "path": "../003. Criando e Configurando Nossa API/007. Trabalhando com autenticacao para APIs/Simple-JWT.url",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            },
            {
              "id": "b3de0d06824e5fb4a0ecff7d0a01ffd5",
              "name": "settings.py",
              "path": "../003. Criando e Configurando Nossa API/007. Trabalhando com autenticacao para APIs/settings.py",
              "mime": "text/x-python",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "008. Apresentando o Diagrama do Banco de Dados",
          "files": [
            {
              "id": "4562870abdaf5bea82674abf65806885",
              "name": "Aula.mp4",
              "path": "../003. Criando e Configurando Nossa API/008. Apresentando o Diagrama do Banco de Dados/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 632.512789,
              "subtitles": []
            }
          ],
          "lessons": []
        }
      ]
    },
    {
      "name": "004. Criando o App-Accounts",
      "lessons": [
        {
          "name": "001. Criando os Models",
          "files": [
            {
              "id": "62872623ef5b562fb81dfa3d6c962bee",
              "name": "Aula.mp4",
              "path": "../004. Criando o App-Accounts/001. Criando os Models/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 1123.104966,
              "subtitles": []
            },
            {
              "id": "0140bf16801a5f3c9354aa82151084b1",
              "name": "accounts.zip",
              "path": "../004. Criando o App-Accounts/001. Criando os Models/accounts.zip",
              "mime": "application/zip",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "002. Criando os Serializers",
          "files": [
            {
              "id": "7459a88457ad5f73894bcbb4b3cdb260",
              "name": "Aula.mp4",
              "path": "../004. Criando o App-Accounts/002. Criando os Serializers/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 430.823878,
              "subtitles": []
            },
            {
              "id": "62d9c65228355c408cbafba55a970920",
              "name": "serializers.py",
              "path": "../004. Criando o App-Accounts/002. Criando os Serializers/serializers.py",
              "mime": "text/x-python",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "003. Criando o Modulo Auth",
          "files": [
            {
              "id": "4e84ee12715a5134a65c1736520bd324",
              "name": "Aula.mp4",
              "path": "../004. Criando o App-Accounts/003. Criando o Modulo Auth/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 596.753991,
              "subtitles": []
            },
            {
              "id": "7e536513594b5300baf206167e731172",
              "name": "auth.py",
              "path": "../004. Criando o App-Accounts/003. Criando o Modulo Auth/auth.py",
              "mime": "text/x-python",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "004. Criando as Views-SignInView",
          "files": [
            {
              "id": "d0d4bc212d655e9881efce287b961f64",
              "name": "Aula.mp4",
              "path": "../004. Criando o App-Accounts/004. Criando as Views-SignInView/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 673.6122,
              "subtitles": []
            },
            {
              "id": "ffa1a12d92d05e4fb22de638c52a23ea",
              "name": "exceptions.py",
              "path": "../004. Criando o App-Accounts/004. Criando as Views-SignInView/exceptions.py",
              "mime": "text/x-python",
              "kind": "file",
              "duration": 0.0
            },
            {
              "id": "8ae301156309566d8e63dbd29611f7c7",
              "name": "views.py",
              "path": "../004. Criando o App-Accounts/004. Criando as Views-SignInView/views.py",
              "mime": "text/x-python",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "005. Criando as Views-SignUpView",
          "files": [
            {
              "id": "6f225a7bcda855d3b66fa8703b20bcb1",
              "name": "Aula.mp4",
              "path": "../004. Criando o App-Accounts/005. Criando as Views-SignUpView/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 207.493923,
              "subtitles": []
            },
            {
              "id": "3a8c39fd695a51b0b073693ecec4182f",
              "name": "views.py",
              "path": "../004. Criando o App-Accounts/005. Criando as Views-SignUpView/views.py",
              "mime": "text/x-python",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "006. Criando as Views-UserView",
          "files": [
            {
              "id": "4ba852ac96a250399d8431347c2c7d6f",
              "name": "Aula.mp4",
              "path": "../004. Criando o App-Accounts/006. Criando as Views-UserView/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 1269.344512,
              "subtitles": []
            },
            {
              "id": "8bb86881507a55e29fae1fb21bc60004",
              "name": "views.py",
              "path": "../004. Criando o App-Accounts/006. Criando as Views-UserView/views.py",
              "mime": "text/x-python",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "007. Configurando e Testando os Endpoints",
          "files": [
            {
              "id": "a19f05e9bc235a5d99a12c83f00b67d3",
              "name": "Aula.mp4",
              "path": "../004. Criando o App-Accounts/007. Configurando e Testando os Endpoints/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 832.762063,
              "subtitles": []
            },
            {
              "id": "d50adb9c11e35c4795ebae85243c85eb",
              "name": "urls.py",
              "path": "../004. Criando o App-Accounts/007. Configurando e Testando os Endpoints/urls.py",
              "mime": "text/x-python",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        }
      ]
    },
    {
      "name": "005. Criando o App-Attachments",
      "lessons": [
        {
          "name": "001. Criando os Models",
          "files": [
            {
              "id": "1e55e1c89597569483b4e40357c0a26f",
              "name": "Aula.mp4",
              "path": "../005. Criando o App-Attachments/001. Criando os Models/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 533.363401,
              "subtitles": []
            },
            {
              "id": "ad9965e7fcee57ada9cb29d32859a6f0",
              "name": "models.py",
              "path": "../005. Criando o App-Attachments/001. Criando os Models/models.py",
              "mime": "text/x-python",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "002. Criando o Byte Formatter",
          "files": [
            {
              "id": "2971c0439aab560e9002fea5e1315c3b",
              "name": "Aula.mp4",
              "path": "../005. Criando o App-Attachments/002. Criando o Byte Formatter/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 231.271202,
              "subtitles": []
            },
            {
              "id": "84eb652644835086b029c25233f8f71a",
              "name": "formatter.py",
              "path": "../005. Criando o App-Attachments/002. Criando o Byte Formatter/formatter.py",
              "mime": "text/x-python",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "003. Criando o Serializers",
          "files": [
            {
              "id": "2ec7e67908d65698ae4fceeb0d1238c7",
              "name": "Aula.mp4",
              "path": "../005. Criando o App-Attachments/003. Criando o Serializers/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 256.952517,
              "subtitles": []
            },
            {
              "id": "c7375aa003dd58a8baa8c1c8c7f64d45",
              "name": "serializers.py",
              "path": "../005. Criando o App-Attachments/003. Criando o Serializers/serializers.py",
              "mime": "text/x-python",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        }
      ]
    },
    {
      "name": "006. Criando o App-Chats",
      "lessons": [
        {
          "name": "001. Criando os Models",
          "files": [
            {
              "id": "8a07a8d8d2fe5cd692494b7ab177d904",
              "name": "Aula.mp4",
              "path": "../006. Criando o App-Chats/001. Criando os Models/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 762.777007,
              "subtitles": []
            },
            {
              "id": "41ec37f23c4a54e2a9e86b2a42576530",
              "name": "models.py",
              "path": "../006. Criando o App-Chats/001. Criando os Models/models.py",
              "mime": "text/x-python",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "002. Criando as Exceptions",
          "files": [
            {
              "id": "0bf62bdcc6cd5bdb9d31459e45a665cd",
              "name": "Aula.mp4",
              "path": "../006. Criando o App-Chats/002. Criando as Exceptions/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 160.357324,
              "subtitles": []
            },
            {
              "id": "976334abe5f35b7e9602f998e08bf61c",
              "name": "exceptions.py",
              "path": "../006. Criando o App-Chats/002. Criando as Exceptions/exceptions.py",
              "mime": "text/x-python",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "003. Criando os Serializers",
          "files": [
            {
              "id": "42d08fb72a0759f18f38e2932ffeebeb",
              "name": "Aula.mp4",
              "path": "../006. Criando o App-Chats/003. Criando os Serializers/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 981.230748,
              "subtitles": []
            },
            {
              "id": "fb3c20f15d5656519b0c5c7ceb6db419",
              "name": "serializers.py",
              "path": "../006. Criando o App-Chats/003. Criando os Serializers/serializers.py",
              "mime": "text/x-python",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "004. Criando as Views-BaseView",
          "files": [
            {
              "id": "1025a0884171552a91720276689796fa",
              "name": "Aula.mp4",
              "path": "../006. Criando o App-Chats/004. Criando as Views-BaseView/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 1229.127483,
              "subtitles": []
            },
            {
              "id": "4c39083d67e45286a4ec6a97d9e38cf9",
              "name": "base.py",
              "path": "../006. Criando o App-Chats/004. Criando as Views-BaseView/base.py",
              "mime": "text/x-python",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "005. Criando as Views-ChatsView",
          "files": [
            {
              "id": "c0d84fd9dc355ca2909a7c420861d1e3",
              "name": "Aula.mp4",
              "path": "../006. Criando o App-Chats/005. Criando as Views-ChatsView/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 807.35941,
              "subtitles": []
            },
            {
              "id": "72c83d4b59ff5998bb321b4c87111ed2",
              "name": "chats.py",
              "path": "../006. Criando o App-Chats/005. Criando as Views-ChatsView/chats.py",
              "mime": "text/x-python",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "006. Criando as Views-ChatView",
          "files": [
            {
              "id": "eaf8909dac7a5dd0a8f3b9a5090d2cf3",
              "name": "Aula.mp4",
              "path": "../006. Criando o App-Chats/006. Criando as Views-ChatView/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 370.359002,
              "subtitles": []
            },
            {
              "id": "dd0e09a7ed445931afdc454044650281",
              "name": "chats.py",
              "path": "../006. Criando o App-Chats/006. Criando as Views-ChatView/chats.py",
              "mime": "text/x-python",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "007. Configurando e Testando os Endpoints-Chats",
          "files": [
            {
              "id": "4c9aa76084d9559391f693751071c55f",
              "name": "Aula.mp4",
              "path": "../006. Criando o App-Chats/007. Configurando e Testando os Endpoints-Chats/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 512.558277,
              "subtitles": []
            },
            {
              "id": "2442c7eca2d9504f96aea6a5ffd97d8a",
              "name": "urls.py",
              "path": "../006. Criando o App-Chats/007. Configurando e Testando os Endpoints-Chats/urls.py",
              "mime": "text/x-python",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "008. Criando as Views-ChatMessagesView-Parte 1",
          "files": [
            {
              "id": "61d162240ccc5f97a1d8e3ef5309ff57",
              "name": "Aula.mp4",
              "path": "../006. Criando o App-Chats/008. Criando as Views-ChatMessagesView-Parte 1/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 565.453447,
              "subtitles": []
            },
            {
              "id": "ebaf6cc085225fb7964b4239a3f048b6",
              "name": "messages.py",
              "path": "../006. Criando o App-Chats/008. Criando as Views-ChatMessagesView-Parte 1/messages.py",
              "mime": "text/x-python",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "009. Criando as Views-ChatMessagesView-Parte 2",
          "files": [
            {
              "id": "d65e6e14418352c0828a25cd134e5027",
              "name": "Aula.mp4",
              "path": "../006. Criando o App-Chats/009. Criando as Views-ChatMessagesView-Parte 2/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 1079.82288,
              "subtitles": []
            },
            {
              "id": "7be40753463850ba8d8941054851dec0",
              "name": "messages.py",
              "path": "../006. Criando o App-Chats/009. Criando as Views-ChatMessagesView-Parte 2/messages.py",
              "mime": "text/x-python",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "010. Criando as Views-ChatMessageView",
          "files": [
            {
              "id": "fe3b7c9891b055dfbf5b443cfc32b2bc",
              "name": "Aula.mp4",
              "path": "../006. Criando o App-Chats/010. Criando as Views-ChatMessageView/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 324.104762,
              "subtitles": []
            },
            {
              "id": "7b9e06d15b025e7b8341bb5e9152b229",
              "name": "messages.py",
              "path": "../006. Criando o App-Chats/010. Criando as Views-ChatMessageView/messages.py",
              "mime": "text/x-python",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "011. Configurando e Testando os Endpoints-Chat Messages",
          "files": [
            {
              "id": "5f127e62f9ac515d886ab2a03b6b0396",
              "name": "Aula.mp4",
              "path": "../006. Criando o App-Chats/011. Configurando e Testando os Endpoints-Chat Messages/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 470.483651,
              "subtitles": []
            },
            {
              "id": "2b32691dd8bb5a5ab89e3b09bdf6d095",
              "name": "urls.py",
              "path": "../006. Criando o App-Chats/011. Configurando e Testando os Endpoints-Chat Messages/urls.py",
              "mime": "text/x-python",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "012. Trabalhando com os eventos recebidos do Client",
          "files": [
            {
              "id": "82dff51be987505e93cea8f7bbdc3957",
              "name": "Aula.mp4",
              "path": "../006. Criando o App-Chats/012. Trabalhando com os eventos recebidos do Client/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 415.498685,
              "subtitles": []
            },
            {
              "id": "d6e8f77d611d5f03be9449586f9a924e",
              "name": "socket.py",
              "path": "../006. Criando o App-Chats/012. Trabalhando com os eventos recebidos do Client/socket.py",
              "mime": "text/x-python",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "013. Adicionado um Default Avatar no projeto",
          "files": [
            {
              "id": "f2c3fd02f03b5678a352bb4cfd39b50f",
              "name": "Aula.mp4",
              "path": "../006. Criando o App-Chats/013. Adicionado um Default Avatar no projeto/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 88.421769,
              "subtitles": []
            },
            {
              "id": "3e112a8393b05df6b1a7879dd3585f2c",
              "name": "Reposit-rio-no-Github.url",
              "path": "../006. Criando o App-Chats/013. Adicionado um Default Avatar no projeto/Reposit-rio-no-Github.url",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            },
            {
              "id": "6ab64fd226e8510ab3c90fbf3459c16a",
              "name": "default-avatar.png",
              "path": "../006. Criando o App-Chats/013. Adicionado um Default Avatar no projeto/default-avatar.png",
              "mime": "image/png",
              "kind": "image",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "014. Clonando o Repositorio do Github",
          "files": [
            {
              "id": "3e0bdbe44be85af9ac90f06e911dc2f8",
              "name": "Aula.mp4",
              "path": "../006. Criando o App-Chats/014. Clonando o Repositorio do Github/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 322.525805,
              "subtitles": []
            },
            {
              "id": "42da30bf775c5e34beb5c6fe4d3462ab",
              "name": "Reposit-rio-do-Github.url",
              "path": "../006. Criando o App-Chats/014. Clonando o Repositorio do Github/Reposit-rio-do-Github.url",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        }
      ]
    },
    {
      "name": "007. Exercicios de Python Django e Django Rest Framework",
      "lessons": [
        {
          "name": "001. Exercicios-Python-Basico",
          "files": [
            {
              "id": "0c7ce34650a953c8bf12607ac8a883aa",
              "name": "quiz.html",
              "path": "../007. Exercicios de Python Django e Django Rest Framework/001. Exercicios-Python-Basico/quiz.html",
              "mime": "text/html",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "002. Exercicios-Python-Intermediario Avancado",
          "files": [
            {
              "id": "17bbfddce056523b9f89c5a416923477",
              "name": "quiz.html",
              "path": "../007. Exercicios de Python Django e Django Rest Framework/002. Exercicios-Python-Intermediario Avancado/quiz.html",
              "mime": "text/html",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "003. Exercicios-Django-Basico Intermediario Avancado",
          "files": [
            {
              "id": "58a1779a6e285a0b9dccc4a81a52c5a1",
              "name": "quiz.html",
              "path": "../007. Exercicios de Python Django e Django Rest Framework/003. Exercicios-Django-Basico Intermediario Avancado/quiz.html",
              "mime": "text/html",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "004. Exercicios-Django Rest Framework-Basico Intermediario Avanca",
          "files": [
            {
              "id": "a5c8047805d85e4e9dba53fa8d4acceb",
              "name": "quiz.html",
              "path": "../007. Exercicios de Python Django e Django Rest Framework/004. Exercicios-Django Rest Framework-Basico Intermediario Avanca/quiz.html",
              "mime": "text/html",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        }
      ]
    },
    {
      "name": "008. Iniciando o projeto Frontend",
      "lessons": [
        {
          "name": "001. Apresentando o projeto no Figma",
          "files": [
            {
              "id": "ffa0141a0a50581bbd335dff2917f4a8",
              "name": "Aula.mp4",
              "path": "../008. Iniciando o projeto Frontend/001. Apresentando o projeto no Figma/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 498.394082,
              "subtitles": []
            },
            {
              "id": "f02858660a6b56abbb5bef632462e047",
              "name": "Design-no-Figma.url",
              "path": "../008. Iniciando o projeto Frontend/001. Apresentando o projeto no Figma/Design-no-Figma.url",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "002. Instalando e Configurando o Next.js",
          "files": [
            {
              "id": "be017169030a50ba932d44c4893bfecb",
              "name": "Aula.mp4",
              "path": "../008. Iniciando o projeto Frontend/002. Instalando e Configurando o Next.js/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 301.070522,
              "subtitles": []
            },
            {
              "id": "9dd098a1ac695711aa32bd3b9de79777",
              "name": "Documenta-o-Next.js.url",
              "path": "../008. Iniciando o projeto Frontend/002. Instalando e Configurando o Next.js/Documenta-o-Next.js.url",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "003. Conhecendo e Instalando o Shadcn UI",
          "files": [
            {
              "id": "8af4c038d36f5661945914a6d3f4492f",
              "name": "Aula.mp4",
              "path": "../008. Iniciando o projeto Frontend/003. Conhecendo e Instalando o Shadcn UI/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 246.503515,
              "subtitles": []
            },
            {
              "id": "657dcecd92cc5ec1ac97216a16430bdc",
              "name": "Documenta-o-Shadcn-UI.url",
              "path": "../008. Iniciando o projeto Frontend/003. Conhecendo e Instalando o Shadcn UI/Documenta-o-Shadcn-UI.url",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "004. Criando os Providers",
          "files": [
            {
              "id": "42e9c67d5721567d976c8473f8d47644",
              "name": "Aula.mp4",
              "path": "../008. Iniciando o projeto Frontend/004. Criando os Providers/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 890.533447,
              "subtitles": []
            },
            {
              "id": "8272238fc4265d0193c0281916f24701",
              "name": "Providers.tsx",
              "path": "../008. Iniciando o projeto Frontend/004. Criando os Providers/Providers.tsx",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "005. Criando os Types do Projeto",
          "files": [
            {
              "id": "eb5011c647c353bcb48f9d4635eaba22",
              "name": "Aula.mp4",
              "path": "../008. Iniciando o projeto Frontend/005. Criando os Types do Projeto/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 982.484649,
              "subtitles": []
            },
            {
              "id": "e077469183fd58619d10b27a990e7346",
              "name": "types.zip",
              "path": "../008. Iniciando o projeto Frontend/005. Criando os Types do Projeto/types.zip",
              "mime": "application/zip",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "006. Criando os Schemas com Zod-AuthSchema",
          "files": [
            {
              "id": "57893646fac0563f88fc1516af3ccc7d",
              "name": "Aula.mp4",
              "path": "../008. Iniciando o projeto Frontend/006. Criando os Schemas com Zod-AuthSchema/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 701.522608,
              "subtitles": []
            },
            {
              "id": "b6097b27a3f5553fb8dc24aad808b4c4",
              "name": "Documenta-o-Zod.url",
              "path": "../008. Iniciando o projeto Frontend/006. Criando os Schemas com Zod-AuthSchema/Documenta-o-Zod.url",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            },
            {
              "id": "0c97116291d451faab5c848021acfe3e",
              "name": "authSchema.ts",
              "path": "../008. Iniciando o projeto Frontend/006. Criando os Schemas com Zod-AuthSchema/authSchema.ts",
              "mime": "text/vnd.trolltech.linguist",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "007. Criando os Schemas com Zod-ChatSchema",
          "files": [
            {
              "id": "58392a7911be5a3d933b0b377c1e0f31",
              "name": "Aula.mp4",
              "path": "../008. Iniciando o projeto Frontend/007. Criando os Schemas com Zod-ChatSchema/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 130.914354,
              "subtitles": []
            },
            {
              "id": "61e5ffd4fce053f3803fe2ed68fe0d94",
              "name": "chatSchema.ts",
              "path": "../008. Iniciando o projeto Frontend/007. Criando os Schemas com Zod-ChatSchema/chatSchema.ts",
              "mime": "text/vnd.trolltech.linguist",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "008. Criando os Schemas com Zod-UserSchema",
          "files": [
            {
              "id": "d23bd739fc8059a4ba87865f797c1a53",
              "name": "Aula.mp4",
              "path": "../008. Iniciando o projeto Frontend/008. Criando os Schemas com Zod-UserSchema/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 496.861565,
              "subtitles": []
            },
            {
              "id": "5d2ffe80ac9951faa926afe0b2b92958",
              "name": "userSchema.ts",
              "path": "../008. Iniciando o projeto Frontend/008. Criando os Schemas com Zod-UserSchema/userSchema.ts",
              "mime": "text/vnd.trolltech.linguist",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "009. Trabalhando com requisicoes no Axios",
          "files": [
            {
              "id": "ad724b3c14835f98ae9c6c277806f26c",
              "name": "Aula.mp4",
              "path": "../008. Iniciando o projeto Frontend/009. Trabalhando com requisicoes no Axios/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 1379.453741,
              "subtitles": []
            },
            {
              "id": "c8314c514ae65309913b35aae86369ea",
              "name": "Documenta-o-do-Axios.url",
              "path": "../008. Iniciando o projeto Frontend/009. Trabalhando com requisicoes no Axios/Documenta-o-do-Axios.url",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            },
            {
              "id": "a6f9487d91e95c918ffb504a919217ed",
              "name": "api.ts",
              "path": "../008. Iniciando o projeto Frontend/009. Trabalhando com requisicoes no Axios/api.ts",
              "mime": "text/vnd.trolltech.linguist",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "010. Criando as Requests",
          "files": [
            {
              "id": "db10f09b73f05f819713fa496f9299f4",
              "name": "Aula.mp4",
              "path": "../008. Iniciando o projeto Frontend/010. Criando as Requests/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 1057.160159,
              "subtitles": []
            },
            {
              "id": "1895c1a77b03565aa45f184ca7b08813",
              "name": "requests.ts",
              "path": "../008. Iniciando o projeto Frontend/010. Criando as Requests/requests.ts",
              "mime": "text/vnd.trolltech.linguist",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "011. Usando Server Actions para autenticacao",
          "files": [
            {
              "id": "53a014eefed650d0bc7d30647932e2b9",
              "name": "Aula.mp4",
              "path": "../008. Iniciando o projeto Frontend/011. Usando Server Actions para autenticacao/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 830.95093,
              "subtitles": []
            },
            {
              "id": "feb86ee1e7fd530b9b0ee5bd9052526e",
              "name": "auth.ts",
              "path": "../008. Iniciando o projeto Frontend/011. Usando Server Actions para autenticacao/auth.ts",
              "mime": "text/vnd.trolltech.linguist",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "012. Trabalhando com Middlewares de Autenticacao",
          "files": [
            {
              "id": "c9fa27feea0856a4994fa3cbb24ee099",
              "name": "Aula.mp4",
              "path": "../008. Iniciando o projeto Frontend/012. Trabalhando com Middlewares de Autenticacao/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 636.228005,
              "subtitles": []
            },
            {
              "id": "d87aeb31079d583490a2a1a8e5d1579f",
              "name": "Next.js-Middlewares.url",
              "path": "../008. Iniciando o projeto Frontend/012. Trabalhando com Middlewares de Autenticacao/Next.js-Middlewares.url",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            },
            {
              "id": "81d1218a0ece5f809680087646f5c309",
              "name": "middleware.ts",
              "path": "../008. Iniciando o projeto Frontend/012. Trabalhando com Middlewares de Autenticacao/middleware.ts",
              "mime": "text/vnd.trolltech.linguist",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "013. Instalando e Conhecendo o Zustand",
          "files": [
            {
              "id": "81cec3554d0f596c8fbc420e9288e69b",
              "name": "Aula.mp4",
              "path": "../008. Iniciando o projeto Frontend/013. Instalando e Conhecendo o Zustand/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 315.652676,
              "subtitles": []
            },
            {
              "id": "27ccee09c51c5822aad5dd28d44b45e0",
              "name": "Documenta-o-Zustand.url",
              "path": "../008. Iniciando o projeto Frontend/013. Instalando e Conhecendo o Zustand/Documenta-o-Zustand.url",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "014. Criando os Stores com Zustand-AuthStore",
          "files": [
            {
              "id": "d7d1d79ff4e4582b912b6f434550b9f5",
              "name": "Aula.mp4",
              "path": "../008. Iniciando o projeto Frontend/014. Criando os Stores com Zustand-AuthStore/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 323.315283,
              "subtitles": []
            },
            {
              "id": "91c95bb8c0d7559ea5117c8bf4cb59c5",
              "name": "authStore.ts",
              "path": "../008. Iniciando o projeto Frontend/014. Criando os Stores com Zustand-AuthStore/authStore.ts",
              "mime": "text/vnd.trolltech.linguist",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "015. Criando os Stores com Zustand-ChatStore",
          "files": [
            {
              "id": "208898c1ed505747bc38b5ad7eea829e",
              "name": "Aula.mp4",
              "path": "../008. Iniciando o projeto Frontend/015. Criando os Stores com Zustand-ChatStore/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 654.339592,
              "subtitles": []
            },
            {
              "id": "20f08cace8d1590e8c18dffe2f589137",
              "name": "chatStore.ts",
              "path": "../008. Iniciando o projeto Frontend/015. Criando os Stores com Zustand-ChatStore/chatStore.ts",
              "mime": "text/vnd.trolltech.linguist",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        }
      ]
    },
    {
      "name": "009. Criando o Layout",
      "lessons": [
        {
          "name": "001. Criando o Header-Parte 1",
          "files": [
            {
              "id": "b9d9eae2100b55b3893a45ae27aaf839",
              "name": "Aula.mp4",
              "path": "../009. Criando o Layout/001. Criando o Header-Parte 1/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 927.128163,
              "subtitles": []
            },
            {
              "id": "87f6cde0d6c45cd49de3582bfae89b2d",
              "name": "Header.tsx",
              "path": "../009. Criando o Layout/001. Criando o Header-Parte 1/Header.tsx",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "002. Criando o Header-Parte 2",
          "files": [
            {
              "id": "33fa916255eb507cb1f5c8e53b6db319",
              "name": "Aula.mp4",
              "path": "../009. Criando o Layout/002. Criando o Header-Parte 2/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 1115.395896,
              "subtitles": []
            },
            {
              "id": "484edbeca76858a183972efee0233cff",
              "name": "Header.tsx",
              "path": "../009. Criando o Layout/002. Criando o Header-Parte 2/Header.tsx",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            },
            {
              "id": "af361dac1c7658cdab1c59a624ddd365",
              "name": "assets.zip",
              "path": "../009. Criando o Layout/002. Criando o Header-Parte 2/assets.zip",
              "mime": "application/zip",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "003. Criando o LeftSide Lista de conversas-Parte 1",
          "files": [
            {
              "id": "7537b02145fe5bf98c0d4108ba160c24",
              "name": "Aula.mp4",
              "path": "../009. Criando o Layout/003. Criando o LeftSide Lista de conversas-Parte 1/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 1324.886757,
              "subtitles": []
            },
            {
              "id": "7a8d5e898eca5ce5bf030d16944017ad",
              "name": "avatar.tsx",
              "path": "../009. Criando o Layout/003. Criando o LeftSide Lista de conversas-Parte 1/avatar.tsx",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            },
            {
              "id": "7c6e221303855271b0bcf115608591f7",
              "name": "index.tsx",
              "path": "../009. Criando o Layout/003. Criando o LeftSide Lista de conversas-Parte 1/index.tsx",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "004. Criando o LeftSide Nova conversa",
          "files": [
            {
              "id": "d4a9aa3234da5ccb92c8f477a3fb88dd",
              "name": "Aula.mp4",
              "path": "../009. Criando o Layout/004. Criando o LeftSide Nova conversa/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 908.319955,
              "subtitles": []
            },
            {
              "id": "2f22c57bbbcf5aba9a95db316bca5d66",
              "name": "Documenta-o-React-Hook-Form.url",
              "path": "../009. Criando o Layout/004. Criando o LeftSide Nova conversa/Documenta-o-React-Hook-Form.url",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            },
            {
              "id": "86007ce068b557908a20f8dcf7ab5943",
              "name": "NewChat.tsx",
              "path": "../009. Criando o Layout/004. Criando o LeftSide Nova conversa/NewChat.tsx",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "005. Criando o LeftSide Lista de conversas-Parte 2",
          "files": [
            {
              "id": "8edd3e0d1e3e51e3a95db1bfd570d141",
              "name": "Aula.mp4",
              "path": "../009. Criando o Layout/005. Criando o LeftSide Lista de conversas-Parte 2/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 1737.784807,
              "subtitles": []
            },
            {
              "id": "badee5c095fb5180aeb5483b30200e8b",
              "name": "index.tsx",
              "path": "../009. Criando o Layout/005. Criando o LeftSide Lista de conversas-Parte 2/index.tsx",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "006. Juntando os componentes no MainLayout",
          "files": [
            {
              "id": "23bcc88ad2e854508feaec2014b0f30e",
              "name": "Aula.mp4",
              "path": "../009. Criando o Layout/006. Juntando os componentes no MainLayout/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 708.906599,
              "subtitles": []
            },
            {
              "id": "b8b74ad4a9c959e9a4ef8b804125260f",
              "name": "MainLayout.tsx",
              "path": "../009. Criando o Layout/006. Juntando os componentes no MainLayout/MainLayout.tsx",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            },
            {
              "id": "6243e482773d53ea8502eb3e08f27290",
              "name": "React-spinners.url",
              "path": "../009. Criando o Layout/006. Juntando os componentes no MainLayout/React-spinners.url",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "007. Configurando o RootLayout",
          "files": [
            {
              "id": "2988213e3b205f1aa120b3d30baca750",
              "name": "Aula.mp4",
              "path": "../009. Criando o Layout/007. Configurando o RootLayout/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 790.362358,
              "subtitles": []
            },
            {
              "id": "013590529a145c2eb4e0b54145b691be",
              "name": "globals.css",
              "path": "../009. Criando o Layout/007. Configurando o RootLayout/globals.css",
              "mime": "text/css",
              "kind": "file",
              "duration": 0.0
            },
            {
              "id": "a44055ca26d25748a7f0fd3ea215f6cf",
              "name": "grftalk.png",
              "path": "../009. Criando o Layout/007. Configurando o RootLayout/grftalk.png",
              "mime": "image/png",
              "kind": "image",
              "duration": 0.0
            },
            {
              "id": "05d572aa03d558c2be70c06ced58adf5",
              "name": "layout.tsx",
              "path": "../009. Criando o Layout/007. Configurando o RootLayout/layout.tsx",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        }
      ]
    },
    {
      "name": "010. Criando as Paginas",
      "lessons": [
        {
          "name": "001. Customizando o Scroll das paginas",
          "files": [
            {
              "id": "064f2632e8c056e2999be6399dd484d4",
              "name": "Aula.mp4",
              "path": "../010. Criando as Paginas/001. Customizando o Scroll das paginas/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 168.90229,
              "subtitles": []
            },
            {
              "id": "189d9f63304d595b9ddb593ae355f80f",
              "name": "globals.css",
              "path": "../010. Criando as Paginas/001. Customizando o Scroll das paginas/globals.css",
              "mime": "text/css",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "002. Criando a Pagina de SignUp-Parte 1",
          "files": [
            {
              "id": "1d3b6f76ffbb52bcb7177501257d9492",
              "name": "Aula.mp4",
              "path": "../010. Criando as Paginas/002. Criando a Pagina de SignUp-Parte 1/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 551.057007,
              "subtitles": []
            },
            {
              "id": "0b97f859ef0b5901b1f1245612969b10",
              "name": "SignUp.tsx",
              "path": "../010. Criando as Paginas/002. Criando a Pagina de SignUp-Parte 1/SignUp.tsx",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "003. Criando a Pagina de SignUp-Parte 2",
          "files": [
            {
              "id": "ccc6f314e91a5221b0428c335838be15",
              "name": "Aula.mp4",
              "path": "../010. Criando as Paginas/003. Criando a Pagina de SignUp-Parte 2/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 1052.701927,
              "subtitles": []
            },
            {
              "id": "660ac6b163625efba49832b9567ea353",
              "name": "SignUp.tsx",
              "path": "../010. Criando as Paginas/003. Criando a Pagina de SignUp-Parte 2/SignUp.tsx",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            },
            {
              "id": "e3f066be9cfe5061a6db279c98b40b41",
              "name": "auth.zip",
              "path": "../010. Criando as Paginas/003. Criando a Pagina de SignUp-Parte 2/auth.zip",
              "mime": "application/zip",
              "kind": "file",
              "duration": 0.0
            },
            {
              "id": "f0d31460b0045a4bb1a8fb5c890c7d17",
              "name": "globals.css",
              "path": "../010. Criando as Paginas/003. Criando a Pagina de SignUp-Parte 2/globals.css",
              "mime": "text/css",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "004. Criando a Pagina de SignIn",
          "files": [
            {
              "id": "0134e1387d255d42b3e61b671dae8f4b",
              "name": "Aula.mp4",
              "path": "../010. Criando as Paginas/004. Criando a Pagina de SignIn/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 321.086168,
              "subtitles": []
            },
            {
              "id": "61ac15c917bd56f896fda2a4011dc760",
              "name": "SignIn.tsx",
              "path": "../010. Criando as Paginas/004. Criando a Pagina de SignIn/SignIn.tsx",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "005. Criando a Pagina de Account-Parte 1",
          "files": [
            {
              "id": "4092ed2746d15601a6ec28e4bf33e20f",
              "name": "Account.tsx",
              "path": "../010. Criando as Paginas/005. Criando a Pagina de Account-Parte 1/Account.tsx",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            },
            {
              "id": "affe46bafcdf5f0db11819d55561a6d2",
              "name": "Aula.mp4",
              "path": "../010. Criando as Paginas/005. Criando a Pagina de Account-Parte 1/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 698.689773,
              "subtitles": []
            }
          ],
          "lessons": []
        },
        {
          "name": "006. Criando a Pagina de Account-Parte 2",
          "files": [
            {
              "id": "e1c3b2c44d2353129241b21d524a9335",
              "name": "Account.tsx",
              "path": "../010. Criando as Paginas/006. Criando a Pagina de Account-Parte 2/Account.tsx",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            },
            {
              "id": "3e71c5119f5855f7859090e6416883a1",
              "name": "Aula.mp4",
              "path": "../010. Criando as Paginas/006. Criando a Pagina de Account-Parte 2/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 618.162834,
              "subtitles": []
            }
          ],
          "lessons": []
        },
        {
          "name": "007. Criando o Componente Chat Header",
          "files": [
            {
              "id": "8ab724c2ddf45ec88a8c885beeaa8106",
              "name": "Aula.mp4",
              "path": "../010. Criando as Paginas/007. Criando o Componente Chat Header/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 813.257279,
              "subtitles": []
            },
            {
              "id": "94d5d5fd53ee58beb63e06a7a2d5bf60",
              "name": "Header.tsx",
              "path": "../010. Criando as Paginas/007. Criando o Componente Chat Header/Header.tsx",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "008. Criando o Componente Chat Footer-Parte-1",
          "files": [
            {
              "id": "d375f9d0791f51cb9fef72d8a0bf06bc",
              "name": "-emoji-mart-react.url",
              "path": "../010. Criando as Paginas/008. Criando o Componente Chat Footer-Parte-1/-emoji-mart-react.url",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            },
            {
              "id": "abac7eef1cee5a1c969591bf70f7de53",
              "name": "Aula.mp4",
              "path": "../010. Criando as Paginas/008. Criando o Componente Chat Footer-Parte-1/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 1450.274762,
              "subtitles": []
            },
            {
              "id": "190904d5594c56f8ad2c03d2b30fccdf",
              "name": "Footer.tsx",
              "path": "../010. Criando as Paginas/008. Criando o Componente Chat Footer-Parte-1/Footer.tsx",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "009. Criando o Componente Chat Footer-Parte-2",
          "files": [
            {
              "id": "acbcb105b7fc5a44b82660e226c39146",
              "name": "Aula.mp4",
              "path": "../010. Criando as Paginas/009. Criando o Componente Chat Footer-Parte-2/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 1276.403401,
              "subtitles": []
            },
            {
              "id": "7c55894c3f8554bd9132140bccdd1e02",
              "name": "Footer.tsx",
              "path": "../010. Criando as Paginas/009. Criando o Componente Chat Footer-Parte-2/Footer.tsx",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "010. Criando o Componente Chat MessageItem",
          "files": [
            {
              "id": "7ab61196d9b65d12bbee0d67885cbe2f",
              "name": "Aula.mp4",
              "path": "../010. Criando as Paginas/010. Criando o Componente Chat MessageItem/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 1255.319637,
              "subtitles": []
            },
            {
              "id": "6bc8f2a7b43d5f79aed989d7358d8ee8",
              "name": "MessageItem.tsx",
              "path": "../010. Criando as Paginas/010. Criando o Componente Chat MessageItem/MessageItem.tsx",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "011. Finalizando a Tela de Chat-Parte 1",
          "files": [
            {
              "id": "08d22ff101345648a33478028746f6a8",
              "name": "Aula.mp4",
              "path": "../010. Criando as Paginas/011. Finalizando a Tela de Chat-Parte 1/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 599.493968,
              "subtitles": []
            },
            {
              "id": "5d50892f9cce5b80ade1a49a89407852",
              "name": "index.tsx",
              "path": "../010. Criando as Paginas/011. Finalizando a Tela de Chat-Parte 1/index.tsx",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "012. Finalizando a Tela de Chat-Parte 2",
          "files": [
            {
              "id": "412d051a85f45512bd2d4a7ca73bd375",
              "name": "Aula.mp4",
              "path": "../010. Criando as Paginas/012. Finalizando a Tela de Chat-Parte 2/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 609.292789,
              "subtitles": []
            },
            {
              "id": "f532d3c0eba752cab81de85ad27de7a5",
              "name": "index.tsx",
              "path": "../010. Criando as Paginas/012. Finalizando a Tela de Chat-Parte 2/index.tsx",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "013. Finalizando a Tela de Chat-Parte 3",
          "files": [
            {
              "id": "16f69ceb7fed57069fb8c685266a218f",
              "name": "Aula.mp4",
              "path": "../010. Criando as Paginas/013. Finalizando a Tela de Chat-Parte 3/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 325.03356,
              "subtitles": []
            },
            {
              "id": "be413f64cf145647886e975a51c2bcde",
              "name": "index.tsx",
              "path": "../010. Criando as Paginas/013. Finalizando a Tela de Chat-Parte 3/index.tsx",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "014. Criando a HomeChat Page",
          "files": [
            {
              "id": "b39fc919145a577ba42b459d9eb6c1de",
              "name": "Aula.mp4",
              "path": "../010. Criando as Paginas/014. Criando a HomeChat Page/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 476.05644,
              "subtitles": []
            },
            {
              "id": "cc1f7e12e14d56beab7090b7443b4f34",
              "name": "Home.tsx",
              "path": "../010. Criando as Paginas/014. Criando a HomeChat Page/Home.tsx",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            },
            {
              "id": "a02165521f1b505c8b8263fe2f1e7a9a",
              "name": "home-section-bg.svg",
              "path": "../010. Criando as Paginas/014. Criando a HomeChat Page/home-section-bg.svg",
              "mime": "image/svg+xml",
              "kind": "image",
              "duration": 0.0
            },
            {
              "id": "09405dca6efa5d9c82af7bf9c01d069e",
              "name": "page.tsx",
              "path": "../010. Criando as Paginas/014. Criando a HomeChat Page/page.tsx",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "015. Testando Todas as Funcionalidades do Projeto",
          "files": [
            {
              "id": "a3b249ab28b850cc882011c41eebf607",
              "name": "Aula.mp4",
              "path": "../010. Criando as Paginas/015. Testando Todas as Funcionalidades do Projeto/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 199.274036,
              "subtitles": []
            },
            {
              "id": "27aebf3f572b5d34b0cd1a89ff88a0b3",
              "name": "Reposit-rio-do-Github.url",
              "path": "../010. Criando as Paginas/015. Testando Todas as Funcionalidades do Projeto/Reposit-rio-do-Github.url",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        }
      ]
    },
    {
      "name": "011. Exercicios de React.js TypeScript e Next.js",
      "lessons": [
        {
          "name": "001. Exercicios-React.js-Basico",
          "files": [
            {
              "id": "6fc4d24209225852bae6e6dc5b360d89",
              "name": "quiz.html",
              "path": "../011. Exercicios de React.js TypeScript e Next.js/001. Exercicios-React.js-Basico/quiz.html",
              "mime": "text/html",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "002. Exercicios-React.js-Intermediario Avancado",
          "files": [
            {
              "id": "ed7833d2178952dea7f6c72726f2e5ee",
              "name": "quiz.html",
              "path": "../011. Exercicios de React.js TypeScript e Next.js/002. Exercicios-React.js-Intermediario Avancado/quiz.html",
              "mime": "text/html",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "003. Exercicios-TypeScript-Basico Intermediario Avancado",
          "files": [
            {
              "id": "217e1546e88552b8bbc8947a95720691",
              "name": "quiz.html",
              "path": "../011. Exercicios de React.js TypeScript e Next.js/003. Exercicios-TypeScript-Basico Intermediario Avancado/quiz.html",
              "mime": "text/html",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "004. Exercicios-Next.js-Basico Intermediario Avancado",
          "files": [
            {
              "id": "c9e62274514b5fe6b8b33cd94a6d6112",
              "name": "quiz.html",
              "path": "../011. Exercicios de React.js TypeScript e Next.js/004. Exercicios-Next.js-Basico Intermediario Avancado/quiz.html",
              "mime": "text/html",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        }
      ]
    },
    {
      "name": "012. Deploy Colocando em Producao o Projeto",
      "lessons": [
        {
          "name": "001. Entendendo as diferencas entre os tipos de hospedagem web",
          "files": [
            {
              "id": "9e08a13228fc5052862ad7f6486c87e9",
              "name": "Aula.mp4",
              "path": "../012. Deploy Colocando em Producao o Projeto/001. Entendendo as diferencas entre os tipos de hospedagem web/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 451.675442,
              "subtitles": []
            },
            {
              "id": "ff5846bcf2945b5b814aaa1c67aa75bf",
              "name": "Tipos-de-Hospedagem-na-Web-Slides.pptx",
              "path": "../012. Deploy Colocando em Producao o Projeto/001. Entendendo as diferencas entre os tipos de hospedagem web/Tipos-de-Hospedagem-na-Web-Slides.pptx",
              "mime": "application/vnd.openxmlformats-officedocument.presentationml.presentation",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "002. Conhecendo mais sobre os provedores de hospedagem web do mer",
          "files": [
            {
              "id": "085a3c19df575985b2e25487ad7affc8",
              "name": "AWS.url",
              "path": "../012. Deploy Colocando em Producao o Projeto/002. Conhecendo mais sobre os provedores de hospedagem web do mer/AWS.url",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            },
            {
              "id": "c751396e4ddc5200aa421da4c3c48789",
              "name": "Aula.mp4",
              "path": "../012. Deploy Colocando em Producao o Projeto/002. Conhecendo mais sobre os provedores de hospedagem web do mer/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 610.686009,
              "subtitles": []
            },
            {
              "id": "394c558f46e259f788f0d247cc27ada2",
              "name": "Digital-Ocean.url",
              "path": "../012. Deploy Colocando em Producao o Projeto/002. Conhecendo mais sobre os provedores de hospedagem web do mer/Digital-Ocean.url",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            },
            {
              "id": "973f6d6ae1775b02bd42e5e594f79e7e",
              "name": "Google-Cloud.url",
              "path": "../012. Deploy Colocando em Producao o Projeto/002. Conhecendo mais sobre os provedores de hospedagem web do mer/Google-Cloud.url",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            },
            {
              "id": "de271814dd645bfbaa08049aa27643ce",
              "name": "Hostgator.url",
              "path": "../012. Deploy Colocando em Producao o Projeto/002. Conhecendo mais sobre os provedores de hospedagem web do mer/Hostgator.url",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            },
            {
              "id": "1c33b6cc43c059c686cae7a5fa08bf39",
              "name": "Hostinger.url",
              "path": "../012. Deploy Colocando em Producao o Projeto/002. Conhecendo mais sobre os provedores de hospedagem web do mer/Hostinger.url",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            },
            {
              "id": "c3932aa711805c609d44c89bf881267c",
              "name": "Infinity-Free.url",
              "path": "../012. Deploy Colocando em Producao o Projeto/002. Conhecendo mais sobre os provedores de hospedagem web do mer/Infinity-Free.url",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            },
            {
              "id": "a6dffefbdb7454e78b07b7294abde278",
              "name": "Vercel.url",
              "path": "../012. Deploy Colocando em Producao o Projeto/002. Conhecendo mais sobre os provedores de hospedagem web do mer/Vercel.url",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "003. Criando o Banco De Dados e Clonando os Repositorios",
          "files": [
            {
              "id": "0de2a2126927527aab2f3d6d2cbbeb03",
              "name": "Aula.mp4",
              "path": "../012. Deploy Colocando em Producao o Projeto/003. Criando o Banco De Dados e Clonando os Repositorios/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 825.097868,
              "subtitles": []
            },
            {
              "id": "d3cc3c3f89e85de8bd85b096df26f455",
              "name": "Digital-Ocean.url",
              "path": "../012. Deploy Colocando em Producao o Projeto/003. Criando o Banco De Dados e Clonando os Repositorios/Digital-Ocean.url",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            },
            {
              "id": "0e8055d4160b5ae6b7dac08d3aa0875d",
              "name": "GitHub-Backend-Deploy-.url",
              "path": "../012. Deploy Colocando em Producao o Projeto/003. Criando o Banco De Dados e Clonando os Repositorios/GitHub-Backend-Deploy-.url",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            },
            {
              "id": "2dd005fe84a95f23a2522ed411c141f8",
              "name": "GitHub-Frontend-Deploy-.url",
              "path": "../012. Deploy Colocando em Producao o Projeto/003. Criando o Banco De Dados e Clonando os Repositorios/GitHub-Frontend-Deploy-.url",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "004. Realizando o Deploy do Projeto Django",
          "files": [
            {
              "id": "538d8b2eb2455e37a3511d9262c6cd21",
              "name": "Aula.mp4",
              "path": "../012. Deploy Colocando em Producao o Projeto/004. Realizando o Deploy do Projeto Django/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 618.859433,
              "subtitles": []
            },
            {
              "id": "7b7b4bf6d73f56ac82e506d18d546ec0",
              "name": "comando.txt",
              "path": "../012. Deploy Colocando em Producao o Projeto/004. Realizando o Deploy do Projeto Django/comando.txt",
              "mime": "text/plain",
              "kind": "file",
              "duration": 0.0
            },
            {
              "id": "739aab3c828e5c94b20fbd74dbb9990e",
              "name": "variaveis.txt",
              "path": "../012. Deploy Colocando em Producao o Projeto/004. Realizando o Deploy do Projeto Django/variaveis.txt",
              "mime": "text/plain",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "005. Realizando o Deploy do Projeto Next.js",
          "files": [
            {
              "id": "c929906df63e50f39118089ac3ec3d62",
              "name": "Aula.mp4",
              "path": "../012. Deploy Colocando em Producao o Projeto/005. Realizando o Deploy do Projeto Next.js/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 421.303673,
              "subtitles": []
            }
          ],
          "lessons": []
        }
      ]
    },
    {
      "name": "013. React JS JSX Eventos Hooks e Requisicoes Bonus",
      "lessons": [
        {
          "name": "001. O que e React",
          "files": [
            {
              "id": "bfe42d3348da54ca9478d25356bb1203",
              "name": "Aula.mp4",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/001. O que e React/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 622.296009,
              "subtitles": []
            },
            {
              "id": "a0fe17e78dfb5357874d8dbb120e78ba",
              "name": "React.dev-Documenta-o-Oficial.url",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/001. O que e React/React.dev-Documenta-o-Oficial.url",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "002. O que e o DOM Virtual",
          "files": [
            {
              "id": "71184a8182ba5aaba16a97a4325e66c7",
              "name": "Aula.mp4",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/002. O que e o DOM Virtual/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 345.142086,
              "subtitles": []
            }
          ],
          "lessons": []
        },
        {
          "name": "003. Introducao sobre JSX",
          "files": [
            {
              "id": "466add133dce57118729f3a8ffdc7db9",
              "name": "Aula.mp4",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/003. Introducao sobre JSX/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 546.041497,
              "subtitles": []
            },
            {
              "id": "80f651d663365f2196f2b0469f7199c7",
              "name": "React.dev-Escrevendo-uma-UI.url",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/003. Introducao sobre JSX/React.dev-Escrevendo-uma-UI.url",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "004. Iniciando um projeto com Vite",
          "files": [
            {
              "id": "e708bb7ab83b5aff9d63f92a024c6acd",
              "name": "Aula.mp4",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/004. Iniciando um projeto com Vite/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 315.048957,
              "subtitles": []
            },
            {
              "id": "42d81a7501c451a8baa14922e64f7f7e",
              "name": "Documenta-o-oficial-Vite.url",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/004. Iniciando um projeto com Vite/Documenta-o-oficial-Vite.url",
              "mime": "application/octet-stream",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "005. Seu primeiro componente",
          "files": [
            {
              "id": "cacb4ddbe2495600bedbbf2578f358f0",
              "name": "Aula.mp4",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/005. Seu primeiro componente/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 204.289569,
              "subtitles": []
            }
          ],
          "lessons": []
        },
        {
          "name": "006. Outras formas de criar componentes",
          "files": [
            {
              "id": "3f782e21133b54b68a05aca3d0f02834",
              "name": "Aula.mp4",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/006. Outras formas de criar componentes/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 372.727438,
              "subtitles": []
            }
          ],
          "lessons": []
        },
        {
          "name": "007. Importando e exportando componentes",
          "files": [
            {
              "id": "a85014bcc9bb5890ae44cfb29c2bb488",
              "name": "Aula.mp4",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/007. Importando e exportando componentes/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 686.568957,
              "subtitles": []
            }
          ],
          "lessons": []
        },
        {
          "name": "008. Como organizar varios componentes",
          "files": [
            {
              "id": "df986cae748f5e0798b99e3d0f496d97",
              "name": "Aula.mp4",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/008. Como organizar varios componentes/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 476.567279,
              "subtitles": []
            }
          ],
          "lessons": []
        },
        {
          "name": "009. Regras gerias do JSX",
          "files": [
            {
              "id": "7dfa265d2d3e50458c75a6cf613a9d6b",
              "name": "Aula.mp4",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/009. Regras gerias do JSX/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 527.41907,
              "subtitles": []
            }
          ],
          "lessons": []
        },
        {
          "name": "010. JSX variaveis funcoes e objetos",
          "files": [
            {
              "id": "15238455db3c5b28998741f12f19c770",
              "name": "Aula.mp4",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/010. JSX variaveis funcoes e objetos/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 344.584807,
              "subtitles": []
            }
          ],
          "lessons": []
        },
        {
          "name": "011. JSX Renderizacao condicional",
          "files": [
            {
              "id": "4452ff21c78d593aa98388947827a8c3",
              "name": "Aula.mp4",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/011. JSX Renderizacao condicional/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 382.572721,
              "subtitles": []
            }
          ],
          "lessons": []
        },
        {
          "name": "012. JSX Renderizando listas",
          "files": [
            {
              "id": "529d43ea6deb5ddfb2ca040fb80a2851",
              "name": "Aula.mp4",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/012. JSX Renderizando listas/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 421.489433,
              "subtitles": []
            }
          ],
          "lessons": []
        },
        {
          "name": "013. JSX Filtrando listas",
          "files": [
            {
              "id": "0a8c982ad3b15793844a017e4c133779",
              "name": "Aula.mp4",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/013. JSX Filtrando listas/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 440.762018,
              "subtitles": []
            }
          ],
          "lessons": []
        },
        {
          "name": "014. Passando props para um componente",
          "files": [
            {
              "id": "8ef8c96202d05e46b60e745b45a8c2a8",
              "name": "Aula.mp4",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/014. Passando props para um componente/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 895.920476,
              "subtitles": []
            }
          ],
          "lessons": []
        },
        {
          "name": "015. Inserindo um default padrao em props",
          "files": [
            {
              "id": "f6bcce5bb71a53fab9eb6730bf256f68",
              "name": "Aula.mp4",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/015. Inserindo um default padrao em props/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 229.924444,
              "subtitles": []
            }
          ],
          "lessons": []
        },
        {
          "name": "016. Prop children do componente",
          "files": [
            {
              "id": "b6f6252876785706ae03449633cfbc6c",
              "name": "Aula.mp4",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/016. Prop children do componente/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 527.60483,
              "subtitles": []
            }
          ],
          "lessons": []
        },
        {
          "name": "017. Capturando seu primeiro evento",
          "files": [
            {
              "id": "ea9ce505ba1d534db176083f3e78ccba",
              "name": "Aula.mp4",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/017. Capturando seu primeiro evento/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 323.779683,
              "subtitles": []
            }
          ],
          "lessons": []
        },
        {
          "name": "018. Forma incorreta de passar eventos",
          "files": [
            {
              "id": "bf98fe56b85b557b8a3194762ffa556f",
              "name": "Aula.mp4",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/018. Forma incorreta de passar eventos/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 190.82195,
              "subtitles": []
            }
          ],
          "lessons": []
        },
        {
          "name": "019. Passando eventos como props",
          "files": [
            {
              "id": "d2980da5ec4f527da1f0447606f2c137",
              "name": "Aula.mp4",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/019. Passando eventos como props/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 494.586009,
              "subtitles": []
            }
          ],
          "lessons": []
        },
        {
          "name": "020. Removendo comportamentos padrao",
          "files": [
            {
              "id": "99ffdf3cbd7b5e30a9c736e7c239d7fd",
              "name": "Aula.mp4",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/020. Removendo comportamentos padrao/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 195.048005,
              "subtitles": []
            }
          ],
          "lessons": []
        },
        {
          "name": "021. O que sao Hooks Conhecendo o primeiro hook useState",
          "files": [
            {
              "id": "0c6195ab7eb8582da15c2ca1d47a2793",
              "name": "Aula.mp4",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/021. O que sao Hooks Conhecendo o primeiro hook useState/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 354.058549,
              "subtitles": []
            }
          ],
          "lessons": []
        },
        {
          "name": "022. Renderizacao condicional com states",
          "files": [
            {
              "id": "80944ab09fdd571aa07d7bef0d7260ef",
              "name": "Aula.mp4",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/022. Renderizacao condicional com states/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 232.664376,
              "subtitles": []
            }
          ],
          "lessons": []
        },
        {
          "name": "023. Usando states em campos",
          "files": [
            {
              "id": "d18c3edf96155a788371232bcba47581",
              "name": "Aula.mp4",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/023. Usando states em campos/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 199.041837,
              "subtitles": []
            }
          ],
          "lessons": []
        },
        {
          "name": "024. States re-rrenderizacao do componente",
          "files": [
            {
              "id": "a87a1d2c0c9c5840be08044501a9a7cf",
              "name": "Aula.mp4",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/024. States re-rrenderizacao do componente/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 200.109955,
              "subtitles": []
            }
          ],
          "lessons": []
        },
        {
          "name": "025. States mudando no tempo",
          "files": [
            {
              "id": "d4cc38185bad5d2e85d68a2bed42d828",
              "name": "Aula.mp4",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/025. States mudando no tempo/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 445.266712,
              "subtitles": []
            }
          ],
          "lessons": []
        },
        {
          "name": "026. State Updater",
          "files": [
            {
              "id": "ef8d8b5434395a5d89b87511ad94333f",
              "name": "Aula.mp4",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/026. State Updater/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 482.41873,
              "subtitles": []
            }
          ],
          "lessons": []
        },
        {
          "name": "027. Atualizando Objetos no State",
          "files": [
            {
              "id": "f2df276c12ae5570b222e44fea3f9f73",
              "name": "Aula.mp4",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/027. Atualizando Objetos no State/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 314.538118,
              "subtitles": []
            }
          ],
          "lessons": []
        },
        {
          "name": "028. Arrays no State Adicionando um elemento",
          "files": [
            {
              "id": "0683c3e29a895d0dbd98b664b6e6164e",
              "name": "Aula.mp4",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/028. Arrays no State Adicionando um elemento/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 738.395986,
              "subtitles": []
            }
          ],
          "lessons": []
        },
        {
          "name": "029. Arrays no State Removendo um elemento",
          "files": [
            {
              "id": "1e991a86e2f354398e93716d1b8b540d",
              "name": "Aula.mp4",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/029. Arrays no State Removendo um elemento/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 294.940431,
              "subtitles": []
            }
          ],
          "lessons": []
        },
        {
          "name": "030. Arrays no State Alterando um elemento",
          "files": [
            {
              "id": "a1de0e2960f956fa9af7aa7b31151bf2",
              "name": "Aula.mp4",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/030. Arrays no State Alterando um elemento/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 343.23805,
              "subtitles": []
            }
          ],
          "lessons": []
        },
        {
          "name": "031. Conhecendo o hook useEffect e o CleanUp",
          "files": [
            {
              "id": "1e890885542f5a0794b719566cb431ba",
              "name": "Aula.mp4",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/031. Conhecendo o hook useEffect e o CleanUp/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 553.007528,
              "subtitles": []
            }
          ],
          "lessons": []
        },
        {
          "name": "032. Monitorando dependencias com useEffect",
          "files": [
            {
              "id": "36db2f402a885ac38fb51a32fc76001a",
              "name": "Aula.mp4",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/032. Monitorando dependencias com useEffect/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 409.972313,
              "subtitles": []
            }
          ],
          "lessons": []
        },
        {
          "name": "033. Exemplos praticos do uso do CleanUp",
          "files": [
            {
              "id": "6aef4106f1f35d0e94b10b2f5a2113ba",
              "name": "Aula.mp4",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/033. Exemplos praticos do uso do CleanUp/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 792.452154,
              "subtitles": []
            }
          ],
          "lessons": []
        },
        {
          "name": "034. Usando o useId",
          "files": [
            {
              "id": "15adb075d8d551f393079261a35d4196",
              "name": "Aula.mp4",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/034. Usando o useId/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 257.231156,
              "subtitles": []
            }
          ],
          "lessons": []
        },
        {
          "name": "035. Conhecendo o useRef",
          "files": [
            {
              "id": "fd97a84df3035a8aacdfc13715950ced",
              "name": "Aula.mp4",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/035. Conhecendo o useRef/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 494.493129,
              "subtitles": []
            }
          ],
          "lessons": []
        },
        {
          "name": "036. Outro exemplo pratico do useRef",
          "files": [
            {
              "id": "07b8ad15f69e5dc0ba501d5eff60e066",
              "name": "Aula.mp4",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/036. Outro exemplo pratico do useRef/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 483.765465,
              "subtitles": []
            }
          ],
          "lessons": []
        },
        {
          "name": "037. O que e HTTP Conhecendo metodos HTTP e status HTTP",
          "files": [
            {
              "id": "b91ef59e008d58fbb5c9add5c69b866e",
              "name": "Aula.mp4",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/037. O que e HTTP Conhecendo metodos HTTP e status HTTP/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 397.433515,
              "subtitles": []
            },
            {
              "id": "ab717dbea46154f79c5d4cbab8bb93ba",
              "name": "o-que-e-HTTP.pdf",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/037. O que e HTTP Conhecendo metodos HTTP e status HTTP/o-que-e-HTTP.pdf",
              "mime": "application/pdf",
              "kind": "pdf",
              "duration": 0.0
            }
          ],
          "lessons": []
        },
        {
          "name": "038. Fazendo uma requisicao GET",
          "files": [
            {
              "id": "263ade96c2725b0baa0538be41ea1ec4",
              "name": "Aula.mp4",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/038. Fazendo uma requisicao GET/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 672.451202,
              "subtitles": []
            }
          ],
          "lessons": []
        },
        {
          "name": "039. Exibindo dados do GET",
          "files": [
            {
              "id": "2f33adda278e549b9488bd44f4368195",
              "name": "Aula.mp4",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/039. Exibindo dados do GET/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 325.26576,
              "subtitles": []
            }
          ],
          "lessons": []
        },
        {
          "name": "040. Lidando com loading",
          "files": [
            {
              "id": "aa5e95267da658e9ae2cea40496e3886",
              "name": "Aula.mp4",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/040. Lidando com loading/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 229.320726,
              "subtitles": []
            }
          ],
          "lessons": []
        },
        {
          "name": "041. Lidando com erros",
          "files": [
            {
              "id": "4a0588881f165a15b15b637a1a24db75",
              "name": "Aula.mp4",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/041. Lidando com erros/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 423.950771,
              "subtitles": []
            }
          ],
          "lessons": []
        },
        {
          "name": "042. Fazendo requisicoes POST PUT e DELETE",
          "files": [
            {
              "id": "3811f6713af0509b8f4a260d77ee9452",
              "name": "Aula.mp4",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/042. Fazendo requisicoes POST PUT e DELETE/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 451.303923,
              "subtitles": []
            }
          ],
          "lessons": []
        },
        {
          "name": "043. Axios Usando axios para simplificar requisicoes",
          "files": [
            {
              "id": "341d66b755705241b6c57bdc4b60cdf3",
              "name": "Aula.mp4",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/043. Axios Usando axios para simplificar requisicoes/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 391.489206,
              "subtitles": []
            }
          ],
          "lessons": []
        },
        {
          "name": "044. Axios Resposta da requisicao TypeScript",
          "files": [
            {
              "id": "64dfd206e07556b681f67668abe9ad26",
              "name": "Aula.mp4",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/044. Axios Resposta da requisicao TypeScript/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 125.062925,
              "subtitles": []
            }
          ],
          "lessons": []
        },
        {
          "name": "045. Axios Enviando body e params na requisicao",
          "files": [
            {
              "id": "1994a37d71ac5429a901fb5aa3bea1ee",
              "name": "Aula.mp4",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/045. Axios Enviando body e params na requisicao/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 385.405556,
              "subtitles": []
            }
          ],
          "lessons": []
        },
        {
          "name": "046. Axios Instancias e configuracoes padroes",
          "files": [
            {
              "id": "4f0c358690b75cbebd91571fad78ffe3",
              "name": "Aula.mp4",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/046. Axios Instancias e configuracoes padroes/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 396.040317,
              "subtitles": []
            }
          ],
          "lessons": []
        },
        {
          "name": "047. Axios Manipulando erros",
          "files": [
            {
              "id": "f13ee06401ab5ab0be04abde1eab1e5f",
              "name": "Aula.mp4",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/047. Axios Manipulando erros/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 311.658844,
              "subtitles": []
            }
          ],
          "lessons": []
        },
        {
          "name": "048. Axios Cancelando requisicoes",
          "files": [
            {
              "id": "bcf7507517615cb888c91e2feb56838b",
              "name": "Aula.mp4",
              "path": "../013. React JS JSX Eventos Hooks e Requisicoes Bonus/048. Axios Cancelando requisicoes/Aula.mp4",
              "mime": "video/mp4",
              "kind": "video",
              "duration": 353.45483,
              "subtitles": []
            }
          ],
          "lessons": []
        }
      ]
    },
    {
      "name": "014. Bonus",
      "lessons": [
        {
          "name": "001. Continue Aprendendo",
          "files": [
            {
              "id": "81318b3a57d9572f825116df964c74ac",
              "name": "descricao.html",
              "path": "../014. Bonus/001. Continue Aprendendo/descricao.html",
              "mime": "text/html",
              "kind": "file",
              "duration": 0.0
            }
          ],
          "lessons": []
        }
      ]
    }
  ],
  "course_id": "1551f60fedd24553a8f23c5a6820e53e"
}