{"id":21142486,"url":"https://github.com/Inna-B10/LuxGleam","last_synced_at":"2026-05-31T18:02:51.647Z","repository":{"id":250893636,"uuid":"817213457","full_name":"Inna-B10/Shopping-Cart-NEXT","owner":"Inna-B10","description":"Project: jewelry e-shop (Next.js+C#+SQL Server)","archived":false,"fork":false,"pushed_at":"2025-04-01T12:56:39.000Z","size":3640,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-01T13:40:37.257Z","etag":null,"topics":["csharp","netcore","nextjs14"],"latest_commit_sha":null,"homepage":"","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/Inna-B10.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-06-19T08:46:31.000Z","updated_at":"2025-04-01T12:56:43.000Z","dependencies_parsed_at":"2025-01-21T07:10:26.456Z","dependency_job_id":"6e7818c5-16a8-4736-b58b-3d4886572e9a","html_url":"https://github.com/Inna-B10/Shopping-Cart-NEXT","commit_stats":null,"previous_names":["inna-b10/shopping-cart-next"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Inna-B10/Shopping-Cart-NEXT","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Inna-B10%2FShopping-Cart-NEXT","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Inna-B10%2FShopping-Cart-NEXT/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Inna-B10%2FShopping-Cart-NEXT/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Inna-B10%2FShopping-Cart-NEXT/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Inna-B10","download_url":"https://codeload.github.com/Inna-B10/Shopping-Cart-NEXT/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Inna-B10%2FShopping-Cart-NEXT/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266645256,"owners_count":23961679,"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-07-23T02:00:09.312Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"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":["csharp","netcore","nextjs14"],"created_at":"2024-11-20T07:54:00.443Z","updated_at":"2026-05-31T18:02:51.641Z","avatar_url":"https://github.com/Inna-B10.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Project name: LuxGleam\n\n### Project Goal:\n\nThe goal of this project is to integrate a `Next.js` frontend with a `C#` backend and a `SQL Server` database, making all parts work together smoothly.\nThis is my first experience working with multiple languages and a full-scale database — a step up from my earlier projects that used `React` or `Next.js` with public APIs or JSON files.\n\n### Project Status:\n\nDevelopment was paused after realizing that several architectural and security aspects could be improved. Some features could have been implemented differently or delegated to external libraries.\nAlthough the core integration works — all three layers communicate successfully — the project will not be continued in its current form.\nStill, it was an excellent learning experience and a valuable step forward in understanding backend integration and system design.\n\n\u003cbr /\u003e\n\n[\u003cimg src=\"preview.png\" height=\"250\" align=\"right\" style=\"margin-left:20px\" /\u003e](preview.png)\n\n### 🧩 Tech Stack\n\n#### **🖥️ Frontend:**\n\n![Next.js](https://img.shields.io/badge/Next.js_14.2.5-424242?logo=nextdotjs)\n![React](https://img.shields.io/badge/React_18-424242?logo=react\u0026logoColor=61DAFB)\n\n![react-dom](https://img.shields.io/badge/react--dom_18-424242?logo=react\u0026logoColor=61DAFB)\n![react-select](https://img.shields.io/badge/react--select_5.8.0-424242)\n![axios](https://img.shields.io/badge/axios_1.7.2-424242)\n![cookie](https://img.shields.io/badge/cookie_0.6.0-424242)\n![joi](https://img.shields.io/badge/joi_17.13.3-424242)\n\n#### **⚙️ Backend: C# / .NET** (ASP.NET Core Web API)\n\n![C#](https://img.shields.io/badge/C%23_7.3-424242?logo=csharp\u0026logoColor=white)\n![.NET](https://img.shields.io/badge/.NET_8.0-424242)\n![Swashbuckle.AspNetCore](https://img.shields.io/badge/Swashbuckle.AspNetCore_6.5.0-424242)\n![System.Data.SqlClient](https://img.shields.io/badge/System.Data.SqlClient_4.8.3-424242)\n![BCrypt.Net-Next](https://img.shields.io/badge/BCrypt.Net--Next_4.0.2-424242)\n![FluentValidation.AspNetCore](https://img.shields.io/badge/FluentValidation.AspNetCore_11.6.0-424242)\n\n#### **🛢 DB: SQL Server**\n\n![SQL Server](https://img.shields.io/badge/SQL--Server_2019-424242?logo=microsoftsqlserver\u0026logoColor=white)\n\n\u003c!-- end:tech-stack --\u003e\n\n\u003cdetails style=\"border:1px solid #d4d4d4; border-radius:2px; padding:1rem;\"\u003e\n\u003csummary\u003e\u003ch4 style=\"display:inline; padding-left:6px;\"\u003eDependencies\u003c/h4\u003e\u003c/summary\u003e\n\n**frontend:**\n\n```bash\nnpm install axios\nnpm install cookie\nnpm install prop-types\nnpm i --save react-select\nnpm install joi\n```\n\n**backend:**\n\n```bash\nSwashbuckle.AspNetCore\nSystem.Data.SqlClient\nBCrypt.Net-Next\nFluentValidation.AspNetCore\n```\n\n\u003c/details\u003e\n\u003cbr /\u003e\n\n## 💎 Features Implemented\n\n### ✨ Frontend (Next.js + React)\n\n- SPA built with **Next.js App Router**\n- User interface for product categories, filters, and sorting\n- Dynamic **category menu** populated from database:\n  - Categories from `Categories` table\n  - Additional product labels like \"Discount 15%\", \"New\", etc. (`union all select prod_label from Products`)\n- Shopping cart and favorites handled via `axios` and `UserContext`\n- Guest support:\n  - Temporary storage of cart and favorites in **cookies**\n  - Synchronization upon login\n\n### 🛂 Authentication \u0026 User Management\n\n- **Registration and login implemented without external services**\n- Forms validated with **Joi**:\n  - Email, password, first name, last name\n  - Password strength enforced\n- **Sessions stored in HTTP-only cookies** for security\n- Server-side registration and login handled via C# Web API:\n  - Passwords hashed securely with `BCrypt.Net-Next`\n- Support for **guest users** with temporary ID (`userId = -1`)\n\n### 🛒 Shopping Cart \u0026 Favorites\n\n- Add and remove products from the cart\n- Favorites and cart synchronized with server upon login\n  -Guest users’ data stored in cookies, enabling local interaction\n\n### 🗄️ Backend (C#, .NET, SQL Server)\n\n- APIs for managing users, products, cart, and favorites\n- Model validation using `FluentValidation.AspNetCore`\n- **SQL Server** used to store categories, products, users, cart, and favorites\n- Server manages authentication and cookies, with no reliance on external services\n\n---\n\n\u003cdetails style=\"border:1px solid #d4d4d4; border-radius:2px; padding:1rem;\"\u003e\n\u003csummary\u003e\u003ch4 style=\"display:inline; padding-left:6px;\"\u003e📋 TODO\u003c/h4\u003e\u003c/summary\u003e\n\n#### email/forms:\n\n- [ ] create confirmation email with link for new user\n- [ ] add \"Reset password\" function\n\n#### after registration/login\n\n- [ ] check cookies, if exist Favorites and/or ShoppingCart ask to insert them to DB and delete from cookies\n\n#### global:\n\n- [ ] home page\n  - [x] subCategories\n  - [x] text\n  - [x] add category desc into DB (new column)\n  - [ ] contact form\n  - [ ] ?gallery on main page\n- [ ] navBar CSS @media\n- [ ] header img/video\n- [ ] footer\n- [ ] user info page\n- [ ] product details page\n- [ ] change alert messages to modal\n- [ ] ?в куках для гостя хранить количество товара (доступно только в корзине)\n- [ ] ?display only products with quantity\u003e0 or display \"out of stock\"\n- [ ] @media\n- [ ] links\n- [ ] ?search function\n\n#### orders/ShoppingCart:\n\n- [ ] shoppingCart page\n- [ ] in ShoppingCart, when place order, check if user_level != 0\n- [ ] в ShoppingCart проверять наличие и количество товара\n- [ ] button for quantity\n- [ ] registration/login if user is guest\n\n#### admin panel:\n\n- [ ] login\n- [ ] dashboard\n- [ ] add new item/category\n- [ ] update exist item/category\n- [ ] view orders+++\n\u003c/details\u003e\n\u003cdetails style=\"border:1px solid #d4d4d4; border-radius:2px; padding:1rem;\"\u003e\n\u003csummary\u003e\u003ch4 style=\"display:inline; padding-left:6px;\"\u003e✅ Done\u003c/h4\u003e\u003c/summary\u003e\n\n- [x] change email input type\n- [x] add validation of email and user's input\n- [x] create userPassword hash with BCrypt, Argon2 or PBKDF2\n- [x] changing of the UserIcon to user's initials\n- [x] changing of the FavoritesIcon, ShoppingCartIcon in ProductCart (depends on userId)\n- [x] changing of the ShoppingCartIcon when add/delete item from SC (users + guests)\n- [x] changing of the FavoritesIcon when add/delete item from Fav.list (users + guests)\n- [x] favorites page\n- [x] check if category exists\n- [x] button toTop\n- [x] display badge on icons Bag and Favorites in user menu\n- [x] SortBy function\n- [x] filters function\n\n\u003c/details\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FInna-B10%2FLuxGleam","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FInna-B10%2FLuxGleam","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FInna-B10%2FLuxGleam/lists"}