{"id":19082067,"url":"https://github.com/2gbeh/shopera","last_synced_at":"2026-04-12T00:03:16.354Z","repository":{"id":233656736,"uuid":"787629323","full_name":"2gbeh/shopera","owner":"2gbeh","description":"Peddle Technologies - Full-Stack Developer Assessment ","archived":false,"fork":false,"pushed_at":"2024-07-22T22:17:41.000Z","size":4026,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-02T20:30:32.847Z","etag":null,"topics":["faker-js","lucide-icons","nextjs14","postgresql","prisma","radix-ui","react","react-hook-form","sass","shadcn-ui","tailwindcss","tyepscript","vercel","zod"],"latest_commit_sha":null,"homepage":"https://shopera.vercel.app","language":"TypeScript","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/2gbeh.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}},"created_at":"2024-04-16T22:12:58.000Z","updated_at":"2024-04-22T00:57:23.000Z","dependencies_parsed_at":"2024-11-09T02:41:44.368Z","dependency_job_id":"ec0ed233-8ee0-4e14-a45e-8c6e527b2f29","html_url":"https://github.com/2gbeh/shopera","commit_stats":null,"previous_names":["2gbeh/shopera"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/2gbeh%2Fshopera","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/2gbeh%2Fshopera/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/2gbeh%2Fshopera/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/2gbeh%2Fshopera/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/2gbeh","download_url":"https://codeload.github.com/2gbeh/shopera/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240131734,"owners_count":19752727,"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":["faker-js","lucide-icons","nextjs14","postgresql","prisma","radix-ui","react","react-hook-form","sass","shadcn-ui","tailwindcss","tyepscript","vercel","zod"],"created_at":"2024-11-09T02:41:00.789Z","updated_at":"2026-04-12T00:03:16.322Z","avatar_url":"https://github.com/2gbeh.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Logo](./public/favicon.png)\n\n# Peddle Technologies - Full-Stack Developer Assessment\n\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.x-blue.svg)](https://www.typescriptlang.org/docs/)\n[![TailwindCSS](https://img.shields.io/badge/TailwindCSS-3.x-38bdf8.svg)](https://tailwindcss.com/docs/installation)\n[![Prisma](https://img.shields.io/badge/Prisma-5.x-0c344b.svg)](https://www.prisma.io/docs/orm/prisma-client/setup-and-configuration/introduction)\n[![PostgreSQL](https://img.shields.io/badge/PostgreSQL-16.x-316192.svg)](https://www.postgresql.org/docs/16/index.html)\n\n[![Next JS](https://img.shields.io/badge/Next-black?style=for-the-badge\u0026logo=next.js\u0026logoColor=white)](https://nextjs.org/docs/app/building-your-application/routing/route-handlers)\n[![Vercel](https://img.shields.io/badge/vercel-%23000000.svg?style=for-the-badge\u0026logo=vercel\u0026logoColor=white)](https://shopera.vercel.app)\n\n## Installation\n\n```\n$ git clone https://github.com/2gbeh/shopera.git\n\n$ cd shopera\n\n$ npm cache clean --force\n\n$ npm install\n\n$ npm run dev\n```\n\n## Usage\n\n\u003e Development: (client) http://localhost:3000/ (server) http://localhost:3000/api/\n\n\u003e Production 🚀🚀🚀: (client) http://shopera.vercel.app/ (server) http://shopera.vercel.app/api/\n\n## API Documentation\n\n\u003e #### [Products Resource](\u003c./src/app/(api)/api/products\u003e)\n\n|    Method | Endpoint                             | Query | Body | Summary                            |\n| --------: | :----------------------------------- | :---: | :--: | :--------------------------------- |\n|       GET | /products                            |       |      | all (ASC order)                    |\n|       GET | /products/[product_id]               |       |      | one                                |\n|    ⭐ GET | /products/?like=[search]             |   x   |      | search (product, brand or barcode) |\n|    ⭐ GET | /products/validate-barcode/[barcode] |       |      | validate upc-12 barcode            |\n|      POST | /products                            |       |  x   | add                                |\n|     PATCH | /products/[product_id]               |       |  x   | update                             |\n|       PUT | /products/[product_id]               |       |  x   | replace                            |\n|    DELETE | /products/[product_id]               |       |      | soft delete (trash)                |\n| ⭐ DELETE | /products/[product_id]/?undo=true    |   x   |      | undo delete (restore)              |\n\n\u003e #### [Brands Resource](\u003c./src/app/(api)/api/brands\u003e)\n\n|    Method | Endpoint                      | Query | Body | Summary               |\n| --------: | :---------------------------- | :---: | :--: | :-------------------- |\n|       GET | /brands                       |       |      | all (ASC order)       |\n|       GET | /brands/[brand_id]            |       |      | one                   |\n|      POST | /brands                       |       |  x   | add                   |\n|     PATCH | /brands/[brand_id]            |       |  x   | update                |\n|       PUT | /brands/[brand_id]            |       |  x   | replace               |\n|    DELETE | /brands/[brand_id]            |       |      | soft delete (trash)   |\n| ⭐ DELETE | /brands/[brand_id]/?undo=true |   x   |      | undo delete (restore) |\n\n## Tech Stack Documentation\n\n![Screenshot](./public/tech-stack.png)\n\n## Screenshots\n\n#### Page 1 (Product Listing)\n\n![Screenshot](./public/ui/page-1.png)\n\n#### Page 2 (Edit Product Listing)\n\n![Screenshot](./public/ui/page-2.png)\n\n#### Page 1 - Mobile (Product Listing)\n\n![Screenshot](./public/ui/page-1-mobile.png)\n\n#### Page 2 - Mobile (Edit Product Listing)\n\n![Screenshot](./public/ui/page-2-mobile.png)\n\n## 🏆🏆 [My barcode validation algorithm](./src/server/pipes/product.pipe.ts) 🏆🏆\n\n![Screenshot](./public/upc12-algo.png)\n\n## Known Issues\n\nAdded the `.env` file to .gitignore but it did not exclude it, I think it is related to Prisma ORM (not sure).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F2gbeh%2Fshopera","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F2gbeh%2Fshopera","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F2gbeh%2Fshopera/lists"}