Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
7ddcd07
Update scripts
ProKesha Feb 24, 2026
c2ef918
feat: add app layout and skeleton
ProKesha Feb 24, 2026
e157907
Merge pull request #1 from ProKesha/feat/app-layout-routing
ProKesha Feb 24, 2026
e896ee4
feat: add typed api client
ProKesha Feb 24, 2026
0323a79
Merge pull request #2 from ProKesha/feat/data-layer
ProKesha Feb 24, 2026
fb4bf30
feat: add product card and products list
ProKesha Feb 24, 2026
c4286b3
Merge pull request #3 from ProKesha/feat/product-card
ProKesha Feb 24, 2026
033342c
feat: implement sorting and pagination
ProKesha Feb 25, 2026
880e464
Merge pull request #4 from ProKesha/feat/products-controls
ProKesha Feb 25, 2026
b18e1bc
feat: implement basic product details page
ProKesha Feb 25, 2026
675e5b3
Merge pull request #5 from ProKesha/feat/product-details
ProKesha Feb 25, 2026
d632ea6
feat: add back button
ProKesha Feb 25, 2026
beb0048
fix: add fallback navigation
ProKesha Feb 25, 2026
f02e9f3
fix: add fallback navigation
ProKesha Feb 25, 2026
1e902a7
chore: add product details styles
ProKesha Feb 25, 2026
190d302
Revert "fix: add fallback navigation"
ProKesha Feb 25, 2026
6562e82
merge: resolve conflicts with develop
ProKesha Feb 25, 2026
ba43cc5
Merge pull request #6 from ProKesha/feat/product-details
ProKesha Feb 25, 2026
bf6daf6
fix: improve back button navigation logic
ProKesha Feb 25, 2026
d597378
Merge pull request #7 from ProKesha/fix/back-navigation
ProKesha Feb 25, 2026
8a8a297
feat: add loader component
ProKesha Feb 26, 2026
27d6419
feat: implement product details image gallery
ProKesha Feb 26, 2026
5200471
feat: add color and selectors
ProKesha Feb 26, 2026
b3fadbd
feat: add product about section
ProKesha Feb 26, 2026
5eae89b
feat: add product section
ProKesha Feb 26, 2026
c98a053
feat: add products block
ProKesha Feb 26, 2026
c78e6c3
Merge pull request #8 from ProKesha/feat/product-details-phase-3
ProKesha Feb 26, 2026
7b4eaad
feat: add favorites
ProKesha Feb 26, 2026
aa3bbdd
feat: add favorites toggle and header
ProKesha Feb 26, 2026
6eb956a
feat: add favorites page
ProKesha Feb 26, 2026
d81443e
Merge pull request #9 from ProKesha/feat/favorites
ProKesha Feb 26, 2026
4d3b9d8
feat: add cart context
ProKesha Feb 26, 2026
ce8d59d
feat: add cart button
ProKesha Feb 26, 2026
f4bddd1
feat: add cart page
ProKesha Feb 26, 2026
373c27e
feat: add checkout button
ProKesha Feb 26, 2026
2463ae9
Merge pull request #10 from ProKesha/feat/cart
ProKesha Feb 26, 2026
22da3cd
feat: add homepage layout
ProKesha Feb 26, 2026
0c5e97c
feat: add pictures slider
ProKesha Feb 26, 2026
991ea16
feat: add category block
ProKesha Feb 26, 2026
ce4b44a
feat: add home page product sliders
ProKesha Feb 26, 2026
23305b4
Merge pull request #11 from ProKesha/feat/homepage
ProKesha Feb 26, 2026
657e1ac
feat: prepare URL search params
ProKesha Feb 27, 2026
7b6c668
feat: add sorting and pagination based on URL params
ProKesha Feb 27, 2026
911e499
Merge pull request #12 from ProKesha/feat/products-controls
ProKesha Feb 27, 2026
3e3a718
feat: add useDebounce hook
ProKesha Feb 27, 2026
4821005
feat: add search input to header
ProKesha Feb 27, 2026
fce28f7
feat: add empty states for product page
ProKesha Feb 27, 2026
5878cfb
remove debug output from products page
ProKesha Feb 27, 2026
68bf333
Merge pull request #13 from ProKesha/feat/products-search
ProKesha Feb 27, 2026
bc6e493
deploy
ProKesha Feb 27, 2026
4970a62
fix URL prefix
ProKesha Feb 27, 2026
82d3bdd
second fix
ProKesha Feb 27, 2026
1630347
feat: add homepage UI
ProKesha Feb 28, 2026
0a2040e
fix: homepage UI task
ProKesha Mar 1, 2026
a2a4501
style: tweak pictures slider styles before variant switching
ProKesha Mar 2, 2026
4d87095
fix: switching on product details
ProKesha Mar 2, 2026
f84c101
fix: update banners and adjust slider layout
ProKesha Mar 2, 2026
b098aef
fix: homepage styles
ProKesha Mar 3, 2026
a060ba6
Merge pull request #14 from ProKesha/feat/homepage-ui
ProKesha Mar 3, 2026
f6deff7
fix: mentor review comments
ProKesha Mar 5, 2026
ec319e9
Merge pull request #15 from ProKesha/fix/make-edits
ProKesha Mar 5, 2026
c988b55
fix: made edits
ProKesha Mar 5, 2026
329270c
fix: made edits to the homepage
ProKesha Mar 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 17 additions & 1 deletion index.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,23 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vite + React + TS</title>
<meta name="theme-color" content="#0f1121" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<title>Nice Gadgets Store</title>
<style>
html,
body {
margin: 0;
padding: 0;
background: #0f1121;
color: #f1f2f9;
}

