From 0be2cd566a33ebe0aee5ea9bf72145853b8a7bec Mon Sep 17 00:00:00 2001 From: milton Date: Mon, 27 Apr 2026 17:30:34 -0300 Subject: [PATCH 01/14] add1 --- index.html | 4 + package-lock.json | 8 +- package.json | 2 +- public/api/accessories.json | 204 ++-- public/api/phones.json | 1068 ++++++++--------- public/api/products.json | 388 +++--- public/api/tablets.json | 232 ++-- src/App.scss | 10 +- src/App.tsx | 48 +- src/components/Footer/Footer.module.scss | 42 + src/components/Footer/Footer.tsx | 32 + src/components/Footer/index.ts | 1 + src/components/Header/Header.module.scss | 87 ++ src/components/Header/Header.tsx | 70 ++ src/components/Header/index.ts | 1 + .../PicturesSlider/PicturesSlider.module.scss | 81 ++ .../PicturesSlider/PicturesSlider.tsx | 60 + src/components/PicturesSlider/index.ts | 1 + .../ProductCard/ProductCard.module.scss | 141 +++ src/components/ProductCard/ProductCard.tsx | 81 ++ src/components/ProductCard/index.ts | 1 + .../ProductsSlider/ProductsSlider.module.scss | 77 ++ .../ProductsSlider/ProductsSlider.tsx | 49 + src/components/ProductsSlider/index.ts | 1 + src/context/CartContext.tsx | 107 ++ src/context/FavoritesContext.tsx | 84 ++ src/modules/CartPage/CartPage.module.scss | 165 +++ src/modules/CartPage/CartPage.tsx | 88 ++ src/modules/CartPage/index.ts | 1 + .../FavoritesPage/FavoritesPage.module.scss | 23 + src/modules/FavoritesPage/FavoritesPage.tsx | 24 + src/modules/FavoritesPage/index.ts | 1 + src/modules/HomePage/HomePage.module.scss | 63 + src/modules/HomePage/HomePage.tsx | 72 ++ src/modules/HomePage/index.ts | 1 + .../NotFoundPage/NotFoundPage.module.scss | 32 + src/modules/NotFoundPage/NotFoundPage.tsx | 16 + src/modules/NotFoundPage/index.ts | 1 + .../ProductDetailsPage.module.scss | 247 ++++ .../ProductDetailsPage/ProductDetailsPage.tsx | 307 +++++ src/modules/ProductDetailsPage/index.ts | 1 + .../ProductsPage/ProductsPage.module.scss | 127 ++ src/modules/ProductsPage/ProductsPage.tsx | 230 ++++ src/modules/ProductsPage/index.ts | 1 + src/types/index.ts | 49 + src/utils/api.ts | 103 ++ src/utils/debounce.ts | 11 + 47 files changed, 3488 insertions(+), 955 deletions(-) create mode 100644 src/components/Footer/Footer.module.scss create mode 100644 src/components/Footer/Footer.tsx create mode 100644 src/components/Footer/index.ts create mode 100644 src/components/Header/Header.module.scss create mode 100644 src/components/Header/Header.tsx create mode 100644 src/components/Header/index.ts create mode 100644 src/components/PicturesSlider/PicturesSlider.module.scss create mode 100644 src/components/PicturesSlider/PicturesSlider.tsx create mode 100644 src/components/PicturesSlider/index.ts create mode 100644 src/components/ProductCard/ProductCard.module.scss create mode 100644 src/components/ProductCard/ProductCard.tsx create mode 100644 src/components/ProductCard/index.ts create mode 100644 src/components/ProductsSlider/ProductsSlider.module.scss create mode 100644 src/components/ProductsSlider/ProductsSlider.tsx create mode 100644 src/components/ProductsSlider/index.ts create mode 100644 src/context/CartContext.tsx create mode 100644 src/context/FavoritesContext.tsx create mode 100644 src/modules/CartPage/CartPage.module.scss create mode 100644 src/modules/CartPage/CartPage.tsx create mode 100644 src/modules/CartPage/index.ts create mode 100644 src/modules/FavoritesPage/FavoritesPage.module.scss create mode 100644 src/modules/FavoritesPage/FavoritesPage.tsx create mode 100644 src/modules/FavoritesPage/index.ts create mode 100644 src/modules/HomePage/HomePage.module.scss create mode 100644 src/modules/HomePage/HomePage.tsx create mode 100644 src/modules/HomePage/index.ts create mode 100644 src/modules/NotFoundPage/NotFoundPage.module.scss create mode 100644 src/modules/NotFoundPage/NotFoundPage.tsx create mode 100644 src/modules/NotFoundPage/index.ts create mode 100644 src/modules/ProductDetailsPage/ProductDetailsPage.module.scss create mode 100644 src/modules/ProductDetailsPage/ProductDetailsPage.tsx create mode 100644 src/modules/ProductDetailsPage/index.ts create mode 100644 src/modules/ProductsPage/ProductsPage.module.scss create mode 100644 src/modules/ProductsPage/ProductsPage.tsx create mode 100644 src/modules/ProductsPage/index.ts create mode 100644 src/types/index.ts create mode 100644 src/utils/api.ts create mode 100644 src/utils/debounce.ts diff --git a/index.html b/index.html index 095fb3a4537..f98dfb1896c 100644 --- a/index.html +++ b/index.html @@ -4,6 +4,10 @@ Vite + React + TS +
diff --git a/package-lock.json b/package-lock.json index 836b9e63b46..a46693e4d65 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,7 +20,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", @@ -1184,9 +1184,9 @@ } }, "node_modules/@mate-academy/scripts": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@mate-academy/scripts/-/scripts-1.8.5.tgz", - "integrity": "sha512-mHRY2FkuoYCf5U0ahIukkaRo5LSZsxrTSgMJheFoyf3VXsTvfM9OfWcZIDIDB521kdPrScHHnRp+JRNjCfUO5A==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@mate-academy/scripts/-/scripts-2.1.3.tgz", + "integrity": "sha512-a07wHTj/1QUK2Aac5zHad+sGw4rIvcNl5lJmJpAD7OxeSbnCdyI6RXUHwXhjF5MaVo9YHrJ0xVahyERS2IIyBQ==", "dev": true, "dependencies": { "@octokit/rest": "^17.11.2", diff --git a/package.json b/package.json index ae251685c8b..6fd0a6cbfe9 100644 --- a/package.json +++ b/package.json @@ -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", diff --git a/public/api/accessories.json b/public/api/accessories.json index 6a36890cec7..fa274bc408e 100644 --- a/public/api/accessories.json +++ b/public/api/accessories.json @@ -11,9 +11,9 @@ "colorsAvailable": ["space gray", "silver", "gold"], "color": "space gray", "images": [ - "img/accessories/apple-watch-series-3/space-gray/00.webp", - "img/accessories/apple-watch-series-3/space-gray/01.webp", - "img/accessories/apple-watch-series-3/space-gray/02.webp" + "/img/accessories/apple-watch-series-3/space-gray/00.webp", + "/img/accessories/apple-watch-series-3/space-gray/01.webp", + "/img/accessories/apple-watch-series-3/space-gray/02.webp" ], "description": [ { @@ -53,9 +53,9 @@ "colorsAvailable": ["space gray", "silver", "gold"], "color": "space gray", "images": [ - "img/accessories/apple-watch-series-3/space-gray/00.webp", - "img/accessories/apple-watch-series-3/space-gray/01.webp", - "img/accessories/apple-watch-series-3/space-gray/02.webp" + "/img/accessories/apple-watch-series-3/space-gray/00.webp", + "/img/accessories/apple-watch-series-3/space-gray/01.webp", + "/img/accessories/apple-watch-series-3/space-gray/02.webp" ], "description": [ { @@ -95,9 +95,9 @@ "colorsAvailable": ["space gray", "silver", "gold"], "color": "gold", "images": [ - "img/accessories/apple-watch-series-3/gold/00.webp", - "img/accessories/apple-watch-series-3/gold/01.webp", - "img/accessories/apple-watch-series-3/gold/02.webp" + "/img/accessories/apple-watch-series-3/gold/00.webp", + "/img/accessories/apple-watch-series-3/gold/01.webp", + "/img/accessories/apple-watch-series-3/gold/02.webp" ], "description": [ { @@ -137,9 +137,9 @@ "colorsAvailable": ["space gray", "silver", "gold"], "color": "gold", "images": [ - "img/accessories/apple-watch-series-3/gold/00.webp", - "img/accessories/apple-watch-series-3/gold/01.webp", - "img/accessories/apple-watch-series-3/gold/02.webp" + "/img/accessories/apple-watch-series-3/gold/00.webp", + "/img/accessories/apple-watch-series-3/gold/01.webp", + "/img/accessories/apple-watch-series-3/gold/02.webp" ], "description": [ { @@ -179,9 +179,9 @@ "colorsAvailable": ["space gray", "silver", "gold"], "color": "silver", "images": [ - "img/accessories/apple-watch-series-3/silver/00.webp", - "img/accessories/apple-watch-series-3/silver/01.webp", - "img/accessories/apple-watch-series-3/silver/02.webp" + "/img/accessories/apple-watch-series-3/silver/00.webp", + "/img/accessories/apple-watch-series-3/silver/01.webp", + "/img/accessories/apple-watch-series-3/silver/02.webp" ], "description": [ { @@ -221,9 +221,9 @@ "colorsAvailable": ["space gray", "silver", "gold"], "color": "silver", "images": [ - "img/accessories/apple-watch-series-3/silver/00.webp", - "img/accessories/apple-watch-series-3/silver/01.webp", - "img/accessories/apple-watch-series-3/silver/02.webp" + "/img/accessories/apple-watch-series-3/silver/00.webp", + "/img/accessories/apple-watch-series-3/silver/01.webp", + "/img/accessories/apple-watch-series-3/silver/02.webp" ], "description": [ { @@ -263,9 +263,9 @@ "colorsAvailable": ["space gray", "silver", "gold", "blue", "red"], "color": "space gray", "images": [ - "img/accessories/apple-watch-series-6/space-gray/00.webp", - "img/accessories/apple-watch-series-6/space-gray/01.webp", - "img/accessories/apple-watch-series-6/space-gray/02.webp" + "/img/accessories/apple-watch-series-6/space-gray/00.webp", + "/img/accessories/apple-watch-series-6/space-gray/01.webp", + "/img/accessories/apple-watch-series-6/space-gray/02.webp" ], "description": [ { @@ -305,9 +305,9 @@ "colorsAvailable": ["space gray", "silver", "gold", "blue", "red"], "color": "space gray", "images": [ - "img/accessories/apple-watch-series-6/space-gray/00.webp", - "img/accessories/apple-watch-series-6/space-gray/01.webp", - "img/accessories/apple-watch-series-6/space-gray/02.webp" + "/img/accessories/apple-watch-series-6/space-gray/00.webp", + "/img/accessories/apple-watch-series-6/space-gray/01.webp", + "/img/accessories/apple-watch-series-6/space-gray/02.webp" ], "description": [ { @@ -347,9 +347,9 @@ "colorsAvailable": ["space gray", "silver", "gold", "blue", "red"], "color": "silver", "images": [ - "img/accessories/apple-watch-series-6/silver/00.webp", - "img/accessories/apple-watch-series-6/silver/01.webp", - "img/accessories/apple-watch-series-6/silver/02.webp" + "/img/accessories/apple-watch-series-6/silver/00.webp", + "/img/accessories/apple-watch-series-6/silver/01.webp", + "/img/accessories/apple-watch-series-6/silver/02.webp" ], "description": [ { @@ -389,9 +389,9 @@ "colorsAvailable": ["space gray", "silver", "gold", "blue", "red"], "color": "silver", "images": [ - "img/accessories/apple-watch-series-6/silver/00.webp", - "img/accessories/apple-watch-series-6/silver/01.webp", - "img/accessories/apple-watch-series-6/silver/02.webp" + "/img/accessories/apple-watch-series-6/silver/00.webp", + "/img/accessories/apple-watch-series-6/silver/01.webp", + "/img/accessories/apple-watch-series-6/silver/02.webp" ], "description": [ { @@ -431,9 +431,9 @@ "colorsAvailable": ["space gray", "silver", "gold", "blue", "red"], "color": "gold", "images": [ - "img/accessories/apple-watch-series-6/gold/00.webp", - "img/accessories/apple-watch-series-6/gold/01.webp", - "img/accessories/apple-watch-series-6/gold/02.webp" + "/img/accessories/apple-watch-series-6/gold/00.webp", + "/img/accessories/apple-watch-series-6/gold/01.webp", + "/img/accessories/apple-watch-series-6/gold/02.webp" ], "description": [ { @@ -473,9 +473,9 @@ "colorsAvailable": ["space gray", "silver", "gold", "blue", "red"], "color": "gold", "images": [ - "img/accessories/apple-watch-series-6/gold/00.webp", - "img/accessories/apple-watch-series-6/gold/01.webp", - "img/accessories/apple-watch-series-6/gold/02.webp" + "/img/accessories/apple-watch-series-6/gold/00.webp", + "/img/accessories/apple-watch-series-6/gold/01.webp", + "/img/accessories/apple-watch-series-6/gold/02.webp" ], "description": [ { @@ -515,9 +515,9 @@ "colorsAvailable": ["space gray", "silver", "gold", "blue", "red"], "color": "blue", "images": [ - "img/accessories/apple-watch-series-6/blue/00.webp", - "img/accessories/apple-watch-series-6/blue/01.webp", - "img/accessories/apple-watch-series-6/blue/02.webp" + "/img/accessories/apple-watch-series-6/blue/00.webp", + "/img/accessories/apple-watch-series-6/blue/01.webp", + "/img/accessories/apple-watch-series-6/blue/02.webp" ], "description": [ { @@ -557,9 +557,9 @@ "colorsAvailable": ["space gray", "silver", "gold", "blue", "red"], "color": "blue", "images": [ - "img/accessories/apple-watch-series-6/blue/00.webp", - "img/accessories/apple-watch-series-6/blue/01.webp", - "img/accessories/apple-watch-series-6/blue/02.webp" + "/img/accessories/apple-watch-series-6/blue/00.webp", + "/img/accessories/apple-watch-series-6/blue/01.webp", + "/img/accessories/apple-watch-series-6/blue/02.webp" ], "description": [ { @@ -599,9 +599,9 @@ "colorsAvailable": ["space gray", "silver", "gold", "blue", "red"], "color": "red", "images": [ - "img/accessories/apple-watch-series-6/red/00.webp", - "img/accessories/apple-watch-series-6/red/01.webp", - "img/accessories/apple-watch-series-6/red/02.webp" + "/img/accessories/apple-watch-series-6/red/00.webp", + "/img/accessories/apple-watch-series-6/red/01.webp", + "/img/accessories/apple-watch-series-6/red/02.webp" ], "description": [ { @@ -641,9 +641,9 @@ "colorsAvailable": ["space gray", "silver", "gold", "blue", "red"], "color": "red", "images": [ - "img/accessories/apple-watch-series-6/red/00.webp", - "img/accessories/apple-watch-series-6/red/01.webp", - "img/accessories/apple-watch-series-6/red/02.webp" + "/img/accessories/apple-watch-series-6/red/00.webp", + "/img/accessories/apple-watch-series-6/red/01.webp", + "/img/accessories/apple-watch-series-6/red/02.webp" ], "description": [ { @@ -683,9 +683,9 @@ "colorsAvailable": ["silver", "gold", "space gray"], "color": "silver", "images": [ - "img/accessories/apple-watch-series-5/silver/00.webp", - "img/accessories/apple-watch-series-5/silver/01.webp", - "img/accessories/apple-watch-series-5/silver/02.webp" + "/img/accessories/apple-watch-series-5/silver/00.webp", + "/img/accessories/apple-watch-series-5/silver/01.webp", + "/img/accessories/apple-watch-series-5/silver/02.webp" ], "description": [ { @@ -725,9 +725,9 @@ "colorsAvailable": ["space gray", "silver", "gold"], "color": "silver", "images": [ - "img/accessories/apple-watch-series-5/silver/00.webp", - "img/accessories/apple-watch-series-5/silver/01.webp", - "img/accessories/apple-watch-series-5/silver/02.webp" + "/img/accessories/apple-watch-series-5/silver/00.webp", + "/img/accessories/apple-watch-series-5/silver/01.webp", + "/img/accessories/apple-watch-series-5/silver/02.webp" ], "description": [ { @@ -767,9 +767,9 @@ "colorsAvailable": ["silver", "gold", "space gray"], "color": "gold", "images": [ - "img/accessories/apple-watch-series-5/gold/00.webp", - "img/accessories/apple-watch-series-5/gold/01.webp", - "img/accessories/apple-watch-series-5/gold/02.webp" + "/img/accessories/apple-watch-series-5/gold/00.webp", + "/img/accessories/apple-watch-series-5/gold/01.webp", + "/img/accessories/apple-watch-series-5/gold/02.webp" ], "description": [ { @@ -809,9 +809,9 @@ "colorsAvailable": ["space gray", "silver", "gold"], "color": "gold", "images": [ - "img/accessories/apple-watch-series-5/gold/00.webp", - "img/accessories/apple-watch-series-5/gold/01.webp", - "img/accessories/apple-watch-series-5/gold/02.webp" + "/img/accessories/apple-watch-series-5/gold/00.webp", + "/img/accessories/apple-watch-series-5/gold/01.webp", + "/img/accessories/apple-watch-series-5/gold/02.webp" ], "description": [ { @@ -851,9 +851,9 @@ "colorsAvailable": ["silver", "gold", "space gray"], "color": "space-gray", "images": [ - "img/accessories/apple-watch-series-5/space-gray/00.webp", - "img/accessories/apple-watch-series-5/space-gray/01.webp", - "img/accessories/apple-watch-series-5/space-gray/02.webp" + "/img/accessories/apple-watch-series-5/space-gray/00.webp", + "/img/accessories/apple-watch-series-5/space-gray/01.webp", + "/img/accessories/apple-watch-series-5/space-gray/02.webp" ], "description": [ { @@ -893,9 +893,9 @@ "colorsAvailable": ["space gray", "silver", "gold"], "color": "space-gray", "images": [ - "img/accessories/apple-watch-series-5/space-gray/00.webp", - "img/accessories/apple-watch-series-5/space-gray/01.webp", - "img/accessories/apple-watch-series-5/space-gray/02.webp" + "/img/accessories/apple-watch-series-5/space-gray/00.webp", + "/img/accessories/apple-watch-series-5/space-gray/01.webp", + "/img/accessories/apple-watch-series-5/space-gray/02.webp" ], "description": [ { @@ -935,9 +935,9 @@ "colorsAvailable": ["silver", "gold", "space gray"], "color": "silver", "images": [ - "img/accessories/apple-watch-series-4/silver/00.webp", - "img/accessories/apple-watch-series-4/silver/01.webp", - "img/accessories/apple-watch-series-4/silver/02.webp" + "/img/accessories/apple-watch-series-4/silver/00.webp", + "/img/accessories/apple-watch-series-4/silver/01.webp", + "/img/accessories/apple-watch-series-4/silver/02.webp" ], "description": [ { @@ -977,9 +977,9 @@ "colorsAvailable": ["silver", "gold", "space gray"], "color": "silver", "images": [ - "img/accessories/apple-watch-series-4/silver/00.webp", - "img/accessories/apple-watch-series-4/silver/01.webp", - "img/accessories/apple-watch-series-4/silver/02.webp" + "/img/accessories/apple-watch-series-4/silver/00.webp", + "/img/accessories/apple-watch-series-4/silver/01.webp", + "/img/accessories/apple-watch-series-4/silver/02.webp" ], "description": [ { @@ -1019,9 +1019,9 @@ "colorsAvailable": ["silver", "gold", "space gray"], "color": "gold", "images": [ - "img/accessories/apple-watch-series-4/gold/00.webp", - "img/accessories/apple-watch-series-4/gold/01.webp", - "img/accessories/apple-watch-series-4/gold/02.webp" + "/img/accessories/apple-watch-series-4/gold/00.webp", + "/img/accessories/apple-watch-series-4/gold/01.webp", + "/img/accessories/apple-watch-series-4/gold/02.webp" ], "description": [ { @@ -1061,9 +1061,9 @@ "colorsAvailable": ["silver", "gold", "space gray"], "color": "gold", "images": [ - "img/accessories/apple-watch-series-4/gold/00.webp", - "img/accessories/apple-watch-series-4/gold/01.webp", - "img/accessories/apple-watch-series-4/gold/02.webp" + "/img/accessories/apple-watch-series-4/gold/00.webp", + "/img/accessories/apple-watch-series-4/gold/01.webp", + "/img/accessories/apple-watch-series-4/gold/02.webp" ], "description": [ { @@ -1103,9 +1103,9 @@ "colorsAvailable": ["silver", "gold", "space gray"], "color": "space-gray", "images": [ - "img/accessories/apple-watch-series-4/space-gray/00.webp", - "img/accessories/apple-watch-series-4/space-gray/01.webp", - "img/accessories/apple-watch-series-4/space-gray/02.webp" + "/img/accessories/apple-watch-series-4/space-gray/00.webp", + "/img/accessories/apple-watch-series-4/space-gray/01.webp", + "/img/accessories/apple-watch-series-4/space-gray/02.webp" ], "description": [ { @@ -1145,9 +1145,9 @@ "colorsAvailable": ["silver", "gold", "space gray"], "color": "space-gray", "images": [ - "img/accessories/apple-watch-series-4/space-gray/00.webp", - "img/accessories/apple-watch-series-4/space-gray/01.webp", - "img/accessories/apple-watch-series-4/space-gray/02.webp" + "/img/accessories/apple-watch-series-4/space-gray/00.webp", + "/img/accessories/apple-watch-series-4/space-gray/01.webp", + "/img/accessories/apple-watch-series-4/space-gray/02.webp" ], "description": [ { @@ -1187,9 +1187,9 @@ "colorsAvailable": ["silver", "gold", "space gray"], "color": "silver", "images": [ - "img/accessories/apple-watch-se/silver/00.webp", - "img/accessories/apple-watch-se/silver/01.webp", - "img/accessories/apple-watch-se/silver/02.webp" + "/img/accessories/apple-watch-se/silver/00.webp", + "/img/accessories/apple-watch-se/silver/01.webp", + "/img/accessories/apple-watch-se/silver/02.webp" ], "description": [ { @@ -1229,9 +1229,9 @@ "colorsAvailable": ["silver", "gold", "space gray"], "color": "silver", "images": [ - "img/accessories/apple-watch-se/silver/00.webp", - "img/accessories/apple-watch-se/silver/01.webp", - "img/accessories/apple-watch-se/silver/02.webp" + "/img/accessories/apple-watch-se/silver/00.webp", + "/img/accessories/apple-watch-se/silver/01.webp", + "/img/accessories/apple-watch-se/silver/02.webp" ], "description": [ { @@ -1271,9 +1271,9 @@ "colorsAvailable": ["silver", "space gray", "gold"], "color": "gold", "images": [ - "img/accessories/apple-watch-se/gold/00.webp", - "img/accessories/apple-watch-se/gold/01.webp", - "img/accessories/apple-watch-se/gold/02.webp" + "/img/accessories/apple-watch-se/gold/00.webp", + "/img/accessories/apple-watch-se/gold/01.webp", + "/img/accessories/apple-watch-se/gold/02.webp" ], "description": [ { @@ -1313,9 +1313,9 @@ "colorsAvailable": ["space gray", "silver", "gold"], "color": "gold", "images": [ - "img/accessories/apple-watch-se/gold/00.webp", - "img/accessories/apple-watch-se/gold/01.webp", - "img/accessories/apple-watch-se/gold/02.webp" + "/img/accessories/apple-watch-se/gold/00.webp", + "/img/accessories/apple-watch-se/gold/01.webp", + "/img/accessories/apple-watch-se/gold/02.webp" ], "description": [ { @@ -1355,9 +1355,9 @@ "colorsAvailable": ["silver", "space gray", "gold"], "color": "space gray", "images": [ - "img/accessories/apple-watch-se/space-gray/00.webp", - "img/accessories/apple-watch-se/space-gray/01.webp", - "img/accessories/apple-watch-se/space-gray/02.webp" + "/img/accessories/apple-watch-se/space-gray/00.webp", + "/img/accessories/apple-watch-se/space-gray/01.webp", + "/img/accessories/apple-watch-se/space-gray/02.webp" ], "description": [ { @@ -1397,9 +1397,9 @@ "colorsAvailable": ["silver", "space gray", "gold"], "color": "space gray", "images": [ - "img/accessories/apple-watch-se/space-gray/00.webp", - "img/accessories/apple-watch-se/space-gray/01.webp", - "img/accessories/apple-watch-se/space-gray/02.webp" + "/img/accessories/apple-watch-se/space-gray/00.webp", + "/img/accessories/apple-watch-se/space-gray/01.webp", + "/img/accessories/apple-watch-se/space-gray/02.webp" ], "description": [ { diff --git a/public/api/phones.json b/public/api/phones.json index e1535893222..cb5c7a2d0ae 100644 --- a/public/api/phones.json +++ b/public/api/phones.json @@ -11,11 +11,11 @@ "colorsAvailable": ["black", "green", "yellow", "white", "purple", "red"], "color": "black", "images": [ - "img/phones/apple-iphone-11/black/00.webp", - "img/phones/apple-iphone-11/black/01.webp", - "img/phones/apple-iphone-11/black/02.webp", - "img/phones/apple-iphone-11/black/03.webp", - "img/phones/apple-iphone-11/black/04.webp" + "/img/phones/apple-iphone-11/black/00.webp", + "/img/phones/apple-iphone-11/black/01.webp", + "/img/phones/apple-iphone-11/black/02.webp", + "/img/phones/apple-iphone-11/black/03.webp", + "/img/phones/apple-iphone-11/black/04.webp" ], "description": [ { @@ -59,11 +59,11 @@ "colorsAvailable": ["black", "green", "yellow", "white", "purple", "red"], "color": "green", "images": [ - "img/phones/apple-iphone-11/green/00.webp", - "img/phones/apple-iphone-11/green/01.webp", - "img/phones/apple-iphone-11/green/02.webp", - "img/phones/apple-iphone-11/green/03.webp", - "img/phones/apple-iphone-11/green/04.webp" + "/img/phones/apple-iphone-11/green/00.webp", + "/img/phones/apple-iphone-11/green/01.webp", + "/img/phones/apple-iphone-11/green/02.webp", + "/img/phones/apple-iphone-11/green/03.webp", + "/img/phones/apple-iphone-11/green/04.webp" ], "description": [ { @@ -107,11 +107,11 @@ "colorsAvailable": ["black", "green", "yellow", "white", "purple", "red"], "color": "purple", "images": [ - "img/phones/apple-iphone-11/purple/00.webp", - "img/phones/apple-iphone-11/purple/01.webp", - "img/phones/apple-iphone-11/purple/02.webp", - "img/phones/apple-iphone-11/purple/03.webp", - "img/phones/apple-iphone-11/purple/04.webp" + "/img/phones/apple-iphone-11/purple/00.webp", + "/img/phones/apple-iphone-11/purple/01.webp", + "/img/phones/apple-iphone-11/purple/02.webp", + "/img/phones/apple-iphone-11/purple/03.webp", + "/img/phones/apple-iphone-11/purple/04.webp" ], "description": [ { @@ -155,11 +155,11 @@ "colorsAvailable": ["black", "green", "yellow", "white", "purple", "red"], "color": "red", "images": [ - "img/phones/apple-iphone-11/red/00.webp", - "img/phones/apple-iphone-11/red/01.webp", - "img/phones/apple-iphone-11/red/02.webp", - "img/phones/apple-iphone-11/red/03.webp", - "img/phones/apple-iphone-11/red/04.webp" + "/img/phones/apple-iphone-11/red/00.webp", + "/img/phones/apple-iphone-11/red/01.webp", + "/img/phones/apple-iphone-11/red/02.webp", + "/img/phones/apple-iphone-11/red/03.webp", + "/img/phones/apple-iphone-11/red/04.webp" ], "description": [ { @@ -203,11 +203,11 @@ "colorsAvailable": ["black", "green", "yellow", "white", "purple", "red"], "color": "white", "images": [ - "img/phones/apple-iphone-11/white/00.webp", - "img/phones/apple-iphone-11/white/01.webp", - "img/phones/apple-iphone-11/white/02.webp", - "img/phones/apple-iphone-11/white/03.webp", - "img/phones/apple-iphone-11/white/04.webp" + "/img/phones/apple-iphone-11/white/00.webp", + "/img/phones/apple-iphone-11/white/01.webp", + "/img/phones/apple-iphone-11/white/02.webp", + "/img/phones/apple-iphone-11/white/03.webp", + "/img/phones/apple-iphone-11/white/04.webp" ], "description": [ { @@ -251,11 +251,11 @@ "colorsAvailable": ["black", "green", "yellow", "white", "purple", "red"], "color": "yellow", "images": [ - "img/phones/apple-iphone-11/yellow/00.webp", - "img/phones/apple-iphone-11/yellow/01.webp", - "img/phones/apple-iphone-11/yellow/02.webp", - "img/phones/apple-iphone-11/yellow/03.webp", - "img/phones/apple-iphone-11/yellow/04.webp" + "/img/phones/apple-iphone-11/yellow/00.webp", + "/img/phones/apple-iphone-11/yellow/01.webp", + "/img/phones/apple-iphone-11/yellow/02.webp", + "/img/phones/apple-iphone-11/yellow/03.webp", + "/img/phones/apple-iphone-11/yellow/04.webp" ], "description": [ { @@ -299,11 +299,11 @@ "colorsAvailable": ["black", "green", "yellow", "white", "purple", "red"], "color": "black", "images": [ - "img/phones/apple-iphone-11/black/00.webp", - "img/phones/apple-iphone-11/black/01.webp", - "img/phones/apple-iphone-11/black/02.webp", - "img/phones/apple-iphone-11/black/03.webp", - "img/phones/apple-iphone-11/black/04.webp" + "/img/phones/apple-iphone-11/black/00.webp", + "/img/phones/apple-iphone-11/black/01.webp", + "/img/phones/apple-iphone-11/black/02.webp", + "/img/phones/apple-iphone-11/black/03.webp", + "/img/phones/apple-iphone-11/black/04.webp" ], "description": [ { @@ -347,11 +347,11 @@ "colorsAvailable": ["black", "green", "yellow", "white", "purple", "red"], "color": "green", "images": [ - "img/phones/apple-iphone-11/green/00.webp", - "img/phones/apple-iphone-11/green/01.webp", - "img/phones/apple-iphone-11/green/02.webp", - "img/phones/apple-iphone-11/green/03.webp", - "img/phones/apple-iphone-11/green/04.webp" + "/img/phones/apple-iphone-11/green/00.webp", + "/img/phones/apple-iphone-11/green/01.webp", + "/img/phones/apple-iphone-11/green/02.webp", + "/img/phones/apple-iphone-11/green/03.webp", + "/img/phones/apple-iphone-11/green/04.webp" ], "description": [ { @@ -395,11 +395,11 @@ "colorsAvailable": ["black", "green", "yellow", "white", "purple", "red"], "color": "purple", "images": [ - "img/phones/apple-iphone-11/purple/00.webp", - "img/phones/apple-iphone-11/purple/01.webp", - "img/phones/apple-iphone-11/purple/02.webp", - "img/phones/apple-iphone-11/purple/03.webp", - "img/phones/apple-iphone-11/purple/04.webp" + "/img/phones/apple-iphone-11/purple/00.webp", + "/img/phones/apple-iphone-11/purple/01.webp", + "/img/phones/apple-iphone-11/purple/02.webp", + "/img/phones/apple-iphone-11/purple/03.webp", + "/img/phones/apple-iphone-11/purple/04.webp" ], "description": [ { @@ -443,11 +443,11 @@ "colorsAvailable": ["black", "green", "yellow", "white", "purple", "red"], "color": "red", "images": [ - "img/phones/apple-iphone-11/red/00.webp", - "img/phones/apple-iphone-11/red/01.webp", - "img/phones/apple-iphone-11/red/02.webp", - "img/phones/apple-iphone-11/red/03.webp", - "img/phones/apple-iphone-11/red/04.webp" + "/img/phones/apple-iphone-11/red/00.webp", + "/img/phones/apple-iphone-11/red/01.webp", + "/img/phones/apple-iphone-11/red/02.webp", + "/img/phones/apple-iphone-11/red/03.webp", + "/img/phones/apple-iphone-11/red/04.webp" ], "description": [ { @@ -491,11 +491,11 @@ "colorsAvailable": ["black", "green", "yellow", "white", "purple", "red"], "color": "white", "images": [ - "img/phones/apple-iphone-11/white/00.webp", - "img/phones/apple-iphone-11/white/01.webp", - "img/phones/apple-iphone-11/white/02.webp", - "img/phones/apple-iphone-11/white/03.webp", - "img/phones/apple-iphone-11/white/04.webp" + "/img/phones/apple-iphone-11/white/00.webp", + "/img/phones/apple-iphone-11/white/01.webp", + "/img/phones/apple-iphone-11/white/02.webp", + "/img/phones/apple-iphone-11/white/03.webp", + "/img/phones/apple-iphone-11/white/04.webp" ], "description": [ { @@ -539,11 +539,11 @@ "colorsAvailable": ["black", "green", "yellow", "white", "purple", "red"], "color": "yellow", "images": [ - "img/phones/apple-iphone-11/yellow/00.webp", - "img/phones/apple-iphone-11/yellow/01.webp", - "img/phones/apple-iphone-11/yellow/02.webp", - "img/phones/apple-iphone-11/yellow/03.webp", - "img/phones/apple-iphone-11/yellow/04.webp" + "/img/phones/apple-iphone-11/yellow/00.webp", + "/img/phones/apple-iphone-11/yellow/01.webp", + "/img/phones/apple-iphone-11/yellow/02.webp", + "/img/phones/apple-iphone-11/yellow/03.webp", + "/img/phones/apple-iphone-11/yellow/04.webp" ], "description": [ { @@ -587,11 +587,11 @@ "colorsAvailable": ["black", "green", "yellow", "white", "purple", "red"], "color": "black", "images": [ - "img/phones/apple-iphone-11/black/00.webp", - "img/phones/apple-iphone-11/black/01.webp", - "img/phones/apple-iphone-11/black/02.webp", - "img/phones/apple-iphone-11/black/03.webp", - "img/phones/apple-iphone-11/black/04.webp" + "/img/phones/apple-iphone-11/black/00.webp", + "/img/phones/apple-iphone-11/black/01.webp", + "/img/phones/apple-iphone-11/black/02.webp", + "/img/phones/apple-iphone-11/black/03.webp", + "/img/phones/apple-iphone-11/black/04.webp" ], "description": [ { @@ -635,11 +635,11 @@ "colorsAvailable": ["black", "green", "yellow", "white", "purple", "red"], "color": "green", "images": [ - "img/phones/apple-iphone-11/green/00.webp", - "img/phones/apple-iphone-11/green/01.webp", - "img/phones/apple-iphone-11/green/02.webp", - "img/phones/apple-iphone-11/green/03.webp", - "img/phones/apple-iphone-11/green/04.webp" + "/img/phones/apple-iphone-11/green/00.webp", + "/img/phones/apple-iphone-11/green/01.webp", + "/img/phones/apple-iphone-11/green/02.webp", + "/img/phones/apple-iphone-11/green/03.webp", + "/img/phones/apple-iphone-11/green/04.webp" ], "description": [ { @@ -683,11 +683,11 @@ "colorsAvailable": ["black", "green", "yellow", "white", "purple", "red"], "color": "purple", "images": [ - "img/phones/apple-iphone-11/purple/00.webp", - "img/phones/apple-iphone-11/purple/01.webp", - "img/phones/apple-iphone-11/purple/02.webp", - "img/phones/apple-iphone-11/purple/03.webp", - "img/phones/apple-iphone-11/purple/04.webp" + "/img/phones/apple-iphone-11/purple/00.webp", + "/img/phones/apple-iphone-11/purple/01.webp", + "/img/phones/apple-iphone-11/purple/02.webp", + "/img/phones/apple-iphone-11/purple/03.webp", + "/img/phones/apple-iphone-11/purple/04.webp" ], "description": [ { @@ -731,11 +731,11 @@ "colorsAvailable": ["black", "green", "yellow", "white", "purple", "red"], "color": "red", "images": [ - "img/phones/apple-iphone-11/red/00.webp", - "img/phones/apple-iphone-11/red/01.webp", - "img/phones/apple-iphone-11/red/02.webp", - "img/phones/apple-iphone-11/red/03.webp", - "img/phones/apple-iphone-11/red/04.webp" + "/img/phones/apple-iphone-11/red/00.webp", + "/img/phones/apple-iphone-11/red/01.webp", + "/img/phones/apple-iphone-11/red/02.webp", + "/img/phones/apple-iphone-11/red/03.webp", + "/img/phones/apple-iphone-11/red/04.webp" ], "description": [ { @@ -779,11 +779,11 @@ "colorsAvailable": ["black", "green", "yellow", "white", "purple", "red"], "color": "white", "images": [ - "img/phones/apple-iphone-11/white/00.webp", - "img/phones/apple-iphone-11/white/01.webp", - "img/phones/apple-iphone-11/white/02.webp", - "img/phones/apple-iphone-11/white/03.webp", - "img/phones/apple-iphone-11/white/04.webp" + "/img/phones/apple-iphone-11/white/00.webp", + "/img/phones/apple-iphone-11/white/01.webp", + "/img/phones/apple-iphone-11/white/02.webp", + "/img/phones/apple-iphone-11/white/03.webp", + "/img/phones/apple-iphone-11/white/04.webp" ], "description": [ { @@ -827,11 +827,11 @@ "colorsAvailable": ["black", "green", "yellow", "white", "purple", "red"], "color": "yellow", "images": [ - "img/phones/apple-iphone-11/yellow/00.webp", - "img/phones/apple-iphone-11/yellow/01.webp", - "img/phones/apple-iphone-11/yellow/02.webp", - "img/phones/apple-iphone-11/yellow/03.webp", - "img/phones/apple-iphone-11/yellow/04.webp" + "/img/phones/apple-iphone-11/yellow/00.webp", + "/img/phones/apple-iphone-11/yellow/01.webp", + "/img/phones/apple-iphone-11/yellow/02.webp", + "/img/phones/apple-iphone-11/yellow/03.webp", + "/img/phones/apple-iphone-11/yellow/04.webp" ], "description": [ { @@ -875,9 +875,9 @@ "colorsAvailable": ["spacegray", "midnightgreen", "gold", "silver"], "color": "gold", "images": [ - "img/phones/apple-iphone-11-pro/gold/00.webp", - "img/phones/apple-iphone-11-pro/gold/01.webp", - "img/phones/apple-iphone-11-pro/gold/02.webp" + "/img/phones/apple-iphone-11-pro/gold/00.webp", + "/img/phones/apple-iphone-11-pro/gold/01.webp", + "/img/phones/apple-iphone-11-pro/gold/02.webp" ], "description": [ { @@ -921,10 +921,10 @@ "colorsAvailable": ["spacegray", "midnightgreen", "gold", "silver"], "color": "midnightgreen", "images": [ - "img/phones/apple-iphone-11-pro/midnightgreen/00.webp", - "img/phones/apple-iphone-11-pro/midnightgreen/01.webp", - "img/phones/apple-iphone-11-pro/midnightgreen/02.webp", - "img/phones/apple-iphone-11-pro/midnightgreen/03.webp" + "/img/phones/apple-iphone-11-pro/midnightgreen/00.webp", + "/img/phones/apple-iphone-11-pro/midnightgreen/01.webp", + "/img/phones/apple-iphone-11-pro/midnightgreen/02.webp", + "/img/phones/apple-iphone-11-pro/midnightgreen/03.webp" ], "description": [ { @@ -968,9 +968,9 @@ "colorsAvailable": ["spacegray", "midnightgreen", "gold", "silver"], "color": "silver", "images": [ - "img/phones/apple-iphone-11-pro/silver/00.webp", - "img/phones/apple-iphone-11-pro/silver/01.webp", - "img/phones/apple-iphone-11-pro/silver/02.webp" + "/img/phones/apple-iphone-11-pro/silver/00.webp", + "/img/phones/apple-iphone-11-pro/silver/01.webp", + "/img/phones/apple-iphone-11-pro/silver/02.webp" ], "description": [ { @@ -1014,9 +1014,9 @@ "colorsAvailable": ["spacegray", "midnightgreen", "gold", "silver"], "color": "spacegray", "images": [ - "img/phones/apple-iphone-11-pro/spacegray/00.webp", - "img/phones/apple-iphone-11-pro/spacegray/01.webp", - "img/phones/apple-iphone-11-pro/spacegray/02.webp" + "/img/phones/apple-iphone-11-pro/spacegray/00.webp", + "/img/phones/apple-iphone-11-pro/spacegray/01.webp", + "/img/phones/apple-iphone-11-pro/spacegray/02.webp" ], "description": [ { @@ -1060,9 +1060,9 @@ "colorsAvailable": ["spacegray", "midnightgreen", "gold", "silver"], "color": "gold", "images": [ - "img/phones/apple-iphone-11-pro/gold/00.webp", - "img/phones/apple-iphone-11-pro/gold/01.webp", - "img/phones/apple-iphone-11-pro/gold/02.webp" + "/img/phones/apple-iphone-11-pro/gold/00.webp", + "/img/phones/apple-iphone-11-pro/gold/01.webp", + "/img/phones/apple-iphone-11-pro/gold/02.webp" ], "description": [ { @@ -1106,10 +1106,10 @@ "colorsAvailable": ["spacegray", "midnightgreen", "gold", "silver"], "color": "midnightgreen", "images": [ - "img/phones/apple-iphone-11-pro/midnightgreen/00.webp", - "img/phones/apple-iphone-11-pro/midnightgreen/01.webp", - "img/phones/apple-iphone-11-pro/midnightgreen/02.webp", - "img/phones/apple-iphone-11-pro/midnightgreen/03.webp" + "/img/phones/apple-iphone-11-pro/midnightgreen/00.webp", + "/img/phones/apple-iphone-11-pro/midnightgreen/01.webp", + "/img/phones/apple-iphone-11-pro/midnightgreen/02.webp", + "/img/phones/apple-iphone-11-pro/midnightgreen/03.webp" ], "description": [ { @@ -1153,9 +1153,9 @@ "colorsAvailable": ["spacegray", "midnightgreen", "gold", "silver"], "color": "silver", "images": [ - "img/phones/apple-iphone-11-pro/silver/00.webp", - "img/phones/apple-iphone-11-pro/silver/01.webp", - "img/phones/apple-iphone-11-pro/silver/02.webp" + "/img/phones/apple-iphone-11-pro/silver/00.webp", + "/img/phones/apple-iphone-11-pro/silver/01.webp", + "/img/phones/apple-iphone-11-pro/silver/02.webp" ], "description": [ { @@ -1199,9 +1199,9 @@ "colorsAvailable": ["spacegray", "midnightgreen", "gold", "silver"], "color": "spacegray", "images": [ - "img/phones/apple-iphone-11-pro/spacegray/00.webp", - "img/phones/apple-iphone-11-pro/spacegray/01.webp", - "img/phones/apple-iphone-11-pro/spacegray/02.webp" + "/img/phones/apple-iphone-11-pro/spacegray/00.webp", + "/img/phones/apple-iphone-11-pro/spacegray/01.webp", + "/img/phones/apple-iphone-11-pro/spacegray/02.webp" ], "description": [ { @@ -1245,9 +1245,9 @@ "colorsAvailable": ["spacegray", "midnightgreen", "gold", "silver"], "color": "gold", "images": [ - "img/phones/apple-iphone-11-pro/gold/00.webp", - "img/phones/apple-iphone-11-pro/gold/01.webp", - "img/phones/apple-iphone-11-pro/gold/02.webp" + "/img/phones/apple-iphone-11-pro/gold/00.webp", + "/img/phones/apple-iphone-11-pro/gold/01.webp", + "/img/phones/apple-iphone-11-pro/gold/02.webp" ], "description": [ { @@ -1291,10 +1291,10 @@ "colorsAvailable": ["spacegray", "midnightgreen", "gold", "silver"], "color": "midnightgreen", "images": [ - "img/phones/apple-iphone-11-pro/midnightgreen/00.webp", - "img/phones/apple-iphone-11-pro/midnightgreen/01.webp", - "img/phones/apple-iphone-11-pro/midnightgreen/02.webp", - "img/phones/apple-iphone-11-pro/midnightgreen/03.webp" + "/img/phones/apple-iphone-11-pro/midnightgreen/00.webp", + "/img/phones/apple-iphone-11-pro/midnightgreen/01.webp", + "/img/phones/apple-iphone-11-pro/midnightgreen/02.webp", + "/img/phones/apple-iphone-11-pro/midnightgreen/03.webp" ], "description": [ { @@ -1338,9 +1338,9 @@ "colorsAvailable": ["spacegray", "midnightgreen", "gold", "silver"], "color": "silver", "images": [ - "img/phones/apple-iphone-11-pro/silver/00.webp", - "img/phones/apple-iphone-11-pro/silver/01.webp", - "img/phones/apple-iphone-11-pro/silver/02.webp" + "/img/phones/apple-iphone-11-pro/silver/00.webp", + "/img/phones/apple-iphone-11-pro/silver/01.webp", + "/img/phones/apple-iphone-11-pro/silver/02.webp" ], "description": [ { @@ -1384,9 +1384,9 @@ "colorsAvailable": ["spacegray", "midnightgreen", "gold", "silver"], "color": "spacegray", "images": [ - "img/phones/apple-iphone-11-pro/spacegray/00.webp", - "img/phones/apple-iphone-11-pro/spacegray/01.webp", - "img/phones/apple-iphone-11-pro/spacegray/02.webp" + "/img/phones/apple-iphone-11-pro/spacegray/00.webp", + "/img/phones/apple-iphone-11-pro/spacegray/01.webp", + "/img/phones/apple-iphone-11-pro/spacegray/02.webp" ], "description": [ { @@ -1430,9 +1430,9 @@ "colorsAvailable": ["spacegray", "midnightgreen", "gold", "silver"], "color": "gold", "images": [ - "img/phones/apple-iphone-11-pro-max/gold/00.webp", - "img/phones/apple-iphone-11-pro-max/gold/01.webp", - "img/phones/apple-iphone-11-pro-max/gold/02.webp" + "/img/phones/apple-iphone-11-pro-max/gold/00.webp", + "/img/phones/apple-iphone-11-pro-max/gold/01.webp", + "/img/phones/apple-iphone-11-pro-max/gold/02.webp" ], "description": [ { @@ -1476,9 +1476,9 @@ "colorsAvailable": ["spacegray", "midnightgreen", "gold", "silver"], "color": "midnightgreen", "images": [ - "img/phones/apple-iphone-11-pro-max/midnightgreen/00.webp", - "img/phones/apple-iphone-11-pro-max/midnightgreen/01.webp", - "img/phones/apple-iphone-11-pro-max/midnightgreen/02.webp" + "/img/phones/apple-iphone-11-pro-max/midnightgreen/00.webp", + "/img/phones/apple-iphone-11-pro-max/midnightgreen/01.webp", + "/img/phones/apple-iphone-11-pro-max/midnightgreen/02.webp" ], "description": [ { @@ -1522,9 +1522,9 @@ "colorsAvailable": ["spacegray", "midnightgreen", "gold", "silver"], "color": "silver", "images": [ - "img/phones/apple-iphone-11-pro-max/silver/00.webp", - "img/phones/apple-iphone-11-pro-max/silver/01.webp", - "img/phones/apple-iphone-11-pro-max/silver/02.webp" + "/img/phones/apple-iphone-11-pro-max/silver/00.webp", + "/img/phones/apple-iphone-11-pro-max/silver/01.webp", + "/img/phones/apple-iphone-11-pro-max/silver/02.webp" ], "description": [ { @@ -1568,9 +1568,9 @@ "colorsAvailable": ["spacegray", "midnightgreen", "gold", "silver"], "color": "spacegray", "images": [ - "img/phones/apple-iphone-11-pro-max/spacegray/00.webp", - "img/phones/apple-iphone-11-pro-max/spacegray/01.webp", - "img/phones/apple-iphone-11-pro-max/spacegray/02.webp" + "/img/phones/apple-iphone-11-pro-max/spacegray/00.webp", + "/img/phones/apple-iphone-11-pro-max/spacegray/01.webp", + "/img/phones/apple-iphone-11-pro-max/spacegray/02.webp" ], "description": [ { @@ -1614,9 +1614,9 @@ "colorsAvailable": ["spacegray", "midnightgreen", "gold", "silver"], "color": "gold", "images": [ - "img/phones/apple-iphone-11-pro-max/gold/00.webp", - "img/phones/apple-iphone-11-pro-max/gold/01.webp", - "img/phones/apple-iphone-11-pro-max/gold/02.webp" + "/img/phones/apple-iphone-11-pro-max/gold/00.webp", + "/img/phones/apple-iphone-11-pro-max/gold/01.webp", + "/img/phones/apple-iphone-11-pro-max/gold/02.webp" ], "description": [ { @@ -1660,9 +1660,9 @@ "colorsAvailable": ["spacegray", "midnightgreen", "gold", "silver"], "color": "midnightgreen", "images": [ - "img/phones/apple-iphone-11-pro-max/midnightgreen/00.webp", - "img/phones/apple-iphone-11-pro-max/midnightgreen/01.webp", - "img/phones/apple-iphone-11-pro-max/midnightgreen/02.webp" + "/img/phones/apple-iphone-11-pro-max/midnightgreen/00.webp", + "/img/phones/apple-iphone-11-pro-max/midnightgreen/01.webp", + "/img/phones/apple-iphone-11-pro-max/midnightgreen/02.webp" ], "description": [ { @@ -1706,9 +1706,9 @@ "colorsAvailable": ["spacegray", "midnightgreen", "gold", "silver"], "color": "silver", "images": [ - "img/phones/apple-iphone-11-pro-max/silver/00.webp", - "img/phones/apple-iphone-11-pro-max/silver/01.webp", - "img/phones/apple-iphone-11-pro-max/silver/02.webp" + "/img/phones/apple-iphone-11-pro-max/silver/00.webp", + "/img/phones/apple-iphone-11-pro-max/silver/01.webp", + "/img/phones/apple-iphone-11-pro-max/silver/02.webp" ], "description": [ { @@ -1752,9 +1752,9 @@ "colorsAvailable": ["spacegray", "midnightgreen", "gold", "silver"], "color": "spacegray", "images": [ - "img/phones/apple-iphone-11-pro-max/spacegray/00.webp", - "img/phones/apple-iphone-11-pro-max/spacegray/01.webp", - "img/phones/apple-iphone-11-pro-max/spacegray/02.webp" + "/img/phones/apple-iphone-11-pro-max/spacegray/00.webp", + "/img/phones/apple-iphone-11-pro-max/spacegray/01.webp", + "/img/phones/apple-iphone-11-pro-max/spacegray/02.webp" ], "description": [ { @@ -1798,9 +1798,9 @@ "colorsAvailable": ["spacegray", "midnightgreen", "gold", "silver"], "color": "gold", "images": [ - "img/phones/apple-iphone-11-pro-max/gold/00.webp", - "img/phones/apple-iphone-11-pro-max/gold/01.webp", - "img/phones/apple-iphone-11-pro-max/gold/02.webp" + "/img/phones/apple-iphone-11-pro-max/gold/00.webp", + "/img/phones/apple-iphone-11-pro-max/gold/01.webp", + "/img/phones/apple-iphone-11-pro-max/gold/02.webp" ], "description": [ { @@ -1844,9 +1844,9 @@ "colorsAvailable": ["spacegray", "midnightgreen", "gold", "silver"], "color": "midnightgreen", "images": [ - "img/phones/apple-iphone-11-pro-max/midnightgreen/00.webp", - "img/phones/apple-iphone-11-pro-max/midnightgreen/01.webp", - "img/phones/apple-iphone-11-pro-max/midnightgreen/02.webp" + "/img/phones/apple-iphone-11-pro-max/midnightgreen/00.webp", + "/img/phones/apple-iphone-11-pro-max/midnightgreen/01.webp", + "/img/phones/apple-iphone-11-pro-max/midnightgreen/02.webp" ], "description": [ { @@ -1890,9 +1890,9 @@ "colorsAvailable": ["spacegray", "midnightgreen", "gold", "silver"], "color": "silver", "images": [ - "img/phones/apple-iphone-11-pro-max/silver/00.webp", - "img/phones/apple-iphone-11-pro-max/silver/01.webp", - "img/phones/apple-iphone-11-pro-max/silver/02.webp" + "/img/phones/apple-iphone-11-pro-max/silver/00.webp", + "/img/phones/apple-iphone-11-pro-max/silver/01.webp", + "/img/phones/apple-iphone-11-pro-max/silver/02.webp" ], "description": [ { @@ -1936,9 +1936,9 @@ "colorsAvailable": ["spacegray", "midnightgreen", "gold", "silver"], "color": "spacegray", "images": [ - "img/phones/apple-iphone-11-pro-max/spacegray/00.webp", - "img/phones/apple-iphone-11-pro-max/spacegray/01.webp", - "img/phones/apple-iphone-11-pro-max/spacegray/02.webp" + "/img/phones/apple-iphone-11-pro-max/spacegray/00.webp", + "/img/phones/apple-iphone-11-pro-max/spacegray/01.webp", + "/img/phones/apple-iphone-11-pro-max/spacegray/02.webp" ], "description": [ { @@ -1982,11 +1982,11 @@ "colorsAvailable": ["black", "rosegold", "gold", "silver"], "color": "black", "images": [ - "img/phones/apple-iphone-7/black/00.webp", - "img/phones/apple-iphone-7/black/01.webp", - "img/phones/apple-iphone-7/black/02.webp", - "img/phones/apple-iphone-7/black/03.webp", - "img/phones/apple-iphone-7/black/04.webp" + "/img/phones/apple-iphone-7/black/00.webp", + "/img/phones/apple-iphone-7/black/01.webp", + "/img/phones/apple-iphone-7/black/02.webp", + "/img/phones/apple-iphone-7/black/03.webp", + "/img/phones/apple-iphone-7/black/04.webp" ], "description": [ { @@ -2030,11 +2030,11 @@ "colorsAvailable": ["black", "rosegold", "gold", "silver"], "color": "gold", "images": [ - "img/phones/apple-iphone-7/gold/00.webp", - "img/phones/apple-iphone-7/gold/01.webp", - "img/phones/apple-iphone-7/gold/02.webp", - "img/phones/apple-iphone-7/gold/03.webp", - "img/phones/apple-iphone-7/gold/04.webp" + "/img/phones/apple-iphone-7/gold/00.webp", + "/img/phones/apple-iphone-7/gold/01.webp", + "/img/phones/apple-iphone-7/gold/02.webp", + "/img/phones/apple-iphone-7/gold/03.webp", + "/img/phones/apple-iphone-7/gold/04.webp" ], "description": [ { @@ -2078,11 +2078,11 @@ "colorsAvailable": ["black", "rosegold", "gold", "silver"], "color": "rosegold", "images": [ - "img/phones/apple-iphone-7/rosegold/00.webp", - "img/phones/apple-iphone-7/rosegold/01.webp", - "img/phones/apple-iphone-7/rosegold/02.webp", - "img/phones/apple-iphone-7/rosegold/03.webp", - "img/phones/apple-iphone-7/rosegold/04.webp" + "/img/phones/apple-iphone-7/rosegold/00.webp", + "/img/phones/apple-iphone-7/rosegold/01.webp", + "/img/phones/apple-iphone-7/rosegold/02.webp", + "/img/phones/apple-iphone-7/rosegold/03.webp", + "/img/phones/apple-iphone-7/rosegold/04.webp" ], "description": [ { @@ -2126,11 +2126,11 @@ "colorsAvailable": ["black", "rosegold", "gold", "silver"], "color": "silver", "images": [ - "img/phones/apple-iphone-7/silver/00.webp", - "img/phones/apple-iphone-7/silver/01.webp", - "img/phones/apple-iphone-7/silver/02.webp", - "img/phones/apple-iphone-7/silver/03.webp", - "img/phones/apple-iphone-7/silver/04.webp" + "/img/phones/apple-iphone-7/silver/00.webp", + "/img/phones/apple-iphone-7/silver/01.webp", + "/img/phones/apple-iphone-7/silver/02.webp", + "/img/phones/apple-iphone-7/silver/03.webp", + "/img/phones/apple-iphone-7/silver/04.webp" ], "description": [ { @@ -2174,11 +2174,11 @@ "colorsAvailable": ["black", "rosegold", "gold", "silver"], "color": "black", "images": [ - "img/phones/apple-iphone-7-plus/black/00.webp", - "img/phones/apple-iphone-7-plus/black/01.webp", - "img/phones/apple-iphone-7-plus/black/02.webp", - "img/phones/apple-iphone-7-plus/black/03.webp", - "img/phones/apple-iphone-7-plus/black/04.webp" + "/img/phones/apple-iphone-7-plus/black/00.webp", + "/img/phones/apple-iphone-7-plus/black/01.webp", + "/img/phones/apple-iphone-7-plus/black/02.webp", + "/img/phones/apple-iphone-7-plus/black/03.webp", + "/img/phones/apple-iphone-7-plus/black/04.webp" ], "description": [ { @@ -2222,11 +2222,11 @@ "colorsAvailable": ["black", "rosegold", "gold", "silver"], "color": "gold", "images": [ - "img/phones/apple-iphone-7-plus/gold/00.webp", - "img/phones/apple-iphone-7-plus/gold/01.webp", - "img/phones/apple-iphone-7-plus/gold/02.webp", - "img/phones/apple-iphone-7-plus/gold/03.webp", - "img/phones/apple-iphone-7-plus/gold/04.webp" + "/img/phones/apple-iphone-7-plus/gold/00.webp", + "/img/phones/apple-iphone-7-plus/gold/01.webp", + "/img/phones/apple-iphone-7-plus/gold/02.webp", + "/img/phones/apple-iphone-7-plus/gold/03.webp", + "/img/phones/apple-iphone-7-plus/gold/04.webp" ], "description": [ { @@ -2270,11 +2270,11 @@ "colorsAvailable": ["black", "rosegold", "gold", "silver"], "color": "rosegold", "images": [ - "img/phones/apple-iphone-7-plus/rosegold/00.webp", - "img/phones/apple-iphone-7-plus/rosegold/01.webp", - "img/phones/apple-iphone-7-plus/rosegold/02.webp", - "img/phones/apple-iphone-7-plus/rosegold/03.webp", - "img/phones/apple-iphone-7-plus/rosegold/04.webp" + "/img/phones/apple-iphone-7-plus/rosegold/00.webp", + "/img/phones/apple-iphone-7-plus/rosegold/01.webp", + "/img/phones/apple-iphone-7-plus/rosegold/02.webp", + "/img/phones/apple-iphone-7-plus/rosegold/03.webp", + "/img/phones/apple-iphone-7-plus/rosegold/04.webp" ], "description": [ { @@ -2318,11 +2318,11 @@ "colorsAvailable": ["black", "rosegold", "gold", "silver"], "color": "silver", "images": [ - "img/phones/apple-iphone-7-plus/silver/00.webp", - "img/phones/apple-iphone-7-plus/silver/01.webp", - "img/phones/apple-iphone-7-plus/silver/02.webp", - "img/phones/apple-iphone-7-plus/silver/03.webp", - "img/phones/apple-iphone-7-plus/silver/04.webp" + "/img/phones/apple-iphone-7-plus/silver/00.webp", + "/img/phones/apple-iphone-7-plus/silver/01.webp", + "/img/phones/apple-iphone-7-plus/silver/02.webp", + "/img/phones/apple-iphone-7-plus/silver/03.webp", + "/img/phones/apple-iphone-7-plus/silver/04.webp" ], "description": [ { @@ -2366,10 +2366,10 @@ "colorsAvailable": ["spacegray", "gold", "silver"], "color": "gold", "images": [ - "img/phones/apple-iphone-8/gold/00.webp", - "img/phones/apple-iphone-8/gold/01.webp", - "img/phones/apple-iphone-8/gold/02.webp", - "img/phones/apple-iphone-8/gold/03.webp" + "/img/phones/apple-iphone-8/gold/00.webp", + "/img/phones/apple-iphone-8/gold/01.webp", + "/img/phones/apple-iphone-8/gold/02.webp", + "/img/phones/apple-iphone-8/gold/03.webp" ], "description": [ { @@ -2413,10 +2413,10 @@ "colorsAvailable": ["spacegray", "gold", "silver"], "color": "silver", "images": [ - "img/phones/apple-iphone-8/silver/00.webp", - "img/phones/apple-iphone-8/silver/01.webp", - "img/phones/apple-iphone-8/silver/02.webp", - "img/phones/apple-iphone-8/silver/03.webp" + "/img/phones/apple-iphone-8/silver/00.webp", + "/img/phones/apple-iphone-8/silver/01.webp", + "/img/phones/apple-iphone-8/silver/02.webp", + "/img/phones/apple-iphone-8/silver/03.webp" ], "description": [ { @@ -2460,10 +2460,10 @@ "colorsAvailable": ["spacegray", "gold", "silver"], "color": "spacegray", "images": [ - "img/phones/apple-iphone-8/spacegray/00.webp", - "img/phones/apple-iphone-8/spacegray/01.webp", - "img/phones/apple-iphone-8/spacegray/02.webp", - "img/phones/apple-iphone-8/spacegray/03.webp" + "/img/phones/apple-iphone-8/spacegray/00.webp", + "/img/phones/apple-iphone-8/spacegray/01.webp", + "/img/phones/apple-iphone-8/spacegray/02.webp", + "/img/phones/apple-iphone-8/spacegray/03.webp" ], "description": [ { @@ -2507,11 +2507,11 @@ "colorsAvailable": ["white", "yellow", "red", "coral"], "color": "coral", "images": [ - "img/phones/apple-iphone-xr/coral/00.webp", - "img/phones/apple-iphone-xr/coral/01.webp", - "img/phones/apple-iphone-xr/coral/02.webp", - "img/phones/apple-iphone-xr/coral/03.webp", - "img/phones/apple-iphone-xr/coral/04.webp" + "/img/phones/apple-iphone-xr/coral/00.webp", + "/img/phones/apple-iphone-xr/coral/01.webp", + "/img/phones/apple-iphone-xr/coral/02.webp", + "/img/phones/apple-iphone-xr/coral/03.webp", + "/img/phones/apple-iphone-xr/coral/04.webp" ], "description": [ { @@ -2555,11 +2555,11 @@ "colorsAvailable": ["white", "yellow", "red", "coral"], "color": "red", "images": [ - "img/phones/apple-iphone-xr/red/00.webp", - "img/phones/apple-iphone-xr/red/01.webp", - "img/phones/apple-iphone-xr/red/02.webp", - "img/phones/apple-iphone-xr/red/03.webp", - "img/phones/apple-iphone-xr/red/04.webp" + "/img/phones/apple-iphone-xr/red/00.webp", + "/img/phones/apple-iphone-xr/red/01.webp", + "/img/phones/apple-iphone-xr/red/02.webp", + "/img/phones/apple-iphone-xr/red/03.webp", + "/img/phones/apple-iphone-xr/red/04.webp" ], "description": [ { @@ -2603,11 +2603,11 @@ "colorsAvailable": ["white", "yellow", "red", "coral"], "color": "white", "images": [ - "img/phones/apple-iphone-xr/white/00.webp", - "img/phones/apple-iphone-xr/white/01.webp", - "img/phones/apple-iphone-xr/white/02.webp", - "img/phones/apple-iphone-xr/white/03.webp", - "img/phones/apple-iphone-xr/white/04.webp" + "/img/phones/apple-iphone-xr/white/00.webp", + "/img/phones/apple-iphone-xr/white/01.webp", + "/img/phones/apple-iphone-xr/white/02.webp", + "/img/phones/apple-iphone-xr/white/03.webp", + "/img/phones/apple-iphone-xr/white/04.webp" ], "description": [ { @@ -2651,11 +2651,11 @@ "colorsAvailable": ["white", "yellow", "red", "coral"], "color": "yellow", "images": [ - "img/phones/apple-iphone-xr/yellow/00.webp", - "img/phones/apple-iphone-xr/yellow/01.webp", - "img/phones/apple-iphone-xr/yellow/02.webp", - "img/phones/apple-iphone-xr/yellow/03.webp", - "img/phones/apple-iphone-xr/yellow/04.webp" + "/img/phones/apple-iphone-xr/yellow/00.webp", + "/img/phones/apple-iphone-xr/yellow/01.webp", + "/img/phones/apple-iphone-xr/yellow/02.webp", + "/img/phones/apple-iphone-xr/yellow/03.webp", + "/img/phones/apple-iphone-xr/yellow/04.webp" ], "description": [ { @@ -2699,9 +2699,9 @@ "colorsAvailable": ["white", "yellow", "red", "coral"], "color": "coral", "images": [ - "img/phones/apple-iphone-xr/coral/00.webp", - "img/phones/apple-iphone-xr/coral/01.webp", - "img/phones/apple-iphone-xr/coral/02.webp" + "/img/phones/apple-iphone-xr/coral/00.webp", + "/img/phones/apple-iphone-xr/coral/01.webp", + "/img/phones/apple-iphone-xr/coral/02.webp" ], "description": [ { @@ -2745,11 +2745,11 @@ "colorsAvailable": ["white", "yellow", "red", "coral"], "color": "red", "images": [ - "img/phones/apple-iphone-xr/red/00.webp", - "img/phones/apple-iphone-xr/red/01.webp", - "img/phones/apple-iphone-xr/red/02.webp", - "img/phones/apple-iphone-xr/red/03.webp", - "img/phones/apple-iphone-xr/red/04.webp" + "/img/phones/apple-iphone-xr/red/00.webp", + "/img/phones/apple-iphone-xr/red/01.webp", + "/img/phones/apple-iphone-xr/red/02.webp", + "/img/phones/apple-iphone-xr/red/03.webp", + "/img/phones/apple-iphone-xr/red/04.webp" ], "description": [ { @@ -2793,11 +2793,11 @@ "colorsAvailable": ["white", "yellow", "red", "coral"], "color": "white", "images": [ - "img/phones/apple-iphone-xr/white/00.webp", - "img/phones/apple-iphone-xr/white/01.webp", - "img/phones/apple-iphone-xr/white/02.webp", - "img/phones/apple-iphone-xr/white/03.webp", - "img/phones/apple-iphone-xr/white/04.webp" + "/img/phones/apple-iphone-xr/white/00.webp", + "/img/phones/apple-iphone-xr/white/01.webp", + "/img/phones/apple-iphone-xr/white/02.webp", + "/img/phones/apple-iphone-xr/white/03.webp", + "/img/phones/apple-iphone-xr/white/04.webp" ], "description": [ { @@ -2841,11 +2841,11 @@ "colorsAvailable": ["white", "yellow", "red", "coral"], "color": "yellow", "images": [ - "img/phones/apple-iphone-xr/yellow/00.webp", - "img/phones/apple-iphone-xr/yellow/01.webp", - "img/phones/apple-iphone-xr/yellow/02.webp", - "img/phones/apple-iphone-xr/yellow/03.webp", - "img/phones/apple-iphone-xr/yellow/04.webp" + "/img/phones/apple-iphone-xr/yellow/00.webp", + "/img/phones/apple-iphone-xr/yellow/01.webp", + "/img/phones/apple-iphone-xr/yellow/02.webp", + "/img/phones/apple-iphone-xr/yellow/03.webp", + "/img/phones/apple-iphone-xr/yellow/04.webp" ], "description": [ { @@ -2889,11 +2889,11 @@ "colorsAvailable": ["spacegray", "gold"], "color": "gold", "images": [ - "img/phones/apple-iphone-xs/gold/00.webp", - "img/phones/apple-iphone-xs/gold/01.webp", - "img/phones/apple-iphone-xs/gold/02.webp", - "img/phones/apple-iphone-xs/gold/03.webp", - "img/phones/apple-iphone-xs/gold/04.webp" + "/img/phones/apple-iphone-xs/gold/00.webp", + "/img/phones/apple-iphone-xs/gold/01.webp", + "/img/phones/apple-iphone-xs/gold/02.webp", + "/img/phones/apple-iphone-xs/gold/03.webp", + "/img/phones/apple-iphone-xs/gold/04.webp" ], "description": [ { @@ -2937,11 +2937,11 @@ "colorsAvailable": ["spacegray", "gold"], "color": "spacegray", "images": [ - "img/phones/apple-iphone-xs/spacegray/00.webp", - "img/phones/apple-iphone-xs/spacegray/01.webp", - "img/phones/apple-iphone-xs/spacegray/02.webp", - "img/phones/apple-iphone-xs/spacegray/03.webp", - "img/phones/apple-iphone-xs/spacegray/04.webp" + "/img/phones/apple-iphone-xs/spacegray/00.webp", + "/img/phones/apple-iphone-xs/spacegray/01.webp", + "/img/phones/apple-iphone-xs/spacegray/02.webp", + "/img/phones/apple-iphone-xs/spacegray/03.webp", + "/img/phones/apple-iphone-xs/spacegray/04.webp" ], "description": [ { @@ -2985,11 +2985,11 @@ "colorsAvailable": ["spacegray", "gold"], "color": "gold", "images": [ - "img/phones/apple-iphone-xs/gold/00.webp", - "img/phones/apple-iphone-xs/gold/01.webp", - "img/phones/apple-iphone-xs/gold/02.webp", - "img/phones/apple-iphone-xs/gold/03.webp", - "img/phones/apple-iphone-xs/gold/04.webp" + "/img/phones/apple-iphone-xs/gold/00.webp", + "/img/phones/apple-iphone-xs/gold/01.webp", + "/img/phones/apple-iphone-xs/gold/02.webp", + "/img/phones/apple-iphone-xs/gold/03.webp", + "/img/phones/apple-iphone-xs/gold/04.webp" ], "description": [ { @@ -3033,11 +3033,11 @@ "colorsAvailable": ["spacegray", "gold"], "color": "spacegray", "images": [ - "img/phones/apple-iphone-xs/spacegray/00.webp", - "img/phones/apple-iphone-xs/spacegray/01.webp", - "img/phones/apple-iphone-xs/spacegray/02.webp", - "img/phones/apple-iphone-xs/spacegray/03.webp", - "img/phones/apple-iphone-xs/spacegray/04.webp" + "/img/phones/apple-iphone-xs/spacegray/00.webp", + "/img/phones/apple-iphone-xs/spacegray/01.webp", + "/img/phones/apple-iphone-xs/spacegray/02.webp", + "/img/phones/apple-iphone-xs/spacegray/03.webp", + "/img/phones/apple-iphone-xs/spacegray/04.webp" ], "description": [ { @@ -3081,11 +3081,11 @@ "colorsAvailable": ["spacegray", "gold", "silver"], "color": "gold", "images": [ - "img/phones/apple-iphone-xs-max/gold/00.webp", - "img/phones/apple-iphone-xs-max/gold/01.webp", - "img/phones/apple-iphone-xs-max/gold/02.webp", - "img/phones/apple-iphone-xs-max/gold/03.webp", - "img/phones/apple-iphone-xs-max/gold/04.webp" + "/img/phones/apple-iphone-xs-max/gold/00.webp", + "/img/phones/apple-iphone-xs-max/gold/01.webp", + "/img/phones/apple-iphone-xs-max/gold/02.webp", + "/img/phones/apple-iphone-xs-max/gold/03.webp", + "/img/phones/apple-iphone-xs-max/gold/04.webp" ], "description": [ { @@ -3129,11 +3129,11 @@ "colorsAvailable": ["spacegray", "gold", "silver"], "color": "silver", "images": [ - "img/phones/apple-iphone-xs-max/silver/00.webp", - "img/phones/apple-iphone-xs-max/silver/01.webp", - "img/phones/apple-iphone-xs-max/silver/02.webp", - "img/phones/apple-iphone-xs-max/silver/03.webp", - "img/phones/apple-iphone-xs-max/silver/04.webp" + "/img/phones/apple-iphone-xs-max/silver/00.webp", + "/img/phones/apple-iphone-xs-max/silver/01.webp", + "/img/phones/apple-iphone-xs-max/silver/02.webp", + "/img/phones/apple-iphone-xs-max/silver/03.webp", + "/img/phones/apple-iphone-xs-max/silver/04.webp" ], "description": [ { @@ -3177,11 +3177,11 @@ "colorsAvailable": ["spacegray", "gold", "silver"], "color": "spacegray", "images": [ - "img/phones/apple-iphone-xs-max/spacegray/00.webp", - "img/phones/apple-iphone-xs-max/spacegray/01.webp", - "img/phones/apple-iphone-xs-max/spacegray/02.webp", - "img/phones/apple-iphone-xs-max/spacegray/03.webp", - "img/phones/apple-iphone-xs-max/spacegray/04.webp" + "/img/phones/apple-iphone-xs-max/spacegray/00.webp", + "/img/phones/apple-iphone-xs-max/spacegray/01.webp", + "/img/phones/apple-iphone-xs-max/spacegray/02.webp", + "/img/phones/apple-iphone-xs-max/spacegray/03.webp", + "/img/phones/apple-iphone-xs-max/spacegray/04.webp" ], "description": [ { @@ -3225,11 +3225,11 @@ "colorsAvailable": ["spacegray", "gold", "silver"], "color": "gold", "images": [ - "img/phones/apple-iphone-xs-max/gold/00.webp", - "img/phones/apple-iphone-xs-max/gold/01.webp", - "img/phones/apple-iphone-xs-max/gold/02.webp", - "img/phones/apple-iphone-xs-max/gold/03.webp", - "img/phones/apple-iphone-xs-max/gold/04.webp" + "/img/phones/apple-iphone-xs-max/gold/00.webp", + "/img/phones/apple-iphone-xs-max/gold/01.webp", + "/img/phones/apple-iphone-xs-max/gold/02.webp", + "/img/phones/apple-iphone-xs-max/gold/03.webp", + "/img/phones/apple-iphone-xs-max/gold/04.webp" ], "description": [ { @@ -3273,11 +3273,11 @@ "colorsAvailable": ["spacegray", "gold", "silver"], "color": "silver", "images": [ - "img/phones/apple-iphone-xs-max/silver/00.webp", - "img/phones/apple-iphone-xs-max/silver/01.webp", - "img/phones/apple-iphone-xs-max/silver/02.webp", - "img/phones/apple-iphone-xs-max/silver/03.webp", - "img/phones/apple-iphone-xs-max/silver/04.webp" + "/img/phones/apple-iphone-xs-max/silver/00.webp", + "/img/phones/apple-iphone-xs-max/silver/01.webp", + "/img/phones/apple-iphone-xs-max/silver/02.webp", + "/img/phones/apple-iphone-xs-max/silver/03.webp", + "/img/phones/apple-iphone-xs-max/silver/04.webp" ], "description": [ { @@ -3321,11 +3321,11 @@ "colorsAvailable": ["spacegray", "gold", "silver"], "color": "spacegray", "images": [ - "img/phones/apple-iphone-xs-max/spacegray/00.webp", - "img/phones/apple-iphone-xs-max/spacegray/01.webp", - "img/phones/apple-iphone-xs-max/spacegray/02.webp", - "img/phones/apple-iphone-xs-max/spacegray/03.webp", - "img/phones/apple-iphone-xs-max/spacegray/04.webp" + "/img/phones/apple-iphone-xs-max/spacegray/00.webp", + "/img/phones/apple-iphone-xs-max/spacegray/01.webp", + "/img/phones/apple-iphone-xs-max/spacegray/02.webp", + "/img/phones/apple-iphone-xs-max/spacegray/03.webp", + "/img/phones/apple-iphone-xs-max/spacegray/04.webp" ], "description": [ { @@ -3368,11 +3368,11 @@ "colorsAvailable": ["midnight", "yellow", "purple"], "color": "midnight", "images": [ - "img/phones/apple-iphone-14/midnight/00.webp", - "img/phones/apple-iphone-14/midnight/01.webp", - "img/phones/apple-iphone-14/midnight/02.webp", - "img/phones/apple-iphone-14/midnight/03.webp", - "img/phones/apple-iphone-14/midnight/04.webp" + "/img/phones/apple-iphone-14/midnight/00.webp", + "/img/phones/apple-iphone-14/midnight/01.webp", + "/img/phones/apple-iphone-14/midnight/02.webp", + "/img/phones/apple-iphone-14/midnight/03.webp", + "/img/phones/apple-iphone-14/midnight/04.webp" ], "description": [ { @@ -3415,11 +3415,11 @@ "colorsAvailable": ["midnight", "yellow", "purple"], "color": "midnight", "images": [ - "img/phones/apple-iphone-14/midnight/00.webp", - "img/phones/apple-iphone-14/midnight/01.webp", - "img/phones/apple-iphone-14/midnight/02.webp", - "img/phones/apple-iphone-14/midnight/03.webp", - "img/phones/apple-iphone-14/midnight/04.webp" + "/img/phones/apple-iphone-14/midnight/00.webp", + "/img/phones/apple-iphone-14/midnight/01.webp", + "/img/phones/apple-iphone-14/midnight/02.webp", + "/img/phones/apple-iphone-14/midnight/03.webp", + "/img/phones/apple-iphone-14/midnight/04.webp" ], "description": [ { @@ -3462,11 +3462,11 @@ "colorsAvailable": ["midnight", "yellow", "purple"], "color": "midnight", "images": [ - "img/phones/apple-iphone-14/midnight/00.webp", - "img/phones/apple-iphone-14/midnight/01.webp", - "img/phones/apple-iphone-14/midnight/02.webp", - "img/phones/apple-iphone-14/midnight/03.webp", - "img/phones/apple-iphone-14/midnight/04.webp" + "/img/phones/apple-iphone-14/midnight/00.webp", + "/img/phones/apple-iphone-14/midnight/01.webp", + "/img/phones/apple-iphone-14/midnight/02.webp", + "/img/phones/apple-iphone-14/midnight/03.webp", + "/img/phones/apple-iphone-14/midnight/04.webp" ], "description": [ { @@ -3509,11 +3509,11 @@ "colorsAvailable": ["midnight", "yellow", "purple"], "color": "yellow", "images": [ - "img/phones/apple-iphone-14/yellow/00.webp", - "img/phones/apple-iphone-14/yellow/01.webp", - "img/phones/apple-iphone-14/yellow/02.webp", - "img/phones/apple-iphone-14/yellow/03.webp", - "img/phones/apple-iphone-14/yellow/04.webp" + "/img/phones/apple-iphone-14/yellow/00.webp", + "/img/phones/apple-iphone-14/yellow/01.webp", + "/img/phones/apple-iphone-14/yellow/02.webp", + "/img/phones/apple-iphone-14/yellow/03.webp", + "/img/phones/apple-iphone-14/yellow/04.webp" ], "description": [ { @@ -3556,11 +3556,11 @@ "colorsAvailable": ["midnight", "yellow", "purple"], "color": "yellow", "images": [ - "img/phones/apple-iphone-14/yellow/00.webp", - "img/phones/apple-iphone-14/yellow/01.webp", - "img/phones/apple-iphone-14/yellow/02.webp", - "img/phones/apple-iphone-14/yellow/03.webp", - "img/phones/apple-iphone-14/yellow/04.webp" + "/img/phones/apple-iphone-14/yellow/00.webp", + "/img/phones/apple-iphone-14/yellow/01.webp", + "/img/phones/apple-iphone-14/yellow/02.webp", + "/img/phones/apple-iphone-14/yellow/03.webp", + "/img/phones/apple-iphone-14/yellow/04.webp" ], "description": [ { @@ -3603,11 +3603,11 @@ "colorsAvailable": ["midnight", "yellow", "purple"], "color": "yellow", "images": [ - "img/phones/apple-iphone-14/yellow/00.webp", - "img/phones/apple-iphone-14/yellow/01.webp", - "img/phones/apple-iphone-14/yellow/02.webp", - "img/phones/apple-iphone-14/yellow/03.webp", - "img/phones/apple-iphone-14/yellow/04.webp" + "/img/phones/apple-iphone-14/yellow/00.webp", + "/img/phones/apple-iphone-14/yellow/01.webp", + "/img/phones/apple-iphone-14/yellow/02.webp", + "/img/phones/apple-iphone-14/yellow/03.webp", + "/img/phones/apple-iphone-14/yellow/04.webp" ], "description": [ { @@ -3650,11 +3650,11 @@ "colorsAvailable": ["midnight", "yellow", "purple"], "color": "purple", "images": [ - "img/phones/apple-iphone-14/purple/00.webp", - "img/phones/apple-iphone-14/purple/01.webp", - "img/phones/apple-iphone-14/purple/02.webp", - "img/phones/apple-iphone-14/purple/03.webp", - "img/phones/apple-iphone-14/purple/04.webp" + "/img/phones/apple-iphone-14/purple/00.webp", + "/img/phones/apple-iphone-14/purple/01.webp", + "/img/phones/apple-iphone-14/purple/02.webp", + "/img/phones/apple-iphone-14/purple/03.webp", + "/img/phones/apple-iphone-14/purple/04.webp" ], "description": [ { @@ -3697,11 +3697,11 @@ "colorsAvailable": ["midnight", "yellow", "purple"], "color": "purple", "images": [ - "img/phones/apple-iphone-14/purple/00.webp", - "img/phones/apple-iphone-14/purple/01.webp", - "img/phones/apple-iphone-14/purple/02.webp", - "img/phones/apple-iphone-14/purple/03.webp", - "img/phones/apple-iphone-14/purple/04.webp" + "/img/phones/apple-iphone-14/purple/00.webp", + "/img/phones/apple-iphone-14/purple/01.webp", + "/img/phones/apple-iphone-14/purple/02.webp", + "/img/phones/apple-iphone-14/purple/03.webp", + "/img/phones/apple-iphone-14/purple/04.webp" ], "description": [ { @@ -3744,11 +3744,11 @@ "colorsAvailable": ["midnight", "yellow", "purple"], "color": "purple", "images": [ - "img/phones/apple-iphone-14/purple/00.webp", - "img/phones/apple-iphone-14/purple/01.webp", - "img/phones/apple-iphone-14/purple/02.webp", - "img/phones/apple-iphone-14/purple/03.webp", - "img/phones/apple-iphone-14/purple/04.webp" + "/img/phones/apple-iphone-14/purple/00.webp", + "/img/phones/apple-iphone-14/purple/01.webp", + "/img/phones/apple-iphone-14/purple/02.webp", + "/img/phones/apple-iphone-14/purple/03.webp", + "/img/phones/apple-iphone-14/purple/04.webp" ], "description": [ { @@ -3791,11 +3791,11 @@ "colorsAvailable": ["spaceblack", "gold"], "color": "spaceblack", "images": [ - "img/phones/apple-iphone-14-pro/spaceblack/00.webp", - "img/phones/apple-iphone-14-pro/spaceblack/01.webp", - "img/phones/apple-iphone-14-pro/spaceblack/02.webp", - "img/phones/apple-iphone-14-pro/spaceblack/03.webp", - "img/phones/apple-iphone-14-pro/spaceblack/04.webp" + "/img/phones/apple-iphone-14-pro/spaceblack/00.webp", + "/img/phones/apple-iphone-14-pro/spaceblack/01.webp", + "/img/phones/apple-iphone-14-pro/spaceblack/02.webp", + "/img/phones/apple-iphone-14-pro/spaceblack/03.webp", + "/img/phones/apple-iphone-14-pro/spaceblack/04.webp" ], "description": [ { @@ -3838,11 +3838,11 @@ "colorsAvailable": ["spaceblack", "gold"], "color": "spaceblack", "images": [ - "img/phones/apple-iphone-14-pro/spaceblack/00.webp", - "img/phones/apple-iphone-14-pro/spaceblack/01.webp", - "img/phones/apple-iphone-14-pro/spaceblack/02.webp", - "img/phones/apple-iphone-14-pro/spaceblack/03.webp", - "img/phones/apple-iphone-14-pro/spaceblack/04.webp" + "/img/phones/apple-iphone-14-pro/spaceblack/00.webp", + "/img/phones/apple-iphone-14-pro/spaceblack/01.webp", + "/img/phones/apple-iphone-14-pro/spaceblack/02.webp", + "/img/phones/apple-iphone-14-pro/spaceblack/03.webp", + "/img/phones/apple-iphone-14-pro/spaceblack/04.webp" ], "description": [ { @@ -3885,11 +3885,11 @@ "colorsAvailable": ["spaceblack", "gold"], "color": "spaceblack", "images": [ - "img/phones/apple-iphone-14-pro/spaceblack/00.webp", - "img/phones/apple-iphone-14-pro/spaceblack/01.webp", - "img/phones/apple-iphone-14-pro/spaceblack/02.webp", - "img/phones/apple-iphone-14-pro/spaceblack/03.webp", - "img/phones/apple-iphone-14-pro/spaceblack/04.webp" + "/img/phones/apple-iphone-14-pro/spaceblack/00.webp", + "/img/phones/apple-iphone-14-pro/spaceblack/01.webp", + "/img/phones/apple-iphone-14-pro/spaceblack/02.webp", + "/img/phones/apple-iphone-14-pro/spaceblack/03.webp", + "/img/phones/apple-iphone-14-pro/spaceblack/04.webp" ], "description": [ { @@ -3932,11 +3932,11 @@ "colorsAvailable": ["spaceblack", "gold"], "color": "spaceblack", "images": [ - "img/phones/apple-iphone-14-pro/spaceblack/00.webp", - "img/phones/apple-iphone-14-pro/spaceblack/01.webp", - "img/phones/apple-iphone-14-pro/spaceblack/02.webp", - "img/phones/apple-iphone-14-pro/spaceblack/03.webp", - "img/phones/apple-iphone-14-pro/spaceblack/04.webp" + "/img/phones/apple-iphone-14-pro/spaceblack/00.webp", + "/img/phones/apple-iphone-14-pro/spaceblack/01.webp", + "/img/phones/apple-iphone-14-pro/spaceblack/02.webp", + "/img/phones/apple-iphone-14-pro/spaceblack/03.webp", + "/img/phones/apple-iphone-14-pro/spaceblack/04.webp" ], "description": [ { @@ -3979,10 +3979,10 @@ "colorsAvailable": ["black", "white", "purple", "red"], "color": "black", "images": [ - "img/phones/apple-iphone-12/black/00.webp", - "img/phones/apple-iphone-12/black/01.webp", - "img/phones/apple-iphone-12/black/02.webp", - "img/phones/apple-iphone-12/black/03.webp" + "/img/phones/apple-iphone-12/black/00.webp", + "/img/phones/apple-iphone-12/black/01.webp", + "/img/phones/apple-iphone-12/black/02.webp", + "/img/phones/apple-iphone-12/black/03.webp" ], "description": [ { @@ -4024,10 +4024,10 @@ "colorsAvailable": ["black", "white", "purple", "red"], "color": "black", "images": [ - "img/phones/apple-iphone-12/black/00.webp", - "img/phones/apple-iphone-12/black/01.webp", - "img/phones/apple-iphone-12/black/02.webp", - "img/phones/apple-iphone-12/black/03.webp" + "/img/phones/apple-iphone-12/black/00.webp", + "/img/phones/apple-iphone-12/black/01.webp", + "/img/phones/apple-iphone-12/black/02.webp", + "/img/phones/apple-iphone-12/black/03.webp" ], "description": [ { @@ -4069,10 +4069,10 @@ "colorsAvailable": ["black", "white", "purple", "red"], "color": "black", "images": [ - "img/phones/apple-iphone-12/black/00.webp", - "img/phones/apple-iphone-12/black/01.webp", - "img/phones/apple-iphone-12/black/02.webp", - "img/phones/apple-iphone-12/black/03.webp" + "/img/phones/apple-iphone-12/black/00.webp", + "/img/phones/apple-iphone-12/black/01.webp", + "/img/phones/apple-iphone-12/black/02.webp", + "/img/phones/apple-iphone-12/black/03.webp" ], "description": [ { @@ -4114,10 +4114,10 @@ "colorsAvailable": ["black", "white", "purple", "red"], "color": "purple", "images": [ - "img/phones/apple-iphone-12/purple/00.webp", - "img/phones/apple-iphone-12/purple/01.webp", - "img/phones/apple-iphone-12/purple/02.webp", - "img/phones/apple-iphone-12/purple/03.webp" + "/img/phones/apple-iphone-12/purple/00.webp", + "/img/phones/apple-iphone-12/purple/01.webp", + "/img/phones/apple-iphone-12/purple/02.webp", + "/img/phones/apple-iphone-12/purple/03.webp" ], "description": [ { @@ -4159,10 +4159,10 @@ "colorsAvailable": ["black", "white", "purple", "red"], "color": "purple", "images": [ - "img/phones/apple-iphone-12/purple/00.webp", - "img/phones/apple-iphone-12/purple/01.webp", - "img/phones/apple-iphone-12/purple/02.webp", - "img/phones/apple-iphone-12/purple/03.webp" + "/img/phones/apple-iphone-12/purple/00.webp", + "/img/phones/apple-iphone-12/purple/01.webp", + "/img/phones/apple-iphone-12/purple/02.webp", + "/img/phones/apple-iphone-12/purple/03.webp" ], "description": [ { @@ -4204,10 +4204,10 @@ "colorsAvailable": ["black", "white", "purple", "red"], "color": "purple", "images": [ - "img/phones/apple-iphone-12/purple/00.webp", - "img/phones/apple-iphone-12/purple/01.webp", - "img/phones/apple-iphone-12/purple/02.webp", - "img/phones/apple-iphone-12/purple/03.webp" + "/img/phones/apple-iphone-12/purple/00.webp", + "/img/phones/apple-iphone-12/purple/01.webp", + "/img/phones/apple-iphone-12/purple/02.webp", + "/img/phones/apple-iphone-12/purple/03.webp" ], "description": [ { @@ -4249,10 +4249,10 @@ "colorsAvailable": ["black", "white", "purple", "red"], "color": "red", "images": [ - "img/phones/apple-iphone-12/red/00.webp", - "img/phones/apple-iphone-12/red/01.webp", - "img/phones/apple-iphone-12/red/02.webp", - "img/phones/apple-iphone-12/red/03.webp" + "/img/phones/apple-iphone-12/red/00.webp", + "/img/phones/apple-iphone-12/red/01.webp", + "/img/phones/apple-iphone-12/red/02.webp", + "/img/phones/apple-iphone-12/red/03.webp" ], "description": [ { @@ -4294,10 +4294,10 @@ "colorsAvailable": ["black", "white", "purple", "red"], "color": "red", "images": [ - "img/phones/apple-iphone-12/red/00.webp", - "img/phones/apple-iphone-12/red/01.webp", - "img/phones/apple-iphone-12/red/02.webp", - "img/phones/apple-iphone-12/red/03.webp" + "/img/phones/apple-iphone-12/red/00.webp", + "/img/phones/apple-iphone-12/red/01.webp", + "/img/phones/apple-iphone-12/red/02.webp", + "/img/phones/apple-iphone-12/red/03.webp" ], "description": [ { @@ -4339,10 +4339,10 @@ "colorsAvailable": ["black", "white", "purple", "red"], "color": "red", "images": [ - "img/phones/apple-iphone-12/red/00.webp", - "img/phones/apple-iphone-12/red/01.webp", - "img/phones/apple-iphone-12/red/02.webp", - "img/phones/apple-iphone-12/red/03.webp" + "/img/phones/apple-iphone-12/red/00.webp", + "/img/phones/apple-iphone-12/red/01.webp", + "/img/phones/apple-iphone-12/red/02.webp", + "/img/phones/apple-iphone-12/red/03.webp" ], "description": [ { @@ -4384,10 +4384,10 @@ "colorsAvailable": ["black", "white", "purple", "red"], "color": "white", "images": [ - "img/phones/apple-iphone-12/white/00.webp", - "img/phones/apple-iphone-12/white/01.webp", - "img/phones/apple-iphone-12/white/02.webp", - "img/phones/apple-iphone-12/white/03.webp" + "/img/phones/apple-iphone-12/white/00.webp", + "/img/phones/apple-iphone-12/white/01.webp", + "/img/phones/apple-iphone-12/white/02.webp", + "/img/phones/apple-iphone-12/white/03.webp" ], "description": [ { @@ -4429,10 +4429,10 @@ "colorsAvailable": ["black", "white", "purple", "red"], "color": "white", "images": [ - "img/phones/apple-iphone-12/white/00.webp", - "img/phones/apple-iphone-12/white/01.webp", - "img/phones/apple-iphone-12/white/02.webp", - "img/phones/apple-iphone-12/white/03.webp" + "/img/phones/apple-iphone-12/white/00.webp", + "/img/phones/apple-iphone-12/white/01.webp", + "/img/phones/apple-iphone-12/white/02.webp", + "/img/phones/apple-iphone-12/white/03.webp" ], "description": [ { @@ -4474,10 +4474,10 @@ "colorsAvailable": ["black", "white", "purple", "red"], "color": "white", "images": [ - "img/phones/apple-iphone-12/white/00.webp", - "img/phones/apple-iphone-12/white/01.webp", - "img/phones/apple-iphone-12/white/02.webp", - "img/phones/apple-iphone-12/white/03.webp" + "/img/phones/apple-iphone-12/white/00.webp", + "/img/phones/apple-iphone-12/white/01.webp", + "/img/phones/apple-iphone-12/white/02.webp", + "/img/phones/apple-iphone-12/white/03.webp" ], "description": [ { @@ -4519,10 +4519,10 @@ "colorsAvailable": ["midnight", "white", "blue", "pink"], "color": "midnight", "images": [ - "img/phones/apple-iphone-13-mini/midnight/00.webp", - "img/phones/apple-iphone-13-mini/midnight/01.webp", - "img/phones/apple-iphone-13-mini/midnight/02.webp", - "img/phones/apple-iphone-13-mini/midnight/03.webp" + "/img/phones/apple-iphone-13-mini/midnight/00.webp", + "/img/phones/apple-iphone-13-mini/midnight/01.webp", + "/img/phones/apple-iphone-13-mini/midnight/02.webp", + "/img/phones/apple-iphone-13-mini/midnight/03.webp" ], "description": [ { @@ -4564,10 +4564,10 @@ "colorsAvailable": ["midnight", "white", "blue", "pink"], "color": "midnight", "images": [ - "img/phones/apple-iphone-13-mini/midnight/00.webp", - "img/phones/apple-iphone-13-mini/midnight/01.webp", - "img/phones/apple-iphone-13-mini/midnight/02.webp", - "img/phones/apple-iphone-13-mini/midnight/03.webp" + "/img/phones/apple-iphone-13-mini/midnight/00.webp", + "/img/phones/apple-iphone-13-mini/midnight/01.webp", + "/img/phones/apple-iphone-13-mini/midnight/02.webp", + "/img/phones/apple-iphone-13-mini/midnight/03.webp" ], "description": [ { @@ -4609,10 +4609,10 @@ "colorsAvailable": ["midnight", "white", "blue", "pink"], "color": "midnight", "images": [ - "img/phones/apple-iphone-13-mini/midnight/00.webp", - "img/phones/apple-iphone-13-mini/midnight/01.webp", - "img/phones/apple-iphone-13-mini/midnight/02.webp", - "img/phones/apple-iphone-13-mini/midnight/03.webp" + "/img/phones/apple-iphone-13-mini/midnight/00.webp", + "/img/phones/apple-iphone-13-mini/midnight/01.webp", + "/img/phones/apple-iphone-13-mini/midnight/02.webp", + "/img/phones/apple-iphone-13-mini/midnight/03.webp" ], "description": [ { @@ -4654,10 +4654,10 @@ "colorsAvailable": ["midnight", "white", "blue", "pink"], "color": "pink", "images": [ - "img/phones/apple-iphone-13-mini/pink/00.webp", - "img/phones/apple-iphone-13-mini/pink/01.webp", - "img/phones/apple-iphone-13-mini/pink/02.webp", - "img/phones/apple-iphone-13-mini/pink/03.webp" + "/img/phones/apple-iphone-13-mini/pink/00.webp", + "/img/phones/apple-iphone-13-mini/pink/01.webp", + "/img/phones/apple-iphone-13-mini/pink/02.webp", + "/img/phones/apple-iphone-13-mini/pink/03.webp" ], "description": [ { @@ -4699,10 +4699,10 @@ "colorsAvailable": ["midnight", "white", "blue", "pink"], "color": "pink", "images": [ - "img/phones/apple-iphone-13-mini/pink/00.webp", - "img/phones/apple-iphone-13-mini/pink/01.webp", - "img/phones/apple-iphone-13-mini/pink/02.webp", - "img/phones/apple-iphone-13-mini/pink/03.webp" + "/img/phones/apple-iphone-13-mini/pink/00.webp", + "/img/phones/apple-iphone-13-mini/pink/01.webp", + "/img/phones/apple-iphone-13-mini/pink/02.webp", + "/img/phones/apple-iphone-13-mini/pink/03.webp" ], "description": [ { @@ -4744,10 +4744,10 @@ "colorsAvailable": ["midnight", "white", "blue", "pink"], "color": "pink", "images": [ - "img/phones/apple-iphone-13-mini/pink/00.webp", - "img/phones/apple-iphone-13-mini/pink/01.webp", - "img/phones/apple-iphone-13-mini/pink/02.webp", - "img/phones/apple-iphone-13-mini/pink/03.webp" + "/img/phones/apple-iphone-13-mini/pink/00.webp", + "/img/phones/apple-iphone-13-mini/pink/01.webp", + "/img/phones/apple-iphone-13-mini/pink/02.webp", + "/img/phones/apple-iphone-13-mini/pink/03.webp" ], "description": [ { @@ -4789,10 +4789,10 @@ "colorsAvailable": ["midnight", "white", "blue", "pink"], "color": "white", "images": [ - "img/phones/apple-iphone-13-mini/white/00.webp", - "img/phones/apple-iphone-13-mini/white/01.webp", - "img/phones/apple-iphone-13-mini/white/02.webp", - "img/phones/apple-iphone-13-mini/white/03.webp" + "/img/phones/apple-iphone-13-mini/white/00.webp", + "/img/phones/apple-iphone-13-mini/white/01.webp", + "/img/phones/apple-iphone-13-mini/white/02.webp", + "/img/phones/apple-iphone-13-mini/white/03.webp" ], "description": [ { @@ -4834,10 +4834,10 @@ "colorsAvailable": ["midnight", "white", "blue", "pink"], "color": "white", "images": [ - "img/phones/apple-iphone-13-mini/white/00.webp", - "img/phones/apple-iphone-13-mini/white/01.webp", - "img/phones/apple-iphone-13-mini/white/02.webp", - "img/phones/apple-iphone-13-mini/white/03.webp" + "/img/phones/apple-iphone-13-mini/white/00.webp", + "/img/phones/apple-iphone-13-mini/white/01.webp", + "/img/phones/apple-iphone-13-mini/white/02.webp", + "/img/phones/apple-iphone-13-mini/white/03.webp" ], "description": [ { @@ -4879,10 +4879,10 @@ "colorsAvailable": ["midnight", "white", "blue", "pink"], "color": "white", "images": [ - "img/phones/apple-iphone-13-mini/white/00.webp", - "img/phones/apple-iphone-13-mini/white/01.webp", - "img/phones/apple-iphone-13-mini/white/02.webp", - "img/phones/apple-iphone-13-mini/white/03.webp" + "/img/phones/apple-iphone-13-mini/white/00.webp", + "/img/phones/apple-iphone-13-mini/white/01.webp", + "/img/phones/apple-iphone-13-mini/white/02.webp", + "/img/phones/apple-iphone-13-mini/white/03.webp" ], "description": [ { @@ -4924,10 +4924,10 @@ "colorsAvailable": ["midnight", "white", "blue", "pink"], "color": "blue", "images": [ - "img/phones/apple-iphone-13-mini/blue/00.webp", - "img/phones/apple-iphone-13-mini/blue/01.webp", - "img/phones/apple-iphone-13-mini/blue/02.webp", - "img/phones/apple-iphone-13-mini/blue/03.webp" + "/img/phones/apple-iphone-13-mini/blue/00.webp", + "/img/phones/apple-iphone-13-mini/blue/01.webp", + "/img/phones/apple-iphone-13-mini/blue/02.webp", + "/img/phones/apple-iphone-13-mini/blue/03.webp" ], "description": [ { @@ -4969,10 +4969,10 @@ "colorsAvailable": ["midnight", "white", "blue", "pink"], "color": "blue", "images": [ - "img/phones/apple-iphone-13-mini/blue/00.webp", - "img/phones/apple-iphone-13-mini/blue/01.webp", - "img/phones/apple-iphone-13-mini/blue/02.webp", - "img/phones/apple-iphone-13-mini/blue/03.webp" + "/img/phones/apple-iphone-13-mini/blue/00.webp", + "/img/phones/apple-iphone-13-mini/blue/01.webp", + "/img/phones/apple-iphone-13-mini/blue/02.webp", + "/img/phones/apple-iphone-13-mini/blue/03.webp" ], "description": [ { @@ -5014,10 +5014,10 @@ "colorsAvailable": ["midnight", "white", "blue", "pink"], "color": "blue", "images": [ - "img/phones/apple-iphone-13-mini/blue/00.webp", - "img/phones/apple-iphone-13-mini/blue/01.webp", - "img/phones/apple-iphone-13-mini/blue/02.webp", - "img/phones/apple-iphone-13-mini/blue/03.webp" + "/img/phones/apple-iphone-13-mini/blue/00.webp", + "/img/phones/apple-iphone-13-mini/blue/01.webp", + "/img/phones/apple-iphone-13-mini/blue/02.webp", + "/img/phones/apple-iphone-13-mini/blue/03.webp" ], "description": [ { @@ -5059,10 +5059,10 @@ "colorsAvailable": ["graphite", "gold", "sierrablue"], "color": "sierrablue", "images": [ - "img/phones/apple-iphone-13-pro-max/sierrablue/00.webp", - "img/phones/apple-iphone-13-pro-max/sierrablue/01.webp", - "img/phones/apple-iphone-13-pro-max/sierrablue/02.webp", - "img/phones/apple-iphone-13-pro-max/sierrablue/03.webp" + "/img/phones/apple-iphone-13-pro-max/sierrablue/00.webp", + "/img/phones/apple-iphone-13-pro-max/sierrablue/01.webp", + "/img/phones/apple-iphone-13-pro-max/sierrablue/02.webp", + "/img/phones/apple-iphone-13-pro-max/sierrablue/03.webp" ], "description": [ { @@ -5110,10 +5110,10 @@ "colorsAvailable": ["graphite", "gold", "sierrablue"], "color": "sierrablue", "images": [ - "img/phones/apple-iphone-13-pro-max/sierrablue/00.webp", - "img/phones/apple-iphone-13-pro-max/sierrablue/01.webp", - "img/phones/apple-iphone-13-pro-max/sierrablue/02.webp", - "img/phones/apple-iphone-13-pro-max/sierrablue/03.webp" + "/img/phones/apple-iphone-13-pro-max/sierrablue/00.webp", + "/img/phones/apple-iphone-13-pro-max/sierrablue/01.webp", + "/img/phones/apple-iphone-13-pro-max/sierrablue/02.webp", + "/img/phones/apple-iphone-13-pro-max/sierrablue/03.webp" ], "description": [ { @@ -5161,10 +5161,10 @@ "colorsAvailable": ["graphite", "gold", "sierrablue"], "color": "sierrablue", "images": [ - "img/phones/apple-iphone-13-pro-max/sierrablue/00.webp", - "img/phones/apple-iphone-13-pro-max/sierrablue/01.webp", - "img/phones/apple-iphone-13-pro-max/sierrablue/02.webp", - "img/phones/apple-iphone-13-pro-max/sierrablue/03.webp" + "/img/phones/apple-iphone-13-pro-max/sierrablue/00.webp", + "/img/phones/apple-iphone-13-pro-max/sierrablue/01.webp", + "/img/phones/apple-iphone-13-pro-max/sierrablue/02.webp", + "/img/phones/apple-iphone-13-pro-max/sierrablue/03.webp" ], "description": [ { @@ -5212,10 +5212,10 @@ "colorsAvailable": ["graphite", "gold", "sierrablue"], "color": "sierrablue", "images": [ - "img/phones/apple-iphone-13-pro-max/sierrablue/00.webp", - "img/phones/apple-iphone-13-pro-max/sierrablue/01.webp", - "img/phones/apple-iphone-13-pro-max/sierrablue/02.webp", - "img/phones/apple-iphone-13-pro-max/sierrablue/03.webp" + "/img/phones/apple-iphone-13-pro-max/sierrablue/00.webp", + "/img/phones/apple-iphone-13-pro-max/sierrablue/01.webp", + "/img/phones/apple-iphone-13-pro-max/sierrablue/02.webp", + "/img/phones/apple-iphone-13-pro-max/sierrablue/03.webp" ], "description": [ { @@ -5258,10 +5258,10 @@ "colorsAvailable": ["graphite", "gold", "sierrablue"], "color": "graphite", "images": [ - "img/phones/apple-iphone-13-pro-max/graphite/00.webp", - "img/phones/apple-iphone-13-pro-max/graphite/01.webp", - "img/phones/apple-iphone-13-pro-max/graphite/02.webp", - "img/phones/apple-iphone-13-pro-max/graphite/03.webp" + "/img/phones/apple-iphone-13-pro-max/graphite/00.webp", + "/img/phones/apple-iphone-13-pro-max/graphite/01.webp", + "/img/phones/apple-iphone-13-pro-max/graphite/02.webp", + "/img/phones/apple-iphone-13-pro-max/graphite/03.webp" ], "description": [ { @@ -5309,10 +5309,10 @@ "colorsAvailable": ["graphite", "gold", "sierrablue"], "color": "graphite", "images": [ - "img/phones/apple-iphone-13-pro-max/graphite/00.webp", - "img/phones/apple-iphone-13-pro-max/graphite/01.webp", - "img/phones/apple-iphone-13-pro-max/graphite/02.webp", - "img/phones/apple-iphone-13-pro-max/graphite/03.webp" + "/img/phones/apple-iphone-13-pro-max/graphite/00.webp", + "/img/phones/apple-iphone-13-pro-max/graphite/01.webp", + "/img/phones/apple-iphone-13-pro-max/graphite/02.webp", + "/img/phones/apple-iphone-13-pro-max/graphite/03.webp" ], "description": [ { @@ -5360,10 +5360,10 @@ "colorsAvailable": ["graphite", "gold", "sierrablue"], "color": "graphite", "images": [ - "img/phones/apple-iphone-13-pro-max/graphite/00.webp", - "img/phones/apple-iphone-13-pro-max/graphite/01.webp", - "img/phones/apple-iphone-13-pro-max/graphite/02.webp", - "img/phones/apple-iphone-13-pro-max/graphite/03.webp" + "/img/phones/apple-iphone-13-pro-max/graphite/00.webp", + "/img/phones/apple-iphone-13-pro-max/graphite/01.webp", + "/img/phones/apple-iphone-13-pro-max/graphite/02.webp", + "/img/phones/apple-iphone-13-pro-max/graphite/03.webp" ], "description": [ { @@ -5411,10 +5411,10 @@ "colorsAvailable": ["graphite", "gold", "sierrablue"], "color": "graphite", "images": [ - "img/phones/apple-iphone-13-pro-max/graphite/00.webp", - "img/phones/apple-iphone-13-pro-max/graphite/01.webp", - "img/phones/apple-iphone-13-pro-max/graphite/02.webp", - "img/phones/apple-iphone-13-pro-max/graphite/03.webp" + "/img/phones/apple-iphone-13-pro-max/graphite/00.webp", + "/img/phones/apple-iphone-13-pro-max/graphite/01.webp", + "/img/phones/apple-iphone-13-pro-max/graphite/02.webp", + "/img/phones/apple-iphone-13-pro-max/graphite/03.webp" ], "description": [ { @@ -5457,10 +5457,10 @@ "colorsAvailable": ["graphite", "gold", "sierrablue"], "color": "gold", "images": [ - "img/phones/apple-iphone-13-pro-max/gold/00.webp", - "img/phones/apple-iphone-13-pro-max/gold/01.webp", - "img/phones/apple-iphone-13-pro-max/gold/02.webp", - "img/phones/apple-iphone-13-pro-max/gold/03.webp" + "/img/phones/apple-iphone-13-pro-max/gold/00.webp", + "/img/phones/apple-iphone-13-pro-max/gold/01.webp", + "/img/phones/apple-iphone-13-pro-max/gold/02.webp", + "/img/phones/apple-iphone-13-pro-max/gold/03.webp" ], "description": [ { @@ -5508,10 +5508,10 @@ "colorsAvailable": ["graphite", "gold", "sierrablue"], "color": "gold", "images": [ - "img/phones/apple-iphone-13-pro-max/gold/00.webp", - "img/phones/apple-iphone-13-pro-max/gold/01.webp", - "img/phones/apple-iphone-13-pro-max/gold/02.webp", - "img/phones/apple-iphone-13-pro-max/gold/03.webp" + "/img/phones/apple-iphone-13-pro-max/gold/00.webp", + "/img/phones/apple-iphone-13-pro-max/gold/01.webp", + "/img/phones/apple-iphone-13-pro-max/gold/02.webp", + "/img/phones/apple-iphone-13-pro-max/gold/03.webp" ], "description": [ { @@ -5559,10 +5559,10 @@ "colorsAvailable": ["graphite", "gold", "sierrablue"], "color": "gold", "images": [ - "img/phones/apple-iphone-13-pro-max/gold/00.webp", - "img/phones/apple-iphone-13-pro-max/gold/01.webp", - "img/phones/apple-iphone-13-pro-max/gold/02.webp", - "img/phones/apple-iphone-13-pro-max/gold/03.webp" + "/img/phones/apple-iphone-13-pro-max/gold/00.webp", + "/img/phones/apple-iphone-13-pro-max/gold/01.webp", + "/img/phones/apple-iphone-13-pro-max/gold/02.webp", + "/img/phones/apple-iphone-13-pro-max/gold/03.webp" ], "description": [ { @@ -5610,10 +5610,10 @@ "colorsAvailable": ["graphite", "gold", "sierrablue"], "color": "gold", "images": [ - "img/phones/apple-iphone-13-pro-max/gold/00.webp", - "img/phones/apple-iphone-13-pro-max/gold/01.webp", - "img/phones/apple-iphone-13-pro-max/gold/02.webp", - "img/phones/apple-iphone-13-pro-max/gold/03.webp" + "/img/phones/apple-iphone-13-pro-max/gold/00.webp", + "/img/phones/apple-iphone-13-pro-max/gold/01.webp", + "/img/phones/apple-iphone-13-pro-max/gold/02.webp", + "/img/phones/apple-iphone-13-pro-max/gold/03.webp" ], "description": [ { @@ -5656,11 +5656,11 @@ "colorsAvailable": ["spaceblack", "gold"], "color": "gold", "images": [ - "img/phones/apple-iphone-14-pro/gold/00.webp", - "img/phones/apple-iphone-14-pro/gold/01.webp", - "img/phones/apple-iphone-14-pro/gold/02.webp", - "img/phones/apple-iphone-14-pro/gold/03.webp", - "img/phones/apple-iphone-14-pro/gold/04.webp" + "/img/phones/apple-iphone-14-pro/gold/00.webp", + "/img/phones/apple-iphone-14-pro/gold/01.webp", + "/img/phones/apple-iphone-14-pro/gold/02.webp", + "/img/phones/apple-iphone-14-pro/gold/03.webp", + "/img/phones/apple-iphone-14-pro/gold/04.webp" ], "description": [ { @@ -5703,11 +5703,11 @@ "colorsAvailable": ["spaceblack", "gold"], "color": "gold", "images": [ - "img/phones/apple-iphone-14-pro/gold/00.webp", - "img/phones/apple-iphone-14-pro/gold/01.webp", - "img/phones/apple-iphone-14-pro/gold/02.webp", - "img/phones/apple-iphone-14-pro/gold/03.webp", - "img/phones/apple-iphone-14-pro/gold/04.webp" + "/img/phones/apple-iphone-14-pro/gold/00.webp", + "/img/phones/apple-iphone-14-pro/gold/01.webp", + "/img/phones/apple-iphone-14-pro/gold/02.webp", + "/img/phones/apple-iphone-14-pro/gold/03.webp", + "/img/phones/apple-iphone-14-pro/gold/04.webp" ], "description": [ { @@ -5750,11 +5750,11 @@ "colorsAvailable": ["spaceblack", "gold"], "color": "gold", "images": [ - "img/phones/apple-iphone-14-pro/gold/00.webp", - "img/phones/apple-iphone-14-pro/gold/01.webp", - "img/phones/apple-iphone-14-pro/gold/02.webp", - "img/phones/apple-iphone-14-pro/gold/03.webp", - "img/phones/apple-iphone-14-pro/gold/04.webp" + "/img/phones/apple-iphone-14-pro/gold/00.webp", + "/img/phones/apple-iphone-14-pro/gold/01.webp", + "/img/phones/apple-iphone-14-pro/gold/02.webp", + "/img/phones/apple-iphone-14-pro/gold/03.webp", + "/img/phones/apple-iphone-14-pro/gold/04.webp" ], "description": [ { @@ -5797,11 +5797,11 @@ "colorsAvailable": ["spaceblack", "gold"], "color": "gold", "images": [ - "img/phones/apple-iphone-14-pro/gold/00.webp", - "img/phones/apple-iphone-14-pro/gold/01.webp", - "img/phones/apple-iphone-14-pro/gold/02.webp", - "img/phones/apple-iphone-14-pro/gold/03.webp", - "img/phones/apple-iphone-14-pro/gold/04.webp" + "/img/phones/apple-iphone-14-pro/gold/00.webp", + "/img/phones/apple-iphone-14-pro/gold/01.webp", + "/img/phones/apple-iphone-14-pro/gold/02.webp", + "/img/phones/apple-iphone-14-pro/gold/03.webp", + "/img/phones/apple-iphone-14-pro/gold/04.webp" ], "description": [ { diff --git a/public/api/products.json b/public/api/products.json index 41ecb5e5a6f..b9316e0ccf8 100644 --- a/public/api/products.json +++ b/public/api/products.json @@ -11,7 +11,7 @@ "color": "black", "ram": "2GB", "year": 2016, - "image": "img/phones/apple-iphone-7/black/00.webp" + "image": "/img/phones/apple-iphone-7/black/00.webp" }, { "id": 2, @@ -25,7 +25,7 @@ "color": "black", "ram": "3GB", "year": 2016, - "image": "img/phones/apple-iphone-7-plus/black/00.webp" + "image": "/img/phones/apple-iphone-7-plus/black/00.webp" }, { "id": 3, @@ -39,7 +39,7 @@ "color": "gold", "ram": "2GB", "year": 2017, - "image": "img/phones/apple-iphone-8/gold/00.webp" + "image": "/img/phones/apple-iphone-8/gold/00.webp" }, { "id": 4, @@ -53,7 +53,7 @@ "color": "black", "ram": "4GB", "year": 2019, - "image": "img/phones/apple-iphone-11/black/00.webp" + "image": "/img/phones/apple-iphone-11/black/00.webp" }, { "id": 5, @@ -67,7 +67,7 @@ "color": "yellow", "ram": "4GB", "year": 2019, - "image": "img/phones/apple-iphone-11/yellow/00.webp" + "image": "/img/phones/apple-iphone-11/yellow/00.webp" }, { "id": 6, @@ -81,7 +81,7 @@ "color": "green", "ram": "4GB", "year": 2019, - "image": "img/phones/apple-iphone-11/green/00.webp" + "image": "/img/phones/apple-iphone-11/green/00.webp" }, { "id": 7, @@ -95,7 +95,7 @@ "color": "gold", "ram": "4GB", "year": 2019, - "image": "img/phones/apple-iphone-11-pro/gold/00.webp" + "image": "/img/phones/apple-iphone-11-pro/gold/00.webp" }, { "id": 8, @@ -109,7 +109,7 @@ "color": "midnightgreen", "ram": "4GB", "year": 2019, - "image": "img/phones/apple-iphone-11-pro/midnightgreen/00.webp" + "image": "/img/phones/apple-iphone-11-pro/midnightgreen/00.webp" }, { "id": 9, @@ -123,7 +123,7 @@ "color": "silver", "ram": "4GB", "year": 2019, - "image": "img/phones/apple-iphone-11-pro/silver/00.webp" + "image": "/img/phones/apple-iphone-11-pro/silver/00.webp" }, { "id": 10, @@ -137,7 +137,7 @@ "color": "spacegray", "ram": "4GB", "year": 2019, - "image": "img/phones/apple-iphone-11-pro-max/spacegray/00.webp" + "image": "/img/phones/apple-iphone-11-pro-max/spacegray/00.webp" }, { "id": 11, @@ -151,7 +151,7 @@ "color": "gold", "ram": "4GB", "year": 2019, - "image": "img/phones/apple-iphone-11-pro-max/gold/00.webp" + "image": "/img/phones/apple-iphone-11-pro-max/gold/00.webp" }, { "id": 12, @@ -165,7 +165,7 @@ "color": "spacegray", "ram": "4GB", "year": 2019, - "image": "img/phones/apple-iphone-11-pro-max/spacegray/00.webp" + "image": "/img/phones/apple-iphone-11-pro-max/spacegray/00.webp" }, { "id": 13, @@ -179,7 +179,7 @@ "color": "red", "ram": "3GB", "year": 2018, - "image": "img/phones/apple-iphone-xr/red/00.webp" + "image": "/img/phones/apple-iphone-xr/red/00.webp" }, { "id": 14, @@ -193,7 +193,7 @@ "color": "white", "ram": "3GB", "year": 2018, - "image": "img/phones/apple-iphone-xr/white/00.webp" + "image": "/img/phones/apple-iphone-xr/white/00.webp" }, { "id": 15, @@ -207,7 +207,7 @@ "color": "spacegray", "ram": "4GB", "year": 2018, - "image": "img/phones/apple-iphone-xs/spacegray/00.webp" + "image": "/img/phones/apple-iphone-xs/spacegray/00.webp" }, { "id": 16, @@ -221,7 +221,7 @@ "color": "gold", "ram": "4GB", "year": 2018, - "image": "img/phones/apple-iphone-xs-max/gold/00.webp" + "image": "/img/phones/apple-iphone-xs-max/gold/00.webp" }, { "id": 17, @@ -235,7 +235,7 @@ "color": "silver", "ram": "4GB", "year": 2018, - "image": "img/phones/apple-iphone-xs-max/silver/00.webp" + "image": "/img/phones/apple-iphone-xs-max/silver/00.webp" }, { "id": 18, @@ -249,7 +249,7 @@ "color": "gold", "ram": "2GB", "year": 2016, - "image": "img/phones/apple-iphone-7/gold/00.webp" + "image": "/img/phones/apple-iphone-7/gold/00.webp" }, { "id": 19, @@ -263,7 +263,7 @@ "color": "silver", "ram": "3GB", "year": 2016, - "image": "img/phones/apple-iphone-7-plus/silver/00.webp" + "image": "/img/phones/apple-iphone-7-plus/silver/00.webp" }, { "id": 20, @@ -277,7 +277,7 @@ "color": "spacegray", "ram": "2GB", "year": 2017, - "image": "img/phones/apple-iphone-8/spacegray/00.webp" + "image": "/img/phones/apple-iphone-8/spacegray/00.webp" }, { "id": 21, @@ -291,7 +291,7 @@ "color": "green", "ram": "4GB", "year": 2019, - "image": "img/phones/apple-iphone-11/green/00.webp" + "image": "/img/phones/apple-iphone-11/green/00.webp" }, { "id": 22, @@ -305,7 +305,7 @@ "color": "purple", "ram": "4GB", "year": 2019, - "image": "img/phones/apple-iphone-11/purple/00.webp" + "image": "/img/phones/apple-iphone-11/purple/00.webp" }, { "id": 23, @@ -319,7 +319,7 @@ "color": "yellow", "ram": "4GB", "year": 2019, - "image": "img/phones/apple-iphone-11/yellow/00.webp" + "image": "/img/phones/apple-iphone-11/yellow/00.webp" }, { "id": 24, @@ -333,7 +333,7 @@ "color": "gold", "ram": "4GB", "year": 2019, - "image": "img/phones/apple-iphone-11-pro/gold/00.webp" + "image": "/img/phones/apple-iphone-11-pro/gold/00.webp" }, { "id": 25, @@ -347,7 +347,7 @@ "color": "spacegray", "ram": "4GB", "year": 2019, - "image": "img/phones/apple-iphone-11-pro/spacegray/00.webp" + "image": "/img/phones/apple-iphone-11-pro/spacegray/00.webp" }, { "id": 26, @@ -361,7 +361,7 @@ "color": "silver", "ram": "4GB", "year": 2019, - "image": "img/phones/apple-iphone-11-pro-max/silver/00.webp" + "image": "/img/phones/apple-iphone-11-pro-max/silver/00.webp" }, { "id": 27, @@ -375,7 +375,7 @@ "color": "midnightgreen", "ram": "4GB", "year": 2019, - "image": "img/phones/apple-iphone-11-pro-max/midnightgreen/00.webp" + "image": "/img/phones/apple-iphone-11-pro-max/midnightgreen/00.webp" }, { "id": 28, @@ -389,7 +389,7 @@ "color": "silver", "ram": "4GB", "year": 2019, - "image": "img/phones/apple-iphone-11-pro-max/silver/00.webp" + "image": "/img/phones/apple-iphone-11-pro-max/silver/00.webp" }, { "id": 29, @@ -403,7 +403,7 @@ "color": "white", "ram": "3GB", "year": 2018, - "image": "img/phones/apple-iphone-xr/white/00.webp" + "image": "/img/phones/apple-iphone-xr/white/00.webp" }, { "id": 30, @@ -417,7 +417,7 @@ "color": "coral", "ram": "3GB", "year": 2018, - "image": "img/phones/apple-iphone-xr/coral/00.webp" + "image": "/img/phones/apple-iphone-xr/coral/00.webp" }, { "id": 31, @@ -431,7 +431,7 @@ "color": "gold", "ram": "4GB", "year": 2018, - "image": "img/phones/apple-iphone-xs/gold/00.webp" + "image": "/img/phones/apple-iphone-xs/gold/00.webp" }, { "id": 32, @@ -445,7 +445,7 @@ "color": "spacegray", "ram": "4GB", "year": 2018, - "image": "img/phones/apple-iphone-xs/spacegray/00.webp" + "image": "/img/phones/apple-iphone-xs/spacegray/00.webp" }, { "id": 33, @@ -459,7 +459,7 @@ "color": "silver", "ram": "4GB", "year": 2018, - "image": "img/phones/apple-iphone-xs-max/silver/00.webp" + "image": "/img/phones/apple-iphone-xs-max/silver/00.webp" }, { "id": 34, @@ -473,7 +473,7 @@ "color": "gold", "ram": "4GB", "year": 2018, - "image": "img/phones/apple-iphone-xs-max/gold/00.webp" + "image": "/img/phones/apple-iphone-xs-max/gold/00.webp" }, { "id": 35, @@ -487,7 +487,7 @@ "color": "rosegold", "ram": "2GB", "year": 2016, - "image": "img/phones/apple-iphone-7/rosegold/00.webp" + "image": "/img/phones/apple-iphone-7/rosegold/00.webp" }, { "id": 36, @@ -501,7 +501,7 @@ "color": "purple", "ram": "4GB", "year": 2019, - "image": "img/phones/apple-iphone-11/purple/00.webp" + "image": "/img/phones/apple-iphone-11/purple/00.webp" }, { "id": 37, @@ -515,7 +515,7 @@ "color": "red", "ram": "4GB", "year": 2019, - "image": "img/phones/apple-iphone-11/red/00.webp" + "image": "/img/phones/apple-iphone-11/red/00.webp" }, { "id": 38, @@ -529,7 +529,7 @@ "color": "black", "ram": "4GB", "year": 2019, - "image": "img/phones/apple-iphone-11/black/00.webp" + "image": "/img/phones/apple-iphone-11/black/00.webp" }, { "id": 39, @@ -543,7 +543,7 @@ "color": "red", "ram": "4GB", "year": 2019, - "image": "img/phones/apple-iphone-11/red/00.webp" + "image": "/img/phones/apple-iphone-11/red/00.webp" }, { "id": 40, @@ -557,7 +557,7 @@ "color": "midnightgreen", "ram": "4GB", "year": 2019, - "image": "img/phones/apple-iphone-11-pro/midnightgreen/00.webp" + "image": "/img/phones/apple-iphone-11-pro/midnightgreen/00.webp" }, { "id": 41, @@ -571,7 +571,7 @@ "color": "silver", "ram": "4GB", "year": 2019, - "image": "img/phones/apple-iphone-11-pro/silver/00.webp" + "image": "/img/phones/apple-iphone-11-pro/silver/00.webp" }, { "id": 42, @@ -585,7 +585,7 @@ "color": "gold", "ram": "4GB", "year": 2019, - "image": "img/phones/apple-iphone-11-pro/gold/00.webp" + "image": "/img/phones/apple-iphone-11-pro/gold/00.webp" }, { "id": 43, @@ -599,7 +599,7 @@ "color": "midnightgreen", "ram": "4GB", "year": 2019, - "image": "img/phones/apple-iphone-11-pro-max/midnightgreen/00.webp" + "image": "/img/phones/apple-iphone-11-pro-max/midnightgreen/00.webp" }, { "id": 44, @@ -613,7 +613,7 @@ "color": "spacegray", "ram": "4GB", "year": 2019, - "image": "img/phones/apple-iphone-11-pro-max/spacegray/00.webp" + "image": "/img/phones/apple-iphone-11-pro-max/spacegray/00.webp" }, { "id": 45, @@ -627,7 +627,7 @@ "color": "coral", "ram": "3GB", "year": 2018, - "image": "img/phones/apple-iphone-xr/coral/00.webp" + "image": "/img/phones/apple-iphone-xr/coral/00.webp" }, { "id": 46, @@ -641,7 +641,7 @@ "color": "red", "ram": "3GB", "year": 2018, - "image": "img/phones/apple-iphone-xr/red/00.webp" + "image": "/img/phones/apple-iphone-xr/red/00.webp" }, { "id": 47, @@ -655,7 +655,7 @@ "color": "gold", "ram": "4GB", "year": 2018, - "image": "img/phones/apple-iphone-xs/gold/00.webp" + "image": "/img/phones/apple-iphone-xs/gold/00.webp" }, { "id": 48, @@ -669,7 +669,7 @@ "color": "spacegray", "ram": "4GB", "year": 2018, - "image": "img/phones/apple-iphone-xs-max/spacegray/00.webp" + "image": "/img/phones/apple-iphone-xs-max/spacegray/00.webp" }, { "id": 49, @@ -683,7 +683,7 @@ "color": "rosegold", "ram": "3GB", "year": 2016, - "image": "img/phones/apple-iphone-7-plus/rosegold/00.webp" + "image": "/img/phones/apple-iphone-7-plus/rosegold/00.webp" }, { "id": 50, @@ -697,7 +697,7 @@ "color": "white", "ram": "4GB", "year": 2019, - "image": "img/phones/apple-iphone-11/white/00.webp" + "image": "/img/phones/apple-iphone-11/white/00.webp" }, { "id": 51, @@ -711,7 +711,7 @@ "color": "green", "ram": "4GB", "year": 2019, - "image": "img/phones/apple-iphone-11/green/00.webp" + "image": "/img/phones/apple-iphone-11/green/00.webp" }, { "id": 52, @@ -725,7 +725,7 @@ "color": "white", "ram": "4GB", "year": 2019, - "image": "img/phones/apple-iphone-11/white/00.webp" + "image": "/img/phones/apple-iphone-11/white/00.webp" }, { "id": 53, @@ -739,7 +739,7 @@ "color": "black", "ram": "4GB", "year": 2019, - "image": "img/phones/apple-iphone-11/black/00.webp" + "image": "/img/phones/apple-iphone-11/black/00.webp" }, { "id": 54, @@ -753,7 +753,7 @@ "color": "white", "ram": "4GB", "year": 2019, - "image": "img/phones/apple-iphone-11/white/00.webp" + "image": "/img/phones/apple-iphone-11/white/00.webp" }, { "id": 55, @@ -767,7 +767,7 @@ "color": "spacegray", "ram": "4GB", "year": 2019, - "image": "img/phones/apple-iphone-11-pro/spacegray/00.webp" + "image": "/img/phones/apple-iphone-11-pro/spacegray/00.webp" }, { "id": 56, @@ -781,7 +781,7 @@ "color": "midnightgreen", "ram": "4GB", "year": 2019, - "image": "img/phones/apple-iphone-11-pro/midnightgreen/00.webp" + "image": "/img/phones/apple-iphone-11-pro/midnightgreen/00.webp" }, { "id": 57, @@ -795,7 +795,7 @@ "color": "gold", "ram": "4GB", "year": 2019, - "image": "img/phones/apple-iphone-11-pro-max/gold/00.webp" + "image": "/img/phones/apple-iphone-11-pro-max/gold/00.webp" }, { "id": 58, @@ -809,7 +809,7 @@ "color": "silver", "ram": "4GB", "year": 2019, - "image": "img/phones/apple-iphone-11-pro-max/silver/00.webp" + "image": "/img/phones/apple-iphone-11-pro-max/silver/00.webp" }, { "id": 59, @@ -823,7 +823,7 @@ "color": "midnightgreen", "ram": "4GB", "year": 2019, - "image": "img/phones/apple-iphone-11-pro-max/midnightgreen/00.webp" + "image": "/img/phones/apple-iphone-11-pro-max/midnightgreen/00.webp" }, { "id": 60, @@ -837,7 +837,7 @@ "color": "yellow", "ram": "3GB", "year": 2018, - "image": "img/phones/apple-iphone-xr/yellow/00.webp" + "image": "/img/phones/apple-iphone-xr/yellow/00.webp" }, { "id": 61, @@ -851,7 +851,7 @@ "color": "silver", "ram": "2GB", "year": 2016, - "image": "img/phones/apple-iphone-7/silver/00.webp" + "image": "/img/phones/apple-iphone-7/silver/00.webp" }, { "id": 62, @@ -865,7 +865,7 @@ "color": "purple", "ram": "4GB", "year": 2019, - "image": "img/phones/apple-iphone-11/purple/00.webp" + "image": "/img/phones/apple-iphone-11/purple/00.webp" }, { "id": 63, @@ -879,7 +879,7 @@ "color": "gold", "ram": "4GB", "year": 2019, - "image": "img/phones/apple-iphone-11-pro-max/gold/00.webp" + "image": "/img/phones/apple-iphone-11-pro-max/gold/00.webp" }, { "id": 64, @@ -893,7 +893,7 @@ "color": "yellow", "ram": "4GB", "year": 2019, - "image": "img/phones/apple-iphone-11/yellow/00.webp" + "image": "/img/phones/apple-iphone-11/yellow/00.webp" }, { "id": 65, @@ -907,7 +907,7 @@ "color": "spacegray", "ram": "4GB", "year": 2019, - "image": "img/phones/apple-iphone-11-pro/spacegray/00.webp" + "image": "/img/phones/apple-iphone-11-pro/spacegray/00.webp" }, { "id": 66, @@ -921,7 +921,7 @@ "color": "silver", "ram": "2GB", "year": 2017, - "image": "img/phones/apple-iphone-8/silver/00.webp" + "image": "/img/phones/apple-iphone-8/silver/00.webp" }, { "id": 67, @@ -935,7 +935,7 @@ "color": "red", "ram": "4GB", "year": 2019, - "image": "img/phones/apple-iphone-11/red/00.webp" + "image": "/img/phones/apple-iphone-11/red/00.webp" }, { "id": 68, @@ -949,7 +949,7 @@ "color": "spacegray", "ram": "4GB", "year": 2018, - "image": "img/phones/apple-iphone-xs-max/spacegray/00.webp" + "image": "/img/phones/apple-iphone-xs-max/spacegray/00.webp" }, { "id": 69, @@ -963,7 +963,7 @@ "color": "gold", "ram": "3GB", "year": 2016, - "image": "img/phones/apple-iphone-7-plus/gold/00.webp" + "image": "/img/phones/apple-iphone-7-plus/gold/00.webp" }, { "id": 70, @@ -977,7 +977,7 @@ "color": "silver", "ram": "4GB", "year": 2019, - "image": "img/phones/apple-iphone-11-pro/silver/00.webp" + "image": "/img/phones/apple-iphone-11-pro/silver/00.webp" }, { "id": 71, @@ -991,7 +991,7 @@ "color": "yellow", "ram": "3GB", "year": 2018, - "image": "img/phones/apple-iphone-xr/yellow/00.webp" + "image": "/img/phones/apple-iphone-xr/yellow/00.webp" }, { "id": 72, @@ -1005,7 +1005,7 @@ "color": "midnight", "ram": "6GB", "year": 2022, - "image": "img/phones/apple-iphone-14/midnight/00.webp" + "image": "/img/phones/apple-iphone-14/midnight/00.webp" }, { "id": 73, @@ -1019,7 +1019,7 @@ "color": "midnight", "ram": "6GB", "year": 2022, - "image": "img/phones/apple-iphone-14/midnight/00.webp" + "image": "/img/phones/apple-iphone-14/midnight/00.webp" }, { "id": 74, @@ -1033,7 +1033,7 @@ "color": "midnight", "ram": "6GB", "year": 2022, - "image": "img/phones/apple-iphone-14/midnight/00.webp" + "image": "/img/phones/apple-iphone-14/midnight/00.webp" }, { "id": 75, @@ -1047,7 +1047,7 @@ "color": "yellow", "ram": "6GB", "year": 2022, - "image": "img/phones/apple-iphone-14/yellow/00.webp" + "image": "/img/phones/apple-iphone-14/yellow/00.webp" }, { "id": 76, @@ -1061,7 +1061,7 @@ "color": "yellow", "ram": "6GB", "year": 2022, - "image": "img/phones/apple-iphone-14/yellow/00.webp" + "image": "/img/phones/apple-iphone-14/yellow/00.webp" }, { "id": 77, @@ -1075,7 +1075,7 @@ "color": "yellow", "ram": "6GB", "year": 2022, - "image": "img/phones/apple-iphone-14/yellow/00.webp" + "image": "/img/phones/apple-iphone-14/yellow/00.webp" }, { "id": 78, @@ -1089,7 +1089,7 @@ "color": "purple", "ram": "6GB", "year": 2022, - "image": "img/phones/apple-iphone-14/purple/00.webp" + "image": "/img/phones/apple-iphone-14/purple/00.webp" }, { "id": 79, @@ -1103,7 +1103,7 @@ "color": "purple", "ram": "6GB", "year": 2022, - "image": "img/phones/apple-iphone-14/purple/00.webp" + "image": "/img/phones/apple-iphone-14/purple/00.webp" }, { "id": 80, @@ -1117,7 +1117,7 @@ "color": "purple", "ram": "6GB", "year": 2022, - "image": "img/phones/apple-iphone-14/purple/00.webp" + "image": "/img/phones/apple-iphone-14/purple/00.webp" }, { "id": 81, @@ -1131,7 +1131,7 @@ "color": "spaceblack", "ram": "6GB", "year": 2022, - "image": "img/phones/apple-iphone-14-pro/spaceblack/00.webp" + "image": "/img/phones/apple-iphone-14-pro/spaceblack/00.webp" }, { "id": 82, @@ -1145,7 +1145,7 @@ "color": "spaceblack", "ram": "6GB", "year": 2022, - "image": "img/phones/apple-iphone-14-pro/spaceblack/00.webp" + "image": "/img/phones/apple-iphone-14-pro/spaceblack/00.webp" }, { "id": 83, @@ -1159,7 +1159,7 @@ "color": "spaceblack", "ram": "6GB", "year": 2022, - "image": "img/phones/apple-iphone-14-pro/spaceblack/00.webp" + "image": "/img/phones/apple-iphone-14-pro/spaceblack/00.webp" }, { "id": 84, @@ -1173,7 +1173,7 @@ "color": "spaceblack", "ram": "6GB", "year": 2022, - "image": "img/phones/apple-iphone-14-pro/spaceblack/00.webp" + "image": "/img/phones/apple-iphone-14-pro/spaceblack/00.webp" }, { "id": 85, @@ -1187,7 +1187,7 @@ "color": "purple", "ram": "4GB", "year": 2020, - "image": "img/phones/apple-iphone-12/purple/00.webp" + "image": "/img/phones/apple-iphone-12/purple/00.webp" }, { "id": 86, @@ -1201,7 +1201,7 @@ "color": "purple", "ram": "4GB", "year": 2020, - "image": "img/phones/apple-iphone-12/purple/00.webp" + "image": "/img/phones/apple-iphone-12/purple/00.webp" }, { "id": 87, @@ -1215,7 +1215,7 @@ "color": "purple", "ram": "4GB", "year": 2020, - "image": "img/phones/apple-iphone-12/purple/00.webp" + "image": "/img/phones/apple-iphone-12/purple/00.webp" }, { "id": 88, @@ -1229,7 +1229,7 @@ "color": "white", "ram": "4GB", "year": 2020, - "image": "img/phones/apple-iphone-12/white/00.webp" + "image": "/img/phones/apple-iphone-12/white/00.webp" }, { "id": 89, @@ -1243,7 +1243,7 @@ "color": "white", "ram": "4GB", "year": 2020, - "image": "img/phones/apple-iphone-12/white/00.webp" + "image": "/img/phones/apple-iphone-12/white/00.webp" }, { "id": 90, @@ -1257,7 +1257,7 @@ "color": "white", "ram": "4GB", "year": 2020, - "image": "img/phones/apple-iphone-12/white/00.webp" + "image": "/img/phones/apple-iphone-12/white/00.webp" }, { "id": 91, @@ -1271,7 +1271,7 @@ "color": "red", "ram": "4GB", "year": 2020, - "image": "img/phones/apple-iphone-12/red/00.webp" + "image": "/img/phones/apple-iphone-12/red/00.webp" }, { "id": 92, @@ -1285,7 +1285,7 @@ "color": "red", "ram": "4GB", "year": 2020, - "image": "img/phones/apple-iphone-12/red/00.webp" + "image": "/img/phones/apple-iphone-12/red/00.webp" }, { "id": 93, @@ -1299,7 +1299,7 @@ "color": "red", "ram": "4GB", "year": 2020, - "image": "img/phones/apple-iphone-12/red/00.webp" + "image": "/img/phones/apple-iphone-12/red/00.webp" }, { "id": 94, @@ -1313,7 +1313,7 @@ "color": "black", "ram": "4GB", "year": 2020, - "image": "img/phones/apple-iphone-12/black/00.webp" + "image": "/img/phones/apple-iphone-12/black/00.webp" }, { "id": 95, @@ -1327,7 +1327,7 @@ "color": "black", "ram": "4GB", "year": 2020, - "image": "img/phones/apple-iphone-12/black/00.webp" + "image": "/img/phones/apple-iphone-12/black/00.webp" }, { "id": 96, @@ -1341,7 +1341,7 @@ "color": "black", "ram": "4GB", "year": 2020, - "image": "img/phones/apple-iphone-12/black/00.webp" + "image": "/img/phones/apple-iphone-12/black/00.webp" }, { "id": 97, @@ -1355,7 +1355,7 @@ "color": "blue", "ram": "4GB", "year": 2020, - "image": "img/phones/apple-iphone-13-mini/blue/00.webp" + "image": "/img/phones/apple-iphone-13-mini/blue/00.webp" }, { "id": 98, @@ -1369,7 +1369,7 @@ "color": "blue", "ram": "4GB", "year": 2020, - "image": "img/phones/apple-iphone-13-mini/blue/00.webp" + "image": "/img/phones/apple-iphone-13-mini/blue/00.webp" }, { "id": 99, @@ -1383,7 +1383,7 @@ "color": "blue", "ram": "4GB", "year": 2020, - "image": "img/phones/apple-iphone-13-mini/blue/00.webp" + "image": "/img/phones/apple-iphone-13-mini/blue/00.webp" }, { "id": 100, @@ -1397,7 +1397,7 @@ "color": "white", "ram": "4GB", "year": 2020, - "image": "img/phones/apple-iphone-13-mini/white/00.webp" + "image": "/img/phones/apple-iphone-13-mini/white/00.webp" }, { "id": 101, @@ -1411,7 +1411,7 @@ "color": "white", "ram": "4GB", "year": 2020, - "image": "img/phones/apple-iphone-13-mini/white/00.webp" + "image": "/img/phones/apple-iphone-13-mini/white/00.webp" }, { "id": 102, @@ -1425,7 +1425,7 @@ "color": "white", "ram": "4GB", "year": 2020, - "image": "img/phones/apple-iphone-13-mini/white/00.webp" + "image": "/img/phones/apple-iphone-13-mini/white/00.webp" }, { "id": 103, @@ -1439,7 +1439,7 @@ "color": "pink", "ram": "4GB", "year": 2020, - "image": "img/phones/apple-iphone-13-mini/pink/00.webp" + "image": "/img/phones/apple-iphone-13-mini/pink/00.webp" }, { "id": 104, @@ -1453,7 +1453,7 @@ "color": "pink", "ram": "4GB", "year": 2020, - "image": "img/phones/apple-iphone-13-mini/pink/00.webp" + "image": "/img/phones/apple-iphone-13-mini/pink/00.webp" }, { "id": 105, @@ -1467,7 +1467,7 @@ "color": "pink", "ram": "4GB", "year": 2020, - "image": "img/phones/apple-iphone-13-mini/pink/00.webp" + "image": "/img/phones/apple-iphone-13-mini/pink/00.webp" }, { "id": 106, @@ -1481,7 +1481,7 @@ "color": "midnight", "ram": "4GB", "year": 2020, - "image": "img/phones/apple-iphone-13-mini/midnight/00.webp" + "image": "/img/phones/apple-iphone-13-mini/midnight/00.webp" }, { "id": 107, @@ -1495,7 +1495,7 @@ "color": "midnight", "ram": "4GB", "year": 2020, - "image": "img/phones/apple-iphone-13-mini/midnight/00.webp" + "image": "/img/phones/apple-iphone-13-mini/midnight/00.webp" }, { "id": 108, @@ -1509,7 +1509,7 @@ "color": "midnight", "ram": "4GB", "year": 2020, - "image": "img/phones/apple-iphone-13-mini/midnight/00.webp" + "image": "/img/phones/apple-iphone-13-mini/midnight/00.webp" }, { "id": 109, @@ -1523,7 +1523,7 @@ "color": "sierrablue", "ram": "6GB", "year": 2022, - "image": "img/phones/apple-iphone-13-pro-max/sierrablue/00.webp" + "image": "/img/phones/apple-iphone-13-pro-max/sierrablue/00.webp" }, { "id": 110, @@ -1537,7 +1537,7 @@ "color": "sierrablue", "ram": "6GB", "year": 2022, - "image": "img/phones/apple-iphone-13-pro-max/sierrablue/00.webp" + "image": "/img/phones/apple-iphone-13-pro-max/sierrablue/00.webp" }, { "id": 111, @@ -1551,7 +1551,7 @@ "color": "sierrablue", "ram": "6GB", "year": 2022, - "image": "img/phones/apple-iphone-13-pro-max/sierrablue/00.webp" + "image": "/img/phones/apple-iphone-13-pro-max/sierrablue/00.webp" }, { "id": 112, @@ -1565,7 +1565,7 @@ "color": "sierrablue", "ram": "6GB", "year": 2022, - "image": "img/phones/apple-iphone-13-pro-max/sierrablue/00.webp" + "image": "/img/phones/apple-iphone-13-pro-max/sierrablue/00.webp" }, { "id": 113, @@ -1579,7 +1579,7 @@ "color": "gold", "ram": "6GB", "year": 2022, - "image": "img/phones/apple-iphone-13-pro-max/gold/00.webp" + "image": "/img/phones/apple-iphone-13-pro-max/gold/00.webp" }, { "id": 114, @@ -1593,7 +1593,7 @@ "color": "gold", "ram": "6GB", "year": 2022, - "image": "img/phones/apple-iphone-13-pro-max/gold/00.webp" + "image": "/img/phones/apple-iphone-13-pro-max/gold/00.webp" }, { "id": 115, @@ -1607,7 +1607,7 @@ "color": "gold", "ram": "6GB", "year": 2022, - "image": "img/phones/apple-iphone-13-pro-max/gold/00.webp" + "image": "/img/phones/apple-iphone-13-pro-max/gold/00.webp" }, { "id": 116, @@ -1621,7 +1621,7 @@ "color": "gold", "ram": "6GB", "year": 2022, - "image": "img/phones/apple-iphone-13-pro-max/gold/00.webp" + "image": "/img/phones/apple-iphone-13-pro-max/gold/00.webp" }, { "id": 117, @@ -1635,7 +1635,7 @@ "color": "graphite", "ram": "6GB", "year": 2022, - "image": "img/phones/apple-iphone-13-pro-max/graphite/00.webp" + "image": "/img/phones/apple-iphone-13-pro-max/graphite/00.webp" }, { "id": 118, @@ -1649,7 +1649,7 @@ "color": "graphite", "ram": "6GB", "year": 2022, - "image": "img/phones/apple-iphone-13-pro-max/graphite/00.webp" + "image": "/img/phones/apple-iphone-13-pro-max/graphite/00.webp" }, { "id": 119, @@ -1663,7 +1663,7 @@ "color": "graphite", "ram": "6GB", "year": 2022, - "image": "img/phones/apple-iphone-13-pro-max/graphite/00.webp" + "image": "/img/phones/apple-iphone-13-pro-max/graphite/00.webp" }, { "id": 120, @@ -1677,7 +1677,7 @@ "color": "graphite", "ram": "6GB", "year": 2022, - "image": "img/phones/apple-iphone-13-pro-max/graphite/00.webp" + "image": "/img/phones/apple-iphone-13-pro-max/graphite/00.webp" }, { "id": 121, @@ -1691,7 +1691,7 @@ "color": "space gray", "ram": "768MB", "year": 2017, - "image": "img/accessories/apple-watch-series-3/space-gray/00.webp" + "image": "/img/accessories/apple-watch-series-3/space-gray/00.webp" }, { "id": 122, @@ -1705,7 +1705,7 @@ "color": "space gray", "ram": "768MB", "year": 2017, - "image": "img/accessories/apple-watch-series-3/space-gray/00.webp" + "image": "/img/accessories/apple-watch-series-3/space-gray/00.webp" }, { "id": 123, @@ -1719,7 +1719,7 @@ "color": "gold", "ram": "768MB", "year": 2017, - "image": "img/accessories/apple-watch-series-3/gold/00.webp" + "image": "/img/accessories/apple-watch-series-3/gold/00.webp" }, { "id": 124, @@ -1733,7 +1733,7 @@ "color": "gold", "ram": "768MB", "year": 2017, - "image": "img/accessories/apple-watch-series-3/gold/00.webp" + "image": "/img/accessories/apple-watch-series-3/gold/00.webp" }, { "id": 125, @@ -1747,7 +1747,7 @@ "color": "silver", "ram": "768MB", "year": 2017, - "image": "img/accessories/apple-watch-series-3/silver/00.webp" + "image": "/img/accessories/apple-watch-series-3/silver/00.webp" }, { "id": 126, @@ -1761,7 +1761,7 @@ "color": "silver", "ram": "768MB", "year": 2017, - "image": "img/accessories/apple-watch-series-3/silver/00.webp" + "image": "/img/accessories/apple-watch-series-3/silver/00.webp" }, { "id": 127, @@ -1775,7 +1775,7 @@ "color": "space gray", "ram": "1GB", "year": 2020, - "image": "img/accessories/apple-watch-series-6/space-gray/00.webp" + "image": "/img/accessories/apple-watch-series-6/space-gray/00.webp" }, { "id": 128, @@ -1789,7 +1789,7 @@ "color": "space gray", "ram": "1GB", "year": 2020, - "image": "img/accessories/apple-watch-series-6/space-gray/00.webp" + "image": "/img/accessories/apple-watch-series-6/space-gray/00.webp" }, { "id": 129, @@ -1803,7 +1803,7 @@ "color": "silver", "ram": "1GB", "year": 2020, - "image": "img/accessories/apple-watch-series-6/silver/00.webp" + "image": "/img/accessories/apple-watch-series-6/silver/00.webp" }, { "id": 130, @@ -1817,7 +1817,7 @@ "color": "silver", "ram": "1GB", "year": 2020, - "image": "img/accessories/apple-watch-series-6/silver/00.webp" + "image": "/img/accessories/apple-watch-series-6/silver/00.webp" }, { "id": 131, @@ -1831,7 +1831,7 @@ "color": "gold", "ram": "1GB", "year": 2020, - "image": "img/accessories/apple-watch-series-6/gold/00.webp" + "image": "/img/accessories/apple-watch-series-6/gold/00.webp" }, { "id": 132, @@ -1845,7 +1845,7 @@ "color": "gold", "ram": "1GB", "year": 2020, - "image": "img/accessories/apple-watch-series-6/gold/00.webp" + "image": "/img/accessories/apple-watch-series-6/gold/00.webp" }, { "id": 133, @@ -1859,7 +1859,7 @@ "color": "blue", "ram": "1GB", "year": 2020, - "image": "img/accessories/apple-watch-series-6/blue/00.webp" + "image": "/img/accessories/apple-watch-series-6/blue/00.webp" }, { "id": 134, @@ -1873,7 +1873,7 @@ "color": "blue", "ram": "1GB", "year": 2020, - "image": "img/accessories/apple-watch-series-6/blue/00.webp" + "image": "/img/accessories/apple-watch-series-6/blue/00.webp" }, { "id": 135, @@ -1887,7 +1887,7 @@ "color": "red", "ram": "1GB", "year": 2020, - "image": "img/accessories/apple-watch-series-6/red/00.webp" + "image": "/img/accessories/apple-watch-series-6/red/00.webp" }, { "id": 136, @@ -1901,7 +1901,7 @@ "color": "red", "ram": "1GB", "year": 2020, - "image": "img/accessories/apple-watch-series-6/red/00.webp" + "image": "/img/accessories/apple-watch-series-6/red/00.webp" }, { "id": 137, @@ -1915,7 +1915,7 @@ "color": "silver", "ram": "1GB", "year": 2019, - "image": "img/accessories/apple-watch-series-5/silver/00.webp" + "image": "/img/accessories/apple-watch-series-5/silver/00.webp" }, { "id": 138, @@ -1929,7 +1929,7 @@ "color": "silver", "ram": "1GB", "year": 2019, - "image": "img/accessories/apple-watch-series-5/silver/00.webp" + "image": "/img/accessories/apple-watch-series-5/silver/00.webp" }, { "id": 139, @@ -1943,7 +1943,7 @@ "color": "gold", "ram": "1GB", "year": 2019, - "image": "img/accessories/apple-watch-series-5/gold/00.webp" + "image": "/img/accessories/apple-watch-series-5/gold/00.webp" }, { "id": 140, @@ -1957,7 +1957,7 @@ "color": "gold", "ram": "1GB", "year": 2019, - "image": "img/accessories/apple-watch-series-5/gold/00.webp" + "image": "/img/accessories/apple-watch-series-5/gold/00.webp" }, { "id": 141, @@ -1971,7 +1971,7 @@ "color": "space-gray", "ram": "1GB", "year": 2019, - "image": "img/accessories/apple-watch-series-5/space-gray/00.webp" + "image": "/img/accessories/apple-watch-series-5/space-gray/00.webp" }, { "id": 142, @@ -1985,7 +1985,7 @@ "color": "space-gray", "ram": "1GB", "year": 2019, - "image": "img/accessories/apple-watch-series-5/space-gray/00.webp" + "image": "/img/accessories/apple-watch-series-5/space-gray/00.webp" }, { "id": 143, @@ -1999,7 +1999,7 @@ "color": "silver", "ram": "0.75GB", "year": 2019, - "image": "img/accessories/apple-watch-series-4/silver/00.webp" + "image": "/img/accessories/apple-watch-series-4/silver/00.webp" }, { "id": 144, @@ -2013,7 +2013,7 @@ "color": "silver", "ram": "0.75GB", "year": 2019, - "image": "img/accessories/apple-watch-series-4/silver/00.webp" + "image": "/img/accessories/apple-watch-series-4/silver/00.webp" }, { "id": 145, @@ -2027,7 +2027,7 @@ "color": "gold", "ram": "0.75GB", "year": 2019, - "image": "img/accessories/apple-watch-series-4/gold/00.webp" + "image": "/img/accessories/apple-watch-series-4/gold/00.webp" }, { "id": 146, @@ -2041,7 +2041,7 @@ "color": "gold", "ram": "0.75GB", "year": 2019, - "image": "img/accessories/apple-watch-series-4/gold/00.webp" + "image": "/img/accessories/apple-watch-series-4/gold/00.webp" }, { "id": 147, @@ -2055,7 +2055,7 @@ "color": "space-gray", "ram": "0.75GB", "year": 2019, - "image": "img/accessories/apple-watch-series-4/space-gray/00.webp" + "image": "/img/accessories/apple-watch-series-4/space-gray/00.webp" }, { "id": 148, @@ -2069,7 +2069,7 @@ "color": "space-gray", "ram": "0.75GB", "year": 2019, - "image": "img/accessories/apple-watch-series-4/space-gray/00.webp" + "image": "/img/accessories/apple-watch-series-4/space-gray/00.webp" }, { "id": 149, @@ -2083,7 +2083,7 @@ "color": "silver", "ram": "1GB", "year": 2020, - "image": "img/accessories/apple-watch-se/silver/00.webp" + "image": "/img/accessories/apple-watch-se/silver/00.webp" }, { "id": 150, @@ -2097,7 +2097,7 @@ "color": "silver", "ram": "1GB", "year": 2020, - "image": "img/accessories/apple-watch-se/silver/00.webp" + "image": "/img/accessories/apple-watch-se/silver/00.webp" }, { "id": 151, @@ -2111,7 +2111,7 @@ "color": "gold", "ram": "1GB", "year": 2020, - "image": "img/accessories/apple-watch-se/gold/00.webp" + "image": "/img/accessories/apple-watch-se/gold/00.webp" }, { "id": 152, @@ -2125,7 +2125,7 @@ "color": "gold", "ram": "1GB", "year": 2020, - "image": "img/accessories/apple-watch-se/gold/00.webp" + "image": "/img/accessories/apple-watch-se/gold/00.webp" }, { "id": 153, @@ -2139,7 +2139,7 @@ "color": "space gray", "ram": "1GB", "year": 2020, - "image": "img/accessories/apple-watch-se/space-gray/00.webp" + "image": "/img/accessories/apple-watch-se/space-gray/00.webp" }, { "id": 154, @@ -2153,7 +2153,7 @@ "color": "space gray", "ram": "1GB", "year": 2020, - "image": "img/accessories/apple-watch-se/space-gray/00.webp" + "image": "/img/accessories/apple-watch-se/space-gray/00.webp" }, { "id": 155, @@ -2164,7 +2164,7 @@ "fullPrice": 799, "price": 749, "color": "spacegray", - "image": "img/tablets/apple-ipad-pro-11-2021/spacegray/00.webp", + "image": "/img/tablets/apple-ipad-pro-11-2021/spacegray/00.webp", "screen": "11' Liquid Retina", "ram": "8GB", "year": 2021 @@ -2178,7 +2178,7 @@ "fullPrice": 799, "price": 749, "color": "spacegray", - "image": "img/tablets/apple-ipad-pro-11-2021/silver/00.webp", + "image": "/img/tablets/apple-ipad-pro-11-2021/silver/00.webp", "screen": "11' Liquid Retina", "ram": "8GB", "year": 2021 @@ -2192,7 +2192,7 @@ "fullPrice": 829, "price": 799, "color": "spacegray", - "image": "img/tablets/apple-ipad-pro-11-2021/spacegray/00.webp", + "image": "/img/tablets/apple-ipad-pro-11-2021/spacegray/00.webp", "screen": "11' Liquid Retina", "ram": "8GB", "year": 2021 @@ -2206,7 +2206,7 @@ "fullPrice": 829, "price": 799, "color": "spacegray", - "image": "img/tablets/apple-ipad-pro-11-2021/silver/00.webp", + "image": "/img/tablets/apple-ipad-pro-11-2021/silver/00.webp", "screen": "11' Liquid Retina", "ram": "8GB", "year": 2021 @@ -2220,7 +2220,7 @@ "fullPrice": 869, "price": 819, "color": "spacegray", - "image": "img/tablets/apple-ipad-pro-11-2021/spacegray/00.webp", + "image": "/img/tablets/apple-ipad-pro-11-2021/spacegray/00.webp", "screen": "11' Liquid Retina", "ram": "8GB", "year": 2021 @@ -2234,7 +2234,7 @@ "fullPrice": 869, "price": 819, "color": "silver", - "image": "img/tablets/apple-ipad-pro-11-2021/silver/00.webp", + "image": "/img/tablets/apple-ipad-pro-11-2021/silver/00.webp", "screen": "11' Liquid Retina", "ram": "8GB", "year": 2021 @@ -2248,7 +2248,7 @@ "fullPrice": 899, "price": 879, "color": "spacegray", - "image": "img/tablets/apple-ipad-pro-11-2021/spacegray/00.webp", + "image": "/img/tablets/apple-ipad-pro-11-2021/spacegray/00.webp", "screen": "11' Liquid Retina", "ram": "8GB", "year": 2021 @@ -2262,7 +2262,7 @@ "fullPrice": 899, "price": 879, "color": "silver", - "image": "img/tablets/apple-ipad-pro-11-2021/silver/00.webp", + "image": "/img/tablets/apple-ipad-pro-11-2021/silver/00.webp", "screen": "11' Liquid Retina", "ram": "8GB", "year": 2021 @@ -2276,7 +2276,7 @@ "fullPrice": 999, "price": 939, "color": "spacegray", - "image": "img/tablets/apple-ipad-pro-11-2021/spacegray/00.webp", + "image": "/img/tablets/apple-ipad-pro-11-2021/spacegray/00.webp", "screen": "11' Liquid Retina", "ram": "8GB", "year": 2021 @@ -2290,7 +2290,7 @@ "fullPrice": 999, "price": 939, "color": "silver", - "image": "img/tablets/apple-ipad-pro-11-2021/silver/00.webp", + "image": "/img/tablets/apple-ipad-pro-11-2021/silver/00.webp", "screen": "11' Liquid Retina", "ram": "8GB", "year": 2021 @@ -2304,7 +2304,7 @@ "fullPrice": 749, "price": 699, "color": "rose gold", - "image": "img/tablets/apple-ipad-air-4th-gen/rose-gold/00.webp", + "image": "/img/tablets/apple-ipad-air-4th-gen/rose-gold/00.webp", "screen": "10.9' Liquid Retina", "ram": "4GB", "year": 2020 @@ -2318,7 +2318,7 @@ "fullPrice": 599, "price": 549, "color": "rose gold", - "image": "img/tablets/apple-ipad-air-4th-gen/rose-gold/00.webp", + "image": "/img/tablets/apple-ipad-air-4th-gen/rose-gold/00.webp", "screen": "10.9' Liquid Retina", "ram": "4GB", "year": 2020 @@ -2332,7 +2332,7 @@ "fullPrice": 749, "price": 699, "color": "silver", - "image": "img/tablets/apple-ipad-air-4th-gen/silver/00.webp", + "image": "/img/tablets/apple-ipad-air-4th-gen/silver/00.webp", "screen": "10.9' Liquid Retina", "ram": "4GB", "year": 2020 @@ -2346,7 +2346,7 @@ "fullPrice": 599, "price": 549, "color": "silver", - "image": "img/tablets/apple-ipad-air-4th-gen/silver/00.webp", + "image": "/img/tablets/apple-ipad-air-4th-gen/silver/00.webp", "screen": "10.9' Liquid Retina", "ram": "4GB", "year": 2020 @@ -2360,7 +2360,7 @@ "fullPrice": 749, "price": 699, "color": "green", - "image": "img/tablets/apple-ipad-air-4th-gen/green/00.webp", + "image": "/img/tablets/apple-ipad-air-4th-gen/green/00.webp", "screen": "10.9' Liquid Retina", "ram": "4GB", "year": 2020 @@ -2374,7 +2374,7 @@ "fullPrice": 599, "price": 549, "color": "green", - "image": "img/tablets/apple-ipad-air-4th-gen/green/00.webp", + "image": "/img/tablets/apple-ipad-air-4th-gen/green/00.webp", "screen": "10.9' Liquid Retina", "ram": "4GB", "year": 2020 @@ -2388,7 +2388,7 @@ "fullPrice": 749, "price": 699, "color": "sky-blue", - "image": "img/tablets/apple-ipad-air-4th-gen/sky-blue/00.webp", + "image": "/img/tablets/apple-ipad-air-4th-gen/sky-blue/00.webp", "screen": "10.9' Liquid Retina", "ram": "4GB", "year": 2020 @@ -2402,7 +2402,7 @@ "fullPrice": 599, "price": 549, "color": "sky-blue", - "image": "img/tablets/apple-ipad-air-4th-gen/sky-blue/00.webp", + "image": "/img/tablets/apple-ipad-air-4th-gen/sky-blue/00.webp", "screen": "10.9' Liquid Retina", "ram": "4GB", "year": 2020 @@ -2416,7 +2416,7 @@ "fullPrice": 649, "price": 599, "color": "spacegray", - "image": "img/tablets/apple-ipad-mini-6th-gen/spacegray/00.webp", + "image": "/img/tablets/apple-ipad-mini-6th-gen/spacegray/00.webp", "screen": "8.3' Liquid Retina", "ram": "4GB", "year": 2021 @@ -2430,7 +2430,7 @@ "fullPrice": 499, "price": 469, "color": "spacegray", - "image": "img/tablets/apple-ipad-mini-6th-gen/spacegray/00.webp", + "image": "/img/tablets/apple-ipad-mini-6th-gen/spacegray/00.webp", "screen": "8.3' Liquid Retina", "ram": "4GB", "year": 2021 @@ -2444,7 +2444,7 @@ "fullPrice": 649, "price": 599, "color": "starlight", - "image": "img/tablets/apple-ipad-mini-6th-gen/starlight/00.webp", + "image": "/img/tablets/apple-ipad-mini-6th-gen/starlight/00.webp", "screen": "8.3' Liquid Retina", "ram": "4GB", "year": 2021 @@ -2458,7 +2458,7 @@ "fullPrice": 499, "price": 469, "color": "starlight", - "image": "img/tablets/apple-ipad-mini-6th-gen/starlight/00.webp", + "image": "/img/tablets/apple-ipad-mini-6th-gen/starlight/00.webp", "screen": "8.3' Liquid Retina", "ram": "4GB", "year": 2021 @@ -2472,7 +2472,7 @@ "fullPrice": 649, "price": 599, "color": "pink", - "image": "img/tablets/apple-ipad-mini-6th-gen/pink/00.webp", + "image": "/img/tablets/apple-ipad-mini-6th-gen/pink/00.webp", "screen": "8.3' Liquid Retina", "ram": "4GB", "year": 2021 @@ -2486,7 +2486,7 @@ "fullPrice": 499, "price": 469, "color": "pink", - "image": "img/tablets/apple-ipad-mini-6th-gen/pink/00.webp", + "image": "/img/tablets/apple-ipad-mini-6th-gen/pink/00.webp", "screen": "8.3' Liquid Retina", "ram": "4GB", "year": 2021 @@ -2500,7 +2500,7 @@ "fullPrice": 429, "price": 399, "color": "gold", - "image": "img/tablets/apple-ipad-10-2-2020/gold/00.webp", + "image": "/img/tablets/apple-ipad-10-2-2020/gold/00.webp", "screen": "10.2' Retina", "ram": "3GB", "year": 2020 @@ -2514,7 +2514,7 @@ "fullPrice": 329, "price": 299, "color": "gold", - "image": "img/tablets/apple-ipad-10-2-2020/gold/00.webp", + "image": "/img/tablets/apple-ipad-10-2-2020/gold/00.webp", "screen": "10.2' Retina", "ram": "3GB", "year": 2020 @@ -2528,7 +2528,7 @@ "fullPrice": 429, "price": 399, "color": "silver", - "image": "img/tablets/apple-ipad-10-2-2020/silver/00.webp", + "image": "/img/tablets/apple-ipad-10-2-2020/silver/00.webp", "screen": "10.2' Retina", "ram": "3GB", "year": 2020 @@ -2542,7 +2542,7 @@ "fullPrice": 329, "price": 299, "color": "silver", - "image": "img/tablets/apple-ipad-10-2-2020/silver/00.webp", + "image": "/img/tablets/apple-ipad-10-2-2020/silver/00.webp", "screen": "10.2' Retina", "ram": "3GB", "year": 2020 @@ -2556,7 +2556,7 @@ "fullPrice": 429, "price": 399, "color": "spacegray", - "image": "img/tablets/apple-ipad-10-2-2020/spacegray/00.webp", + "image": "/img/tablets/apple-ipad-10-2-2020/spacegray/00.webp", "screen": "10.2' Retina", "ram": "3GB", "year": 2020 @@ -2570,7 +2570,7 @@ "fullPrice": 329, "price": 299, "color": "spacegray", - "image": "img/tablets/apple-ipad-10-2-2020/spacegray/00.webp", + "image": "/img/tablets/apple-ipad-10-2-2020/spacegray/00.webp", "screen": "10.2' Retina", "ram": "3GB", "year": 2020 @@ -2584,7 +2584,7 @@ "fullPrice": 549, "price": 499, "color": "silver", - "image": "img/tablets/apple-ipad-mini-5th-gen/silver/00.webp", + "image": "/img/tablets/apple-ipad-mini-5th-gen/silver/00.webp", "screen": "7.9' Retina", "ram": "3GB", "year": 2019 @@ -2598,7 +2598,7 @@ "fullPrice": 549, "price": 499, "color": "silver", - "image": "img/tablets/apple-ipad-mini-5th-gen/silver/00.webp", + "image": "/img/tablets/apple-ipad-mini-5th-gen/silver/00.webp", "screen": "7.9' Retina", "ram": "3GB", "year": 2019 @@ -2612,7 +2612,7 @@ "fullPrice": 549, "price": 499, "color": "spacegray", - "image": "img/tablets/apple-ipad-mini-5th-gen/spacegray/00.webp", + "image": "/img/tablets/apple-ipad-mini-5th-gen/spacegray/00.webp", "screen": "7.9' Retina", "ram": "3GB", "year": 2019 @@ -2626,7 +2626,7 @@ "fullPrice": 549, "price": 499, "color": "spacegray", - "image": "img/tablets/apple-ipad-mini-5th-gen/spacegray/00.webp", + "image": "/img/tablets/apple-ipad-mini-5th-gen/spacegray/00.webp", "screen": "7.9' Retina", "ram": "3GB", "year": 2019 @@ -2640,7 +2640,7 @@ "fullPrice": 549, "price": 499, "color": "gold", - "image": "img/tablets/apple-ipad-mini-5th-gen/gold/00.webp", + "image": "/img/tablets/apple-ipad-mini-5th-gen/gold/00.webp", "screen": "7.9' Retina", "ram": "3GB", "year": 2019 @@ -2654,7 +2654,7 @@ "fullPrice": 549, "price": 499, "color": "gold", - "image": "img/tablets/apple-ipad-mini-5th-gen/gold/00.webp", + "image": "/img/tablets/apple-ipad-mini-5th-gen/gold/00.webp", "screen": "7.9' Retina", "ram": "3GB", "year": 2019 @@ -2671,7 +2671,7 @@ "color": "gold", "ram": "6GB", "year": 2022, - "image": "img/phones/apple-iphone-14-pro/gold/00.webp" + "image": "/img/phones/apple-iphone-14-pro/gold/00.webp" }, { "id": 192, @@ -2685,7 +2685,7 @@ "color": "gold", "ram": "6GB", "year": 2022, - "image": "img/phones/apple-iphone-14-pro/gold/00.webp" + "image": "/img/phones/apple-iphone-14-pro/gold/00.webp" }, { "id": 193, @@ -2699,7 +2699,7 @@ "color": "gold", "ram": "6GB", "year": 2022, - "image": "img/phones/apple-iphone-14-pro/gold/00.webp" + "image": "/img/phones/apple-iphone-14-pro/gold/00.webp" }, { "id": 194, @@ -2713,6 +2713,6 @@ "color": "gold", "ram": "6GB", "year": 2022, - "image": "img/phones/apple-iphone-14-pro/gold/00.webp" + "image": "/img/phones/apple-iphone-14-pro/gold/00.webp" } ] \ No newline at end of file diff --git a/public/api/tablets.json b/public/api/tablets.json index dc555396f72..c9abcfd8976 100644 --- a/public/api/tablets.json +++ b/public/api/tablets.json @@ -11,9 +11,9 @@ "colorsAvailable": ["spacegray", "silver"], "color": "spacegray", "images": [ - "img/tablets/apple-ipad-pro-11-2021/spacegray/00.webp", - "img/tablets/apple-ipad-pro-11-2021/spacegray/01.webp", - "img/tablets/apple-ipad-pro-11-2021/spacegray/02.webp" + "/img/tablets/apple-ipad-pro-11-2021/spacegray/00.webp", + "/img/tablets/apple-ipad-pro-11-2021/spacegray/01.webp", + "/img/tablets/apple-ipad-pro-11-2021/spacegray/02.webp" ], "description": [ { @@ -58,9 +58,9 @@ "colorsAvailable": ["spacegray", "silver"], "color": "spacegray", "images": [ - "img/tablets/apple-ipad-pro-11-2021/spacegray/00.webp", - "img/tablets/apple-ipad-pro-11-2021/spacegray/01.webp", - "img/tablets/apple-ipad-pro-11-2021/spacegray/02.webp" + "/img/tablets/apple-ipad-pro-11-2021/spacegray/00.webp", + "/img/tablets/apple-ipad-pro-11-2021/spacegray/01.webp", + "/img/tablets/apple-ipad-pro-11-2021/spacegray/02.webp" ], "description": [ { @@ -105,9 +105,9 @@ "colorsAvailable": ["spacegray", "silver"], "color": "spacegray", "images": [ - "img/tablets/apple-ipad-pro-11-2021/spacegray/00.webp", - "img/tablets/apple-ipad-pro-11-2021/spacegray/01.webp", - "img/tablets/apple-ipad-pro-11-2021/spacegray/02.webp" + "/img/tablets/apple-ipad-pro-11-2021/spacegray/00.webp", + "/img/tablets/apple-ipad-pro-11-2021/spacegray/01.webp", + "/img/tablets/apple-ipad-pro-11-2021/spacegray/02.webp" ], "description": [ { @@ -152,9 +152,9 @@ "colorsAvailable": ["spacegray", "silver"], "color": "spacegray", "images": [ - "img/tablets/apple-ipad-pro-11-2021/spacegray/00.webp", - "img/tablets/apple-ipad-pro-11-2021/spacegray/01.webp", - "img/tablets/apple-ipad-pro-11-2021/spacegray/02.webp" + "/img/tablets/apple-ipad-pro-11-2021/spacegray/00.webp", + "/img/tablets/apple-ipad-pro-11-2021/spacegray/01.webp", + "/img/tablets/apple-ipad-pro-11-2021/spacegray/02.webp" ], "description": [ { @@ -199,9 +199,9 @@ "colorsAvailable": ["spacegray", "silver"], "color": "spacegray", "images": [ - "img/tablets/apple-ipad-pro-11-2021/spacegray/00.webp", - "img/tablets/apple-ipad-pro-11-2021/spacegray/01.webp", - "img/tablets/apple-ipad-pro-11-2021/spacegray/02.webp" + "/img/tablets/apple-ipad-pro-11-2021/spacegray/00.webp", + "/img/tablets/apple-ipad-pro-11-2021/spacegray/01.webp", + "/img/tablets/apple-ipad-pro-11-2021/spacegray/02.webp" ], "description": [ { @@ -246,9 +246,9 @@ "colorsAvailable": ["spacegray", "silver"], "color": "silver", "images": [ - "img/tablets/apple-ipad-pro-11-2021/silver/00.webp", - "img/tablets/apple-ipad-pro-11-2021/silver/01.webp", - "img/tablets/apple-ipad-pro-11-2021/silver/02.webp" + "/img/tablets/apple-ipad-pro-11-2021/silver/00.webp", + "/img/tablets/apple-ipad-pro-11-2021/silver/01.webp", + "/img/tablets/apple-ipad-pro-11-2021/silver/02.webp" ], "description": [ { @@ -293,9 +293,9 @@ "colorsAvailable": ["spacegray", "silver"], "color": "silver", "images": [ - "img/tablets/apple-ipad-pro-11-2021/silver/00.webp", - "img/tablets/apple-ipad-pro-11-2021/silver/01.webp", - "img/tablets/apple-ipad-pro-11-2021/silver/02.webp" + "/img/tablets/apple-ipad-pro-11-2021/silver/00.webp", + "/img/tablets/apple-ipad-pro-11-2021/silver/01.webp", + "/img/tablets/apple-ipad-pro-11-2021/silver/02.webp" ], "description": [ { @@ -340,9 +340,9 @@ "colorsAvailable": ["spacegray", "silver"], "color": "silver", "images": [ - "img/tablets/apple-ipad-pro-11-2021/silver/00.webp", - "img/tablets/apple-ipad-pro-11-2021/silver/01.webp", - "img/tablets/apple-ipad-pro-11-2021/silver/02.webp" + "/img/tablets/apple-ipad-pro-11-2021/silver/00.webp", + "/img/tablets/apple-ipad-pro-11-2021/silver/01.webp", + "/img/tablets/apple-ipad-pro-11-2021/silver/02.webp" ], "description": [ { @@ -387,9 +387,9 @@ "colorsAvailable": ["spacegray", "silver"], "color": "silver", "images": [ - "img/tablets/apple-ipad-pro-11-2021/silver/00.webp", - "img/tablets/apple-ipad-pro-11-2021/silver/01.webp", - "img/tablets/apple-ipad-pro-11-2021/silver/02.webp" + "/img/tablets/apple-ipad-pro-11-2021/silver/00.webp", + "/img/tablets/apple-ipad-pro-11-2021/silver/01.webp", + "/img/tablets/apple-ipad-pro-11-2021/silver/02.webp" ], "description": [ { @@ -434,9 +434,9 @@ "colorsAvailable": ["spacegray", "silver"], "color": "silver", "images": [ - "img/tablets/apple-ipad-pro-11-2021/silver/00.webp", - "img/tablets/apple-ipad-pro-11-2021/silver/01.webp", - "img/tablets/apple-ipad-pro-11-2021/silver/02.webp" + "/img/tablets/apple-ipad-pro-11-2021/silver/00.webp", + "/img/tablets/apple-ipad-pro-11-2021/silver/01.webp", + "/img/tablets/apple-ipad-pro-11-2021/silver/02.webp" ], "description": [ { @@ -481,10 +481,10 @@ "colorsAvailable": ["rose gold", "silver", "green", "sky blue"], "color": "rose gold", "images": [ - "img/tablets/apple-ipad-air-4th-gen/rose-gold/00.webp", - "img/tablets/apple-ipad-air-4th-gen/rose-gold/01.webp", - "img/tablets/apple-ipad-air-4th-gen/rose-gold/02.webp", - "img/tablets/apple-ipad-air-4th-gen/rose-gold/03.webp" + "/img/tablets/apple-ipad-air-4th-gen/rose-gold/00.webp", + "/img/tablets/apple-ipad-air-4th-gen/rose-gold/01.webp", + "/img/tablets/apple-ipad-air-4th-gen/rose-gold/02.webp", + "/img/tablets/apple-ipad-air-4th-gen/rose-gold/03.webp" ], "description": [ { @@ -529,10 +529,10 @@ "colorsAvailable": ["rose gold", "silver", "green", "sky blue"], "color": "rose gold", "images": [ - "img/tablets/apple-ipad-air-4th-gen/rose-gold/00.webp", - "img/tablets/apple-ipad-air-4th-gen/rose-gold/01.webp", - "img/tablets/apple-ipad-air-4th-gen/rose-gold/02.webp", - "img/tablets/apple-ipad-air-4th-gen/rose-gold/03.webp" + "/img/tablets/apple-ipad-air-4th-gen/rose-gold/00.webp", + "/img/tablets/apple-ipad-air-4th-gen/rose-gold/01.webp", + "/img/tablets/apple-ipad-air-4th-gen/rose-gold/02.webp", + "/img/tablets/apple-ipad-air-4th-gen/rose-gold/03.webp" ], "description": [ { @@ -577,10 +577,10 @@ "colorsAvailable": ["rose gold", "silver", "green", "sky blue"], "color": "silver", "images": [ - "img/tablets/apple-ipad-air-4th-gen/silver/00.webp", - "img/tablets/apple-ipad-air-4th-gen/silver/01.webp", - "img/tablets/apple-ipad-air-4th-gen/silver/02.webp", - "img/tablets/apple-ipad-air-4th-gen/silver/03.webp" + "/img/tablets/apple-ipad-air-4th-gen/silver/00.webp", + "/img/tablets/apple-ipad-air-4th-gen/silver/01.webp", + "/img/tablets/apple-ipad-air-4th-gen/silver/02.webp", + "/img/tablets/apple-ipad-air-4th-gen/silver/03.webp" ], "description": [ { @@ -625,10 +625,10 @@ "colorsAvailable": ["rose gold", "silver", "green", "sky blue"], "color": "silver", "images": [ - "img/tablets/apple-ipad-air-4th-gen/silver/00.webp", - "img/tablets/apple-ipad-air-4th-gen/silver/01.webp", - "img/tablets/apple-ipad-air-4th-gen/silver/02.webp", - "img/tablets/apple-ipad-air-4th-gen/silver/03.webp" + "/img/tablets/apple-ipad-air-4th-gen/silver/00.webp", + "/img/tablets/apple-ipad-air-4th-gen/silver/01.webp", + "/img/tablets/apple-ipad-air-4th-gen/silver/02.webp", + "/img/tablets/apple-ipad-air-4th-gen/silver/03.webp" ], "description": [ { @@ -673,10 +673,10 @@ "colorsAvailable": ["rose gold", "silver", "green", "sky blue"], "color": "green", "images": [ - "img/tablets/apple-ipad-air-4th-gen/green/00.webp", - "img/tablets/apple-ipad-air-4th-gen/green/01.webp", - "img/tablets/apple-ipad-air-4th-gen/green/02.webp", - "img/tablets/apple-ipad-air-4th-gen/green/03.webp" + "/img/tablets/apple-ipad-air-4th-gen/green/00.webp", + "/img/tablets/apple-ipad-air-4th-gen/green/01.webp", + "/img/tablets/apple-ipad-air-4th-gen/green/02.webp", + "/img/tablets/apple-ipad-air-4th-gen/green/03.webp" ], "description": [ { @@ -721,10 +721,10 @@ "colorsAvailable": ["rose gold", "silver", "green", "sky blue"], "color": "green", "images": [ - "img/tablets/apple-ipad-air-4th-gen/green/00.webp", - "img/tablets/apple-ipad-air-4th-gen/green/01.webp", - "img/tablets/apple-ipad-air-4th-gen/green/02.webp", - "img/tablets/apple-ipad-air-4th-gen/green/03.webp" + "/img/tablets/apple-ipad-air-4th-gen/green/00.webp", + "/img/tablets/apple-ipad-air-4th-gen/green/01.webp", + "/img/tablets/apple-ipad-air-4th-gen/green/02.webp", + "/img/tablets/apple-ipad-air-4th-gen/green/03.webp" ], "description": [ { @@ -769,10 +769,10 @@ "colorsAvailable": ["rose gold", "silver", "green", "sky blue"], "color": "sky blue", "images": [ - "img/tablets/apple-ipad-air-4th-gen/sky-blue/00.webp", - "img/tablets/apple-ipad-air-4th-gen/sky-blue/01.webp", - "img/tablets/apple-ipad-air-4th-gen/sky-blue/02.webp", - "img/tablets/apple-ipad-air-4th-gen/sky-blue/03.webp" + "/img/tablets/apple-ipad-air-4th-gen/sky-blue/00.webp", + "/img/tablets/apple-ipad-air-4th-gen/sky-blue/01.webp", + "/img/tablets/apple-ipad-air-4th-gen/sky-blue/02.webp", + "/img/tablets/apple-ipad-air-4th-gen/sky-blue/03.webp" ], "description": [ { @@ -817,10 +817,10 @@ "colorsAvailable": ["rose gold", "silver", "green", "sky blue"], "color": "sky blue", "images": [ - "img/tablets/apple-ipad-air-4th-gen/sky-blue/00.webp", - "img/tablets/apple-ipad-air-4th-gen/sky-blue/01.webp", - "img/tablets/apple-ipad-air-4th-gen/sky-blue/02.webp", - "img/tablets/apple-ipad-air-4th-gen/sky-blue/03.webp" + "/img/tablets/apple-ipad-air-4th-gen/sky-blue/00.webp", + "/img/tablets/apple-ipad-air-4th-gen/sky-blue/01.webp", + "/img/tablets/apple-ipad-air-4th-gen/sky-blue/02.webp", + "/img/tablets/apple-ipad-air-4th-gen/sky-blue/03.webp" ], "description": [ { @@ -865,9 +865,9 @@ "colorsAvailable": ["spacegray", "starlight", "pink"], "color": "spacegray", "images": [ - "img/tablets/apple-ipad-mini-6th-gen/spacegray/00.webp", - "img/tablets/apple-ipad-mini-6th-gen/spacegray/01.webp", - "img/tablets/apple-ipad-mini-6th-gen/spacegray/02.webp" + "/img/tablets/apple-ipad-mini-6th-gen/spacegray/00.webp", + "/img/tablets/apple-ipad-mini-6th-gen/spacegray/01.webp", + "/img/tablets/apple-ipad-mini-6th-gen/spacegray/02.webp" ], "description": [ { @@ -912,9 +912,9 @@ "colorsAvailable": ["spacegray", "starlight", "pink"], "color": "spacegray", "images": [ - "img/tablets/apple-ipad-mini-6th-gen/spacegray/00.webp", - "img/tablets/apple-ipad-mini-6th-gen/spacegray/01.webp", - "img/tablets/apple-ipad-mini-6th-gen/spacegray/02.webp" + "/img/tablets/apple-ipad-mini-6th-gen/spacegray/00.webp", + "/img/tablets/apple-ipad-mini-6th-gen/spacegray/01.webp", + "/img/tablets/apple-ipad-mini-6th-gen/spacegray/02.webp" ], "description": [ { @@ -959,9 +959,9 @@ "colorsAvailable": ["spacegray", "starlight", "pink"], "color": "starlight", "images": [ - "img/tablets/apple-ipad-mini-6th-gen/starlight/00.webp", - "img/tablets/apple-ipad-mini-6th-gen/starlight/01.webp", - "img/tablets/apple-ipad-mini-6th-gen/starlight/02.webp" + "/img/tablets/apple-ipad-mini-6th-gen/starlight/00.webp", + "/img/tablets/apple-ipad-mini-6th-gen/starlight/01.webp", + "/img/tablets/apple-ipad-mini-6th-gen/starlight/02.webp" ], "description": [ { @@ -1006,9 +1006,9 @@ "colorsAvailable": ["spacegray", "starlight", "pink"], "color": "starlight", "images": [ - "img/tablets/apple-ipad-mini-6th-gen/starlight/00.webp", - "img/tablets/apple-ipad-mini-6th-gen/starlight/01.webp", - "img/tablets/apple-ipad-mini-6th-gen/starlight/02.webp" + "/img/tablets/apple-ipad-mini-6th-gen/starlight/00.webp", + "/img/tablets/apple-ipad-mini-6th-gen/starlight/01.webp", + "/img/tablets/apple-ipad-mini-6th-gen/starlight/02.webp" ], "description": [ { @@ -1053,9 +1053,9 @@ "colorsAvailable": ["spacegray", "starlight", "pink"], "color": "pink", "images": [ - "img/tablets/apple-ipad-mini-6th-gen/pink/00.webp", - "img/tablets/apple-ipad-mini-6th-gen/pink/01.webp", - "img/tablets/apple-ipad-mini-6th-gen/pink/02.webp" + "/img/tablets/apple-ipad-mini-6th-gen/pink/00.webp", + "/img/tablets/apple-ipad-mini-6th-gen/pink/01.webp", + "/img/tablets/apple-ipad-mini-6th-gen/pink/02.webp" ], "description": [ { @@ -1100,9 +1100,9 @@ "colorsAvailable": ["spacegray", "starlight", "pink"], "color": "pink", "images": [ - "img/tablets/apple-ipad-mini-6th-gen/pink/00.webp", - "img/tablets/apple-ipad-mini-6th-gen/pink/01.webp", - "img/tablets/apple-ipad-mini-6th-gen/pink/02.webp" + "/img/tablets/apple-ipad-mini-6th-gen/pink/00.webp", + "/img/tablets/apple-ipad-mini-6th-gen/pink/01.webp", + "/img/tablets/apple-ipad-mini-6th-gen/pink/02.webp" ], "description": [ { @@ -1147,10 +1147,10 @@ "colorsAvailable": ["gold", "silver", "spacegray"], "color": "gold", "images": [ - "img/tablets/apple-ipad-10-2-2020/gold/00.webp", - "img/tablets/apple-ipad-10-2-2020/gold/01.webp", - "img/tablets/apple-ipad-10-2-2020/gold/02.webp", - "img/tablets/apple-ipad-10-2-2020/gold/03.webp" + "/img/tablets/apple-ipad-10-2-2020/gold/00.webp", + "/img/tablets/apple-ipad-10-2-2020/gold/01.webp", + "/img/tablets/apple-ipad-10-2-2020/gold/02.webp", + "/img/tablets/apple-ipad-10-2-2020/gold/03.webp" ], "description": [ { @@ -1195,10 +1195,10 @@ "colorsAvailable": ["gold", "silver", "spacegray"], "color": "gold", "images": [ - "img/tablets/apple-ipad-10-2-2020/gold/00.webp", - "img/tablets/apple-ipad-10-2-2020/gold/01.webp", - "img/tablets/apple-ipad-10-2-2020/gold/02.webp", - "img/tablets/apple-ipad-10-2-2020/gold/03.webp" + "/img/tablets/apple-ipad-10-2-2020/gold/00.webp", + "/img/tablets/apple-ipad-10-2-2020/gold/01.webp", + "/img/tablets/apple-ipad-10-2-2020/gold/02.webp", + "/img/tablets/apple-ipad-10-2-2020/gold/03.webp" ], "description": [ { @@ -1243,10 +1243,10 @@ "colorsAvailable": ["gold", "silver", "spacegray"], "color": "silver", "images": [ - "img/tablets/apple-ipad-10-2-2020/silver/00.webp", - "img/tablets/apple-ipad-10-2-2020/silver/01.webp", - "img/tablets/apple-ipad-10-2-2020/silver/02.webp", - "img/tablets/apple-ipad-10-2-2020/silver/03.webp" + "/img/tablets/apple-ipad-10-2-2020/silver/00.webp", + "/img/tablets/apple-ipad-10-2-2020/silver/01.webp", + "/img/tablets/apple-ipad-10-2-2020/silver/02.webp", + "/img/tablets/apple-ipad-10-2-2020/silver/03.webp" ], "description": [ { @@ -1291,10 +1291,10 @@ "colorsAvailable": ["gold", "silver", "spacegray"], "color": "silver", "images": [ - "img/tablets/apple-ipad-10-2-2020/silver/00.webp", - "img/tablets/apple-ipad-10-2-2020/silver/01.webp", - "img/tablets/apple-ipad-10-2-2020/silver/02.webp", - "img/tablets/apple-ipad-10-2-2020/silver/03.webp" + "/img/tablets/apple-ipad-10-2-2020/silver/00.webp", + "/img/tablets/apple-ipad-10-2-2020/silver/01.webp", + "/img/tablets/apple-ipad-10-2-2020/silver/02.webp", + "/img/tablets/apple-ipad-10-2-2020/silver/03.webp" ], "description": [ { @@ -1339,10 +1339,10 @@ "colorsAvailable": ["gold", "silver", "spacegray"], "color": "spacegray", "images": [ - "img/tablets/apple-ipad-10-2-2020/spacegray/00.webp", - "img/tablets/apple-ipad-10-2-2020/spacegray/01.webp", - "img/tablets/apple-ipad-10-2-2020/spacegray/02.webp", - "img/tablets/apple-ipad-10-2-2020/spacegray/03.webp" + "/img/tablets/apple-ipad-10-2-2020/spacegray/00.webp", + "/img/tablets/apple-ipad-10-2-2020/spacegray/01.webp", + "/img/tablets/apple-ipad-10-2-2020/spacegray/02.webp", + "/img/tablets/apple-ipad-10-2-2020/spacegray/03.webp" ], "description": [ { @@ -1387,10 +1387,10 @@ "colorsAvailable": ["gold", "silver", "spacegray"], "color": "spacegray", "images": [ - "img/tablets/apple-ipad-10-2-2020/spacegray/00.webp", - "img/tablets/apple-ipad-10-2-2020/spacegray/01.webp", - "img/tablets/apple-ipad-10-2-2020/spacegray/02.webp", - "img/tablets/apple-ipad-10-2-2020/spacegray/03.webp" + "/img/tablets/apple-ipad-10-2-2020/spacegray/00.webp", + "/img/tablets/apple-ipad-10-2-2020/spacegray/01.webp", + "/img/tablets/apple-ipad-10-2-2020/spacegray/02.webp", + "/img/tablets/apple-ipad-10-2-2020/spacegray/03.webp" ], "description": [ { @@ -1435,8 +1435,8 @@ "colorsAvailable": ["silver", "spacegray", "gold"], "color": "silver", "images": [ - "img/tablets/apple-ipad-mini-5th-gen/silver/00.webp", - "img/tablets/apple-ipad-mini-5th-gen/silver/01.webp" + "/img/tablets/apple-ipad-mini-5th-gen/silver/00.webp", + "/img/tablets/apple-ipad-mini-5th-gen/silver/01.webp" ], "description": [ { @@ -1481,8 +1481,8 @@ "colorsAvailable": ["silver", "spacegray", "gold"], "color": "silver", "images": [ - "img/tablets/apple-ipad-mini-5th-gen/silver/00.webp", - "img/tablets/apple-ipad-mini-5th-gen/silver/01.webp" + "/img/tablets/apple-ipad-mini-5th-gen/silver/00.webp", + "/img/tablets/apple-ipad-mini-5th-gen/silver/01.webp" ], "description": [ { @@ -1527,8 +1527,8 @@ "colorsAvailable": ["silver", "spacegray", "gold"], "color": "spacegray", "images": [ - "img/tablets/apple-ipad-mini-5th-gen/spacegray/00.webp", - "img/tablets/apple-ipad-mini-5th-gen/spacegray/01.webp" + "/img/tablets/apple-ipad-mini-5th-gen/spacegray/00.webp", + "/img/tablets/apple-ipad-mini-5th-gen/spacegray/01.webp" ], "description": [ { @@ -1573,8 +1573,8 @@ "colorsAvailable": ["silver", "spacegray", "gold"], "color": "spacegray", "images": [ - "img/tablets/apple-ipad-mini-5th-gen/spacegray/00.webp", - "img/tablets/apple-ipad-mini-5th-gen/spacegray/01.webp" + "/img/tablets/apple-ipad-mini-5th-gen/spacegray/00.webp", + "/img/tablets/apple-ipad-mini-5th-gen/spacegray/01.webp" ], "description": [ { @@ -1619,8 +1619,8 @@ "colorsAvailable": ["silver", "spacegray", "gold"], "color": "gold", "images": [ - "img/tablets/apple-ipad-mini-5th-gen/gold/00.webp", - "img/tablets/apple-ipad-mini-5th-gen/gold/01.webp" + "/img/tablets/apple-ipad-mini-5th-gen/gold/00.webp", + "/img/tablets/apple-ipad-mini-5th-gen/gold/01.webp" ], "description": [ { @@ -1665,8 +1665,8 @@ "colorsAvailable": ["silver", "spacegray", "gold"], "color": "gold", "images": [ - "img/tablets/apple-ipad-mini-5th-gen/gold/00.webp", - "img/tablets/apple-ipad-mini-5th-gen/gold/01.webp" + "/img/tablets/apple-ipad-mini-5th-gen/gold/00.webp", + "/img/tablets/apple-ipad-mini-5th-gen/gold/01.webp" ], "description": [ { diff --git a/src/App.scss b/src/App.scss index 71bc413aade..1caad99833d 100644 --- a/src/App.scss +++ b/src/App.scss @@ -1 +1,9 @@ -// not empty +.App { + min-height: 100vh; + display: flex; + flex-direction: column; +} + +main { + flex: 1; +} diff --git a/src/App.tsx b/src/App.tsx index 372e4b42066..cc54b130f04 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,7 +1,49 @@ import './App.scss'; +import { BrowserRouter as Router, Routes, Route } from 'react-router-dom'; +import { CartProvider } from './context/CartContext'; +import { FavoritesProvider } from './context/FavoritesContext'; +import { Header } from './components/Header'; +import { Footer } from './components/Footer'; +import { HomePage } from './modules/HomePage'; +import { ProductsPage } from './modules/ProductsPage'; +import { ProductDetailsPage } from './modules/ProductDetailsPage'; +import { CartPage } from './modules/CartPage'; +import { FavoritesPage } from './modules/FavoritesPage'; +import { NotFoundPage } from './modules/NotFoundPage'; export const App = () => ( -
-

Product Catalog

-
+ + + +
+
+
+ + } /> + } + /> + } + /> + } + /> + } + /> + } /> + } /> + } /> + +
+
+
+
+
+
); diff --git a/src/components/Footer/Footer.module.scss b/src/components/Footer/Footer.module.scss new file mode 100644 index 00000000000..24203b694a3 --- /dev/null +++ b/src/components/Footer/Footer.module.scss @@ -0,0 +1,42 @@ +.footer { + background: #f8f9fa; + border-top: 1px solid #e9ecef; + margin-top: auto; + + .container { + max-width: 1200px; + margin: 0 auto; + padding: 20px; + } + + .content { + display: flex; + justify-content: space-between; + align-items: center; + } + + .githubLink { + color: #007bff; + text-decoration: none; + font-weight: 500; + + &:hover { + text-decoration: underline; + } + } + + .backToTop { + background: #007bff; + color: white; + border: none; + padding: 8px 16px; + border-radius: 4px; + cursor: pointer; + font-size: 14px; + transition: background 0.3s; + + &:hover { + background: #0056b3; + } + } +} diff --git a/src/components/Footer/Footer.tsx b/src/components/Footer/Footer.tsx new file mode 100644 index 00000000000..5d7dcadee17 --- /dev/null +++ b/src/components/Footer/Footer.tsx @@ -0,0 +1,32 @@ +import React from 'react'; +import styles from './Footer.module.scss'; + +export const Footer: React.FC = () => { + const scrollToTop = () => { + window.scrollTo({ top: 0, behavior: 'smooth' }); + }; + + return ( + + ); +}; diff --git a/src/components/Footer/index.ts b/src/components/Footer/index.ts new file mode 100644 index 00000000000..ddcc5a9cd18 --- /dev/null +++ b/src/components/Footer/index.ts @@ -0,0 +1 @@ +export * from './Footer'; diff --git a/src/components/Header/Header.module.scss b/src/components/Header/Header.module.scss new file mode 100644 index 00000000000..6411d268311 --- /dev/null +++ b/src/components/Header/Header.module.scss @@ -0,0 +1,87 @@ +.header { + position: sticky; + top: 0; + background: white; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); + z-index: 1000; + + .container { + max-width: 1200px; + margin: 0 auto; + padding: 0 20px; + display: flex; + align-items: center; + justify-content: space-between; + height: 60px; + } + + .logo { + font-size: 24px; + font-weight: bold; + text-decoration: none; + color: #000; + display: flex; + align-items: center; + gap: 8px; + + i { + font-size: 28px; + color: #007bff; + } + + span { + font-size: 20px; + } + } + + .nav { + display: flex; + gap: 30px; + + .navLink { + text-decoration: none; + color: #333; + font-weight: 500; + padding: 10px 0; + transition: color 0.3s; + + &:hover, + &.active { + color: #007bff; + } + } + } + + .actions { + display: flex; + gap: 20px; + + .iconLink { + position: relative; + text-decoration: none; + color: #333; + font-size: 20px; + transition: color 0.3s; + + &:hover { + color: #007bff; + } + + .badge { + position: absolute; + top: -8px; + right: -8px; + background: #007bff; + color: white; + border-radius: 50%; + width: 18px; + height: 18px; + display: flex; + align-items: center; + justify-content: center; + font-size: 12px; + font-weight: bold; + } + } + } +} diff --git a/src/components/Header/Header.tsx b/src/components/Header/Header.tsx new file mode 100644 index 00000000000..035987181ec --- /dev/null +++ b/src/components/Header/Header.tsx @@ -0,0 +1,70 @@ +import React from 'react'; +import { Link, useLocation } from 'react-router-dom'; +import { useCart } from '../../context/CartContext'; +import { useFavorites } from '../../context/FavoritesContext'; +import styles from './Header.module.scss'; + +export const Header: React.FC = () => { + const { getTotalQuantity } = useCart(); + const { favorites } = useFavorites(); + const location = useLocation(); + + const isActive = (path: string) => location.pathname === path; + + return ( +
+
+ + + Phone Catalog + + + + +
+ + + {favorites.length > 0 && ( + {favorites.length} + )} + + + + {getTotalQuantity() > 0 && ( + {getTotalQuantity()} + )} + +
+
+
+ ); +}; diff --git a/src/components/Header/index.ts b/src/components/Header/index.ts new file mode 100644 index 00000000000..266dec8a1bc --- /dev/null +++ b/src/components/Header/index.ts @@ -0,0 +1 @@ +export * from './Header'; diff --git a/src/components/PicturesSlider/PicturesSlider.module.scss b/src/components/PicturesSlider/PicturesSlider.module.scss new file mode 100644 index 00000000000..393a20765e5 --- /dev/null +++ b/src/components/PicturesSlider/PicturesSlider.module.scss @@ -0,0 +1,81 @@ +.slider { + position: relative; + width: 100%; + height: 400px; + overflow: hidden; + margin-bottom: 40px; + + .prevButton { + position: absolute; + top: 50%; + transform: translateY(-50%); + left: 20px; + background: rgba(0, 0, 0, 0.5); + color: white; + border: none; + width: 50px; + height: 50px; + font-size: 24px; + cursor: pointer; + z-index: 10; + transition: background 0.3s; + + &:hover { + background: rgba(0, 0, 0, 0.7); + } + } + + .nextButton { + position: absolute; + top: 50%; + transform: translateY(-50%); + right: 20px; + background: rgba(0, 0, 0, 0.5); + color: white; + border: none; + width: 50px; + height: 50px; + font-size: 24px; + cursor: pointer; + z-index: 10; + transition: background 0.3s; + + &:hover { + background: rgba(0, 0, 0, 0.7); + } + } + + .imageContainer { + width: 100%; + height: 100%; + + .image { + width: 100%; + height: 100%; + object-fit: cover; + } + } + + .dots { + position: absolute; + bottom: 20px; + left: 50%; + transform: translateX(-50%); + display: flex; + gap: 10px; + + .dot { + width: 12px; + height: 12px; + border-radius: 50%; + border: none; + background: rgba(255, 255, 255, 0.5); + cursor: pointer; + transition: background 0.3s; + + &.active { + background: white; + } + } + } +} diff --git a/src/components/PicturesSlider/PicturesSlider.tsx b/src/components/PicturesSlider/PicturesSlider.tsx new file mode 100644 index 00000000000..02eea3cbf00 --- /dev/null +++ b/src/components/PicturesSlider/PicturesSlider.tsx @@ -0,0 +1,60 @@ +import React, { useState, useEffect } from 'react'; +import styles from './PicturesSlider.module.scss'; + +const images = [ + '/img/banner-phones.png', + '/img/banner-tablets.png', + '/img/banner-accessories.png', +]; + +export const PicturesSlider: React.FC = () => { + const [currentImage, setCurrentImage] = useState(0); + + useEffect(() => { + const interval = setInterval(() => { + setCurrentImage(prev => (prev + 1) % images.length); + }, 5000); + + return () => clearInterval(interval); + }, []); + + const goToImage = (index: number) => { + setCurrentImage(index); + }; + + const nextImage = () => { + setCurrentImage(prev => (prev + 1) % images.length); + }; + + const prevImage = () => { + setCurrentImage(prev => (prev - 1 + images.length) % images.length); + }; + + return ( +
+ +
+ {`Slide +
+ + +
+ {images.map((_, index) => ( +
+
+ ); +}; diff --git a/src/components/PicturesSlider/index.ts b/src/components/PicturesSlider/index.ts new file mode 100644 index 00000000000..81a373f3aa1 --- /dev/null +++ b/src/components/PicturesSlider/index.ts @@ -0,0 +1 @@ +export * from './PicturesSlider'; diff --git a/src/components/ProductCard/ProductCard.module.scss b/src/components/ProductCard/ProductCard.module.scss new file mode 100644 index 00000000000..fc66ba0b9ce --- /dev/null +++ b/src/components/ProductCard/ProductCard.module.scss @@ -0,0 +1,141 @@ +.productCard { + border: 1px solid #e9ecef; + border-radius: 8px; + background: white; + overflow: hidden; + transition: all 0.3s; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); + + &:hover { + transform: translateY(-2px); + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15); + } + + .imageLink { + display: block; + text-decoration: none; + + .image { + width: 100%; + height: 200px; + object-fit: contain; + background: #f8f9fa; + transition: transform 0.3s; + + &:hover { + transform: scale(1.1); + } + } + } + + .content { + padding: 16px; + } + + .titleLink { + text-decoration: none; + color: inherit; + } + + .title { + font-size: 16px; + font-weight: 600; + margin: 0 0 12px; + line-height: 1.4; + transition: color 0.3s; + + .titleLink:hover & { + color: #007bff; + } + } + + .price { + display: flex; + align-items: center; + gap: 8px; + margin-bottom: 12px; + + .currentPrice { + font-size: 18px; + font-weight: bold; + color: #007bff; + } + + .oldPrice { + font-size: 14px; + color: #6c757d; + text-decoration: line-through; + } + + .discount { + background: #dc3545; + color: white; + padding: 2px 6px; + border-radius: 4px; + font-size: 12px; + font-weight: bold; + } + } + + .specs { + margin-bottom: 16px; + + .spec { + display: flex; + justify-content: space-between; + margin-bottom: 4px; + + .specLabel { + color: #6c757d; + font-size: 14px; + } + + .specValue { + font-weight: 500; + font-size: 14px; + } + } + } + + .actions { + display: flex; + gap: 8px; + + .cartButton { + flex: 1; + background: #007bff; + color: white; + border: none; + padding: 10px; + border-radius: 4px; + cursor: pointer; + font-weight: 500; + transition: background 0.3s; + + &:hover { + background: #0056b3; + } + } + + .favoriteButton { + background: none; + border: 1px solid #dee2e6; + padding: 10px; + border-radius: 4px; + cursor: pointer; + color: #6c757d; + transition: all 0.3s; + + &:hover { + border-color: #dc3545; + color: #dc3545; + } + + &.active { + background: #dc3545; + border-color: #dc3545; + color: white; + } + } + } +} diff --git a/src/components/ProductCard/ProductCard.tsx b/src/components/ProductCard/ProductCard.tsx new file mode 100644 index 00000000000..67b45fe6e4b --- /dev/null +++ b/src/components/ProductCard/ProductCard.tsx @@ -0,0 +1,81 @@ +import React from 'react'; +import { Link } from 'react-router-dom'; +import { Product } from '../../types'; +import { useCart } from '../../context/CartContext'; +import { useFavorites } from '../../context/FavoritesContext'; +import styles from './ProductCard.module.scss'; + +interface ProductCardProps { + product: Product; +} + +export const ProductCard: React.FC = ({ product }) => { + const { addToCart } = useCart(); + const { addToFavorites, removeFromFavorites, isFavorite } = useFavorites(); + + const handleAddToCart = () => { + addToCart(product); + }; + + const handleToggleFavorite = () => { + if (isFavorite(product.itemId)) { + removeFromFavorites(product.itemId); + } else { + addToFavorites(product); + } + }; + + const discount = product.fullPrice - product.price; + const discountPercentage = Math.round((discount / product.fullPrice) * 100); + + return ( +
+ + {product.name} + + +
+ +

{product.name}

+ + +
+ ${product.price} + {discount > 0 && ( + <> + ${product.fullPrice} + -{discountPercentage}% + + )} +
+ +
+
+ Screen + {product.screen} +
+
+ Capacity + {product.capacity} +
+
+ RAM + {product.ram} +
+
+ +
+ + +
+
+
+ ); +}; diff --git a/src/components/ProductCard/index.ts b/src/components/ProductCard/index.ts new file mode 100644 index 00000000000..7ce031c3820 --- /dev/null +++ b/src/components/ProductCard/index.ts @@ -0,0 +1 @@ +export * from './ProductCard'; diff --git a/src/components/ProductsSlider/ProductsSlider.module.scss b/src/components/ProductsSlider/ProductsSlider.module.scss new file mode 100644 index 00000000000..6590f8b002f --- /dev/null +++ b/src/components/ProductsSlider/ProductsSlider.module.scss @@ -0,0 +1,77 @@ +.productsSlider { + margin-bottom: 40px; + + h2 { + font-size: 24px; + margin-bottom: 20px; + text-align: center; + } + + .sliderContainer { + position: relative; + display: flex; + align-items: center; + + .prevButton { + background: #f8f9fa; + border: 1px solid #dee2e6; + width: 40px; + height: 40px; + border-radius: 50%; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + font-size: 18px; + z-index: 10; + transition: all 0.3s; + margin-right: 10px; + + &:hover { + background: #007bff; + color: white; + border-color: #007bff; + } + } + + .nextButton { + background: #f8f9fa; + border: 1px solid #dee2e6; + width: 40px; + height: 40px; + border-radius: 50%; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + font-size: 18px; + z-index: 10; + transition: all 0.3s; + margin-left: 10px; + + &:hover { + background: #007bff; + color: white; + border-color: #007bff; + } + } + + .slider { + flex: 1; + display: flex; + gap: 20px; + overflow-x: auto; + scroll-behavior: smooth; + padding: 10px 0; + + &::-webkit-scrollbar { + display: none; + } + + .productItem { + flex-shrink: 0; + width: 250px; + } + } + } +} diff --git a/src/components/ProductsSlider/ProductsSlider.tsx b/src/components/ProductsSlider/ProductsSlider.tsx new file mode 100644 index 00000000000..75680cb05d7 --- /dev/null +++ b/src/components/ProductsSlider/ProductsSlider.tsx @@ -0,0 +1,49 @@ +import React, { useRef } from 'react'; +import { Product } from '../../types'; +import { ProductCard } from '../ProductCard'; +import styles from './ProductsSlider.module.scss'; + +interface ProductsSliderProps { + title: string; + products: Product[]; +} + +export const ProductsSlider: React.FC = ({ + title, + products, +}) => { + const sliderRef = useRef(null); + + const scrollLeft = () => { + if (sliderRef.current) { + sliderRef.current.scrollBy({ left: -300, behavior: 'smooth' }); + } + }; + + const scrollRight = () => { + if (sliderRef.current) { + sliderRef.current.scrollBy({ left: 300, behavior: 'smooth' }); + } + }; + + return ( +
+

{title}

+
+ +
+ {products.map(product => ( +
+ +
+ ))} +
+ +
+
+ ); +}; diff --git a/src/components/ProductsSlider/index.ts b/src/components/ProductsSlider/index.ts new file mode 100644 index 00000000000..68d3ea00125 --- /dev/null +++ b/src/components/ProductsSlider/index.ts @@ -0,0 +1 @@ +export * from './ProductsSlider'; diff --git a/src/context/CartContext.tsx b/src/context/CartContext.tsx new file mode 100644 index 00000000000..2f554fb4046 --- /dev/null +++ b/src/context/CartContext.tsx @@ -0,0 +1,107 @@ +import React, { + createContext, + useContext, + useState, + useEffect, + ReactNode, +} from 'react'; +import { CartItem, Product } from '../types'; + +interface CartContextType { + cart: CartItem[]; + addToCart: (product: Product) => void; + removeFromCart: (id: string) => void; + updateQuantity: (id: string, quantity: number) => void; + clearCart: () => void; + getTotalQuantity: () => number; + getTotalPrice: () => number; +} + +const CartContext = createContext(undefined); + +export const useCart = () => { + const context = useContext(CartContext); + + if (!context) { + throw new Error('useCart must be used within a CartProvider'); + } + + return context; +}; + +interface CartProviderProps { + children: ReactNode; +} + +export const CartProvider: React.FC = ({ children }) => { + const [cart, setCart] = useState([]); + + useEffect(() => { + const storedCart = localStorage.getItem('cart'); + + if (storedCart) { + setCart(JSON.parse(storedCart)); + } + }, []); + + useEffect(() => { + localStorage.setItem('cart', JSON.stringify(cart)); + }, [cart]); + + const addToCart = (product: Product) => { + setCart(prevCart => { + const existingItem = prevCart.find(item => item.id === product.itemId); + + if (existingItem) { + return prevCart; // Already in cart + } + + return [...prevCart, { id: product.itemId, quantity: 1, product }]; + }); + }; + + const removeFromCart = (id: string) => { + setCart(prevCart => prevCart.filter(item => item.id !== id)); + }; + + const updateQuantity = (id: string, quantity: number) => { + if (quantity <= 0) { + return; + } + + setCart(prevCart => + prevCart.map(item => (item.id === id ? { ...item, quantity } : item)), + ); + }; + + const clearCart = () => { + setCart([]); + }; + + const getTotalQuantity = () => { + return cart.reduce((total, item) => total + item.quantity, 0); + }; + + const getTotalPrice = () => { + return cart.reduce( + (total, item) => total + item.product.price * item.quantity, + 0, + ); + }; + + return ( + + {children} + + ); +}; diff --git a/src/context/FavoritesContext.tsx b/src/context/FavoritesContext.tsx new file mode 100644 index 00000000000..5502d3bdf83 --- /dev/null +++ b/src/context/FavoritesContext.tsx @@ -0,0 +1,84 @@ +import React, { + createContext, + useContext, + useState, + useEffect, + ReactNode, +} from 'react'; +import { Product } from '../types'; + +interface FavoritesContextType { + favorites: Product[]; + addToFavorites: (product: Product) => void; + removeFromFavorites: (id: string) => void; + isFavorite: (id: string) => boolean; +} + +const FavoritesContext = createContext( + undefined, +); + +export const useFavorites = () => { + const context = useContext(FavoritesContext); + + if (!context) { + throw new Error('useFavorites must be used within a FavoritesProvider'); + } + + return context; +}; + +interface FavoritesProviderProps { + children: ReactNode; +} + +export const FavoritesProvider: React.FC = ({ + children, +}) => { + const [favorites, setFavorites] = useState([]); + + useEffect(() => { + const storedFavorites = localStorage.getItem('favorites'); + + if (storedFavorites) { + setFavorites(JSON.parse(storedFavorites)); + } + }, []); + + useEffect(() => { + localStorage.setItem('favorites', JSON.stringify(favorites)); + }, [favorites]); + + const addToFavorites = (product: Product) => { + setFavorites(prevFavorites => { + if (prevFavorites.find(fav => fav.itemId === product.itemId)) { + return prevFavorites; // Already favorite + } + + return [...prevFavorites, product]; + }); + }; + + const removeFromFavorites = (id: string) => { + setFavorites(prevFavorites => + prevFavorites.filter(fav => fav.itemId !== id), + ); + }; + + const isFavorite = (id: string) => { + return favorites.some(fav => fav.itemId === id); + }; + + return ( + + {children} + + ); +}; diff --git a/src/modules/CartPage/CartPage.module.scss b/src/modules/CartPage/CartPage.module.scss new file mode 100644 index 00000000000..e945b0d9509 --- /dev/null +++ b/src/modules/CartPage/CartPage.module.scss @@ -0,0 +1,165 @@ +.cartPage { + max-width: 1200px; + margin: 0 auto; + padding: 20px; + + .pageHeader { + display: flex; + align-items: center; + justify-content: center; + gap: 12px; + margin-bottom: 30px; + + i { + font-size: 32px; + color: #007bff; + } + + h1 { + margin: 0; + font-size: 32px; + } + } + + .empty { + text-align: center; + font-size: 18px; + color: #6c757d; + padding: 50px; + } + + .cartItems { + margin-bottom: 30px; + } + + .cartItem { + display: flex; + align-items: center; + gap: 20px; + padding: 20px; + border: 1px solid #e9ecef; + border-radius: 8px; + background: white; + margin-bottom: 16px; + + .itemImage { + width: 80px; + height: 80px; + object-fit: contain; + background: #f8f9fa; + } + + .itemDetails { + flex: 1; + + h3 { + margin: 0 0 8px; + font-size: 18px; + } + + p { + margin: 0; + color: #007bff; + font-weight: bold; + } + } + + .quantityControls { + display: flex; + align-items: center; + gap: 10px; + + button { + background: #f8f9fa; + border: 1px solid #dee2e6; + width: 30px; + height: 30px; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + border-radius: 4px; + transition: background 0.3s; + + &:disabled { + opacity: 0.5; + cursor: not-allowed; + } + + &:hover:not(:disabled) { + background: #e9ecef; + } + } + + span { + font-weight: 500; + min-width: 20px; + text-align: center; + } + } + + .itemTotal { + font-weight: bold; + font-size: 18px; + color: #007bff; + } + + .removeButton { + background: #dc3545; + color: white; + border: none; + width: 30px; + height: 30px; + border-radius: 4px; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + transition: background 0.3s; + + &:hover { + background: #c82333; + } + } + } + + .cartSummary { + display: flex; + justify-content: space-between; + align-items: center; + padding: 20px; + background: #f8f9fa; + border-radius: 8px; + + .total { + display: flex; + align-items: center; + gap: 20px; + font-size: 24px; + font-weight: bold; + + span:first-child { + color: #6c757d; + } + + span:last-child { + color: #007bff; + } + } + + .checkoutButton { + background: #28a745; + color: white; + border: none; + padding: 12px 24px; + border-radius: 4px; + font-size: 18px; + cursor: pointer; + transition: background 0.3s; + + &:hover { + background: #218838; + } + } + } +} diff --git a/src/modules/CartPage/CartPage.tsx b/src/modules/CartPage/CartPage.tsx new file mode 100644 index 00000000000..5584909208d --- /dev/null +++ b/src/modules/CartPage/CartPage.tsx @@ -0,0 +1,88 @@ +import React from 'react'; +import { useCart } from '../../context/CartContext'; +import styles from './CartPage.module.scss'; + +export const CartPage: React.FC = () => { + const { cart, removeFromCart, updateQuantity, clearCart, getTotalPrice } = + useCart(); + + const handleCheckout = () => { + const confirmed = window.confirm( + 'Checkout is not implemented yet. Do you want to clear the Cart?', + ); + + if (confirmed) { + clearCart(); + } + }; + + if (cart.length === 0) { + return ( +
+
+ +

Cart

+
+

Your cart is empty

+
+ ); + } + + return ( +
+
+ +

Cart

+
+ +
+ {cart.map(item => ( +
+ {item.product.name} +
+

{item.product.name}

+

${item.product.price}

+
+
+ + {item.quantity} + +
+
+ ${item.product.price * item.quantity} +
+ +
+ ))} +
+ +
+
+ Total: + ${getTotalPrice()} +
+ +
+
+ ); +}; diff --git a/src/modules/CartPage/index.ts b/src/modules/CartPage/index.ts new file mode 100644 index 00000000000..90c010237a0 --- /dev/null +++ b/src/modules/CartPage/index.ts @@ -0,0 +1 @@ +export * from './CartPage'; diff --git a/src/modules/FavoritesPage/FavoritesPage.module.scss b/src/modules/FavoritesPage/FavoritesPage.module.scss new file mode 100644 index 00000000000..b49f6e4c5bd --- /dev/null +++ b/src/modules/FavoritesPage/FavoritesPage.module.scss @@ -0,0 +1,23 @@ +.favoritesPage { + max-width: 1200px; + margin: 0 auto; + padding: 20px; + + h1 { + text-align: center; + margin-bottom: 30px; + } + + .empty { + text-align: center; + font-size: 18px; + color: #6c757d; + padding: 50px; + } + + .favoritesGrid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); + gap: 20px; + } +} diff --git a/src/modules/FavoritesPage/FavoritesPage.tsx b/src/modules/FavoritesPage/FavoritesPage.tsx new file mode 100644 index 00000000000..42c51b32445 --- /dev/null +++ b/src/modules/FavoritesPage/FavoritesPage.tsx @@ -0,0 +1,24 @@ +import React from 'react'; +import { useFavorites } from '../../context/FavoritesContext'; +import { ProductCard } from '../../components/ProductCard'; +import styles from './FavoritesPage.module.scss'; + +export const FavoritesPage: React.FC = () => { + const { favorites } = useFavorites(); + + return ( +
+

Favorites

+ + {favorites.length === 0 ? ( +

No favorite products yet

+ ) : ( +
+ {favorites.map(product => ( + + ))} +
+ )} +
+ ); +}; diff --git a/src/modules/FavoritesPage/index.ts b/src/modules/FavoritesPage/index.ts new file mode 100644 index 00000000000..b3a884b1889 --- /dev/null +++ b/src/modules/FavoritesPage/index.ts @@ -0,0 +1 @@ +export * from './FavoritesPage'; diff --git a/src/modules/HomePage/HomePage.module.scss b/src/modules/HomePage/HomePage.module.scss new file mode 100644 index 00000000000..c9a73c5ce3e --- /dev/null +++ b/src/modules/HomePage/HomePage.module.scss @@ -0,0 +1,63 @@ +.homePage { + padding: 20px; + max-width: 1200px; + margin: 0 auto; +} + +.visuallyHidden { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border: 0; +} + +.shopByCategory { + margin: 40px 0; + + h2 { + text-align: center; + font-size: 32px; + margin-bottom: 30px; + color: #333; + } + + .categories { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); + gap: 20px; + } + + .category { + display: block; + text-decoration: none; + background: white; + border: 1px solid #e9ecef; + border-radius: 8px; + padding: 30px; + text-align: center; + transition: all 0.3s; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); + + &:hover { + transform: translateY(-5px); + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15); + } + + .categoryIcon { + font-size: 48px; + color: #007bff; + margin-bottom: 15px; + } + + h3 { + color: #333; + font-size: 24px; + margin: 0; + } + } +} diff --git a/src/modules/HomePage/HomePage.tsx b/src/modules/HomePage/HomePage.tsx new file mode 100644 index 00000000000..57d681fc854 --- /dev/null +++ b/src/modules/HomePage/HomePage.tsx @@ -0,0 +1,72 @@ +import React, { useState, useEffect } from 'react'; +import { Link } from 'react-router-dom'; +import { Product } from '../../types'; +import { getProducts } from '../../utils/api'; +import { PicturesSlider } from '../../components/PicturesSlider'; +import { ProductsSlider } from '../../components/ProductsSlider'; +import styles from './HomePage.module.scss'; + +export const HomePage: React.FC = () => { + const [hotPriceProducts, setHotPriceProducts] = useState([]); + const [brandNewProducts, setBrandNewProducts] = useState([]); + + useEffect(() => { + const fetchProducts = async () => { + const products = await getProducts(); + + // Hot prices: products with discount, sorted by discount amount descending + const hotPrices = products + .filter(p => p.fullPrice > p.price) + .sort((a, b) => b.fullPrice - b.price - (a.fullPrice - a.price)) + .slice(0, 8); + + // Brand new: newest products by year + const brandNew = products.sort((a, b) => b.year - a.year).slice(0, 8); + + setHotPriceProducts(hotPrices); + setBrandNewProducts(brandNew); + }; + + fetchProducts(); + }, []); + + return ( +
+

Product Catalog

+ + + + {hotPriceProducts.length > 0 && ( + + )} + +
+

Shop by category

+
+ +
+ +
+

Phones

+ + +
+ +
+

Tablets

+ + +
+ +
+

Accessories

+ +
+
+ + {brandNewProducts.length > 0 && ( + + )} +
+ ); +}; diff --git a/src/modules/HomePage/index.ts b/src/modules/HomePage/index.ts new file mode 100644 index 00000000000..11e53da674c --- /dev/null +++ b/src/modules/HomePage/index.ts @@ -0,0 +1 @@ +export * from './HomePage'; diff --git a/src/modules/NotFoundPage/NotFoundPage.module.scss b/src/modules/NotFoundPage/NotFoundPage.module.scss new file mode 100644 index 00000000000..7c6fb0fb518 --- /dev/null +++ b/src/modules/NotFoundPage/NotFoundPage.module.scss @@ -0,0 +1,32 @@ +.notFoundPage { + display: flex; + align-items: center; + justify-content: center; + min-height: 60vh; + padding: 20px; +} + +.container { + text-align: center; + + h1 { + font-size: 48px; + color: #333; + margin-bottom: 20px; + } + + .homeLink { + display: inline-block; + background: #007bff; + color: white; + padding: 12px 24px; + text-decoration: none; + border-radius: 4px; + font-size: 18px; + transition: background 0.3s; + + &:hover { + background: #0056b3; + } + } +} diff --git a/src/modules/NotFoundPage/NotFoundPage.tsx b/src/modules/NotFoundPage/NotFoundPage.tsx new file mode 100644 index 00000000000..08d11e87a01 --- /dev/null +++ b/src/modules/NotFoundPage/NotFoundPage.tsx @@ -0,0 +1,16 @@ +import React from 'react'; +import { Link } from 'react-router-dom'; +import styles from './NotFoundPage.module.scss'; + +export const NotFoundPage: React.FC = () => { + return ( +
+
+

Page not found

+ + Go to Home + +
+
+ ); +}; diff --git a/src/modules/NotFoundPage/index.ts b/src/modules/NotFoundPage/index.ts new file mode 100644 index 00000000000..6197aa75aa8 --- /dev/null +++ b/src/modules/NotFoundPage/index.ts @@ -0,0 +1 @@ +export * from './NotFoundPage'; diff --git a/src/modules/ProductDetailsPage/ProductDetailsPage.module.scss b/src/modules/ProductDetailsPage/ProductDetailsPage.module.scss new file mode 100644 index 00000000000..1f8f2a387d2 --- /dev/null +++ b/src/modules/ProductDetailsPage/ProductDetailsPage.module.scss @@ -0,0 +1,247 @@ +.productDetailsPage { + max-width: 1200px; + margin: 0 auto; + padding: 20px; + + .loader, + .error { + text-align: center; + padding: 50px; + } + + .error { + p { + font-size: 18px; + color: #dc3545; + } + } + + .breadcrumbs { + display: flex; + align-items: center; + gap: 8px; + margin-bottom: 20px; + font-size: 14px; + color: #6c757d; + + .backButton { + background: #f8f9fa; + border: 1px solid #dee2e6; + padding: 8px 16px; + border-radius: 4px; + cursor: pointer; + margin-right: 16px; + transition: background 0.3s; + + &:hover { + background: #e9ecef; + } + } + } + + .productContent { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 40px; + margin-bottom: 60px; + + .productImages { + .mainImage { + margin-bottom: 20px; + + img { + width: 100%; + height: 400px; + object-fit: contain; + background: #f8f9fa; + border-radius: 8px; + } + } + + .thumbnailImages { + display: flex; + gap: 10px; + + img { + width: 60px; + height: 60px; + object-fit: cover; + cursor: pointer; + border-radius: 4px; + opacity: 0.7; + transition: opacity 0.3s; + + &.active { + opacity: 1; + border: 2px solid #007bff; + } + + &:hover { + opacity: 1; + border: 2px solid #007bff; + } + } + } + } + + .productInfo { + h1 { + font-size: 32px; + margin-bottom: 20px; + } + + .price { + margin-bottom: 30px; + + .currentPrice { + font-size: 28px; + font-weight: bold; + color: #007bff; + margin-right: 16px; + } + + .oldPrice { + font-size: 20px; + color: #6c757d; + text-decoration: line-through; + } + } + + .options { + margin-bottom: 30px; + + .option { + margin-bottom: 20px; + + label { + display: block; + font-weight: 500; + margin-bottom: 10px; + } + + .colorOptions, + .capacityOptions { + display: flex; + gap: 10px; + flex-wrap: wrap; + } + + .colorOption, + .capacityOption { + display: flex; + align-items: center; + gap: 8px; + padding: 8px 12px; + border: 1px solid #dee2e6; + border-radius: 4px; + cursor: pointer; + transition: border-color 0.3s; + + input { + display: none; + } + + span { + font-size: 14px; + } + + &:has(input:checked) { + border-color: #007bff; + background: #f8f9ff; + } + } + } + } + + .actions { + display: flex; + gap: 16px; + + .favoriteButton { + background: #f8f9fa; + border: 1px solid #dee2e6; + padding: 16px; + border-radius: 4px; + cursor: pointer; + font-size: 18px; + transition: all 0.3s; + + &:hover { + border-color: #dc3545; + color: #dc3545; + } + + &.active { + background: #dc3545; + border-color: #dc3545; + color: white; + } + } + } + } + } + + .suggestedProducts h2 { + text-align: center; + font-size: 24px; + margin-bottom: 30px; + } + + .productDetails { + margin-bottom: 60px; + + .about, + .techSpecs { + margin-bottom: 40px; + + h2 { + font-size: 24px; + margin-bottom: 20px; + color: #333; + } + + h3 { + font-size: 18px; + margin-bottom: 10px; + color: #007bff; + } + + p { + margin-bottom: 16px; + line-height: 1.6; + } + } + + .techSpecs { + .specs { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 16px; + + .spec { + display: flex; + justify-content: space-between; + padding: 12px 0; + border-bottom: 1px solid #e9ecef; + + .specName { + font-weight: 500; + color: #6c757d; + } + + .specValue { + font-weight: 500; + } + } + } + } + } + + .suggestedProducts { + .suggestedGrid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); + gap: 20px; + } + } +} diff --git a/src/modules/ProductDetailsPage/ProductDetailsPage.tsx b/src/modules/ProductDetailsPage/ProductDetailsPage.tsx new file mode 100644 index 00000000000..6bb6bfaf7e9 --- /dev/null +++ b/src/modules/ProductDetailsPage/ProductDetailsPage.tsx @@ -0,0 +1,307 @@ +import React, { useState, useEffect } from 'react'; +import { useParams, useNavigate } from 'react-router-dom'; +import { Product, ProductDetails } from '../../types'; +import { getProductDetailsById, getSuggestedProducts } from '../../utils/api'; +import { ProductCard } from '../../components/ProductCard'; +import { useCart } from '../../context/CartContext'; +import { useFavorites } from '../../context/FavoritesContext'; +import styles from './ProductDetailsPage.module.scss'; + +export const ProductDetailsPage: React.FC = () => { + const { productId } = useParams<{ productId: string }>(); + const navigate = useNavigate(); + const { addToCart } = useCart(); + const { addToFavorites, removeFromFavorites, isFavorite } = useFavorites(); + const [product, setProduct] = useState(null); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + const [selectedImage, setSelectedImage] = useState(0); + const [selectedColor, setSelectedColor] = useState(''); + const [selectedCapacity, setSelectedCapacity] = useState(''); + const [suggestedProducts, setSuggestedProducts] = useState([]); + + useEffect(() => { + const fetchProduct = async () => { + if (!productId) { + return; + } + + try { + setLoading(true); + const productData = await getProductDetailsById(productId); + + if (productData) { + setProduct(productData); + setSelectedColor(productData.color); + setSelectedCapacity(productData.capacity); + // Fetch suggested products + const suggested = await getSuggestedProducts(productId); + + setSuggestedProducts(suggested); + } else { + setError('Product was not found'); + } + } catch (err) { + setError('Something went wrong'); + } finally { + setLoading(false); + } + }; + + fetchProduct(); + }, [productId]); + + const handleBack = () => { + navigate(-1); + }; + + const handleAddToCart = () => { + if (product) { + // Convert ProductDetails to Product for cart + const cartProduct: Product = { + id: 0, // Not used + category: product.category, + itemId: product.id, + name: product.name, + fullPrice: product.priceRegular, + price: product.priceDiscount, + screen: product.screen, + capacity: selectedCapacity || product.capacity, + color: selectedColor || product.color, + ram: product.ram, + year: 2023, // Not available + image: product.images[0], + }; + + addToCart(cartProduct); + } + }; + + const handleToggleFavorite = () => { + if (product) { + if (isFavorite(product.id)) { + removeFromFavorites(product.id); + } else { + // Convert to Product for favorites + const favProduct: Product = { + id: 0, + category: product.category, + itemId: product.id, + name: product.name, + fullPrice: product.priceRegular, + price: product.priceDiscount, + screen: product.screen, + capacity: product.capacity, + color: product.color, + ram: product.ram, + year: 2023, + image: product.images[0], + }; + + addToFavorites(favProduct); + } + } + }; + + if (loading) { + return
Loading...
; + } + + if (error || !product) { + return ( +
+

{error || 'Product was not found'}

+
+ ); + } + + return ( +
+ + +
+
+
+ {product.name} +
+
+ {product.images.map((image, index) => ( + {`${product.name} setSelectedImage(index)} + /> + ))} +
+
+ +
+

