{"id":19947739,"url":"https://github.com/spencerlepine/quickcart","last_synced_at":"2025-05-03T18:30:57.404Z","repository":{"id":46790644,"uuid":"348878118","full_name":"spencerlepine/quickcart","owner":"spencerlepine","description":"A grocery product catalog for budgeting a shopping list stored in the cloud. Built with React.js, Node.js, Material UI, and Firebase.","archived":false,"fork":false,"pushed_at":"2023-12-10T01:19:11.000Z","size":29952,"stargazers_count":3,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-05-04T00:07:09.164Z","etag":null,"topics":["firebase","javascript","material-ui","nodejs","openfoodfacts","react","reactjs","spoonacular"],"latest_commit_sha":null,"homepage":"https://www.youtube.com/watch?v=2YrizGT_2xA","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/spencerlepine.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-03-17T23:13:49.000Z","updated_at":"2024-01-21T23:23:02.000Z","dependencies_parsed_at":"2023-01-22T18:46:16.813Z","dependency_job_id":null,"html_url":"https://github.com/spencerlepine/quickcart","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spencerlepine%2Fquickcart","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spencerlepine%2Fquickcart/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spencerlepine%2Fquickcart/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spencerlepine%2Fquickcart/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/spencerlepine","download_url":"https://codeload.github.com/spencerlepine/quickcart/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224370245,"owners_count":17299968,"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","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":["firebase","javascript","material-ui","nodejs","openfoodfacts","react","reactjs","spoonacular"],"created_at":"2024-11-13T00:37:12.667Z","updated_at":"2024-11-13T00:37:13.128Z","avatar_url":"https://github.com/spencerlepine.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# [QuickCart](https://grocery-client-sl.herokuapp.com/) [![Build Status](https://github.com/spencerlepine/quickcart/actions/workflows/main.yml/badge.svg?branch=master)](https://github.com/spencerlepine/quickcart/actions/workflows/main.yml) ![Inactive Badge](./whitepaper/images/inactive.svg)\n\nCreate and store weekly grocery shopping lists. Find real products via search or barcode scan, view nutrition facts, or upload your own.\n\n![React](https://img.shields.io/badge/react-%2320232a.svg?style=for-the-badge\u0026logo=react\u0026logoColor=%2361DAFB) ![Firebase](https://img.shields.io/badge/firebase-orange.svg?style=for-the-badge\u0026logo=firebase\u0026logoColor=white) ![Heroku](https://img.shields.io/badge/heroku-%23430098.svg?style=for-the-badge\u0026logo=heroku\u0026logoColor=white)\n\n![Demo GIF](./client/src/assets/images/demo.gif)\n\n## 🎥 Demo Video + Project Walk-through\n\n[![Youtube Video](./whitepaper/images/THUMBNAIL-smaller.png)](https://www.youtube.com/watch?v=2YrizGT_2xA)\n\n## 🎯 Project Overview\nA grocery product catalog to assist budgeting and managing a shopping list stored in the cloud.\n\n- Designed a **Firebase Cloud Firestore NoSQL** database managing user records, grocery product catalogs, and cart purchase histories\n- Organized state management for products, account information, and carts with Context hooks also persisted in the database.\n- Integrated Firebase **Authentication** to assist storing user unique shopping lists, along with customized product records.\n- Created a clean and modern user experience with **React/MaterialUI** following a wireframe and site-wide color theme.\n- Implemented barcode scanning and external records from the **Spoonacular** + **OpenFoodFacts** API to onboard new products\n\n## 📦 Technologies:\n- [React](https://reactjs.org/)\n- [Firebase](https://firebase.google.com/)\n- [React Testing Libary](https://testing-library.com/)\n- [Material-UI](https://material-ui.com/)\n- [OpenFoodFacts](https://world.openfoodfacts.org)\n- [Google CSE](https://cse.google.com)\n- [Spoonacular](https://spoonacular.com/food-api/docs)\n- [Heroku](https://www.heroku.com/) (for hosting frontend)\n\n## 🏗️ Architecture\n\n![Architecture](./whitepaper/images/quickcart-architecture-diagram.jpg)\n\n## 🌟 Features:\n- Browse grocery products records served from the Firestore database\n- Save products to your cart, always persisted in the cloud.\n- Analyze the cart to identify empty categories\n- Customized product records and create a personal list\n- Create an account to access your list anywhere\n- Scan a bar code to upload a product pulled from Spoonacular or OpenFoodFacts\n- View a history of transaction receipts previous from shopping lists\n- Save product images with a convient image searching pop-up connected to Google CSE\n\n![Demo Screenshot](./client/src/assets/images/demo_transparent.png)\n![Cart Feature Screenshot](./client/src/assets/images/cart-screenshot.png)\n![Search Feature Screenshot](./client/src/assets/images/search-screenshot.png)\n![Scan Feature Screenshot](./client/src/assets/images/scan-upc.png)\n![Analyzer Feature Screenshot](./client/src/assets/images/analyzer-screenshot.png)\n![Customize Feature Screenshot](./client/src/assets/images/customize-product.png)\n![Saved Feature Screenshot](./client/src/assets/images/saved-screenshot.png)\n\n## Deployment\n\n![Architecture](./whitepaper/images/quickcart-deployment-diagram.jpg)\n\n## ⚙️ Local Development\n\n```sh\n$ cp .env.sample .env\n$ npm install\n$ npm run dev\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspencerlepine%2Fquickcart","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fspencerlepine%2Fquickcart","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspencerlepine%2Fquickcart/lists"}