Skip to content

O projeto RocketShoes que simula um e-commerce de calçados, onde podemos adicionar, remover e editar itens no carrinho, além de finalizar a compra.

Notifications You must be signed in to change notification settings

Aszurar/rocketshoes

Repository files navigation

OBS:

  • Branch main:
    • Usamos o JSON-Server para simular a API e assim consumir os dados a partir do arquivo server.json.
    • Não é a branch usada para o deploy.
    • Definimos a porta para consumir pela porta 3333, por meio do http://localhost:3333 definido na variável de ambiente VITE_API_URL.
  • Branch feature/no-json-server:
    • Consumimos diretamente o arquivo server.json passando o endereço dele na variável de ambiente VITE_API_URL
    • Com isso, usamos essa branch para o deploy já que estamos o server.json diretamente.
    • Aplicamos um delay no axios para simular a latência de uma API real por meio da variável ambiente VITE_ENABLE_API_DELAY.
Banner

RocketShoes

  1. O projeto RocketShoes que simula um e-commerce de calçados, onde podemos adicionar, remover e editar itens no carrinho, além de finalizar a compra.
  2. O site foi publicado com CI/CD por meio da plataforma Vercel.
  3. Acesse e teste o projeto em: https://rocketshoes-aszurar.vercel.app

GitHub deployments Vite cypress Vitest React TailwindCSS Framer Redux TanStack Query TanStack Virtual TanStack Table AXIOS TypeScript JavaScript HTML5 CSS3 PNPM

Sobre |  Motivo |  Design |  Requisitos |  Tecnologias |  CI/CD |  Baixar e Executar 


Gif mostrando o projeto

ℹ️ Sobre

O projeto tem o intuito de simular um marketplace de calçados, onde podemos escolher entre vários tipos de calçados, a quantidade, adicionar ou remover do carrinho. Além disso, podemos ver o total do preço, quantidade e finalizar a compra.

  • O objetivo desse projeto é praticar o gerenciamento e manipulação de Estados via Redux com o Redux Toolkit e React Redux.

  • Criamos 1 slice para o carrinho onde temos diversas ações que envolvem adicionar e remover itens do carrinho e persistir os dados no localStorage, além de calcular o total do preço dos produtos no carrinho.

  • Além disso, abordamos o TanStack Query - React Query para o consumo de dados e o TanStack - Table para a criação da tabela produtos no carrinho.

  • A acessibilidade foi levada em consideração, com o uso da lib axe-core para testes e correções, assim como leitor de tela ChromeVox.

  • O projeto é um desafio da trilha de React da Rocketseat, sendo o 3º desafio dessa trilha.

Tela inicial

Tela Inicial no tema claroTela Inicial no tema escuro

⁉️ Motivo

  • O objetivo do projeto é:

    1. Praticar o uso do Redux para o gerenciamento e manipulação do Estado do carrinho
    2. Usamos o TanStack Query para o consumo de dados e otimização com gerenciamento de cache em conjunto com axios.
    3. Usamos o TanStack - Table para a criação da tabela produtos no carrinho com ordenação, busca e paginação dos itens e uma manipulação mais robusta e componente agnóstico, que pode ser usado em qualquer projeto e tabela.
    4. Usamos o TanStack - React Virtual para otimização de listagens e criamos 2 componentes agnósticos de virtualização de listagens:
      1. <VirtualizedGridList/> - Para renderização listagens organizadas em grid, + de 1 coluna.
      2. <VirtualizedList/> - Para renderização listagens organizadas em flex-col, 1 coluna.
    5. Usamos o React Router Dom para a navegação entre as páginas.
    6. Usamos do Vitest para testes unitários nas funções de manipulação do Estado global no Redux.
    7. Usarmos o Cypress para realizar testes(E2E) e automatizá-los pelo GitHub Actions.
    8. Usamos o framer-motion para implementação de animações de layouts básicas.
    9. Criamos a interface com shadcn/ui e tailwindcss e usamos tailwind-merge em conjunto com clsx e tailwindcss-animate.
    10. Melhoramos o SEO do projeto com React-Helmet-Async
    11. Melhoras a acessibilidade usando o @axe-core/react para revisar os elementos e componentes com as diretrizes de acessibilidade estabelecidas no WCAG estabelecidas pelo W3C.

O que aprendi de novo?

  1. Criação de tabelas com TanStack - Table
  2. Criação de listagens virtuais com TanStack - React Virtual
  3. Animações de saída de layout com framer-motion

Carrinho

Carrinho cheio no modo claro_Carrinho cheio no modo escuro
Carrinho vazio no modo claro_Carrinho vazio no modo escuro

🎨 Design

  • Não temos um figma do design em si, mas é do desafio Rocketshoes da trilha React da Rocketseat

🌱 Requisitos Mínimos

  1. NodeJS
  2. ReactJS
  3. Vite
  4. PNPM

Checkout

Tela de Checkout - tema claro_Tela de Checkout - tema claro - preenchida Tela de Checkout - tema escuro_Tela de Checkout - tema escuro

🚀 Tecnologias Utilizadas

Tela de finalização

Tela de finalização - tema claro_tema escuro

🚚 Entrega e distribuição continua

https://rocketshoes-sand.vercel.app

  • Para a publicação da aplicação foi por meio da plataforma Vercel onde é possível publicar de forma rápida, fácil e simples projetos React e Next que estão hospedados no GitHub, GitLab, dentre outras plataformas de repositório remoto de graça.
  • Com isso, o CI/CD já é aplicado automaticamente por meio dessa plataforma definindo a branch de produção(feature/no-json-server), sempre que houver uma atualização nela, será gerado uma nova versão do projeto e já publicado.
  • Além disso, podemos customizar o próprio endereço do site, adicionar ferramentas dentre outras funcionalidades facilmente.
Projeto publicado no Vercel

📦 Como baixar e executar o projeto

Baixar

  • Clonar o projeto:

     git clone https://github.com/Aszurar/rocketshoes.git
  • É necessário ter o Node.js e um gerenciador de pacotes, como o Yarn, instalados em seu sistema. Se você ainda não os tem, siga estas instruções:

  • Instalação das dependências:

    • Execute o comando abaixo dentro da pasta do projeto

        pnpm i
  • É necessário definir as variáveis de ambiente:

        VITE_API_URL=
        VITE_ENABLE_API_DELAY=

Execução

  • Caso tudo tenha sido instalado com sucesso, basta executar na raiz do projeto:

  • Caso esteja na branch main

    • Terminal 1: Executando front-end

        pnpm dev
    • Terminal 2: Executando servidor json

        pnpm dev:server
  • Caso esteja na branch feature/no-json-server:

      pnpm dev

Desenvolvido por 🌟 Lucas de Lima Martins de Souza.