{product.name}

+ +
+ + ${product.priceDiscount} + + ${product.priceRegular} +
+ +
+
+ Color: +
+ {product.colorsAvailable.map(color => { + const colorInputId = `color-${product.id}-${color}`; + + return ( + + ); + })} +
+
+ +
+ Capacity: +
+ {product.capacityAvailable.map(capacity => { + const capacityInputId = `capacity-${product.id}-${capacity}`; + + return ( + + ); + })} +
+
+
+ +
+ + +
+
+
+ +
+
+

About

+ {product.description.map((desc, index) => ( +
+

{desc.title}

+ {desc.text.map((text, i) => ( +

{text}

+ ))} +
+ ))} +
+ +
+

Tech specs

+
+
+ Screen + {product.screen} +
+
+ Resolution + {product.resolution} +
+
+ Processor + {product.processor} +
+
+ RAM + {product.ram} +
+
+ Camera + {product.camera} +
+
+ Zoom + {product.zoom} +
+
+ Cell + + {product.cell.join(', ')} + +
+
+ +
+ + +
+
+
+ +
+

You may also like

+
+ {suggestedProducts.map(suggestedProduct => ( + + ))} +
+
+
+ ); +}; diff --git a/src/modules/ProductDetailsPage/index.ts b/src/modules/ProductDetailsPage/index.ts new file mode 100644 index 00000000000..6615089e5ec --- /dev/null +++ b/src/modules/ProductDetailsPage/index.ts @@ -0,0 +1 @@ +export * from './ProductDetailsPage'; diff --git a/src/modules/ProductsPage/ProductsPage.module.scss b/src/modules/ProductsPage/ProductsPage.module.scss new file mode 100644 index 00000000000..ded50eadeb8 --- /dev/null +++ b/src/modules/ProductsPage/ProductsPage.module.scss @@ -0,0 +1,127 @@ +.productsPage { + max-width: 1200px; + margin: 0 auto; + padding: 20px; + + h1 { + text-align: center; + margin-bottom: 30px; + } + + .loader, + .error { + text-align: center; + padding: 50px; + } + + .error button { + background: #007bff; + color: white; + border: none; + padding: 10px 20px; + border-radius: 4px; + cursor: pointer; + margin-top: 10px; + } + + .pagination { + display: flex; + justify-content: center; + align-items: center; + gap: 20px; + margin-top: 30px; + } + + .pagination button { + background: #007bff; + color: white; + border: none; + padding: 10px 20px; + border-radius: 4px; + cursor: pointer; + transition: background 0.3s; + } + + .pagination button:disabled { + background: #ccc; + cursor: not-allowed; + } + + .error button:hover { + background: #0056b3; + } + + .pagination button:hover:not(:disabled) { + background: #0056b3; + } + + .pagination span { + font-weight: 500; + } + + .searchResults { + text-align: center; + margin-bottom: 20px; + font-weight: 500; + } + + .controls { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 30px; + flex-wrap: wrap; + gap: 20px; + + .search { + flex: 1; + min-width: 200px; + + input { + width: 100%; + padding: 8px 12px; + border: 1px solid #ddd; + border-radius: 4px; + font-size: 16px; + } + } + + .sort, + .perPage { + display: flex; + align-items: center; + gap: 10px; + + label { + font-weight: 500; + } + + select { + padding: 8px 12px; + border: 1px solid #ddd; + border-radius: 4px; + background: white; + } + } + } + + .productsGrid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); + gap: 20px; + margin-bottom: 40px; + } + + .productCard { + border: 1px solid #e9ecef; + border-radius: 8px; + padding: 20px; + background: white; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); + transition: transform 0.3s; + + &:hover { + transform: translateY(-2px); + } + } +} diff --git a/src/modules/ProductsPage/ProductsPage.tsx b/src/modules/ProductsPage/ProductsPage.tsx new file mode 100644 index 00000000000..08086137d35 --- /dev/null +++ b/src/modules/ProductsPage/ProductsPage.tsx @@ -0,0 +1,230 @@ +import React, { useState, useEffect, useMemo } from 'react'; +import { useSearchParams } from 'react-router-dom'; +import { Product, SortOption, PerPageOption } from '../../types'; +import { getProducts } from '../../utils/api'; +import { ProductCard } from '../../components/ProductCard'; +import { debounce } from '../../utils/debounce'; +import styles from './ProductsPage.module.scss'; + +interface ProductsPageProps { + category: 'phones' | 'tablets' | 'accessories'; +} + +export const ProductsPage: React.FC = ({ category }) => { + const [searchParams, setSearchParams] = useSearchParams(); + const [products, setProducts] = useState([]); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + + const sort = (searchParams.get('sort') as SortOption) || 'age'; + const perPage = (searchParams.get('perPage') as PerPageOption) || 16; + const page = parseInt(searchParams.get('page') || '1', 10); + const query = searchParams.get('query') || ''; + + useEffect(() => { + const fetchProducts = async () => { + try { + setLoading(true); + const allProducts = await getProducts(); + const filteredProducts = allProducts.filter( + p => p.category === category, + ); + + setProducts(filteredProducts); + } catch (err) { + setError('Something went wrong'); + } finally { + setLoading(false); + } + }; + + fetchProducts(); + }, [category]); + + const sortedAndFilteredProducts = useMemo(() => { + let filtered = products; + + if (query) { + filtered = filtered.filter(p => + p.name.toLowerCase().includes(query.toLowerCase()), + ); + } + + switch (sort) { + case 'age': + filtered.sort((a, b) => b.year - a.year); + break; + case 'title': + filtered.sort((a, b) => a.name.localeCompare(b.name)); + break; + case 'price': + filtered.sort((a, b) => a.price - b.price); + break; + } + + return filtered; + }, [products, sort, query]); + + const totalPages = + perPage === 'all' + ? 1 + : Math.ceil(sortedAndFilteredProducts.length / perPage); + const startIndex = perPage === 'all' ? 0 : (page - 1) * perPage; + const endIndex = + perPage === 'all' ? sortedAndFilteredProducts.length : startIndex + perPage; + const displayedProducts = sortedAndFilteredProducts.slice( + startIndex, + endIndex, + ); + + const handleSortChange = (newSort: SortOption) => { + const params = new URLSearchParams(searchParams); + + params.set('sort', newSort); + params.set('page', '1'); // Reset to first page + setSearchParams(params); + }; + + const handlePerPageChange = (newPerPage: PerPageOption) => { + const params = new URLSearchParams(searchParams); + + params.set('perPage', newPerPage.toString()); + params.set('page', '1'); // Reset to first page + setSearchParams(params); + }; + + const handlePageChange = (newPage: number) => { + const params = new URLSearchParams(searchParams); + + params.set('page', newPage.toString()); + setSearchParams(params); + }; + + const debouncedSearchChange = useMemo( + () => + debounce((newQuery: string) => { + const params = new URLSearchParams(searchParams); + + if (newQuery) { + params.set('query', newQuery); + } else { + params.delete('query'); + } + + params.set('page', '1'); + setSearchParams(params); + }, 500), + [searchParams, setSearchParams], + ); + + const handleSearchChange = (newQuery: string) => { + debouncedSearchChange(newQuery); + }; + + if (loading) { + return
Loading...
; + } + + if (error) { + return ( +
+

{error}

+ +
+ ); + } + + const categoryTitles = { + phones: 'Phones', + tablets: 'Tablets', + accessories: 'Accessories', + }; + + return ( +
+

{categoryTitles[category]} page

+ + {query && ( +

+ {sortedAndFilteredProducts.length === 0 + ? `There are no ${category} matching the query` + : `${sortedAndFilteredProducts.length} ${category} found`} +

+ )} + + {!query && sortedAndFilteredProducts.length === 0 && ( +

There are no {category} yet

+ )} + + {sortedAndFilteredProducts.length > 0 && ( + <> +
+
+ handleSearchChange(e.target.value)} + /> +
+ +
+ + +
+ +
+ + +
+
+ +
+ {displayedProducts.map(product => ( + + ))} +
+ + {perPage !== 'all' && totalPages > 1 && ( +
+ + + Page {page} of {totalPages} + + +
+ )} + + )} +
+ ); +}; diff --git a/src/modules/ProductsPage/index.ts b/src/modules/ProductsPage/index.ts new file mode 100644 index 00000000000..8e350f20bf9 --- /dev/null +++ b/src/modules/ProductsPage/index.ts @@ -0,0 +1 @@ +export * from './ProductsPage'; diff --git a/src/types/index.ts b/src/types/index.ts new file mode 100644 index 00000000000..10c921d4eea --- /dev/null +++ b/src/types/index.ts @@ -0,0 +1,49 @@ +export interface Product { + id: number; + category: string; + itemId: string; + name: string; + fullPrice: number; + price: number; + screen: string; + capacity: string; + color: string; + ram: string; + year: number; + image: string; +} + +export interface ProductDetails { + id: string; + category: string; + namespaceId: string; + name: string; + capacityAvailable: string[]; + capacity: string; + priceRegular: number; + priceDiscount: number; + colorsAvailable: string[]; + color: string; + images: string[]; + description: { + title: string; + text: string[]; + }[]; + screen: string; + resolution: string; + processor: string; + ram: string; + camera: string; + zoom: string; + cell: string[]; +} + +export interface CartItem { + id: string; + quantity: number; + product: Product; +} + +export type SortOption = 'age' | 'title' | 'price'; + +export type PerPageOption = 4 | 8 | 16 | 'all'; diff --git a/src/utils/api.ts b/src/utils/api.ts new file mode 100644 index 00000000000..6e2b601cb69 --- /dev/null +++ b/src/utils/api.ts @@ -0,0 +1,103 @@ +import { Product, ProductDetails } from '../types'; + +const API_BASE = '/api'; + +export const getProducts = async (): Promise => { + const response = await fetch(`${API_BASE}/products.json`); + + if (!response.ok) { + throw new Error('Failed to fetch products'); + } + + return response.json(); +}; + +export const getPhones = async (): Promise => { + const response = await fetch(`${API_BASE}/phones.json`); + + if (!response.ok) { + throw new Error('Failed to fetch phones'); + } + + return response.json(); +}; + +export const getTablets = async (): Promise => { + const response = await fetch(`${API_BASE}/tablets.json`); + + if (!response.ok) { + throw new Error('Failed to fetch tablets'); + } + + return response.json(); +}; + +export const getAccessories = async (): Promise => { + const response = await fetch(`${API_BASE}/accessories.json`); + + if (!response.ok) { + throw new Error('Failed to fetch accessories'); + } + + return response.json(); +}; + +export const getProductDetails = async ( + category: string, + productId: string, +): Promise => { + let products: ProductDetails[]; + + switch (category) { + case 'phones': + products = await getPhones(); + break; + case 'tablets': + products = await getTablets(); + break; + case 'accessories': + products = await getAccessories(); + break; + default: + return null; + } + + return products.find(product => product.id === productId) || null; +}; + +export const getSuggestedProducts = async ( + currentProductId: string, + limit: number = 8, +): Promise => { + const products = await getProducts(); + // Simple random selection excluding current product + const filtered = products.filter(p => p.itemId !== currentProductId); + const shuffled = filtered.sort(() => 0.5 - Math.random()); + + return shuffled.slice(0, limit); +}; + +export const getProductDetailsById = async ( + productId: string, +): Promise => { + // Try phones first + let products = await getPhones(); + let product = products.find(p => p.id === productId); + + if (product) { + return product; + } + + // Try tablets + products = await getTablets(); + product = products.find(p => p.id === productId); + if (product) { + return product; + } + + // Try accessories + products = await getAccessories(); + product = products.find(p => p.id === productId); + + return product || null; +}; diff --git a/src/utils/debounce.ts b/src/utils/debounce.ts new file mode 100644 index 00000000000..ccc016780f0 --- /dev/null +++ b/src/utils/debounce.ts @@ -0,0 +1,11 @@ +export const debounce = unknown>( + func: T, + delay: number, +): ((...args: Parameters) => void) => { + let timeoutId: ReturnType; + + return (...args: Parameters) => { + clearTimeout(timeoutId); + timeoutId = setTimeout(() => func(...args), delay); + }; +}; From a02e4062ab7155d57aaf72c1ac2406f1085f5573 Mon Sep 17 00:00:00 2001 From: milton Date: Wed, 29 Apr 2026 14:51:25 -0300 Subject: [PATCH 02/14] add1.a --- tsconfig.json | 1 + 1 file changed, 1 insertion(+) diff --git a/tsconfig.json b/tsconfig.json index cfb168bb26c..de473b4a5df 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -5,6 +5,7 @@ ], "compilerOptions": { "sourceMap": false, + "ignoreDeprecations": "6.0", "types": ["node", "cypress"] } } From 584e2bc77ef3b986fc27f6b747c1832cc286fea5 Mon Sep 17 00:00:00 2001 From: milton Date: Thu, 30 Apr 2026 16:03:42 -0300 Subject: [PATCH 03/14] add3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6fd0a6cbfe9..2e14a3c94bc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "react_phone-catalog", - "homepage": "react_phone-catalog", + "homepage": "https://mitnues.github.io/react_phone-catalog/", "version": "0.1.0", "keywords": [], "author": "Mate Academy", From 3b95bc47168da5f60a855ae980f552703b2ad6bf Mon Sep 17 00:00:00 2001 From: milton Date: Mon, 4 May 2026 15:24:14 -0300 Subject: [PATCH 04/14] Add GitHub Actions workflow for auto-deploy to GitHub Pages --- .github/workflows/deploy.yml | 31 +++++++++++++++++++++++++++++++ index.html | 12 ++++++++++++ public/.nojekyll | 0 public/404.html | 20 ++++++++++++++++++++ public/CNAME | 1 + src/App.tsx | 2 +- vite.config.ts | 1 + 7 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/deploy.yml create mode 100644 public/.nojekyll create mode 100644 public/404.html create mode 100644 public/CNAME diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 00000000000..8bd76bc1fcc --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,31 @@ +name: Deploy to GitHub Pages + +on: + push: + branches: [ master ] + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + cache: 'npm' + + - name: Install dependencies + run: npm ci + + - name: Build + run: npm run build + + - name: Deploy to GitHub Pages + uses: peaceiris/actions-gh-pages@v3 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: ./dist + cname: mitnues.github.io \ No newline at end of file diff --git a/index.html b/index.html index f98dfb1896c..5341172bd3d 100644 --- a/index.html +++ b/index.html @@ -12,5 +12,17 @@
+ diff --git a/public/.nojekyll b/public/.nojekyll new file mode 100644 index 00000000000..e69de29bb2d diff --git a/public/404.html b/public/404.html new file mode 100644 index 00000000000..aa381d1c678 --- /dev/null +++ b/public/404.html @@ -0,0 +1,20 @@ + + + + + Single Page Apps for GitHub Pages + + + + + diff --git a/public/CNAME b/public/CNAME new file mode 100644 index 00000000000..e2b74572103 --- /dev/null +++ b/public/CNAME @@ -0,0 +1 @@ +mitnues.github.io \ No newline at end of file diff --git a/src/App.tsx b/src/App.tsx index cc54b130f04..9d90fc06e0e 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -14,7 +14,7 @@ import { NotFoundPage } from './modules/NotFoundPage'; export const App = () => ( - +
diff --git a/vite.config.ts b/vite.config.ts index 5a33944a9b4..7199c45103e 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -3,5 +3,6 @@ import react from '@vitejs/plugin-react' // https://vitejs.dev/config/ export default defineConfig({ + base: '/react_phone-catalog/', plugins: [react()], }) From 0880a31965bb22dd84bdbfca8bd4d564eee3a1d1 Mon Sep 17 00:00:00 2001 From: milton Date: Mon, 4 May 2026 15:28:45 -0300 Subject: [PATCH 05/14] Fix workflow to deploy from mit branch and remove CNAME --- .github/workflows/deploy.yml | 4 ++-- public/CNAME | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) delete mode 100644 public/CNAME diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 8bd76bc1fcc..8bfbd5daa3d 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -2,7 +2,7 @@ name: Deploy to GitHub Pages on: push: - branches: [ master ] + branches: [ mit ] jobs: deploy: @@ -28,4 +28,4 @@ jobs: with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: ./dist - cname: mitnues.github.io \ No newline at end of file + cname: mitnues.github.io diff --git a/public/CNAME b/public/CNAME deleted file mode 100644 index e2b74572103..00000000000 --- a/public/CNAME +++ /dev/null @@ -1 +0,0 @@ -mitnues.github.io \ No newline at end of file From 53fab4fdcfb8d53f577c6e2440b06b17be60ec1b Mon Sep 17 00:00:00 2001 From: milton Date: Mon, 4 May 2026 15:38:43 -0300 Subject: [PATCH 06/14] Fix API and image paths for GitHub Pages deployment --- src/utils/api.ts | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/src/utils/api.ts b/src/utils/api.ts index 6e2b601cb69..bc1e7048a15 100644 --- a/src/utils/api.ts +++ b/src/utils/api.ts @@ -1,6 +1,11 @@ import { Product, ProductDetails } from '../types'; -const API_BASE = '/api'; +const API_BASE = './api'; + +const fixImagePath = (imagePath: string): string => { + // Remove leading slash and prepend with base URL + return `${import.meta.env.BASE_URL}${imagePath.slice(1)}`; +}; export const getProducts = async (): Promise => { const response = await fetch(`${API_BASE}/products.json`); @@ -9,7 +14,11 @@ export const getProducts = async (): Promise => { throw new Error('Failed to fetch products'); } - return response.json(); + const products = await response.json(); + return products.map((product: Product) => ({ + ...product, + image: fixImagePath(product.image), + })); }; export const getPhones = async (): Promise => { @@ -19,7 +28,11 @@ export const getPhones = async (): Promise => { throw new Error('Failed to fetch phones'); } - return response.json(); + const phones = await response.json(); + return phones.map((phone: ProductDetails) => ({ + ...phone, + images: phone.images?.map(fixImagePath) || [], + })); }; export const getTablets = async (): Promise => { @@ -29,7 +42,11 @@ export const getTablets = async (): Promise => { throw new Error('Failed to fetch tablets'); } - return response.json(); + const tablets = await response.json(); + return tablets.map((tablet: ProductDetails) => ({ + ...tablet, + images: tablet.images?.map(fixImagePath) || [], + })); }; export const getAccessories = async (): Promise => { @@ -39,7 +56,11 @@ export const getAccessories = async (): Promise => { throw new Error('Failed to fetch accessories'); } - return response.json(); + const accessories = await response.json(); + return accessories.map((accessory: ProductDetails) => ({ + ...accessory, + images: accessory.images?.map(fixImagePath) || [], + })); }; export const getProductDetails = async ( From eb3922232a9c6eff9be2457cf98e7f8e0cdfec42 Mon Sep 17 00:00:00 2001 From: milton Date: Mon, 4 May 2026 15:50:15 -0300 Subject: [PATCH 07/14] Fix image paths and routing for GitHub Pages --- public/404.html | 48 ++++++++++++++++++- src/App.tsx | 2 +- .../PicturesSlider/PicturesSlider.tsx | 6 +-- src/utils/api.ts | 4 ++ 4 files changed, 54 insertions(+), 6 deletions(-) diff --git a/public/404.html b/public/404.html index aa381d1c678..57add05ec2d 100644 --- a/public/404.html +++ b/public/404.html @@ -2,9 +2,53 @@ - Single Page Apps for GitHub Pages + Phone Catalog + -