|
1 | | -This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app). |
| 1 | +# DevStore 🛍️ |
2 | 2 |
|
3 | | -## Getting Started |
| 3 | +<div align="center"> |
4 | 4 |
|
5 | | -First, run the development server: |
| 5 | + |
| 6 | + |
| 7 | +### Uma plataforma de e-commerce moderna construída com Next.js |
| 8 | + |
| 9 | +[](https://nextjs.org/) |
| 10 | +[](https://react.dev/) |
| 11 | +[](https://www.typescriptlang.org/) |
| 12 | +[](https://tailwindcss.com/) |
| 13 | +[](https://eslint.org/) |
| 14 | +[](https://cypress.io/) |
| 15 | + |
| 16 | +--- |
| 17 | + |
| 18 | +## 🎯 Menu Rápido |
| 19 | + |
| 20 | +| 📋 Sobre | 🚀 Setup | 📦 Tecnologias | 🏗️ Arquitetura | 🧪 Testes | 👨💻 Contribuir | |
| 21 | +| --------------------------- | ------------------------------------- | ---------------------------------- | ---------------------------------- | ------------------ | --------------------------- | |
| 22 | +| [Clique](#-sobre-o-projeto) | [Clique](#-instalação-e-configuração) | [Clique](#-tecnologias-utilizadas) | [Clique](#️-padrões-e-arquitetura) | [Clique](#-testes) | [Clique](#-como-contribuir) | |
| 23 | + |
| 24 | +--- |
| 25 | + |
| 26 | +</div> |
| 27 | + |
| 28 | +## 📋 Sobre o Projeto |
| 29 | + |
| 30 | +**DevStore** é uma plataforma de e-commerce moderna desenvolvida como um projeto educacional. <br> O projeto demonstra as melhores práticas de desenvolvimento web com Next.js 16,<br> incluindo renderização no servidor (SSR), geração estática (SSG), API routes, e otimizações de performance. |
| 31 | + |
| 32 | +### Características Principais |
| 33 | + |
| 34 | +- ✅ **Catálogo de Produtos** - Listagem completa com busca em tempo real |
| 35 | +- ✅ **Carrinhos Dinâmicos** - Gerenciamento de carrinho com Context API |
| 36 | +- ✅ **Página de Produto** - Detalhes completos com imagens otimizadas |
| 37 | +- ✅ **API REST** - Endpoints para produtos e busca |
| 38 | +- ✅ **Testes E2E** - Cobertura com Cypress |
| 39 | +- ✅ **Performance** - Otimizações automáticas do Next.js |
| 40 | + |
| 41 | +--- |
| 42 | + |
| 43 | +## 🚀 Instalação e Configuração |
| 44 | + |
| 45 | +### Pré-requisitos |
| 46 | + |
| 47 | +- **Node.js** 18.17 ou superior |
| 48 | +- **pnpm** 8.0+ (gerenciador de pacotes recomendado) |
| 49 | + |
| 50 | +### Passo a Passo |
| 51 | + |
| 52 | +**1. Clone o repositório** |
| 53 | + |
| 54 | +```bash |
| 55 | +git clone https://github.com/emmanuelmarcosdeoliveira/devstore.git |
| 56 | +cd devstore |
| 57 | +``` |
| 58 | + |
| 59 | +**2. Instale as dependências** |
| 60 | + |
| 61 | +```bash |
| 62 | +pnpm install |
| 63 | +``` |
| 64 | + |
| 65 | +**3. Configure as variáveis de ambiente** |
| 66 | + |
| 67 | +Crie um arquivo `.env.local` na raiz do projeto: |
| 68 | + |
| 69 | +```env |
| 70 | +# Exemplo de configuração |
| 71 | +NEXT_PUBLIC_API_URL=http://localhost:3000 |
| 72 | +``` |
| 73 | + |
| 74 | +**4. Execute o servidor de desenvolvimento** |
6 | 75 |
|
7 | 76 | ```bash |
8 | | -npm run dev |
9 | | -# or |
10 | | -yarn dev |
11 | | -# or |
12 | 77 | pnpm dev |
13 | | -# or |
14 | | -bun dev |
15 | 78 | ``` |
16 | 79 |
|
17 | | -Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. |
| 80 | +Acesse [http://localhost:3000](http://localhost:3000) no seu navegador. |
| 81 | + |
| 82 | +### Scripts Disponíveis |
| 83 | + |
| 84 | +| Comando | Descrição | |
| 85 | +| ------------ | ------------------------------------ | |
| 86 | +| `pnpm dev` | Inicia o servidor de desenvolvimento | |
| 87 | +| `pnpm build` | Cria a build de produção | |
| 88 | +| `pnpm start` | Inicia o servidor em produção | |
| 89 | +| `pnpm lint` | Executa verificações ESLint | |
| 90 | +| `pnpm test` | Executa testes com Cypress | |
| 91 | + |
| 92 | +--- |
| 93 | + |
| 94 | +## 📦 Tecnologias Utilizadas |
| 95 | + |
| 96 | +### Framework e Runtime |
| 97 | + |
| 98 | +| Tecnologia | Versão | Propósito | |
| 99 | +| -------------- | ------ | --------------------------- | |
| 100 | +| **Next.js** | 16.0.0 | Framework React com SSR/SSG | |
| 101 | +| **React** | 19.2.0 | Biblioteca UI | |
| 102 | +| **React DOM** | 19.2.0 | Renderização no DOM | |
| 103 | +| **TypeScript** | 5.x | Tipagem estática | |
| 104 | + |
| 105 | +### Estilização |
| 106 | + |
| 107 | +| Tecnologia | Versão | Propósito | |
| 108 | +| ------------------ | ------ | ------------------------- | |
| 109 | +| **Tailwind CSS** | 4.x | Framework CSS utilitário | |
| 110 | +| **PostCSS** | 4.x | Processamento de CSS | |
| 111 | +| **Tailwind Merge** | 3.3.1 | Merge de classes Tailwind | |
| 112 | + |
| 113 | +### Validação e Tipos |
| 114 | + |
| 115 | +| Tecnologia | Versão | Propósito | |
| 116 | +| ---------------------- | ------ | ---------------------------------- | |
| 117 | +| **Zod** | 4.1.12 | Validação de esquemas TypeScript | |
| 118 | +| **@t3-oss/env-nextjs** | 0.13.8 | Validação de variáveis de ambiente | |
| 119 | + |
| 120 | +### UI e Ícones |
| 121 | + |
| 122 | +| Tecnologia | Versão | Propósito | |
| 123 | +| ---------------- | ------- | ------------------------ | |
| 124 | +| **Lucide React** | 0.548.0 | Ícones SVG reutilizáveis | |
| 125 | + |
| 126 | +### Ferramentas de Desenvolvimento |
| 127 | + |
| 128 | +| Tecnologia | Versão | Propósito | |
| 129 | +| ------------------------ | ------ | ----------------------------- | |
| 130 | +| **ESLint** | 9.x | Análise estática de código | |
| 131 | +| **Cypress** | 15.6.0 | Testes end-to-end | |
| 132 | +| **Babel React Compiler** | 1.0.0 | Compilação otimizada de React | |
| 133 | + |
| 134 | +--- |
| 135 | + |
| 136 | +## 🏗️ Padrões e Arquitetura |
| 137 | + |
| 138 | +### Estrutura do Projeto |
| 139 | + |
| 140 | +``` |
| 141 | +devstore/ |
| 142 | +├── src/ |
| 143 | +│ ├── app/ # Next.js App Router |
| 144 | +│ │ ├── (store)/ # Grupo de rotas da loja |
| 145 | +│ │ │ ├── (home)/ # Página inicial |
| 146 | +│ │ │ ├── product/ # Página de produtos |
| 147 | +│ │ │ └── search/ # Página de busca |
| 148 | +│ │ ├── api/ # API Routes |
| 149 | +│ │ │ └── products/ # Endpoints de produtos |
| 150 | +│ │ └── layout.tsx # Layout raiz |
| 151 | +│ ├── components/ # Componentes React reutilizáveis |
| 152 | +│ ├── context/ # Context API para estado global |
| 153 | +│ ├── data/ # Tipos e utilitários de dados |
| 154 | +│ └── env.ts # Validação de variáveis de ambiente |
| 155 | +├── cypress/ # Testes E2E |
| 156 | +├── public/ # Arquivos estáticos |
| 157 | +└── package.json # Dependências do projeto |
| 158 | +``` |
| 159 | + |
| 160 | +### Padrões Implementados |
| 161 | + |
| 162 | +#### 1. **Server Components (SSR)** |
| 163 | + |
| 164 | +- Componentes Next.js renderizados no servidor por padrão |
| 165 | +- Reduz JavaScript no cliente e melhora SEO |
| 166 | + |
| 167 | +#### 2. **Context API** |
| 168 | + |
| 169 | +- Gerenciamento de estado global do carrinho |
| 170 | +- Evita prop drilling |
| 171 | + |
| 172 | +#### 3. **API Routes** |
| 173 | + |
| 174 | +- Endpoints RESTful nativos do Next.js |
| 175 | +- Localizado em `src/app/api/` |
| 176 | + |
| 177 | +#### 4. **Validação com Zod** |
| 178 | + |
| 179 | +- Tipagem forte de dados |
| 180 | +- Validação em tempo de compilação |
| 181 | + |
| 182 | +#### 5. **TypeScript Strict** |
| 183 | + |
| 184 | +- Modo strict ativado |
| 185 | +- Type safety em todo o projeto |
| 186 | + |
| 187 | +--- |
| 188 | + |
| 189 | +## 🧪 Testes |
| 190 | + |
| 191 | +### Testes E2E com Cypress |
| 192 | + |
| 193 | +Os testes estão localizados em `cypress/e2e/`: |
| 194 | + |
| 195 | +**Executar testes:** |
| 196 | + |
| 197 | +```bash |
| 198 | +pnpm cypress run |
| 199 | +``` |
| 200 | + |
| 201 | +**Testes Inclusos:** |
| 202 | + |
| 203 | +- ✅ Adicionar produto ao carrinho |
| 204 | +- ✅ Busca de produtos |
| 205 | +- ✅ Navegação entre páginas |
| 206 | + |
| 207 | +--- |
| 208 | + |
| 209 | +## 📖 Aprendizado e Fonte |
| 210 | + |
| 211 | +Este projeto foi desenvolvido como material de estudo baseado na formação da **RocketSeat**. |
| 212 | + |
| 213 | +Para aprender mais: [RocketSeat](https://www.rocketseat.com.br/) |
| 214 | + |
| 215 | +--- |
| 216 | + |
| 217 | +## 🔧 Variáveis de Ambiente |
| 218 | + |
| 219 | +Crie um arquivo `.env.local` com as configurações necessárias: |
| 220 | + |
| 221 | +```env |
| 222 | +# Exemplo |
| 223 | +NEXT_PUBLIC_API_URL=http://localhost:3000 |
| 224 | +NODE_ENV=development |
| 225 | +``` |
| 226 | + |
| 227 | +--- |
| 228 | + |
| 229 | +## 🚀 Deploy |
| 230 | + |
| 231 | +### Deploy no Vercel (Recomendado) |
| 232 | + |
| 233 | +```bash |
| 234 | +# Instale o Vercel CLI |
| 235 | +npm install -g vercel |
| 236 | + |
| 237 | +# Faça deploy |
| 238 | +vercel |
| 239 | +``` |
| 240 | + |
| 241 | +--- |
| 242 | + |
| 243 | +## 🤝 Como Contribuir |
| 244 | + |
| 245 | +Sua contribuição é bem-vinda! Aqui estão os passos para contribuir: |
| 246 | + |
| 247 | +<details> |
| 248 | +<summary><strong>📌 Clique para ver o guia completo de contribuição</strong></summary> |
| 249 | + |
| 250 | +### Passo 1: Familiarize-se com o Projeto |
| 251 | + |
| 252 | +- Leia a documentação incluída |
| 253 | +- Explore o código e sua estrutura |
| 254 | +- Entenda como o projeto funciona |
| 255 | + |
| 256 | +### Passo 2: Faça um Fork |
| 257 | + |
| 258 | +Crie uma cópia (fork) do repositório em sua conta do GitHub. |
| 259 | + |
| 260 | +[](https://docs.github.com/pt/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo) |
| 261 | + |
| 262 | +### Passo 3: Clone o Repositório |
| 263 | + |
| 264 | +```bash |
| 265 | +git clone https://github.com/SEU-USUARIO/devstore.git |
| 266 | +cd devstore |
| 267 | +``` |
| 268 | + |
| 269 | +### Passo 4: Crie uma Branch |
| 270 | + |
| 271 | +```bash |
| 272 | +git checkout -b feature/sua-feature |
| 273 | +# ou |
| 274 | +git checkout -b fix/seu-fix |
| 275 | +``` |
| 276 | + |
| 277 | +**Convenção de nomes:** |
| 278 | + |
| 279 | +- `feature/` - Para novas funcionalidades |
| 280 | +- `fix/` - Para correções de bugs |
| 281 | +- `docs/` - Para documentação |
| 282 | +- `refactor/` - Para refatoração |
| 283 | + |
| 284 | +### Passo 5: Faça as Alterações |
| 285 | + |
| 286 | +- Implemente suas mudanças |
| 287 | +- Adicione testes se necessário |
| 288 | +- Mantenha o código limpo (execute `pnpm lint`) |
| 289 | + |
| 290 | +### Passo 6: Commit e Push |
| 291 | + |
| 292 | +```bash |
| 293 | +git add . |
| 294 | +git commit -m "feat: descrição clara das alterações" |
| 295 | +git push origin feature/sua-feature |
| 296 | +``` |
| 297 | + |
| 298 | +**Padrão de mensagens de commit:** |
| 299 | + |
| 300 | +- `feat:` Nova funcionalidade |
| 301 | +- `fix:` Correção de bug |
| 302 | +- `docs:` Mudanças na documentação |
| 303 | +- `style:` Formatação de código |
| 304 | +- `refactor:` Refatoração de código |
| 305 | +- `test:` Adição de testes |
| 306 | + |
| 307 | +### Passo 7: Crie um Pull Request |
| 308 | + |
| 309 | +Acesse o repositório original e clique em "New Pull Request". Descreva claramente: |
| 310 | + |
| 311 | +- O que foi mudado |
| 312 | +- Por que foi mudado |
| 313 | +- Como testar as alterações |
| 314 | + |
| 315 | +### Passo 8: Revise e Responda ao Feedback |
| 316 | + |
| 317 | +Os mantedores podem sugerir alterações. Colabore e faça os ajustes necessários. |
| 318 | + |
| 319 | +</details> |
| 320 | + |
| 321 | +--- |
| 322 | + |
| 323 | +## 👨💻 Desenvolvedor |
| 324 | + |
| 325 | +<div align="center"> |
| 326 | + |
| 327 | +### Desenvolvido por |
| 328 | + |
| 329 | +<img height="120px" src="https://res.cloudinary.com/delo0gvyb/image/upload/v1752287431/profile_mjvmdb.png" alt="Emmanuel Oliveira" style="border-radius: 50%; border: 3px solid #3178C6;"> |
| 330 | + |
| 331 | +#### **Emmanuel Oliveira** |
| 332 | + |
| 333 | +💖 **Desenvolvido com dedicação** |
| 334 | + |
| 335 | +[](https://www.linkedin.com/in/emmanuel-marcos-oliveira/) |
| 336 | +[](https://wa.me/5511968336094) |
| 337 | +[](mailto:ofs.dev.br@gmail.com) |
| 338 | + |
| 339 | +**© 2025 - Todos os Direitos Reservados** |
| 340 | + |
| 341 | +</div> |
| 342 | + |
| 343 | +--- |
| 344 | + |
| 345 | +## 📄 Licença |
18 | 346 |
|
19 | | -You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. |
| 347 | + |
20 | 348 |
|
21 | | -## Learn More |
| 349 | +Este projeto está sob a licença **MIT**. Veja o arquivo [LICENSE](./LICENSE) para mais detalhes. |
22 | 350 |
|
23 | | -To learn more about Next.js, take a look at the following resources: |
| 351 | +Lançado em 2025. |
24 | 352 |
|
25 | | -- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. |
26 | | -- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. |
| 353 | +--- |
27 | 354 |
|
28 | | -You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome! |
| 355 | +<div align="center"> |
29 | 356 |
|
30 | | -## Deploy on Vercel |
| 357 | +### ⭐ Se este projeto foi útil para você, considere dar uma estrela! |
31 | 358 |
|
32 | | -The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. |
| 359 | +**Obrigado por chegar até aqui!** 😁 |
33 | 360 |
|
34 | | -Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details. |
| 361 | +</div> |
0 commit comments