Bruno Pereira | bruno.pereira@ifpa.edu.br
Acesse meu perfil no GitHub e encontre o repositório público nlw-setup.
Este projeto foi desenvolvido durante a Next Level Week (NLW) Setup, evento de programação da Rocketseat, de 16 a 20 de janeiro de 2023.
Trata-se de uma aplicação (web e mobile) para monitoramento de hábitos diários como: praticar exercícios, comer de forma saudável, beber 2 litros água, etc.
Veja o protótipo no Figma:
- Back-end
- Fundamentos do
Node.js - Criação do projeto [
server] - Setup do
TypeScript - Criando a primeira rota
- Configurando o
Prisma - Configurando o
Cors
- Fundamentos do
- Front-end
- Fundamentos do
React - Criação do projeto [
web] - Componentes e propriedades
- Configurando o
Tailwind CSS
- Fundamentos do
- Mobile
- O que é
React Native - O que é o
ExpoeExpo Go - Ambiente de desenvolvimento
- Conhecendo a estrutura de pastas e arquivos
- Executando a aplicação
- Configurando a Splash Screen
- Instalando fontes personalizadas
- Criação do
componentLoading - Customizando a Status Bar
- O que é
- Back-end
- Estrutura do banco de dados
- Diagramação do banco de dados
- Criação de tabelas no banco de dados
- Criação de
seeddo banco de dados
- Isolando arquivos do back-end
- Rotas do back-end
- Criação de novo hábito
- Detalhamento dos hábitos do dia
- Toggle do hábito no dia
- Resumo dos dias
- Estrutura do banco de dados
- Front-end
- Estrutura da homepage
- Componente
Header - Tabela de hábitos diários
- Geração de range de dias
- Preenchimento de dias no fim
- Adicionando Scroll horizontal
- Componente
- Estrutura da homepage
- Mobile
- Conhecendo o
Nativewind - Instalação do
Nativewind -
tailwind.confignoReact Native - Tipagem do
classNamepara usar otailwind - Instalar o
Tailwind CSS IntelliSense - Criando a
screendeHome- Criando o
componentdeHeader- Incluindo logo
SVGcomo componente - Tipagem do
SVGcom componente - Utilizando ícones do
vector-icons
- Incluindo logo
- Criando o
componentparaHabitDay- Instalando o
dayjspara manipular datas - Definindo o padrão de datas
pt-br - Reaproveitando o
generate-range-between-dates.ts
- Instalando o
- Criando os dias para o componente HabitDay
- Criando o cabeçalho dos dias da semana
- Criando o
- Conhecendo o
- Back-end
- Rota para completar hábito
- Rota para o resumo dos dias
- Front-end
- Acessibilidade com Radix-ui
- Modal
Dialogpara criar Novo Hábito -
Popoverdo detalhamento do dia - Personalizar
ProgressBar
- Mobile
- Criando estrutura básica das telas [screens]
- Cadastro de Novo Hábito
- Detalhes do Hábito
- Implementando a Navegação
- Criando rotas da aplicação
app.routes.tsx - Navegar para a tela de cadastro
- Tipagem das rotas de navegação
- Criando rotas da aplicação
- Criando
screen New.tsxpara Criar Hábito- Habilitando rolagem com
ScrollView - Criando component
BackButton - Implementando ação do botão de voltar
- Criando o
inputde um novo hábito - Criando
componentCheckBox - Criando o botão de confirmação
- Habilitando rolagem com
- Criando
screen Habit.tsxpara hábitos do dia- Navegando para a tela do hábito
- Habilitando rolagem com
ScrollView - Reaproveitando o
componentBackButton - Usando data como parâmetro da rota
- Estilizar e exibir o dia da semana
- Estilizar e exibir a data DD/MM
- Criando
componentProgressBar - Implementando ação do
CheckBox
- Criando estrutura básica das telas [screens]
- Front-end
- Criando CheckBox
- Obtendo dados do formulário
- Sincronizando hábitos completos
- Conexão Front-end com Back-end
- Configurando cliente HTTP
- Buscando resumo da API
- Utilizando dados da API no Popover
- Implementação da criação de Novo Hábito
- Mobile
- Iniciando o
server- Instalando o
Axios - Configurando o acesso ao
server
- Instalando o
-
Home- Listando o
summary - Utilizando o
Loadingcomponent - Manipulando propriedades no
HabitDaycomponent - Calculando percentual de progresso no dia
- Utilizando o
clsxpara manipular classes de estilos condicionais
- Listando o
-
New- Obtendo dados do formulário
-
getepostde novos hábitos para aapi
- Iniciando o
- Front-end
- Listando hábitos possíveis do dia
- Desabilitando em datas passadas
- Sincronizando hábitos completos
- Adicionando
transitionsefocus - Como levar o projeto para o próximo nível?
- Ideia 1 - Autenticação (
Firebase,Auth0) - Ideia 2 - Notificações
Push/Service Workers - Ideia 3 - Perfil público com gráfico de resumo
- Ideia 1 - Autenticação (
- Mobile
-
Habit- Buscar os hábitos do dia selecionado na
API - Exibir a lista de hábitos do dia
- Criar o component
HabitsEmpty - Exibir o progresso do hábito
- Verificar se data selecionada é passada e mostrar mensagem: não pode editar
- Buscar os hábitos do dia selecionado na
- Enviar para a
APIo estado do hábito- Utilizar o
useFocusEffectpara atualizar aHomeao voltar
- Utilizar o
- Animação
- Conhecendo o
React Native Reanimated - Instalando e configurando o
Reanimated - Animar a
ProgressBar - Animar a
CheckBok
- Conhecendo o
- Testar tudo
-
Agrupamos as tecnologias em server (back-end), web e mobile (front-end).
Iniciando a aplicação
npm run devORM para Node.js e TypeScript
Prisma | Next-generation ORM for Node.js & TypeScript
Instalação como dependência de desenvolvimento
npm i -D prismaExecutando o código prisma e gerando versões às quais se devem atribuir nomes
npx prisma migrate devExecutando o front-end do prisma
npx prisma studioBiblioteca de classes para manipulação de estilos
Instalação e inicialização do tailwindss
npm install -D tailwindcss
npx tailwindcss initConfiguração do tailwind.config.js
/** @type {import('tailwindcss').Config} */
module.exports = {
content: ["./src/**/*.{html,js}"],
theme: {
extend: {},
},
plugins: [],
}Biblioteca de ícones para aplicativos
Instalação do Phosphor icons
npm install --save phosphor-reactBiblioteca não-estilizada para acessibilidade de componentes visuais do React
Instalação do modal Dialog
npm install @radix-ui/react-dialogImportação do Dialog no arquivo .tsx
import * as Dialog from '@radix-ui/react-dialog';Instalação do Popover
npm install @radix-ui/react-popoverImportação do Popover no arquivo .tsx
import * as Popover from '@radix-ui/react-popover';Instalação do Checkbox
npm install @radix-ui/react-checkboxImportação do Checkbox no arquivo .tsx
import * as Checkbox from '@radix-ui/react-checkbox';Biblioteca para criar condicionais dentro dos estilos
Instalação
npm i clsxnpm i axios Iniciando a aplicação
npx expo startBiblioteca para usar os recursos do Tailwind CSS no React Native
https://www.nativewind.dev/quick-starts/expo
Instalação no Terminal do MacOS
npm i nativewindApós a instalação do "Nativewind”, instale o Tailwind CSS para desenvolvimento
npm i tailwindcss --save-deve altere o arquivo de configuração tailwind.config.js como mostrado abaixo.
// tailwind.config.js
module.exports = {
- content: [],
+ content: [
"./App.{js,jsx,ts,tsx}",
"./<custom directory>/**/*.{js,jsx,ts,tsx}"],
theme: {
extend: {},
},
plugins: [],
}Biblioteca para renderizar arquivos .svg no React Native.
https://github.com/software-mansion/react-native-svg
Instalação
npx expo install react-native-svgBiblioteca para usar arquivos .svg como componentes no React Native
https://github.com/kristerkari/react-native-svg-transformer
Instalação
npm i react-native-svg-transformer --save-devConfiguração criando na raíz do diretório do projeto o arquivo metro.config.js com o seguinte conteúdo:
const { getDefaultConfig } = require("expo/metro-config");
module.exports = (() => {
const config = getDefaultConfig(__dirname);
const { transformer, resolver } = config;
config.transformer = {
...transformer,
babelTransformerPath: require.resolve("react-native-svg-transformer"),
};
config.resolver = {
...resolver,
assetExts: resolver.assetExts.filter((ext) => ext !== "svg"),
sourceExts: [...resolver.sourceExts, "svg"],
};
return config;
})();Biblioteca de ícones para o React Native.
react-native-vector-icons directory
Dentre as diversas opções, o Rodrigo usa a "Feather”, importando-a assim:
import { Feather } from '@expo/vector-icons’;Biblioteca para manipular datas.
https://github.com/iamkun/dayjs
Instalação
npm install dayjsPara configurar a região de data local, crie um diretório "lib” dentro de "src” e crie um documento dayjs.ts contendo:
import dayjs from 'dayjs';
import 'dayjs/locale/pt-br';
dayjs.locale('pt-br');Biblioteca para navegação entre telas com React Native
Instalação
npm install @react-navigation/nativeInstalação de dependências para telas com notch
npx expo install react-native-screens react-native-safe-area-contextInstalando o Stack navigator
npm install @react-navigation/native-stack