#root {
min-height: 100vh;
background: #0f1121;
}
</style>
</head>
<body>
<div id="root"></div>
Expand Down
9 changes: 5 additions & 4 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "react_phone-catalog",
"homepage": "react_phone-catalog",
"homepage": "/react_phone-catalog/",
"version": "0.1.0",
"keywords": [],
"author": "Mate Academy",
Expand All @@ -16,7 +16,7 @@
},
"devDependencies": {
"@cypress/react18": "^2.0.1",
"@mate-academy/scripts": "^1.8.5",
"@mate-academy/scripts": "^2.1.3",
"@mate-academy/students-ts-config": "*",
"@mate-academy/stylelint-config": "*",
"@types/node": "^20.14.10",
Expand Down
15 changes: 15 additions & 0 deletions public/favicon.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/img/banners/Banner-mobile.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/img/banners/Banner.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/img/banners/slide-1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/img/banners/slide-2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/img/banners/slide-3.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
115 changes: 114 additions & 1 deletion src/App.scss
Original file line number Diff line number Diff line change
@@ -1 +1,114 @@
// not empty
*,
*::before,
*::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}

@font-face {
font-family: Mont;
src: url('/fonts/Mont-Regular.otf') format('opentype');
font-weight: 400;
font-style: normal;
}

@font-face {
font-family: Mont;
src: url('/fonts/Mont-SemiBold.otf') format('opentype');
font-weight: 600;
font-style: normal;
}

@font-face {
font-family: Mont;
src: url('/fonts/Mont-Bold.otf') format('opentype');
font-weight: 700;
font-style: normal;
}

:root {
--color-primary: #f1f2f9;
--color-secondary: #89939a;
--color-icons: #b4bdc3;
--color-white: #fff;
--color-surface: #161827;
--color-card: #161827;
--color-bg: #0f1121;
--color-border: rgba(255, 255, 255, 0.12);
--color-red: #eb5757;
--color-green: #27ae60;
--color-accent: #905bff;
--color-accent-hover: #a378ff;
--color-header-bg: #0f1121;
--color-header-text: #f1f2f9;
--color-header-border: rgba(255, 255, 255, 0.12);
--font-base: Mont, 'Helvetica Neue', Arial, sans-serif;
--transition-base: 0.2s ease-in-out;
--content-max-width: 1200px;
--header-height: 64px;
}

html {
scroll-behavior: smooth;
}

body {
font-family: var(--font-base);
background-color: var(--color-bg);
color: var(--color-primary);
line-height: 1.5;
-webkit-font-smoothing: antialiased;
}

a {
text-decoration: none;
color: inherit;
}

button {
cursor: pointer;
border: none;
background: none;
font-family: inherit;
}

img {
max-width: 100%;
display: block;
}

ul {
list-style: none;
}

.visually-hidden {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
}

a img,
button img {
transition: transform 0.3s ease-in-out;
}

a:hover img,
button:hover img {
transform: scale(1.1);
}

a,
button {
transition:
color var(--transition-base),
background-color var(--transition-base),
border-color var(--transition-base),
opacity var(--transition-base);
}
43 changes: 40 additions & 3 deletions src/App.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,44 @@
import { HashRouter, Route, Routes } from 'react-router-dom';

import { CartProvider, FavoritesProvider } from './modules/shared/context';
import { AppLayout } from './modules/shared/components/AppLayout';
import { CartPage } from './modules/CartPage';
import { FavoritesPage } from './modules/FavoritesPage';
import { HomePage } from './modules/HomePage';
import { NotFoundPage } from './modules/NotFoundPage';
import { ProductDetailsPage } from './modules/ProductDetailsPage';
import { ProductsPage } from './modules/ProductsPage';

import './App.scss';

export const App = () => (
<div className="App">
<h1>Product Catalog</h1>
</div>
<CartProvider>
<FavoritesProvider>
<HashRouter>
<Routes>
<Route path="/" element={<AppLayout />}>
<Route index element={<HomePage />} />
<Route
path="phones"
element={<ProductsPage key="phones" category="phones" />}
/>
<Route
path="tablets"
element={<ProductsPage key="tablets" category="tablets" />}
/>
<Route
path="accessories"
element={
<ProductsPage key="accessories" category="accessories" />
}
/>
<Route path="product/:productId" element={<ProductDetailsPage />} />
<Route path="cart" element={<CartPage />} />
<Route path="favorites" element={<FavoritesPage />} />
<Route path="*" element={<NotFoundPage />} />
</Route>
</Routes>
</HashRouter>
</FavoritesProvider>
</CartProvider>
);
Loading