Landing page responsiva para divulgação e venda de amigurumis artesanais. O projeto nasceu inicialmente como um protótipo desenvolvido durante o Projeto Integrado Inovação da faculdade Anhanguera e, desde então, vem sendo expandido e refinado como parte do meu portfólio.
A aplicação é full-stack: possui catálogo de produtos com filtro por categoria, carrinho de compras com registro de pedidos no banco de dados, finalização via WhatsApp e autenticação de usuários com JWT.
- Catálogo de produtos carregado dinamicamente consumindo uma API REST
- Filtro por categoria no front-end integrado a query params na API
- Carrinho de compras com painel lateral e contador de itens no header
- Pedido salvo no banco antes de redirecionar ao WhatsApp (com itens e preços no momento da compra)
- Cadastro e login de clientes com autenticação via JWT
- Banco de dados relacional com quatro tabelas:
products,users,orderseorder_items - Navegação responsiva com menu mobile
- Foco visível, contraste revisado e textos alternativos descritivos
- Estrutura pensada para evolução em fases, documentadas no roadmap
Front-end:
HTML5para a estrutura da páginaCSS3organizado em arquivos base, utilitários, variáveis e componentesJavaScriptmodular, consumindo a API e gerenciando o carrinho com classesFont Awesomepara ícones da interfaceGoogle Fontspara tipografia
Back-end e Banco de Dados:
Node.jscomExpresspara a criação da API RESTPostgreSQLcomo banco de dados relacionalpg(node-postgres) para conectar a aplicação ao banco de dadosbcryptpara hash seguro de senhasjsonwebtokenpara autenticação via JWT
O projeto é full-stack, dividido de forma simples:
Back-end:
server.js— Configura o servidor Express, gerencia a conexão com o banco e expõe as rotas da APIdb/schema.sql— Scripts SQL para criação das tabelas e população dos dados iniciais.env— (A ser criado por quem for rodar o projeto) Armazena as credenciais do banco e o segredo do JWT
Front-end:
index.html— Estrutura principal da páginacss/— Variáveis, estilos base, resets e componentes modularesjs/main.js— Requisição à API e renderização dos produtosjs/classes.js— Encapsula a criação dos elementos de produtojs/cart.js— Lógica completa do carrinho (classeCart) e integração com a API de pedidosjs/menu.js— Comportamento do menu mobilejs/auth/— Lógica das telas de cadastro e loginauth/— Páginas HTML de cadastro (register.html) e login (login.html)
Para rodar o projeto na sua máquina, você precisará do Node.js e do PostgreSQL instalados.
git clone https://github.com/grazielle-marttdev/amigurumis-vovo.git
cd amigurumis-vovonpm installO projeto usa PostgreSQL. Você precisará criar um banco de dados e executar o script que cria as tabelas.
Passo a passo:
-
Abra seu PostgreSQL (via pgAdmin ou via terminal com
psql). -
Crie um banco de dados (pode nomear como quiser — aqui usamos
amigurumis_dbcomo exemplo):CREATE DATABASE amigurumis_db;
-
Conecte-se ao banco recém-criado e execute o arquivo
db/schema.sql.Pelo terminal:
psql -U seu_usuario -d amigurumis_db -f db/schema.sql
Pelo pgAdmin: Abra o banco criado, acesse o Query Tool e cole o conteúdo do arquivo
db/schema.sql. Execute tudo de uma vez comF5.Esse script cria as tabelas
products,users,orderseorder_items, e popula a tabela de produtos com os dados iniciais.
Crie um arquivo .env na raiz do projeto com as seguintes variáveis:
DB_USER=seu_usuario_do_postgres
DB_HOST=localhost
DB_DATABASE=amigurumis_db
DB_PASSWORD=sua_senha_do_postgres
DB_PORT=5432
JWT_SECRET=uma_chave_secreta_longa_e_aleatoriaDica: Para gerar um
JWT_SECRETseguro, rode o comando abaixo no terminal e copie o resultado:node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
node server.jsO servidor rodará em http://localhost:3000.
Com a API rodando, sirva os arquivos estáticos. Em um novo terminal, na raiz do projeto:
npx serve .(Ou use a extensão Live Server no VS Code.)
Pronto! Acesse o endereço gerado e a aplicação estará funcionando, consumindo os dados do seu banco PostgreSQL.
| Método | Rota | Autenticação | Descrição |
|---|---|---|---|
GET |
/products |
— | Lista todos os produtos. Aceita ?category= como filtro. |
GET |
/products/:id |
— | Retorna um produto pelo ID. |
POST |
/auth/register |
— | Cadastra um novo cliente. |
POST |
/auth/login |
— | Autentica e retorna um token JWT. |
POST |
/orders |
✅ JWT | Cria um pedido com os itens do carrinho. |
O projeto está na Fase 3 (em andamento), com foco em autenticação e painel administrativo. O que já está funcionando:
- ✅ Catálogo com categorias e disponibilidade
- ✅ Carrinho de compras com persistência de pedidos no banco
- ✅ Finalização de pedido via WhatsApp com mensagem automática
- ✅ Cadastro e login de clientes com JWT
- ✅ Middlewares de autenticação e autorização por perfil (admin / cliente)
Próximas etapas:
- Área do cliente com histórico de pedidos
- Painel administrativo (CRUD de produtos e gestão de pedidos)
- Preparação para deploy
O plano completo de evolução está em ROADMAP.md.
A inteligência artificial tem sido usada como apoio prático durante a evolução do projeto, especialmente para:
- Revisar possibilidades de refatoração
- Identificar melhorias de semântica e acessibilidade
- Esclarecer decisões de estrutura e organização do código
- Auxiliar na modelagem do banco de dados e arquitetura da API
Esse apoio tem sido importante para tornar o desenvolvimento mais consciente e iterativo, ajudando a transformar o protótipo inicial em uma aplicação full-stack.
- Parte do conteúdo visual e textual foi gerada com apoio de IA para fins de prototipação
- O back-end ainda roda localmente — deploy será abordado em uma fase futura
Projeto desenvolvido para portfólio 💻✨🧶