diff --git a/apps/next-introdutorio/astro.config.mjs b/apps/next-introdutorio/astro.config.mjs index 0eadb47..972de3f 100644 --- a/apps/next-introdutorio/astro.config.mjs +++ b/apps/next-introdutorio/astro.config.mjs @@ -32,7 +32,7 @@ export default defineConfig({ { label: 'Intro ao NextAuth', autogenerate: { - directory: '01-intro-nextauth', + directory: '01-intro-next', }, }, { diff --git a/apps/next-introdutorio/src/content/docs/00-intro/02-o-que-vamos-aprender.md b/apps/next-introdutorio/src/content/docs/00-intro/02-o-que-vamos-aprender.md index cb8460a..8f7cdba 100644 --- a/apps/next-introdutorio/src/content/docs/00-intro/02-o-que-vamos-aprender.md +++ b/apps/next-introdutorio/src/content/docs/00-intro/02-o-que-vamos-aprender.md @@ -2,55 +2,34 @@ title: Conteúdo do Workshop --- -TODO: REFAZER +Vamos mergulhar em profundidade nas principais funcionalidades do framework e ecossistema do Next. +## 01. App Router -Vamos começar? Antes de mais nada, um overview do que iremos tratar no Workshop de hoje. Vamos em todo o workshop utilizar uma única aplicação que possuirá **várias formas de autenticação utilizando a biblioteca Auth.js (NextAuth)**. - -## O que vamos aprender hoje? - -Os principais tópicos que iremos ver são: - -#### 01. Intro ao NextAuth.js - -- A nova versão 5 (auth.js) -- O que são sessões -- O que são providers -- O que são adapters -- O que são callbacks -- O que são eventos - - -#### 02. Setup do NextAuth.js no projeto - -- Instalando o NextAuth -- Instalando a base de dados (Prisma) -- Configurando o NextAuth -- Entendendo o fluxo de login -- Login nativo / simples com credenciais - -#### 03. Login com credenciais Server e Client Side - -- Página de login customizada +- Roteamento +- Layouts - Erros -- Client e Server Side (server components) +- Loading State + +## 02. Client e Server Components -#### 04. Login com Github +Vamos entender as diferenças e casos de uso para componentes de cliente e componentes de servidor. -- Criando um app OAuth no Github -- Adicionando o provider Github -- Configurando o form e action +## 03. Ecossistema Oficial -#### 05. Login com Magic Link (email) +O Next.js traz algumas bibliotecas para tanto facilitar o desenvolvimento como para melhorar performance das páginas como um todo. -- Adicionando um provedor de email -- Configurando o formulário e action +- `next/link` +- `next/image` +- `next/font` +- `metadata` + -#### 06. Usando dados da Sessão +## 04. Data fetching e Server Actions -- Exibindo dados do usuário -- Protegendo rotas +- Fetch de dados dinâmicos +- Mutação de dados usando `server actions`. -#### 07. Callbacks para adicionarmos mais dados na sessão +## 05. Básico de Estilização -- Adicionando dados adicionais do GitHub na sessão +Para estilização vamos utilizar *tailwindcss* para nossa aplicação - mas podemos utilizar quaisquer estratégias que quisermos \ No newline at end of file diff --git a/apps/next-introdutorio/src/content/docs/00-intro/04-repositorio.md b/apps/next-introdutorio/src/content/docs/00-intro/04-repositorio.md index 9b23768..0ad5c64 100644 --- a/apps/next-introdutorio/src/content/docs/00-intro/04-repositorio.md +++ b/apps/next-introdutorio/src/content/docs/00-intro/04-repositorio.md @@ -2,19 +2,6 @@ title: Repositório e Aplicação usados --- -TODO: Colocar aqui o repositório usado - -Como já falamos por aqui, vamos usar uma aplicação simples em que teremos poucas páginas: - -- Uma página `home` com os botões para autenticação com diversos métodos; -- Uma página `dashboard` que deverá ser protegida e apenas acessada por usuários logados. Nesta página também teremos o botão de `logout`. -- Uma página `register` para cadastro de novos usuários com email e senha; -- Páginas de `login` para cada um dos métodos de autenticação que iremos utilizar. - -A página inicial da aplicação é essa: - -![Página do App](../../../assets/images/app1.png) - ### Link do Repositório -O repositório do exemplo da aula pode ser encontrado neste link: [https://github.com/robertotcestari/workshop-codante-next-auth](https://github.com/robertotcestari/workshop-codante-next-auth) +O repositório do exemplo da aula pode ser encontrado neste link: [link aqui](link aqui) diff --git a/apps/next-introdutorio/src/content/docs/00-intro/05-a-aplicacao.md b/apps/next-introdutorio/src/content/docs/00-intro/05-a-aplicacao.md new file mode 100644 index 0000000..222121d --- /dev/null +++ b/apps/next-introdutorio/src/content/docs/00-intro/05-a-aplicacao.md @@ -0,0 +1,46 @@ +--- +title: O que vamos construir neste Workshop +--- + +Vamos criar um *job board*. Essa será uma aplicação em que um usuário será capaz de procurar vagas, cadastrar novas vagas e visualizar detalhes de vagas de emprego. Além de páginas estáticas `home` e `sobre`. + + +## Protótipos + +É mais fácil entender com os protótipos: + + +### Home + +Esta é a raiz da aplicação, a landing page. Note que há basicamente três seções (que continuam ao longo de toda a aplicação): + +- Navbar +- Main +- Footer + + +![Home](./Home.png) + +### Sobre + +Na página sobre, vamos entender na prática sobre o novo roteamento da pasta `app` do Next.js + +![Sobre](./About.png) + +### Busca de Vagas + +Vamos para dados dinâmicos! Entender *data fetching* com o Next.js, exibição de dados e, *quem sabe*, uma busca! + +![Jobs](./Jobs.png) + +### Cadastro de Vagas + +Esta seção trará tudo sobre Server Actions! Vamos fazer *mutação* de dados de acordo com as melhores práticas e de forma moderna do React e deixando mais tênue a linha divisória entre *backend* e *frontend*. + +![New Job](./NewJob.png) + +### Detalhes de Vaga + +Aqui vamos deixar nossa aplicação mais funcional - nosso usuário precisa de mais informações sobre a vaga - e é isso que iremos trazer aqui. + +![Job](./Job.png) diff --git a/apps/next-introdutorio/src/content/docs/00-intro/About.png b/apps/next-introdutorio/src/content/docs/00-intro/About.png new file mode 100644 index 0000000..e68cb27 Binary files /dev/null and b/apps/next-introdutorio/src/content/docs/00-intro/About.png differ diff --git a/apps/next-introdutorio/src/content/docs/00-intro/Home.png b/apps/next-introdutorio/src/content/docs/00-intro/Home.png new file mode 100644 index 0000000..288830b Binary files /dev/null and b/apps/next-introdutorio/src/content/docs/00-intro/Home.png differ diff --git a/apps/next-introdutorio/src/content/docs/00-intro/Job.png b/apps/next-introdutorio/src/content/docs/00-intro/Job.png new file mode 100644 index 0000000..692bc06 Binary files /dev/null and b/apps/next-introdutorio/src/content/docs/00-intro/Job.png differ diff --git a/apps/next-introdutorio/src/content/docs/00-intro/Jobs.png b/apps/next-introdutorio/src/content/docs/00-intro/Jobs.png new file mode 100644 index 0000000..0e83658 Binary files /dev/null and b/apps/next-introdutorio/src/content/docs/00-intro/Jobs.png differ diff --git a/apps/next-introdutorio/src/content/docs/00-intro/NewJob.png b/apps/next-introdutorio/src/content/docs/00-intro/NewJob.png new file mode 100644 index 0000000..d972fa3 Binary files /dev/null and b/apps/next-introdutorio/src/content/docs/00-intro/NewJob.png differ diff --git "a/apps/next-introdutorio/src/content/docs/01-intro-next/01-Introdu\303\247\303\243o.md" "b/apps/next-introdutorio/src/content/docs/01-intro-next/01-Introdu\303\247\303\243o.md" new file mode 100644 index 0000000..e8da368 --- /dev/null +++ "b/apps/next-introdutorio/src/content/docs/01-intro-next/01-Introdu\303\247\303\243o.md" @@ -0,0 +1,33 @@ +--- +title: Por que Next.Js? +--- + +Por qual razão o Next.js se tornou um dos frameworks *frontend* mais populares dos últimos anos? E porque é utilizado sem ressalvas nas maiores aplicações em produção? + +## Um pouco de história... + +O Next.js surgiu em 2016 e fez parte de um movimento natural da web. + +### A era das páginas estáticas (1990 - 1999) + +1. HTML e links +2. PHP e HTML gerado no servidor +3. Javascript e início de interatividade (popups, mensagens que apareciam) +4. Ajax - precursor dos frameworks javascript + +![Geocities](./geocities.png) + +### A era do Javascript (2000 - 2015) + +1. Aplicações cada vez mais complexas - e *como era difícil fazer tudo com JS* +2. Surgimento do Angular e do React (seguido por Vue) +3. Adoção da componentização e renderização no cliente como forma de fazer a web. Facilidade de hospedagem - JAMStack. +4. Nem tudo que precisávamos estava na linguagem oficial (e muito menos nos browsers) -> precisamos de bundlers! CRA como solução +5. Problemas: SEO, JS grande para o hardware dos usuários, lentidão. + +### A era do Next (2016 - Atualmente) + +1. Next.js é o framework que combina as melhores características de diferentes eras do desenvolvimento web: simplicidade dos documentos estáticos, poder da renderização no servidor, componentização do React e boa experiência do usuário das SPAs. +2. Next.js simplifica a criação de páginas, rotas e APIs, além de recursos como geração estática, renderização no servidor e carregamento sob demanda. +3. Menciona funcionalidades como code splitting, otimização de imagens e Incremental Static Regeneration (ISR), que melhoram performance, SEO e experiência do usuário. +4. Finaliza destacando o Next.js como uma solução completa para criação de web apps, combinando inovações de décadas em um único framework. diff --git a/apps/next-introdutorio/src/content/docs/01-intro-nextauth/02-auth-js-ou-next-auth.md b/apps/next-introdutorio/src/content/docs/01-intro-next/02-auth-js-ou-next-auth.md similarity index 100% rename from apps/next-introdutorio/src/content/docs/01-intro-nextauth/02-auth-js-ou-next-auth.md rename to apps/next-introdutorio/src/content/docs/01-intro-next/02-auth-js-ou-next-auth.md diff --git a/apps/next-introdutorio/src/content/docs/01-intro-nextauth/03-sessions.md b/apps/next-introdutorio/src/content/docs/01-intro-next/03-sessions.md similarity index 100% rename from apps/next-introdutorio/src/content/docs/01-intro-nextauth/03-sessions.md rename to apps/next-introdutorio/src/content/docs/01-intro-next/03-sessions.md diff --git a/apps/next-introdutorio/src/content/docs/01-intro-nextauth/04-providers.md b/apps/next-introdutorio/src/content/docs/01-intro-next/04-providers.md similarity index 100% rename from apps/next-introdutorio/src/content/docs/01-intro-nextauth/04-providers.md rename to apps/next-introdutorio/src/content/docs/01-intro-next/04-providers.md diff --git a/apps/next-introdutorio/src/content/docs/01-intro-nextauth/05-adapters.md b/apps/next-introdutorio/src/content/docs/01-intro-next/05-adapters.md similarity index 100% rename from apps/next-introdutorio/src/content/docs/01-intro-nextauth/05-adapters.md rename to apps/next-introdutorio/src/content/docs/01-intro-next/05-adapters.md diff --git a/apps/next-introdutorio/src/content/docs/01-intro-nextauth/06-callbacks.md b/apps/next-introdutorio/src/content/docs/01-intro-next/06-callbacks.md similarity index 100% rename from apps/next-introdutorio/src/content/docs/01-intro-nextauth/06-callbacks.md rename to apps/next-introdutorio/src/content/docs/01-intro-next/06-callbacks.md diff --git a/apps/next-introdutorio/src/content/docs/01-intro-nextauth/07-eventos.md b/apps/next-introdutorio/src/content/docs/01-intro-next/07-eventos.md similarity index 100% rename from apps/next-introdutorio/src/content/docs/01-intro-nextauth/07-eventos.md rename to apps/next-introdutorio/src/content/docs/01-intro-next/07-eventos.md diff --git a/apps/next-introdutorio/src/content/docs/01-intro-next/geocities.png b/apps/next-introdutorio/src/content/docs/01-intro-next/geocities.png new file mode 100644 index 0000000..096bc18 Binary files /dev/null and b/apps/next-introdutorio/src/content/docs/01-intro-next/geocities.png differ diff --git "a/apps/next-introdutorio/src/content/docs/01-intro-nextauth/01-Introdu\303\247\303\243o.md" "b/apps/next-introdutorio/src/content/docs/01-intro-nextauth/01-Introdu\303\247\303\243o.md" deleted file mode 100644 index c95dc2a..0000000 --- "a/apps/next-introdutorio/src/content/docs/01-intro-nextauth/01-Introdu\303\247\303\243o.md" +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Por que NextAuth? ---- - -Provavelmente a maioria dos exemplos de autenticação presentes na Web usando apps Javascript usam serviços de autenticação de terceiros. Lembram quando a febre era usar a autenticação do Firebase? Depois do Auth0? Agora, a moda parece ser o Clerk. - -Todas essas plataformas são ótimas e facilitam o processo de prototipação e de autenticação. O grande problema aqui chama-se *[vendor lock-in](https://en.wikipedia.org/wiki/Vendor_lock-in)*. Recentemente uma das principais plataformas (Auth0) [aumentou o preço em 300%](https://www.reddit.com/r/webdev/comments/18d6hcd/auth0_increases_price_by_300/#:~:text=Auth0%20just%20increased%20the%20price,using%20for%20user%20identity%2Fauth%3F). E quando sua aplicação já é grande suficiente, o custo em migrar seus usuários para outra estratégia pode ser muito alto e você acaba "refém" da sua escolha inicial. - -Com uma biblioteca como a **NextAuth** você é dono do seu sistema de autenticação. Você é dono dos dados (que ficarão na sua base de dados). E o melhor de tudo - não pagará nenhum centavo se sua aplicação aumentar significativamente o número de usuários. \ No newline at end of file