Bewear é uma plataforma de e-commerce moderna e responsiva para moda, construída com as mais recentes tecnologias web. O projeto oferece uma experiência completa de compra online com autenticação, carrinho de compras, checkout integrado com Stripe e gerenciamento de pedidos.
Acesse a aplicação em produção: d208sz0c0l2ud8.cloudfront.net
- Catálogo de Produtos: Visualização de produtos organizados por categorias com sistema de busca
- Variantes de Produtos: Diferentes cores e opções para cada produto
- Carrinho de Compras: Adicionar, remover e gerenciar itens com persistência
- Processo de Checkout: Fluxo completo de identificação e confirmação
- Endereços de Entrega: Gerenciamento múltiplo de endereços de entrega
- Checkout Seguro: Integração com Stripe para pagamentos
- Histórico de Pedidos: Acompanhamento de compras realizadas com detalhes completos
- Status de Pedidos: Sistema de status (pending, paid, canceled)
- Login/Registro: Sistema completo de autenticação com email e senha
- Login Social: Integração com Google OAuth
- Gerenciamento de Perfil: Dados pessoais e endereços de entrega
- Sessões Seguras: Gerenciamento de sessões com BetterAuth
- Design Responsivo: Otimizado para desktop e mobile
- UI/UX Intuitiva: Interface limpa e fácil de usar com shadcn/ui
- Componentes Reutilizáveis: Biblioteca de componentes consistente
- Banners Promocionais: Sistema de banners responsivos
- Navegação Intuitiva: Menu de categorias e navegação otimizada
- Next.js 15 - Framework React com App Router
- React 19 - Biblioteca de interface de usuário
- TypeScript - Tipagem estática
- Tailwind CSS - Framework de estilização
- shadcn/ui - Biblioteca de componentes
- React Hook Form - Gerenciamento de formulários
- Zod - Validação de schemas
- React Query - Gerenciamento de estado do servidor
- Next.js 15 API Routes - API endpoints e Server Actions
- BetterAuth - Sistema de autenticação moderno
- PostgreSQL - Banco de dados relacional
- Drizzle ORM - Mapeamento objeto-relacional type-safe
- Stripe - Processamento de pagamentos seguro
- Server Actions - Ações do servidor para operações de dados
- React Query (TanStack Query) - Gerenciamento de estado do servidor
- React Hook Form - Gerenciamento de formulários
- Zod - Validação de schemas e tipos
- Custom Hooks - Hooks personalizados para queries e mutations
- SST (Serverless Stack) - Framework para deploy na AWS
- AWS - Infraestrutura em nuvem
- Docker - Containerização da aplicação
- CloudFront - CDN para imagens
- ESLint - Linting de código
- Prettier - Formatação de código
- Drizzle Kit - Migrações de banco de dados
- TypeScript - Tipagem estática
- Tailwind CSS - Framework de estilização
- Node.js 18+
- PostgreSQL
- Conta no Stripe (para pagamentos)
- Conta no Google Cloud (para OAuth)
- Docker (opcional, para containerização)
git clone https://github.com/seu-usuario/bewear.git
cd bewearnpm installCopie o arquivo env.example para .env.local e configure as variáveis:
cp env.example .env.localConfigure as seguintes variáveis no arquivo .env.local:
# Banco de dados
DATABASE_URL=postgresql://usuario:senha@localhost:5432/bewear
# Autenticação
BETTER_AUTH_SECRET=sua_chave_secreta_aqui
# Google OAuth
GOOGLE_CLIENT_ID=seu_google_client_id
GOOGLE_CLIENT_SECRET=seu_google_client_secret
# Stripe
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=pk_test_...
STRIPE_SECRET_KEY=sk_test_...# Execute as migrações
npm run db:migrate
# (Opcional) Popule o banco com dados de exemplo
npm run db:seed# Modo desenvolvimento
npm run dev
# Build para produção
npm run build
# Iniciar em produção
npm run startAcesse http://localhost:3000 no seu navegador.
# Build da imagem Docker
docker build -t bewear .
# Executar container
docker run -p 3000:3000 bewearO projeto utiliza um schema bem estruturado com as seguintes tabelas principais:
- users - Dados dos usuários (id, name, email, image)
- sessions - Sessões ativas dos usuários
- accounts - Contas vinculadas (Google OAuth)
- verification - Tokens de verificação de email
- categories - Categorias de produtos
- products - Produtos do catálogo
- product_variants - Variantes dos produtos (cores, preços, imagens)
- carts - Carrinhos de compra dos usuários
- cart_items - Itens no carrinho
- shipping_addresses - Endereços de entrega dos usuários
- orders - Pedidos realizados
- order_items - Itens dos pedidos
- Usuários podem ter múltiplos endereços de entrega
- Produtos têm múltiplas variantes (cores, preços)
- Carrinhos são únicos por usuário
- Pedidos mantêm snapshot dos dados no momento da compra
src/
├── actions/ # Server Actions
│ ├── add-cart-product/ # Adicionar produto ao carrinho
│ ├── create-checkout-session/ # Criar sessão de checkout
│ ├── create-shipping-address/ # Criar endereço de entrega
│ ├── decrease-cart-product-quantity/ # Diminuir quantidade
│ ├── finish-order/ # Finalizar pedido
│ ├── get-cart/ # Buscar carrinho
│ ├── get-user-addresses/ # Buscar endereços do usuário
│ ├── remove-cart-product/ # Remover produto do carrinho
│ └── update-cart-shipping-address/ # Atualizar endereço
├── app/ # Páginas da aplicação (App Router)
│ ├── authentication/ # Login e registro
│ ├── cart/ # Carrinho e checkout
│ │ ├── identification/ # Identificação e endereços
│ │ └── confirmation/ # Confirmação do pedido
│ ├── checkout/ # Processo de pagamento
│ │ └── success/ # Página de sucesso
│ ├── my-orders/ # Histórico de pedidos
│ ├── category/ # Páginas de categorias
│ └── product-variant/ # Páginas de produtos
├── components/ # Componentes reutilizáveis
│ ├── common/ # Componentes comuns
│ │ ├── cart-item.tsx # Item do carrinho
│ │ ├── cart.tsx # Carrinho completo
│ │ ├── header.tsx # Cabeçalho
│ │ ├── footer.tsx # Rodapé
│ │ └── product-list.tsx # Lista de produtos
│ └── ui/ # Componentes da UI (shadcn/ui)
├── data/ # Funções de busca de dados
│ ├── categories/ # Dados de categorias
│ └── products/ # Dados de produtos
├── db/ # Configuração do banco de dados
│ ├── schema.ts # Schema do Drizzle
│ └── index.ts # Conexão com o banco
├── hooks/ # Hooks customizados
│ ├── mutations/ # Hooks para mutations (React Query)
│ └── queries/ # Hooks para queries (React Query)
├── lib/ # Utilitários e configurações
│ └── auth.ts # Configuração do BetterAuth
└── providers/ # Providers do React
└── react-query.tsx # Provider do React Query
O projeto está configurado para deploy na AWS usando SST:
# Instalar SST globalmente
npm install -g sst
# Deploy para desenvolvimento
sst deploy
# Deploy para produção
sst deploy --stage production- Configure as credenciais AWS
- Execute
sst deploypara criar a infraestrutura - Configure as variáveis de ambiente no console AWS
- Acesse a URL fornecida pelo SST
O projeto também pode ser deployado em:
- Vercel - Para deploy simples e rápido
- Netlify - Com configuração manual
- Railway - Com Docker
- DigitalOcean App Platform - Com Docker
- AWS Amplify - Alternativa ao SST
# Desenvolvimento
npm run dev # Inicia servidor de desenvolvimento
npm run build # Build para produção
npm run start # Inicia servidor de produção
npm run lint # Executa linting do código
npm run type-check # Verifica tipos TypeScript
# Banco de dados
npm run db:generate # Gera migrações do Drizzle
npm run db:migrate # Executa migrações
npm run db:push # Sincroniza schema com o bancoO projeto está configurado para usar CloudFront como CDN para imagens:
- Hostname:
d4lgxe9bm8juw.cloudfront.net - Configurado no
next.config.ts
O projeto inclui um Dockerfile otimizado para produção:
- Baseado em Node.js Alpine
- Multi-stage build
- Otimizado para Next.js standalone
Sistema de autenticação moderno com:
- Suporte a email/senha
- Google OAuth
- Sessões seguras
- Verificação de email
- Fork o projeto
- Crie uma branch para sua feature (
git checkout -b feature/AmazingFeature) - Commit suas mudanças seguindo o padrão Conventional Commits:
feat:para novas funcionalidadesfix:para correções de bugsdocs:para documentaçãostyle:para formataçãorefactor:para refatoraçãotest:para testeschore:para tarefas de manutenção
- Push para a branch (
git push origin feature/AmazingFeature) - Abra um Pull Request
git commit -m "feat: add user authentication with BetterAuth"
git commit -m "fix: resolve cart item quantity update issue"
git commit -m "docs: update README with installation instructions"Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
Desenvolvido com ❤️ por [Seu Nome]
⭐ Se este projeto foi útil para você, considere dar uma estrela no repositório!