{"id":28919409,"url":"https://github.com/ivanintech/pizza-evaluator-app","last_synced_at":"2026-04-09T11:02:38.474Z","repository":{"id":299159955,"uuid":"1002225891","full_name":"ivanintech/pizza-evaluator-app","owner":"ivanintech","description":"Pizza Evaluator is a full-stack web application that allows users to explore a catalog of pizzas from different brands (Domino's, Telepizza, Pizza Hut), vote for their favorites, and view a popularity-based ranking. The application features an administration panel to manage users, pizzas, and managers.","archived":false,"fork":false,"pushed_at":"2025-06-15T02:20:34.000Z","size":24998,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-16T08:45:40.325Z","etag":null,"topics":["expressjs","javascript","node-js","sequelize","sqlite","vuejs"],"latest_commit_sha":null,"homepage":"","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ivanintech.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-06-15T01:54:21.000Z","updated_at":"2025-06-15T10:05:08.000Z","dependencies_parsed_at":"2025-06-15T03:37:55.736Z","dependency_job_id":null,"html_url":"https://github.com/ivanintech/pizza-evaluator-app","commit_stats":null,"previous_names":["ivancastroprojects/pizza-evaluator-app","ivanintech/pizza-evaluator-app"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ivanintech/pizza-evaluator-app","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ivanintech%2Fpizza-evaluator-app","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ivanintech%2Fpizza-evaluator-app/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ivanintech%2Fpizza-evaluator-app/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ivanintech%2Fpizza-evaluator-app/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ivanintech","download_url":"https://codeload.github.com/ivanintech/pizza-evaluator-app/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ivanintech%2Fpizza-evaluator-app/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274026706,"owners_count":25209739,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-07T02:00:09.463Z","response_time":67,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["expressjs","javascript","node-js","sequelize","sqlite","vuejs"],"created_at":"2025-06-22T03:08:53.183Z","updated_at":"2025-12-30T21:28:00.905Z","avatar_url":"https://github.com/ivanintech.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🍕 Pizza Evaluator 🍕\n\n![Vue.js](https://img.shields.io/badge/Vue.js-35495E?style=for-the-badge\u0026logo=vue.js\u0026logoColor=4FC08D) ![Node.js](https://img.shields.io/badge/Node.js-339933?style=for-the-badge\u0026logo=node.js\u0026logoColor=white) ![Express.js](https://img.shields.io/badge/Express.js-000000?style=for-the-badge\u0026logo=express\u0026logoColor=white) ![Sequelize](https://img.shields.io/badge/Sequelize-52B0E7?style=for-the-badge\u0026logo=sequelize\u0026logoColor=white) ![JavaScript](https://img.shields.io/badge/JavaScript-F7DF1E?style=for-the-badge\u0026logo=javascript\u0026logoColor=black) ![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=for-the-badge)\n\n**Find, vote, and compare the best pizzas on the market. A full-stack platform for pizza lovers.**\n\n![Application Flow](screenshots/pizzaEvaluator.gif)\n\n## 📜 Description\n\nPizza Evaluator is a full-stack web application that allows users to explore a catalog of pizzas from different brands (Domino's, Telepizza, Pizza Hut), vote for their favorites, and view a popularity-based ranking. The application features an administration panel to manage users, pizzas, and managers.\n\nThis project was conceived as a comprehensive solution to centralize opinions and aid in decision-making, implementing a modern tech stack and a robust architecture. It was started during my third year of Computer Science Engineering, and I was very eager to finish it someday.\n\n## ✨ Key Features\n\n-   **Dynamic Pizza Catalog**: Explore pizzas from multiple suppliers.\n-   **Voting System**: Registered users can vote for their favorite pizzas (with a limit of 5 votes per user).\n-   **Real-Time Ranking**: The home page displays the top-rated pizzas.\n-   **Search and Filters**: Search for pizzas by name or ingredient and filter by categories.\n-   **User Authentication**: Secure registration and login system.\n-   **Admin Panel**: A dedicated interface for administrators to manage all application data.\n-   **Modern and Responsive Design**: Attractive user interface adaptable to different devices.\n\n## 🖼️ Application Gallery\n\n| Home - Main Page                               | Pizzas - Full Catalog                            |\n| ---------------------------------------------- | ------------------------------------------------ |\n| ![Main Page](screenshots/homePic.jpg)          | ![Pizza Catalog](screenshots/pizzasPic.jpg)      |\n\n| Reviews - Recommendations                      | Login - User Access                              |\n| ---------------------------------------------- | ------------------------------------------------ |\n| ![Reviews Page](screenshots/reviewsPic.jpg)    | ![Login Page](screenshots/loginPic.jpg)          |\n\n| Admin Panel (Users)                            |\n| ---------------------------------------------- |\n| ![Admin Panel](screenshots/usersPic.jpg)       |\n\n## ⚙️ Tech Stack\n\nThe application is built with a client-server architecture:\n\n### Frontend\n-   **Vue.js**: A progressive JavaScript framework for building user interfaces.\n-   **Vuex**: As a centralized state management pattern and library for all application components.\n-   **Vue Router**: For managing routes in this Single Page Application (SPA).\n-   **Sass (SCSS)**: For more powerful and organized styling.\n-   **Axios**: For making HTTP requests to the backend.\n-   **Generative AI for UX**: The initial user experience and interface concepts were prototyped using cutting-edge generative AI tools like [Google's Project Stitch](https://stitch.withgoogle.com/), enabling rapid design iteration.\n\n### Backend\n-   **Node.js**: JavaScript runtime environment on the server side.\n-   **Express**: Framework for creating the REST API and managing routes.\n-   **Sequelize**: A Node.js ORM (Object-Relational Mapper) that simplifies database interaction.\n-   **SQLite**: A lightweight, file-based SQL database, ideal for development and rapid prototyping.\n-   **Multer**: Middleware for handling file uploads (user avatars).\n-   **Puppeteer**: For web scraping to populate the database with pizzas from Pizza Hut.\n\n## 🧠 Featured Logic\n\n-   **Database Synchronization with `alter: true`**: During development, the `{ alter: true }` option from Sequelize was used to automatically adjust the database tables to match the model changes. To prevent unique constraint errors with backup tables (`users_backup`), a solution was implemented to drop these backup tables before each synchronization.\n\n    ```javascript\n    // server/src/app.js\n    await sequelize.query('DROP TABLE IF EXISTS users_backup;');\n    await sequelize.sync({ alter: true });\n    ```\n\n-   **Voting System**: The business logic for voting is centralized in the `usersController`. When a user votes, the backend checks if they have votes available and if they have already voted for that pizza, updating the corresponding counters in the `users` and `pizzas` tables.\n\n## 🚀 Installation and Usage\n\nTo get the project up and running on your local environment, follow these steps:\n\n### 1. Prerequisites\n-   Have [Node.js](https://nodejs.org/) (which includes npm) installed.\n\n### 2. Clone the Repository\n```bash\ngit clone https://github.com/ivancastroprojects/pizza-evaluator-app.git\ncd pizza-evaluator-app\n```\n\n### 3. Install Backend Dependencies\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fivanintech%2Fpizza-evaluator-app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fivanintech%2Fpizza-evaluator-app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fivanintech%2Fpizza-evaluator-app/lists"}