@alphasquad/saleor-template-advance 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +57 -0
- package/APPLE_PAY_QUICK_START.md +165 -0
- package/APPLE_PAY_SETUP.md +331 -0
- package/README.md +46 -0
- package/SEO_AUDIT_CHECKLIST_STATUS.md +244 -0
- package/SEO_AUDIT_REPORT.md +66 -0
- package/eslint.config.mjs +16 -0
- package/next-env.d.ts +5 -0
- package/next.config.ts +109 -0
- package/package.json +47 -0
- package/postcss.config.mjs +5 -0
- package/public/.well-known/apple-developer-merchantid-domain-association +1 -0
- package/public/Logo.png +0 -0
- package/public/brand-video.mp4 +0 -0
- package/public/favicon.ico +0 -0
- package/public/file.svg +1 -0
- package/public/footer/facebook.tsx +34 -0
- package/public/footer/instagram.tsx +27 -0
- package/public/footer/mail.tsx +5 -0
- package/public/footer/x.tsx +35 -0
- package/public/globe.svg +1 -0
- package/public/icons/Authorize.net.webp +0 -0
- package/public/icons/amex.gif +0 -0
- package/public/icons/appIcon.png +0 -0
- package/public/icons/discover.gif +0 -0
- package/public/icons/master.gif +0 -0
- package/public/icons/paypal.png +0 -0
- package/public/icons/stripe.png +0 -0
- package/public/icons/visa.gif +0 -0
- package/public/images/BackgroundNoise.png +0 -0
- package/public/images/footer-background.png +0 -0
- package/public/next.svg +1 -0
- package/public/no-image-avail-large.png +0 -0
- package/public/random-car-1.jpeg +0 -0
- package/public/random-car-2.png +0 -0
- package/public/random-car-3.jpg +0 -0
- package/public/random-car-4.jpg +0 -0
- package/public/random-car-5.jpg +0 -0
- package/public/star.svg +3 -0
- package/public/vercel.svg +1 -0
- package/public/window.svg +1 -0
- package/scripts/seo-audit/generate-checklist.mjs +156 -0
- package/src/app/(auth)/account/forgot-password/layout.tsx +16 -0
- package/src/app/(auth)/account/forgot-password/page.tsx +135 -0
- package/src/app/(auth)/account/login/layout.tsx +16 -0
- package/src/app/(auth)/account/login/page.tsx +288 -0
- package/src/app/(auth)/account/otp/layout.tsx +16 -0
- package/src/app/(auth)/account/otp/page.tsx +108 -0
- package/src/app/(auth)/account/register/layout.tsx +16 -0
- package/src/app/(auth)/account/register/page.tsx +431 -0
- package/src/app/(auth)/account/reset-password/layout.tsx +16 -0
- package/src/app/(auth)/account/reset-password/page.tsx +222 -0
- package/src/app/[slug]/page.tsx +43 -0
- package/src/app/about/loading.tsx +17 -0
- package/src/app/about/page.tsx +61 -0
- package/src/app/account/address/layout.tsx +15 -0
- package/src/app/account/address/page.tsx +166 -0
- package/src/app/account/head.tsx +4 -0
- package/src/app/account/layout.tsx +62 -0
- package/src/app/account/orders/[id]/layout.tsx +17 -0
- package/src/app/account/orders/[id]/page.tsx +115 -0
- package/src/app/account/orders/components/orderDetailsModal.tsx +410 -0
- package/src/app/account/orders/layout.tsx +15 -0
- package/src/app/account/orders/page.tsx +146 -0
- package/src/app/account/page.tsx +39 -0
- package/src/app/account/settings/components/editProfileSuccessModal.tsx +28 -0
- package/src/app/account/settings/layout.tsx +15 -0
- package/src/app/account/settings/page.tsx +260 -0
- package/src/app/api/affirm/check-status/route.ts +94 -0
- package/src/app/api/affirm/create-checkout/route.ts +109 -0
- package/src/app/api/affirm/get-config/route.ts +108 -0
- package/src/app/api/affirm/process-payment/route.ts +244 -0
- package/src/app/api/affirm/test-connection/route.ts +45 -0
- package/src/app/api/auth/clear/route.ts +16 -0
- package/src/app/api/auth/clear-cookies/route.ts +42 -0
- package/src/app/api/auth/set/route.ts +47 -0
- package/src/app/api/configuration/route.ts +18 -0
- package/src/app/api/dynamic-page/[slug]/route.ts +24 -0
- package/src/app/api/form-submission/route.ts +237 -0
- package/src/app/api/paypal/capture-order/route.ts +303 -0
- package/src/app/api/paypal/create-order/route.ts +211 -0
- package/src/app/api/paypal/get-config/route.ts +240 -0
- package/src/app/api/search-proxy/route.ts +52 -0
- package/src/app/authorize-net-success/layout.tsx +19 -0
- package/src/app/authorize-net-success/page.tsx +12 -0
- package/src/app/authorize-net-success/summary.tsx +486 -0
- package/src/app/blog/[slug]/blogContentRenderer.tsx +369 -0
- package/src/app/blog/[slug]/layout.tsx +17 -0
- package/src/app/blog/[slug]/page.tsx +151 -0
- package/src/app/blog/constant.tsx +147 -0
- package/src/app/blog/layout.tsx +31 -0
- package/src/app/blog/page.tsx +81 -0
- package/src/app/brand/[id]/BrandPageClient.tsx +188 -0
- package/src/app/brand/[id]/layout.tsx +17 -0
- package/src/app/brand/[id]/page.tsx +176 -0
- package/src/app/brands/components/brandsListingClient.tsx +97 -0
- package/src/app/brands/layout.tsx +31 -0
- package/src/app/brands/page.tsx +40 -0
- package/src/app/cancellation-policy/page.tsx +53 -0
- package/src/app/cart/layout.tsx +19 -0
- package/src/app/cart/page.tsx +752 -0
- package/src/app/category/[slug]/CategoryPageClient.tsx +377 -0
- package/src/app/category/[slug]/layout.tsx +17 -0
- package/src/app/category/[slug]/page.tsx +224 -0
- package/src/app/category/page.tsx +114 -0
- package/src/app/checkout/components/addNewAddressModal.tsx +474 -0
- package/src/app/checkout/layout.tsx +19 -0
- package/src/app/checkout/page.tsx +3312 -0
- package/src/app/components/account/AccountTabs.tsx +40 -0
- package/src/app/components/ads/GoogleAdSense.tsx +74 -0
- package/src/app/components/analytics/AnalyticsScripts.tsx +78 -0
- package/src/app/components/analytics/ConditionalGTMNoscript.tsx +24 -0
- package/src/app/components/analytics/ConditionalGoogleAnalytics.tsx +16 -0
- package/src/app/components/ancillary/AncillaryContent.tsx +7 -0
- package/src/app/components/auth/TokenExpirationHandler.tsx +8 -0
- package/src/app/components/blog/BlogList.tsx +112 -0
- package/src/app/components/checkout/AddressInformationSection.tsx +34 -0
- package/src/app/components/checkout/AddressManagement.tsx +571 -0
- package/src/app/components/checkout/CheckoutHeader.tsx +51 -0
- package/src/app/components/checkout/CheckoutQuestions.tsx +454 -0
- package/src/app/components/checkout/CheckoutTermsModal.tsx +81 -0
- package/src/app/components/checkout/ContactDetailsSection.tsx +52 -0
- package/src/app/components/checkout/DealerShippingSection.tsx +359 -0
- package/src/app/components/checkout/DeliveryMethodSection.tsx +249 -0
- package/src/app/components/checkout/OrderSummary.tsx +386 -0
- package/src/app/components/checkout/TermsContentRenderer.tsx +147 -0
- package/src/app/components/checkout/WillCallSection.tsx +133 -0
- package/src/app/components/checkout/affirmPayment.tsx +383 -0
- package/src/app/components/checkout/checkoutProcessingModal.tsx +96 -0
- package/src/app/components/checkout/googlePayButton.tsx +334 -0
- package/src/app/components/checkout/paymentStep.tsx +180 -0
- package/src/app/components/checkout/paypalPayment.tsx +1083 -0
- package/src/app/components/checkout/saleorNativePayment.tsx +1758 -0
- package/src/app/components/dynamicPage/DynamicPageRenderer.tsx +13 -0
- package/src/app/components/dynamicPage/HtmlWidgetRenderer.tsx +144 -0
- package/src/app/components/filtersCollapsible/index.tsx +365 -0
- package/src/app/components/globalSearch/index.tsx +423 -0
- package/src/app/components/layout/cartDropDown.tsx +628 -0
- package/src/app/components/layout/components/FooterNewsletter.tsx +21 -0
- package/src/app/components/layout/footer.tsx +283 -0
- package/src/app/components/layout/header/accountMenuDropdown.tsx +53 -0
- package/src/app/components/layout/header/components/CartBadge.tsx +18 -0
- package/src/app/components/layout/header/components/LoadingState.tsx +17 -0
- package/src/app/components/layout/header/components/MenuItemDropdown.tsx +124 -0
- package/src/app/components/layout/header/components/MobileNavbar.tsx +123 -0
- package/src/app/components/layout/header/components/NavbarActions.tsx +125 -0
- package/src/app/components/layout/header/components/NavbarBrand.tsx +29 -0
- package/src/app/components/layout/header/components/NavigationLinks.tsx +131 -0
- package/src/app/components/layout/header/hamMenuSlide.tsx +318 -0
- package/src/app/components/layout/header/header.tsx +44 -0
- package/src/app/components/layout/header/hooks/useDropdown.ts +45 -0
- package/src/app/components/layout/header/hooks/useNavbarData.ts +138 -0
- package/src/app/components/layout/header/hooks/useNavbarState.ts +66 -0
- package/src/app/components/layout/header/megaMenuDropdown.tsx +116 -0
- package/src/app/components/layout/header/navBar.tsx +121 -0
- package/src/app/components/layout/header/search.tsx +418 -0
- package/src/app/components/layout/header/styles/navbarStyles.ts +27 -0
- package/src/app/components/layout/header/topBar.tsx +214 -0
- package/src/app/components/layout/joinNewsletterForm/index.tsx +72 -0
- package/src/app/components/layout/mobileAccordian/index.tsx +92 -0
- package/src/app/components/layout/paymentMethods.tsx +75 -0
- package/src/app/components/layout/rootLayout.tsx +23 -0
- package/src/app/components/layout/siteInfo.tsx +103 -0
- package/src/app/components/layout/socialLinks.tsx +65 -0
- package/src/app/components/newsletterSection/emailListSection.tsx +224 -0
- package/src/app/components/newsletterSection/emailSectionServer.tsx +8 -0
- package/src/app/components/providers/ApolloWrapper.tsx +12 -0
- package/src/app/components/providers/AppConfigurationProvider.tsx +108 -0
- package/src/app/components/providers/GoogleAnalyticsProvider.tsx +149 -0
- package/src/app/components/providers/GoogleTagManagerProvider.tsx +31 -0
- package/src/app/components/providers/RecaptchaProvider.tsx +18 -0
- package/src/app/components/providers/ServerAppConfigurationProvider.tsx +133 -0
- package/src/app/components/providers/YMMStatusProvider.tsx +15 -0
- package/src/app/components/reuseableUI/AboutUs.tsx +115 -0
- package/src/app/components/reuseableUI/AddToCartClient.tsx +125 -0
- package/src/app/components/reuseableUI/EditorJsRenderer.tsx +219 -0
- package/src/app/components/reuseableUI/HeroSectionsearchByVehicle.tsx +188 -0
- package/src/app/components/reuseableUI/ImageWithFallback.tsx +41 -0
- package/src/app/components/reuseableUI/Toast.tsx +101 -0
- package/src/app/components/reuseableUI/blogCard.tsx +52 -0
- package/src/app/components/reuseableUI/brandCard.tsx +68 -0
- package/src/app/components/reuseableUI/breadcrumb.tsx +38 -0
- package/src/app/components/reuseableUI/categoryCard.tsx +37 -0
- package/src/app/components/reuseableUI/categorySkeleton.tsx +31 -0
- package/src/app/components/reuseableUI/commonButton.tsx +48 -0
- package/src/app/components/reuseableUI/defaultInputField/index.tsx +84 -0
- package/src/app/components/reuseableUI/emptyState.tsx +29 -0
- package/src/app/components/reuseableUI/errorTag.tsx +15 -0
- package/src/app/components/reuseableUI/heading/index.tsx +20 -0
- package/src/app/components/reuseableUI/input.tsx +117 -0
- package/src/app/components/reuseableUI/listCard.tsx +137 -0
- package/src/app/components/reuseableUI/loadingUI.tsx +12 -0
- package/src/app/components/reuseableUI/modalLayout.tsx +76 -0
- package/src/app/components/reuseableUI/newsletter/newsletterClient.tsx +622 -0
- package/src/app/components/reuseableUI/newsletter/newslettersHomeModal.tsx +68 -0
- package/src/app/components/reuseableUI/offerCard.tsx +42 -0
- package/src/app/components/reuseableUI/passwordRules/passwordRules.tsx +56 -0
- package/src/app/components/reuseableUI/primaryButton/index.tsx +34 -0
- package/src/app/components/reuseableUI/productCard.tsx +118 -0
- package/src/app/components/reuseableUI/productSkeleton.tsx +34 -0
- package/src/app/components/reuseableUI/searchByVehicle.tsx +187 -0
- package/src/app/components/reuseableUI/secondaryButton/index.tsx +34 -0
- package/src/app/components/reuseableUI/section.tsx +20 -0
- package/src/app/components/reuseableUI/select/index.tsx +98 -0
- package/src/app/components/reuseableUI/skeletonLoader.tsx +117 -0
- package/src/app/components/reuseableUI/statusTag.tsx +24 -0
- package/src/app/components/reuseableUI/tags/saleTag.tsx +19 -0
- package/src/app/components/reuseableUI/testimonialCard.tsx +93 -0
- package/src/app/components/richText/EditorRenderer.tsx +318 -0
- package/src/app/components/search/HierarchicalCategoryFilter.tsx +155 -0
- package/src/app/components/search/SearchFilters.tsx +155 -0
- package/src/app/components/search/YMMSearchSidebar.tsx +187 -0
- package/src/app/components/seo/ServerProductCard.tsx +91 -0
- package/src/app/components/seo/ServerProductGrid.tsx +45 -0
- package/src/app/components/shop/CategoryFilter.tsx +184 -0
- package/src/app/components/shop/ItemsPerPageSelect.tsx +69 -0
- package/src/app/components/shop/ItemsPerPageSelectClient.tsx +58 -0
- package/src/app/components/shop/MobileFilters.tsx +103 -0
- package/src/app/components/shop/ProductGridSkeleton.tsx +16 -0
- package/src/app/components/shop/ProductsGrid.tsx +230 -0
- package/src/app/components/shop/SearchFilter.tsx +218 -0
- package/src/app/components/shop/SearchFilterClient.tsx +122 -0
- package/src/app/components/shop/SearchLoadingOverlay.tsx +32 -0
- package/src/app/components/shop/ShopMobileFilters.tsx +205 -0
- package/src/app/components/showroom/VehicleSearchDropdowns.tsx +187 -0
- package/src/app/components/showroom/brandsSwiper.tsx +49 -0
- package/src/app/components/showroom/brandsSwiperClient copy.tsx +93 -0
- package/src/app/components/showroom/brandsSwiperClient.tsx +122 -0
- package/src/app/components/showroom/brandsSwiperServer.tsx +42 -0
- package/src/app/components/showroom/bundleProducts.tsx +120 -0
- package/src/app/components/showroom/categoryGrid.tsx +51 -0
- package/src/app/components/showroom/categoryGridServer.tsx +45 -0
- package/src/app/components/showroom/categorySwiper.tsx +115 -0
- package/src/app/components/showroom/featureStrip.tsx +139 -0
- package/src/app/components/showroom/offersSwiper.tsx +181 -0
- package/src/app/components/showroom/productGrid.tsx +56 -0
- package/src/app/components/showroom/productSwiper.tsx +119 -0
- package/src/app/components/showroom/promotion-slider.tsx +138 -0
- package/src/app/components/showroom/promotion.tsx +207 -0
- package/src/app/components/showroom/promotionsSwiper.tsx +174 -0
- package/src/app/components/showroom/showroomHeroCarousel.tsx +141 -0
- package/src/app/components/showroom/testimonialsGrid.tsx +106 -0
- package/src/app/components/skeletons/ContentSkeleton.tsx +14 -0
- package/src/app/components/sortDropdown/index.tsx +116 -0
- package/src/app/components/tertiaryButton/index.tsx +25 -0
- package/src/app/components/theme/theme-provider.tsx +82 -0
- package/src/app/contact/layout.tsx +32 -0
- package/src/app/contact/page.tsx +591 -0
- package/src/app/content/[slug]/layout.tsx +17 -0
- package/src/app/content/[slug]/page.tsx +159 -0
- package/src/app/content/layout.tsx +31 -0
- package/src/app/content/page.tsx +88 -0
- package/src/app/core-policies/page.tsx +55 -0
- package/src/app/discounts/page.tsx +54 -0
- package/src/app/frequently-asked-questions/page.tsx +57 -0
- package/src/app/globals.css +440 -0
- package/src/app/hooks/useDealerLocations.ts +259 -0
- package/src/app/hooks/useGTMEngagement.ts +71 -0
- package/src/app/hooks/useGoogleAnalytics.ts +145 -0
- package/src/app/layout.tsx +149 -0
- package/src/app/not-found.tsx +31 -0
- package/src/app/order-confirmation/layout.tsx +19 -0
- package/src/app/order-confirmation/page.tsx +12 -0
- package/src/app/order-confirmation/summary.tsx +1775 -0
- package/src/app/page.tsx +194 -0
- package/src/app/privacy-policy/loading.tsx +17 -0
- package/src/app/privacy-policy/page.tsx +56 -0
- package/src/app/product/[id]/ProductDetailClient.tsx +2448 -0
- package/src/app/product/[id]/components/itemInquiryModal.tsx +461 -0
- package/src/app/product/[id]/layout.tsx +116 -0
- package/src/app/product/[id]/page.tsx +200 -0
- package/src/app/product/layout.tsx +15 -0
- package/src/app/products/all/AllProductsClient.tsx +743 -0
- package/src/app/products/all/page.tsx +176 -0
- package/src/app/products/components/shopEmptyState.tsx +29 -0
- package/src/app/request-return/layout.tsx +36 -0
- package/src/app/request-return/page.tsx +597 -0
- package/src/app/robots.txt/route.ts +27 -0
- package/src/app/search/layout.tsx +16 -0
- package/src/app/search/page.tsx +736 -0
- package/src/app/shipping-returns/page.tsx +60 -0
- package/src/app/site-map/layout.tsx +33 -0
- package/src/app/site-map/page.tsx +113 -0
- package/src/app/sitemap-index.xml/route.ts +20 -0
- package/src/app/sitemap.ts +10 -0
- package/src/app/terms-and-conditions/loading.tsx +17 -0
- package/src/app/terms-and-conditions/page.tsx +56 -0
- package/src/app/utils/appConfiguration.ts +327 -0
- package/src/app/utils/branding.ts +52 -0
- package/src/app/utils/configurationService.ts +202 -0
- package/src/app/utils/constant.tsx +242 -0
- package/src/app/utils/editorJsUtils.tsx +249 -0
- package/src/app/utils/functions.ts +146 -0
- package/src/app/utils/googleAnalytics.ts +168 -0
- package/src/app/utils/googleTagManager.ts +475 -0
- package/src/app/utils/ipDetection.ts +270 -0
- package/src/app/utils/serverConfigurationService.ts +209 -0
- package/src/app/utils/svgs/GridIcon.tsx +45 -0
- package/src/app/utils/svgs/account/myAccount/listDotIcon.tsx +3 -0
- package/src/app/utils/svgs/account/myAccount/tickIcon.tsx +10 -0
- package/src/app/utils/svgs/account/orderHistory/InfoIcon.tsx +49 -0
- package/src/app/utils/svgs/arrowDownIcon.tsx +17 -0
- package/src/app/utils/svgs/arrowIcon.tsx +25 -0
- package/src/app/utils/svgs/arrowUpIcon.tsx +16 -0
- package/src/app/utils/svgs/brandsSearchIcon.tsx +25 -0
- package/src/app/utils/svgs/cart/cartIcon.tsx +31 -0
- package/src/app/utils/svgs/cart/plusIcon.tsx +13 -0
- package/src/app/utils/svgs/cart/subtractIcon.tsx +13 -0
- package/src/app/utils/svgs/cart/successTickIcon.tsx +14 -0
- package/src/app/utils/svgs/chevronDownIcon.tsx +21 -0
- package/src/app/utils/svgs/closeEyeIcon.tsx +47 -0
- package/src/app/utils/svgs/crossIcon.tsx +25 -0
- package/src/app/utils/svgs/eyeIcon.tsx +29 -0
- package/src/app/utils/svgs/featureTag.tsx +20 -0
- package/src/app/utils/svgs/filterIcon.tsx +3 -0
- package/src/app/utils/svgs/globleIcon.tsx +41 -0
- package/src/app/utils/svgs/infoIcon.tsx +34 -0
- package/src/app/utils/svgs/listIcon.tsx +50 -0
- package/src/app/utils/svgs/logOutIcon.tsx +35 -0
- package/src/app/utils/svgs/menuIcon.tsx +8 -0
- package/src/app/utils/svgs/minusIcon.tsx +18 -0
- package/src/app/utils/svgs/newsletterIcon.tsx +19 -0
- package/src/app/utils/svgs/noDataFoundIcon-.tsx +26 -0
- package/src/app/utils/svgs/noProductFoundIcon.tsx +43 -0
- package/src/app/utils/svgs/passwordIcons/errorIcon.tsx +31 -0
- package/src/app/utils/svgs/passwordIcons/successIcon.tsx +24 -0
- package/src/app/utils/svgs/paymentProcessingIcons/hourglassIcon.tsx +43 -0
- package/src/app/utils/svgs/paymentProcessingIcons/modalCrossIcon.tsx +23 -0
- package/src/app/utils/svgs/paymentProcessingIcons/paymentFailedIcon.tsx +47 -0
- package/src/app/utils/svgs/pencilIcon.tsx +11 -0
- package/src/app/utils/svgs/plusIcon.tsx +25 -0
- package/src/app/utils/svgs/productInquiryIcon.tsx +40 -0
- package/src/app/utils/svgs/searchIcon.tsx +31 -0
- package/src/app/utils/svgs/shoppingCart.tsx +32 -0
- package/src/app/utils/svgs/spinnerIcon.tsx +22 -0
- package/src/app/utils/svgs/spinnerLoadingIcon.tsx +26 -0
- package/src/app/utils/svgs/successTickIcon.tsx +40 -0
- package/src/app/utils/svgs/swiperArrowIconLeft.tsx +18 -0
- package/src/app/utils/svgs/swiperArrowIconRight.tsx +18 -0
- package/src/app/utils/svgs/userProfileIcon.tsx +31 -0
- package/src/app/utils/svgs/warningCircleIcon.tsx +15 -0
- package/src/app/warranty/constant.tsx +63 -0
- package/src/app/warranty/loading.tsx +17 -0
- package/src/app/warranty/page.tsx +56 -0
- package/src/graphql/client.ts +288 -0
- package/src/graphql/mutations/accountAddressCreate.ts +56 -0
- package/src/graphql/mutations/accountAddressDelete.ts +23 -0
- package/src/graphql/mutations/accountAddressUpdate.ts +55 -0
- package/src/graphql/mutations/accountSetDefaultAddress.ts +32 -0
- package/src/graphql/mutations/accountUpdate.ts +34 -0
- package/src/graphql/mutations/changePassword.ts +25 -0
- package/src/graphql/mutations/checkout.ts +117 -0
- package/src/graphql/mutations/checkoutAddVoucher.ts +63 -0
- package/src/graphql/mutations/checkoutComplete.ts +79 -0
- package/src/graphql/mutations/checkoutCreate.ts +131 -0
- package/src/graphql/mutations/checkoutCustomerAttach.ts +50 -0
- package/src/graphql/mutations/checkoutEmailUpdate.ts +15 -0
- package/src/graphql/mutations/checkoutLineMetadataUpdate.ts +52 -0
- package/src/graphql/mutations/checkoutPaymentCreate.ts +82 -0
- package/src/graphql/mutations/paymentGatewayInitialize.ts +58 -0
- package/src/graphql/mutations/registerAccount.ts +65 -0
- package/src/graphql/mutations/requestPasswordReset.ts +32 -0
- package/src/graphql/mutations/setPassword.ts +49 -0
- package/src/graphql/mutations/signIn.ts +50 -0
- package/src/graphql/mutations/tokenRefresh.ts +19 -0
- package/src/graphql/mutations/updateCheckoutMetadata.ts +49 -0
- package/src/graphql/mutations/updateProfile.ts +18 -0
- package/src/graphql/mutations/willCallDeliveryMethod.ts +81 -0
- package/src/graphql/queries/checkout.ts +168 -0
- package/src/graphql/queries/findProductByOldSlug.ts +58 -0
- package/src/graphql/queries/getAboutPage.ts +24 -0
- package/src/graphql/queries/getAboutPageId.ts +9 -0
- package/src/graphql/queries/getAboutUs.ts +38 -0
- package/src/graphql/queries/getAddressInformation.ts +38 -0
- package/src/graphql/queries/getAllCategories.ts +41 -0
- package/src/graphql/queries/getAllCategoriesTree.ts +67 -0
- package/src/graphql/queries/getAllCategoriesWithProducts.ts +29 -0
- package/src/graphql/queries/getAllCollectionsWithProducts.ts +16 -0
- package/src/graphql/queries/getBlogs.ts +222 -0
- package/src/graphql/queries/getBrands.ts +17 -0
- package/src/graphql/queries/getBundles.ts +43 -0
- package/src/graphql/queries/getCategories.ts +20 -0
- package/src/graphql/queries/getChannels.ts +77 -0
- package/src/graphql/queries/getCheckoutQuestions.ts +115 -0
- package/src/graphql/queries/getCheckoutTermsAndConditions.ts +37 -0
- package/src/graphql/queries/getContactPage.ts +117 -0
- package/src/graphql/queries/getContentPage.ts +191 -0
- package/src/graphql/queries/getDiscountOffers.ts +18 -0
- package/src/graphql/queries/getDynamicPageBySlug.ts +251 -0
- package/src/graphql/queries/getFeaturedProducts.ts +48 -0
- package/src/graphql/queries/getHeroMetadata.ts +23 -0
- package/src/graphql/queries/getMenuBySlug.ts +84 -0
- package/src/graphql/queries/getMyProfile.ts +23 -0
- package/src/graphql/queries/getNewsletter.ts +122 -0
- package/src/graphql/queries/getNewsletterPage.ts +111 -0
- package/src/graphql/queries/getPageBySlug.ts +52 -0
- package/src/graphql/queries/getPageTypeId.ts +27 -0
- package/src/graphql/queries/getPaymentMethods.ts +61 -0
- package/src/graphql/queries/getProducts.ts +78 -0
- package/src/graphql/queries/getPromotions.ts +24 -0
- package/src/graphql/queries/getRequestReturnPage.ts +121 -0
- package/src/graphql/queries/getSiteInfo.ts +54 -0
- package/src/graphql/queries/getSocialLinks.ts +52 -0
- package/src/graphql/queries/getTestimonials.ts +25 -0
- package/src/graphql/queries/getUserWithCheckout.ts +27 -0
- package/src/graphql/queries/getVehicleMakes.ts +21 -0
- package/src/graphql/queries/getVehicleModels.ts +21 -0
- package/src/graphql/queries/getVehicleYears.ts +21 -0
- package/src/graphql/queries/meAddresses.ts +56 -0
- package/src/graphql/queries/myOrders.ts +37 -0
- package/src/graphql/queries/orderDetail.ts +231 -0
- package/src/graphql/queries/productDetailsById.ts +197 -0
- package/src/graphql/queries/productInquiry.ts +115 -0
- package/src/graphql/queries/productsByCategoriesAndCollections.ts +39 -0
- package/src/graphql/queries/willCallCollectionPoints.ts +55 -0
- package/src/graphql/server-client.ts +54 -0
- package/src/graphql/types/categories.ts +9 -0
- package/src/graphql/types/checkout.ts +168 -0
- package/src/graphql/types/offer.ts +12 -0
- package/src/graphql/types/product.ts +44 -0
- package/src/hooks/scrollPageTop.ts +9 -0
- package/src/hooks/serverNavbarData.ts +79 -0
- package/src/hooks/useCartSync.ts +24 -0
- package/src/hooks/useRecaptcha.ts +33 -0
- package/src/hooks/useTokenExpiration.ts +81 -0
- package/src/hooks/useVehicleData.ts +346 -0
- package/src/lib/api/kount.ts +165 -0
- package/src/lib/api/shop.ts +1445 -0
- package/src/lib/saleor/getSaleorApiUrl.ts +25 -0
- package/src/lib/schema.ts +303 -0
- package/src/lib/seo/extractTextFromEditorJs.ts +58 -0
- package/src/lib/seo/site.ts +10 -0
- package/src/lib/urls/normalizeInternalUrl.ts +53 -0
- package/src/middleware.ts +134 -0
- package/src/sitemaps/README.md +105 -0
- package/src/sitemaps/dynamic-pages-sitemap.ts +247 -0
- package/src/sitemaps/sitemap-index.ts +21 -0
- package/src/sitemaps/static-pages-sitemap.ts +36 -0
- package/src/store/useGlobalStore.tsx +1656 -0
- package/src/types/global.d.ts +148 -0
- package/tsconfig.json +27 -0
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
# SEO Audit Checklist Status (Advance Template)
|
|
2
|
+
|
|
3
|
+
Generated: 2026-02-10
|
|
4
|
+
|
|
5
|
+
Legend: ✅ Pass, ❌ Fail, ⚠️ Partial, ⏭️ N/A or requires external tooling/deployment, ⬜ Not tested yet
|
|
6
|
+
|
|
7
|
+
| ID | Priority | Status | Check | Notes |
|
|
8
|
+
| --- | --- | --- | --- | --- |
|
|
9
|
+
| C-001 | P0 | ✅ | Robots.txt file exists and is accessible at /robots.txt | robots.txt route exists at /robots.txt |
|
|
10
|
+
| C-002 | P0 | ⚠️ | No unintentional blocking of important pages | Localhost blocks crawling; production should allow. |
|
|
11
|
+
| C-003 | P1 | ✅ | Sitemap URL referenced in robots.txt | robots references /sitemap.xml |
|
|
12
|
+
| C-005 | P1 | ✅ | Test/staging environments blocked | Non-prod (localhost) blocks crawling. |
|
|
13
|
+
| C-008 | P0 | ✅ | XML sitemap exists at /sitemap.xml | Sitemap served at /sitemap.xml |
|
|
14
|
+
| C-009 | P0 | ✅ | Sitemap is valid XML format | Valid XML output from Next metadata route |
|
|
15
|
+
| C-010 | P0 | ⚠️ | All indexable pages included in sitemap | Includes key indexable routes; dynamic coverage depends on API data. |
|
|
16
|
+
| C-011 | P0 | ✅ | No noindex pages in sitemap | Noindex routes excluded (cart/checkout/auth/account/search/etc). |
|
|
17
|
+
| C-012 | P1 | ✅ | No redirecting URLs in sitemap | Redirects dropped by template requirement. |
|
|
18
|
+
| C-013 | P0 | ⚠️ | No 404/error pages in sitemap | Dynamic URLs can go stale if upstream slugs change. |
|
|
19
|
+
| C-014 | P0 | ✅ | Sitemap uses canonical URLs only | Sitemap loc uses NEXT_PUBLIC_SITE_URL |
|
|
20
|
+
| C-019 | P0 | ✅ | Dynamic product pages in sitemap | Products included via dynamic sitemap. |
|
|
21
|
+
| C-020 | P0 | ✅ | Dynamic category pages in sitemap | Categories included via dynamic sitemap. |
|
|
22
|
+
| C-021 | P1 | ✅ | Blog/content pages in sitemap | Blog/content pages included via dynamic sitemap. |
|
|
23
|
+
| C-022 | P0 | ✅ | Transactional pages excluded (cart, checkout) | Transactional pages excluded. |
|
|
24
|
+
| C-023 | P1 | ✅ | Auth pages excluded (login, register) | Auth pages excluded. |
|
|
25
|
+
| C-024 | P1 | ✅ | Account pages excluded | Account pages excluded. |
|
|
26
|
+
| C-025 | P0 | ✅ | Important pages have index,follow (default) | Indexable pages default to index,follow. |
|
|
27
|
+
| C-026 | P0 | ✅ | Cart page has noindex | Cart noindex/nofollow via metadata. |
|
|
28
|
+
| C-027 | P0 | ✅ | Checkout pages have noindex | Checkout noindex/nofollow via metadata. |
|
|
29
|
+
| C-028 | P1 | ✅ | Account pages have noindex | Account subtree noindex/nofollow. |
|
|
30
|
+
| C-029 | P0 | ✅ | Order confirmation has noindex | Order confirmation noindex/nofollow. |
|
|
31
|
+
| C-030 | P1 | ✅ | Search results page strategy defined | Search results default noindex/nofollow. |
|
|
32
|
+
| C-031 | P0 | ⬜ | Filtered/sorted URLs handled (noindex or canonical) | |
|
|
33
|
+
| C-032 | P1 | ⬜ | Pagination handled correctly | |
|
|
34
|
+
| C-034 | P1 | ✅ | Payment callback pages have noindex | Payment callback/success pages noindex/nofollow. |
|
|
35
|
+
| C-035 | P0 | ⚠️ | All indexable pages have canonical tags | Canonicals added on major indexable routes; verify full coverage as routes evolve. |
|
|
36
|
+
| C-036 | P0 | ⚠️ | Canonical tags are self-referencing on unique pages | Generally self-referencing; validate on edge-case templates. |
|
|
37
|
+
| C-037 | P0 | ✅ | Canonical tags use absolute URLs | Canonicals render as absolute URLs via metadataBase. |
|
|
38
|
+
| C-038 | P0 | ✅ | metadataBase configured in Next.js | metadataBase configured in root layout. |
|
|
39
|
+
| C-039 | P0 | ⬜ | HTTP canonicals point to HTTPS | |
|
|
40
|
+
| C-040 | P0 | ⬜ | www vs non-www consistency | |
|
|
41
|
+
| C-041 | P1 | ⬜ | Trailing slash consistency | |
|
|
42
|
+
| C-042 | P1 | ⬜ | Query parameters handled in canonicals | |
|
|
43
|
+
| C-043 | P1 | ⬜ | Pagination canonicals correct | |
|
|
44
|
+
| C-044 | P1 | ⬜ | Filtered URLs canonical to main page | |
|
|
45
|
+
| C-045 | P1 | ⬜ | Duplicate content has cross-canonicals | |
|
|
46
|
+
| C-046 | P0 | ⏭️ | Permanent redirects use 301 or 308 | Redirects intentionally removed from template. |
|
|
47
|
+
| C-047 | P1 | ⏭️ | No redirect chains (max 1 hop) | Redirects intentionally removed from template. |
|
|
48
|
+
| C-048 | P0 | ⏭️ | No redirect loops | Redirects intentionally removed from template. |
|
|
49
|
+
| C-049 | P1 | ⏭️ | Old URLs redirect to new (slug changes) | Redirects intentionally removed from template. |
|
|
50
|
+
| C-050 | P0 | ⏭️ | HTTP to HTTPS redirect | Handled at hosting (Vercel) / deployment layer. |
|
|
51
|
+
| C-051 | P1 | ⏭️ | Non-www to www (or vice versa) redirect | Handled at hosting (Vercel) / deployment layer. |
|
|
52
|
+
| U-001 | P1 | ⬜ | URLs are human-readable | |
|
|
53
|
+
| U-002 | P1 | ⬜ | URLs use hyphens (not underscores) | |
|
|
54
|
+
| U-003 | P1 | ⬜ | URLs are lowercase | |
|
|
55
|
+
| U-005 | P1 | ⬜ | URLs contain relevant keywords | |
|
|
56
|
+
| U-006 | P0 | ⬜ | No session IDs in URLs | |
|
|
57
|
+
| U-007 | P1 | ⬜ | No unnecessary parameters | |
|
|
58
|
+
| U-008 | P1 | ⬜ | Consistent URL structure across site | |
|
|
59
|
+
| U-009 | P1 | ⬜ | Product URLs use slugs (not IDs) | |
|
|
60
|
+
| U-010 | P1 | ⬜ | Category URLs use slugs | |
|
|
61
|
+
| U-011 | P1 | ⬜ | Blog URLs use slugs | |
|
|
62
|
+
| U-012 | P1 | ⬜ | Important pages within 3 clicks of homepage | |
|
|
63
|
+
| U-013 | P1 | ⬜ | Logical URL hierarchy | |
|
|
64
|
+
| U-014 | P1 | ⬜ | Flat architecture for products (not too deep) | |
|
|
65
|
+
| U-015 | P1 | ⬜ | No orphan pages (all pages linked) | |
|
|
66
|
+
| U-016 | P1 | ⬜ | Clear navigation structure | |
|
|
67
|
+
| U-017 | P1 | ⬜ | Breadcrumb navigation present | |
|
|
68
|
+
| U-018 | P1 | ⬜ | Category hierarchy is logical | |
|
|
69
|
+
| U-019 | P1 | ⬜ | Faceted navigation SEO handled | |
|
|
70
|
+
| O-001 | P0 | ⬜ | Every page has a unique title tag | |
|
|
71
|
+
| O-002 | P1 | ⬜ | Titles are 50-60 characters | |
|
|
72
|
+
| O-003 | P1 | ⬜ | Primary keyword near beginning of title | |
|
|
73
|
+
| O-005 | P0 | ⬜ | No duplicate titles across pages | |
|
|
74
|
+
| O-006 | P1 | ⬜ | Titles are compelling (encourage clicks) | |
|
|
75
|
+
| O-007 | P0 | ✅ | Product titles include product name | PDP title uses product name via generateMetadata. |
|
|
76
|
+
| O-008 | P0 | ✅ | Category titles include category name | Category titles include category name. |
|
|
77
|
+
| O-009 | P0 | ⬜ | Homepage title is optimized | |
|
|
78
|
+
| O-010 | P0 | ✅ | generateMetadata used for dynamic pages | generateMetadata used for key dynamic routes. |
|
|
79
|
+
| O-011 | P1 | ⬜ | Every page has a meta description | |
|
|
80
|
+
| O-012 | P1 | ⬜ | Descriptions are 150-160 characters | |
|
|
81
|
+
| O-013 | P1 | ⬜ | Descriptions include primary keyword | |
|
|
82
|
+
| O-014 | P1 | ⬜ | Descriptions are unique per page | |
|
|
83
|
+
| O-016 | P1 | ⬜ | Product descriptions mention key features | |
|
|
84
|
+
| O-017 | P1 | ⬜ | Category descriptions are compelling | |
|
|
85
|
+
| O-019 | P0 | ⚠️ | Every page has exactly one H1 | One H1 on key audited pages; continue spot checks across all routes. |
|
|
86
|
+
| O-020 | P0 | ⬜ | H1 contains primary keyword | |
|
|
87
|
+
| O-021 | P0 | ⬜ | H1 is visible (not hidden) | |
|
|
88
|
+
| O-022 | P1 | ⬜ | Heading hierarchy is logical (H1→H2→H3) | |
|
|
89
|
+
| O-024 | P0 | ⬜ | Headings use semantic HTML (not styled divs/p) | |
|
|
90
|
+
| O-025 | P1 | ⬜ | Subheadings describe content sections | |
|
|
91
|
+
| O-026 | P0 | ⬜ | Product pages have product name as H1 | |
|
|
92
|
+
| O-027 | P0 | ⬜ | Category pages have category name as H1 | |
|
|
93
|
+
| O-028 | P1 | ⬜ | Primary keyword in first 100 words | |
|
|
94
|
+
| O-030 | P1 | ⬜ | Content is sufficient depth (not thin) | |
|
|
95
|
+
| O-031 | P0 | ⬜ | Content is unique (not duplicated) | |
|
|
96
|
+
| O-032 | P1 | ⬜ | Product descriptions are unique | |
|
|
97
|
+
| O-033 | P1 | ⬜ | Category pages have unique content | |
|
|
98
|
+
| O-034 | P0 | ⬜ | All images have alt attributes | |
|
|
99
|
+
| O-035 | P1 | ⬜ | Alt text is descriptive | |
|
|
100
|
+
| O-039 | P1 | ⬜ | Product images have product-specific alt | |
|
|
101
|
+
| O-040 | P0 | ⬜ | No missing alt attributes | |
|
|
102
|
+
| O-041 | P1 | ⬜ | Internal links use descriptive anchor text | |
|
|
103
|
+
| O-042 | P1 | ⬜ | Important pages have adequate internal links | |
|
|
104
|
+
| O-043 | P0 | ⬜ | No broken internal links | |
|
|
105
|
+
| O-044 | P1 | ⬜ | Related products are linked | |
|
|
106
|
+
| O-045 | P1 | ⬜ | Breadcrumbs provide internal links | |
|
|
107
|
+
| O-047 | P1 | ⬜ | Navigation provides clear linking | |
|
|
108
|
+
| T-001 | P0 | ⚠️ | Critical content renders server-side (SSR/SSG) | Key pages include SSR fallbacks; interactive/catalog content still enhanced client-side. |
|
|
109
|
+
| T-002 | P1 | ⚠️ | Content visible without JavaScript | Key catalog + PDP pages include visible SSR content without JS. |
|
|
110
|
+
| T-003 | P0 | ⚠️ | No client-side only rendering for SEO content | Reduced client-only SEO content by adding SSR fallbacks and server-side schema. |
|
|
111
|
+
| T-004 | P1 | ⬜ | Next.js Server Components used appropriately | |
|
|
112
|
+
| T-005 | P1 | ⬜ | Client components only for interactive elements | |
|
|
113
|
+
| T-006 | P1 | ⬜ | Hydration errors resolved | |
|
|
114
|
+
| T-007 | P1 | ⬜ | No render-blocking JavaScript | |
|
|
115
|
+
| T-008 | P0 | ⬜ | Valid pages return 200 | |
|
|
116
|
+
| T-009 | P0 | ✅ | Not found pages return 404 | Dynamic routes call notFound() for invalid slugs. |
|
|
117
|
+
| T-010 | P1 | ✅ | Custom 404 page exists | Custom app/not-found.tsx present. |
|
|
118
|
+
| T-011 | P1 | ⬜ | Server errors return 5xx | |
|
|
119
|
+
| T-012 | P0 | ✅ | No soft 404s (empty pages with 200) | Soft-404s fixed for key dynamic routes. |
|
|
120
|
+
| T-013 | P1 | ⬜ | Out-of-stock products handled correctly | |
|
|
121
|
+
| T-014 | P0 | ⬜ | Images optimized (compression) | |
|
|
122
|
+
| T-015 | P1 | ⬜ | Modern image formats (WebP/AVIF) | |
|
|
123
|
+
| T-016 | P1 | ⬜ | Images lazy-loaded below fold | |
|
|
124
|
+
| T-018 | P1 | ⬜ | JavaScript minified | |
|
|
125
|
+
| T-019 | P1 | ⬜ | CSS minified | |
|
|
126
|
+
| T-020 | P1 | ⬜ | Gzip/Brotli compression enabled | |
|
|
127
|
+
| T-021 | P1 | ⬜ | Browser caching configured | |
|
|
128
|
+
| T-024 | P1 | ⬜ | Third-party scripts async/defer | |
|
|
129
|
+
| T-025 | P1 | ⬜ | Static pages pre-rendered (SSG) | |
|
|
130
|
+
| T-026 | P1 | ⬜ | Dynamic pages use ISR appropriately | |
|
|
131
|
+
| T-027 | P1 | ⚠️ | No unnecessary force-dynamic | Removed explicit force-dynamic on key pages; some routes remain dynamic due to searchParams/fetch. |
|
|
132
|
+
| P-001 | P0 | ⬜ | LCP under 2.5 seconds | |
|
|
133
|
+
| P-002 | P0 | ⬜ | Hero/banner images optimized | |
|
|
134
|
+
| P-003 | P1 | ⬜ | LCP element identified and optimized | |
|
|
135
|
+
| P-004 | P1 | ⬜ | Above-fold images preloaded | |
|
|
136
|
+
| P-005 | P1 | ⬜ | Server response time (TTFB) under 600ms | |
|
|
137
|
+
| P-006 | P1 | ⬜ | Font display: swap used | |
|
|
138
|
+
| P-008 | P0 | ⬜ | INP under 200ms | |
|
|
139
|
+
| P-009 | P1 | ⬜ | No long JavaScript tasks (>50ms) | |
|
|
140
|
+
| P-010 | P1 | ⬜ | Event handlers optimized | |
|
|
141
|
+
| P-012 | P1 | ⬜ | No main thread blocking | |
|
|
142
|
+
| P-013 | P0 | ⬜ | CLS under 0.1 | |
|
|
143
|
+
| P-014 | P0 | ⬜ | Images have width/height attributes | |
|
|
144
|
+
| P-015 | P1 | ⬜ | Ads/embeds have reserved space | |
|
|
145
|
+
| P-016 | P1 | ⬜ | Fonts don't cause layout shift | |
|
|
146
|
+
| P-017 | P1 | ⬜ | Dynamic content has reserved space | |
|
|
147
|
+
| P-018 | P1 | ⬜ | Skeleton loaders prevent CLS | |
|
|
148
|
+
| P-019 | P1 | ⬜ | No content injected above viewport | |
|
|
149
|
+
| S-001 | P1 | ✅ | Organization schema present | Organization JSON-LD in root layout. |
|
|
150
|
+
| S-002 | P1 | ✅ | Organization schema site-wide | Organization JSON-LD is site-wide. |
|
|
151
|
+
| S-003 | P1 | ✅ | WebSite schema with SearchAction | WebSite + SearchAction JSON-LD in root layout. |
|
|
152
|
+
| S-007 | P0 | ✅ | Product schema on all product pages | Product JSON-LD rendered server-side on PDP. |
|
|
153
|
+
| S-008 | P0 | ⬜ | Product name in schema | |
|
|
154
|
+
| S-009 | P1 | ⬜ | Product description in schema | |
|
|
155
|
+
| S-010 | P0 | ⬜ | Product image in schema | |
|
|
156
|
+
| S-011 | P0 | ⬜ | Product price in schema | |
|
|
157
|
+
| S-012 | P0 | ⬜ | Product currency in schema | |
|
|
158
|
+
| S-013 | P0 | ⬜ | Product availability in schema | |
|
|
159
|
+
| S-014 | P1 | ⬜ | Product SKU in schema | |
|
|
160
|
+
| S-015 | P1 | ⬜ | Product brand in schema | |
|
|
161
|
+
| S-016 | P1 | ⬜ | Product MPN (part number) in schema | |
|
|
162
|
+
| S-019 | P0 | ✅ | Offer schema nested in Product | Offer nested under Product. |
|
|
163
|
+
| S-021 | P1 | ⚠️ | BreadcrumbList schema on all pages | BreadcrumbList present on many key pages; not guaranteed on every route yet. |
|
|
164
|
+
| S-022 | P1 | ⚠️ | Breadcrumb items have correct URLs | Breadcrumb URLs validated on major routes; continue spot checks. |
|
|
165
|
+
| S-024 | P1 | ⚠️ | Breadcrumb hierarchy matches visible | Breadcrumb hierarchy matches visible UI on major routes. |
|
|
166
|
+
| S-027 | P1 | ✅ | BlogPosting schema on blog posts | BlogPosting JSON-LD on blog/content posts. |
|
|
167
|
+
| S-031 | P0 | ⏭️ | All schema passes Google Rich Results Test | Requires Google Rich Results Test. |
|
|
168
|
+
| S-032 | P0 | ⏭️ | No schema errors in Search Console | Requires Search Console. |
|
|
169
|
+
| S-034 | P1 | ✅ | JSON-LD format used (not microdata) | JSON-LD used for schema. |
|
|
170
|
+
| M-001 | P0 | ⬜ | Site passes Google Mobile-Friendly Test | |
|
|
171
|
+
| M-002 | P0 | ✅ | Viewport meta tag configured | Viewport meta tag present. |
|
|
172
|
+
| M-003 | P0 | ⬜ | Responsive design (not separate mobile site) | |
|
|
173
|
+
| M-004 | P0 | ⬜ | No horizontal scrolling on mobile | |
|
|
174
|
+
| M-005 | P1 | ⬜ | Text readable without zooming | |
|
|
175
|
+
| M-006 | P1 | ⬜ | Tap targets adequately sized (48x48px) | |
|
|
176
|
+
| M-007 | P1 | ⬜ | Tap targets adequately spaced | |
|
|
177
|
+
| M-008 | P1 | ⬜ | No intrusive interstitials | |
|
|
178
|
+
| M-009 | P1 | ⬜ | Forms usable on mobile | |
|
|
179
|
+
| M-010 | P0 | ⬜ | Navigation works on mobile | |
|
|
180
|
+
| M-011 | P0 | ⬜ | Same content on mobile and desktop | |
|
|
181
|
+
| M-012 | P0 | ⬜ | Same structured data on mobile | |
|
|
182
|
+
| M-013 | P0 | ⬜ | Same meta tags on mobile | |
|
|
183
|
+
| M-014 | P1 | ⬜ | Images/videos accessible on mobile | |
|
|
184
|
+
| M-015 | P0 | ⬜ | Internal links work on mobile | |
|
|
185
|
+
| E-004 | P1 | ⬜ | Technical specifications accurate | |
|
|
186
|
+
| E-005 | P0 | ⬜ | Product compatibility information correct | |
|
|
187
|
+
| E-008 | P1 | ⬜ | Brand/manufacturer information present | |
|
|
188
|
+
| E-011 | P0 | ⬜ | Contact information easily found | |
|
|
189
|
+
| E-012 | P1 | ⬜ | Physical address displayed | |
|
|
190
|
+
| E-013 | P1 | ⬜ | Phone number present | |
|
|
191
|
+
| E-014 | P0 | ⬜ | Privacy policy page exists | |
|
|
192
|
+
| E-015 | P1 | ⬜ | Terms and conditions page exists | |
|
|
193
|
+
| E-016 | P0 | ⬜ | Return/refund policy clear | |
|
|
194
|
+
| E-017 | P1 | ⬜ | Shipping information present | |
|
|
195
|
+
| E-018 | P0 | ⬜ | Secure checkout indicators | |
|
|
196
|
+
| EC-001 | P1 | ⬜ | Unique product descriptions | |
|
|
197
|
+
| EC-002 | P1 | ⬜ | Product specifications listed | |
|
|
198
|
+
| EC-003 | P1 | ⬜ | Multiple product images | |
|
|
199
|
+
| EC-004 | P0 | ⬜ | Price clearly displayed | |
|
|
200
|
+
| EC-005 | P0 | ⬜ | Availability/stock status shown | |
|
|
201
|
+
| EC-006 | P0 | ⬜ | Add to cart prominent | |
|
|
202
|
+
| EC-009 | P1 | ⬜ | Shipping information on product page | |
|
|
203
|
+
| EC-010 | P1 | ⬜ | Part numbers visible | |
|
|
204
|
+
| EC-011 | P0 | ⬜ | Vehicle fitment information (automotive) | |
|
|
205
|
+
| EC-012 | P1 | ⬜ | Category descriptions present | |
|
|
206
|
+
| EC-014 | P1 | ⬜ | Filtering options available | |
|
|
207
|
+
| EC-016 | P1 | ⬜ | Pagination implemented correctly | |
|
|
208
|
+
| EC-017 | P1 | ⬜ | Subcategories linked | |
|
|
209
|
+
| EC-018 | P1 | ⬜ | Filter URLs SEO-friendly | |
|
|
210
|
+
| EC-019 | P0 | ⬜ | Site search works correctly | |
|
|
211
|
+
| EC-020 | P1 | ⬜ | Search results relevant | |
|
|
212
|
+
| EC-021 | P1 | ⬜ | No results page helpful | |
|
|
213
|
+
| EC-023 | P1 | ⬜ | Out of stock products still accessible | |
|
|
214
|
+
| EC-024 | P0 | ⬜ | Out of stock clearly indicated | |
|
|
215
|
+
| EC-027 | P0 | ⬜ | YMM (Year/Make/Model) selector works | |
|
|
216
|
+
| EC-028 | P0 | ⬜ | Fitment data accurate | |
|
|
217
|
+
| EC-029 | P1 | ⬜ | Part numbers searchable | |
|
|
218
|
+
| EC-032 | P1 | ⬜ | Vehicle schema for fitment | |
|
|
219
|
+
| L-003 | P1 | ⬜ | NAP consistent across site | |
|
|
220
|
+
| L-007 | P1 | ⬜ | hreflang tags (if multi-language) | |
|
|
221
|
+
| L-008 | P1 | ⬜ | Correct language/region targeting | |
|
|
222
|
+
| L-009 | P1 | ⬜ | Currency localization | |
|
|
223
|
+
| SEC-001 | P0 | ⏭️ | Site uses HTTPS | Requires HTTPS deployment. |
|
|
224
|
+
| SEC-002 | P0 | ⏭️ | Valid SSL certificate | Requires HTTPS deployment. |
|
|
225
|
+
| SEC-003 | P0 | ⏭️ | No mixed content warnings | Requires HTTPS deployment + browser checks. |
|
|
226
|
+
| SEC-004 | P1 | ⚠️ | HSTS header configured | HSTS header set in next.config.ts for production only. |
|
|
227
|
+
| SOC-001 | P1 | ⚠️ | og:title on all pages | og:title is present; ensure all routes override defaults when needed. |
|
|
228
|
+
| SOC-002 | P1 | ⚠️ | og:description on all pages | og:description is present; ensure all routes override defaults when needed. |
|
|
229
|
+
| SOC-003 | P0 | ✅ | og:image on all pages | og:image present (defaults + per-page overrides). |
|
|
230
|
+
| SOC-004 | P1 | ⚠️ | og:url on all pages | og:url present; validate correctness across all routes. |
|
|
231
|
+
| SOC-009 | P1 | ⚠️ | twitter:card on all pages | twitter:card present on major routes. |
|
|
232
|
+
| SOC-010 | P1 | ⚠️ | twitter:title on all pages | twitter:title present on major routes. |
|
|
233
|
+
| SOC-011 | P1 | ⚠️ | twitter:description on all pages | twitter:description present on major routes. |
|
|
234
|
+
| SOC-012 | P1 | ⚠️ | twitter:image on all pages | twitter:image present on major routes. |
|
|
235
|
+
| A-001 | P0 | ⏭️ | Google Analytics installed | Template leaves GA/Tag Manager to project integration. |
|
|
236
|
+
| A-002 | P1 | ⬜ | GA4 ecommerce tracking configured | |
|
|
237
|
+
| A-003 | P1 | ⬜ | Google Tag Manager configured | |
|
|
238
|
+
| A-004 | P1 | ⬜ | Analytics doesn't block rendering | |
|
|
239
|
+
| A-005 | P1 | ⬜ | Conversion tracking set up | |
|
|
240
|
+
| A-006 | P0 | ⏭️ | Google Search Console verified | Requires Search Console verification. |
|
|
241
|
+
| A-007 | P0 | ⏭️ | Sitemap submitted to GSC | Requires Search Console submission. |
|
|
242
|
+
| A-008 | P0 | ⬜ | No critical errors in GSC | |
|
|
243
|
+
| A-009 | P1 | ⬜ | Core Web Vitals monitored | |
|
|
244
|
+
| A-010 | P1 | ⬜ | Coverage report reviewed | |
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# SEO Audit Report (Advance Template)
|
|
2
|
+
|
|
3
|
+
Scope: `/Users/arslankhan/Sites/projects/saleor-store-front/saleor-template-advance`
|
|
4
|
+
|
|
5
|
+
Last updated: 2026-02-10
|
|
6
|
+
|
|
7
|
+
Audit checklist source:
|
|
8
|
+
- `/Users/arslankhan/Sites/projects/saleor-store-front/saleor-template-advance/docs/SEO-Audit-Critical.md`
|
|
9
|
+
|
|
10
|
+
Checklist status file (generated, 236 checks):
|
|
11
|
+
- `/Users/arslankhan/Sites/projects/saleor-store-front/saleor-template-advance/SEO_AUDIT_CHECKLIST_STATUS.md`
|
|
12
|
+
|
|
13
|
+
Regenerate checklist status:
|
|
14
|
+
```bash
|
|
15
|
+
cd /Users/arslankhan/Sites/projects/saleor-store-front/saleor-template-advance
|
|
16
|
+
node scripts/seo-audit/generate-checklist.mjs
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Test Environment
|
|
20
|
+
|
|
21
|
+
- Local `yarn build && yarn start`
|
|
22
|
+
- `.env.local` with `NEXT_PUBLIC_SITE_URL=http://localhost:3000`
|
|
23
|
+
|
|
24
|
+
## Key Fixes Implemented During This Audit
|
|
25
|
+
|
|
26
|
+
- Product SEO metadata fixed:
|
|
27
|
+
- PDP meta description is now plaintext (not raw Editor.js JSON) via `extractTextFromEditorJs`.
|
|
28
|
+
- PDP now has page-specific OpenGraph/Twitter tags (title/description/url/image).
|
|
29
|
+
- Product schema moved server-side:
|
|
30
|
+
- Product JSON-LD + BreadcrumbList JSON-LD now render on the server for crawlability.
|
|
31
|
+
- Removed client-side `useEffect` injection of schema scripts to avoid “JS-only” structured data.
|
|
32
|
+
- SSR fallbacks for SEO-critical catalog pages:
|
|
33
|
+
- Added server-rendered fallback content for `/products/all`, `/category/[slug]`, `/brand/[id]`, and `/product/[id]` so key content is visible without JavaScript.
|
|
34
|
+
- Implemented progressive-enhancement helpers (`.ssr-only` / `.js-only`) driven by `document.documentElement.dataset.js`.
|
|
35
|
+
- Social tags coverage expanded:
|
|
36
|
+
- Added OpenGraph/Twitter per-page metadata to major indexable static routes and key collections.
|
|
37
|
+
- Forms/indexation hygiene:
|
|
38
|
+
- `/request-return` explicitly `noindex,nofollow`.
|
|
39
|
+
- Menu URL normalization:
|
|
40
|
+
- Internal Saleor menu links normalized to relative URLs for local/dev domain mismatches (expanded for `/request-return` + `/account`).
|
|
41
|
+
|
|
42
|
+
## Current Action Items
|
|
43
|
+
|
|
44
|
+
P0
|
|
45
|
+
- Finish structured data correctness coverage across *all* key indexable pages (breadcrumbs in particular).
|
|
46
|
+
- Continue reducing “JS-only content” on pages that remain client-first beyond the SSR fallbacks.
|
|
47
|
+
|
|
48
|
+
P1
|
|
49
|
+
- Faceted navigation SEO strategy:
|
|
50
|
+
- Ensure filters/sort/pagination have stable canonicals and avoid indexing parameterized URLs.
|
|
51
|
+
- Performance / CWV follow-ups:
|
|
52
|
+
- Remove unnecessary `force-dynamic` routes where ISR is sufficient.
|
|
53
|
+
- Confirm LCP images use `next/image` with correct sizing and priority on hero/LCP element.
|
|
54
|
+
- Complete remaining “Not tested yet” checks in `SEO_AUDIT_CHECKLIST_STATUS.md` with additional local automation and/or deployment verification.
|
|
55
|
+
|
|
56
|
+
## Notes / Evidence (Local)
|
|
57
|
+
|
|
58
|
+
- `robots.txt` (localhost):
|
|
59
|
+
- Currently returns `Disallow: /` (intentional for non-prod). Production behavior depends on `NEXT_PUBLIC_SITE_URL`.
|
|
60
|
+
- Sitemap exclusions validated:
|
|
61
|
+
- Confirmed `/cart`, `/checkout`, `/account/*`, `/search`, `/order-confirmation`, `/authorize-net-success`, `/request-return` not present in `/sitemap.xml`.
|
|
62
|
+
- Meta robots validated:
|
|
63
|
+
- Confirmed `noindex,nofollow` present for `/cart`, `/checkout`, `/search`, `/account/login`, `/order-confirmation`, `/authorize-net-success`, `/request-return`.
|
|
64
|
+
- PDP metadata + schema validated:
|
|
65
|
+
- Confirmed `<meta name="description">` is plaintext.
|
|
66
|
+
- Confirmed `Product` + `Offer` JSON-LD and `BreadcrumbList` JSON-LD present in initial HTML.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { dirname } from "path";
|
|
2
|
+
import { fileURLToPath } from "url";
|
|
3
|
+
import { FlatCompat } from "@eslint/eslintrc";
|
|
4
|
+
|
|
5
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
6
|
+
const __dirname = dirname(__filename);
|
|
7
|
+
|
|
8
|
+
const compat = new FlatCompat({
|
|
9
|
+
baseDirectory: __dirname,
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
const eslintConfig = [
|
|
13
|
+
...compat.extends("next/core-web-vitals", "next/typescript"),
|
|
14
|
+
];
|
|
15
|
+
|
|
16
|
+
export default eslintConfig;
|
package/next-env.d.ts
ADDED
package/next.config.ts
ADDED
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import type { NextConfig } from "next";
|
|
2
|
+
|
|
3
|
+
function uniq<T>(items: T[]) {
|
|
4
|
+
return Array.from(new Set(items));
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
function toHost(urlOrHost?: string | null): string | null {
|
|
8
|
+
if (!urlOrHost) return null;
|
|
9
|
+
const raw = urlOrHost.trim();
|
|
10
|
+
if (!raw) return null;
|
|
11
|
+
|
|
12
|
+
// Allow passing a bare hostname (e.g. "cdn.example.com") or a URL.
|
|
13
|
+
try {
|
|
14
|
+
if (/^https?:\/\//i.test(raw)) return new URL(raw).hostname;
|
|
15
|
+
} catch {
|
|
16
|
+
// fall through
|
|
17
|
+
}
|
|
18
|
+
return raw.replace(/^https?:\/\//i, "").replace(/\/.*$/, "");
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function getRemoteImageHosts(): string[] {
|
|
22
|
+
const envHosts = (process.env.NEXT_PUBLIC_IMAGE_HOSTS || "")
|
|
23
|
+
.split(",")
|
|
24
|
+
.map((s) => s.trim())
|
|
25
|
+
.filter(Boolean)
|
|
26
|
+
.map((h) => toHost(h))
|
|
27
|
+
.filter((h): h is string => Boolean(h));
|
|
28
|
+
|
|
29
|
+
// Common: allow images from the Saleor API hostname (media URLs).
|
|
30
|
+
const saleorHost = toHost(process.env.NEXT_PUBLIC_API_URL);
|
|
31
|
+
|
|
32
|
+
// Common asset/CDN hosts used by these templates.
|
|
33
|
+
const assetsHost = toHost(process.env.NEXT_PUBLIC_ASSETS_BASE_URL);
|
|
34
|
+
const partsLogicHost = toHost(process.env.NEXT_PUBLIC_PARTSLOGIC_URL);
|
|
35
|
+
|
|
36
|
+
// This host is used by PartsLogic category backgrounds in WSM deployments.
|
|
37
|
+
const wsmAssetsHost = "wsm-saleor-assets.s3.us-west-2.amazonaws.com";
|
|
38
|
+
|
|
39
|
+
return uniq(
|
|
40
|
+
[saleorHost, assetsHost, partsLogicHost, wsmAssetsHost, ...envHosts].filter(
|
|
41
|
+
Boolean
|
|
42
|
+
) as string[]
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const nextConfig: NextConfig = {
|
|
47
|
+
eslint: {
|
|
48
|
+
// This template ships with existing warnings; don't block `next build` on lint.
|
|
49
|
+
ignoreDuringBuilds: true,
|
|
50
|
+
},
|
|
51
|
+
// Configure headers for Apple Pay domain association file
|
|
52
|
+
async headers() {
|
|
53
|
+
const securityHeaders =
|
|
54
|
+
process.env.NODE_ENV === "production"
|
|
55
|
+
? [
|
|
56
|
+
// HSTS is only meaningful over HTTPS and should not be enabled for localhost.
|
|
57
|
+
{
|
|
58
|
+
key: "Strict-Transport-Security",
|
|
59
|
+
value: "max-age=31536000; includeSubDomains; preload",
|
|
60
|
+
},
|
|
61
|
+
{ key: "X-Content-Type-Options", value: "nosniff" },
|
|
62
|
+
{ key: "X-Frame-Options", value: "SAMEORIGIN" },
|
|
63
|
+
{ key: "Referrer-Policy", value: "strict-origin-when-cross-origin" },
|
|
64
|
+
]
|
|
65
|
+
: [];
|
|
66
|
+
|
|
67
|
+
return [
|
|
68
|
+
{
|
|
69
|
+
source: '/.well-known/apple-developer-merchantid-domain-association',
|
|
70
|
+
headers: [
|
|
71
|
+
{
|
|
72
|
+
key: 'Content-Type',
|
|
73
|
+
value: 'application/octet-stream',
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
key: 'Cache-Control',
|
|
77
|
+
value: 'public, max-age=3600',
|
|
78
|
+
},
|
|
79
|
+
],
|
|
80
|
+
},
|
|
81
|
+
...(securityHeaders.length
|
|
82
|
+
? [
|
|
83
|
+
{
|
|
84
|
+
source: "/(.*)",
|
|
85
|
+
headers: securityHeaders,
|
|
86
|
+
},
|
|
87
|
+
]
|
|
88
|
+
: []),
|
|
89
|
+
];
|
|
90
|
+
},
|
|
91
|
+
images: {
|
|
92
|
+
remotePatterns: [
|
|
93
|
+
{
|
|
94
|
+
protocol: "http", // for local dev server
|
|
95
|
+
hostname: "localhost",
|
|
96
|
+
port: "8000",
|
|
97
|
+
pathname: "/media/**",
|
|
98
|
+
},
|
|
99
|
+
// Explicit allowlist for template consumers
|
|
100
|
+
...getRemoteImageHosts().map((hostname) => ({
|
|
101
|
+
protocol: "https" as const,
|
|
102
|
+
hostname,
|
|
103
|
+
pathname: "/**",
|
|
104
|
+
})),
|
|
105
|
+
],
|
|
106
|
+
},
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
export default nextConfig;
|
package/package.json
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@alphasquad/saleor-template-advance",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"scripts": {
|
|
5
|
+
"dev": "next dev --turbopack",
|
|
6
|
+
"build": "next build",
|
|
7
|
+
"start": "next start",
|
|
8
|
+
"lint": "next lint"
|
|
9
|
+
},
|
|
10
|
+
"dependencies": {
|
|
11
|
+
"@apollo/client": "^3.13.9",
|
|
12
|
+
"@next/third-parties": "^15.5.4",
|
|
13
|
+
"@types/googlemaps": "^3.43.3",
|
|
14
|
+
"clsx": "^2.1.1",
|
|
15
|
+
"country-state-city": "^3.2.1",
|
|
16
|
+
"graphql": "^16.11.0",
|
|
17
|
+
"jwt-decode": "^4.0.0",
|
|
18
|
+
"next": "15.4.10",
|
|
19
|
+
"nodemailer": "^8.0.1",
|
|
20
|
+
"postcss": "^8.5.6",
|
|
21
|
+
"react": "19.1.0",
|
|
22
|
+
"react-dom": "19.1.0",
|
|
23
|
+
"react-google-recaptcha": "^3.1.0",
|
|
24
|
+
"react-google-recaptcha-v3": "^1.11.0",
|
|
25
|
+
"react-international-phone": "^4.6.0",
|
|
26
|
+
"react-paginate": "^8.3.0",
|
|
27
|
+
"swiper": "^11.2.10",
|
|
28
|
+
"tailwind-merge": "^3.3.1",
|
|
29
|
+
"zustand": "^5.0.7"
|
|
30
|
+
},
|
|
31
|
+
"devDependencies": {
|
|
32
|
+
"@eslint/eslintrc": "^3",
|
|
33
|
+
"@tailwindcss/postcss": "^4.1.11",
|
|
34
|
+
"@types/node": "^20",
|
|
35
|
+
"@types/nodemailer": "^7.0.9",
|
|
36
|
+
"@types/react": "^19",
|
|
37
|
+
"@types/react-dom": "^19",
|
|
38
|
+
"@types/react-google-recaptcha": "^2.1.9",
|
|
39
|
+
"eslint": "^9",
|
|
40
|
+
"eslint-config-next": "15.4.5",
|
|
41
|
+
"tailwindcss": "^4.1.11",
|
|
42
|
+
"typescript": "^5"
|
|
43
|
+
},
|
|
44
|
+
"publishConfig": {
|
|
45
|
+
"access": "public"
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
7B227073704964223A2241443631324543383841333039314132314539434132433035304439454130353741414535444341304542413237424243333838463239344231353534434233222C2276657273696F6E223A312C22637265617465644F6E223A313731353237313630333931352C227369676E6174757265223A223330383030363039326138363438383666373064303130373032613038303330383030323031303133313064333030623036303936303836343830313635303330343032303133303830303630393261383634383836663730643031303730313030303061303830333038323033653333303832303338386130303330323031303230323038313636333463386230653330353731373330306130363038326138363438636533643034303330323330376133313265333032633036303335353034303330633235343137303730366336353230343137303730366336393633363137343639366636653230343936653734363536373732363137343639366636653230343334313230326432303437333333313236333032343036303335353034306230633164343137303730366336353230343336353732373436393636363936333631373436393666366532303431373537343638366637323639373437393331313333303131303630333535303430613063306134313730373036633635323034393665363332653331306233303039303630333535303430363133303235353533333031653137306433323334333033343332333933313337333433373332333735613137306433323339333033343332333833313337333433373332333635613330356633313235333032333036303335353034303330633163363536333633326437333664373032643632373236663662363537323264373336393637366535663535343333343264353035323466343433313134333031323036303335353034306230633062363934663533323035333739373337343635366437333331313333303131303630333535303430613063306134313730373036633635323034393665363332653331306233303039303630333535303430363133303235353533333035393330313330363037326138363438636533643032303130363038326138363438636533643033303130373033343230303034633231353737656465626436633762323231386636386464373039306131323138646337623062643666326332383364383436303935643934616634613534313162383334323065643831316633343037653833333331663163353463336637656233323230643662616435643465666634393238393839336537633066313361333832303231313330383230323064333030633036303335353164313330313031666630343032333030303330316630363033353531643233303431383330313638303134323366323439633434663933653465663237653663346636323836633366613262626664326534623330343530363038326230363031303530353037303130313034333933303337333033353036303832623036303130353035303733303031383632393638373437343730336132663266366636333733373032653631373037303663363532653633366636643266366636333733373033303334326436313730373036633635363136393633363133333330333233303832303131643036303335353164323030343832303131343330383230313130333038323031306330363039326138363438383666373633363430353031333038316665333038316333303630383262303630313035303530373032303233303831623630633831623335323635366336393631366536333635323036663665323037343638363937333230363336353732373436393636363936333631373436353230363237393230363136653739323037303631373237343739323036313733373337353664363537333230363136333633363537303734363136653633363532303666363632303734363836353230373436383635366532303631373037303663363936333631363236633635323037333734363136653634363137323634323037343635373236643733323036313665363432303633366636653634363937343639366636653733323036663636323037353733363532633230363336353732373436393636363936333631373436353230373036663663363936333739323036313665363432303633363537323734363936363639363336313734363936663665323037303732363136333734363936333635323037333734363137343635366436353665373437333265333033363036303832623036303130353035303730323031313632613638373437343730336132663266373737373737326536313730373036633635326536333666366432663633363537323734363936363639363336313734363536313735373436383666373236393734373932663330333430363033353531643166303432643330326233303239613032376130323538363233363837343734373033613266326636333732366332653631373037303663363532653633366636643266363137303730366336353631363936333631333332653633373236633330316430363033353531643065303431363034313439343537646236666435373438313836383938393736326637653537383530376537396235383234333030653036303335353164306630313031666630343034303330323037383033303066303630393261383634383836663736333634303631643034303230353030333030613036303832613836343863653364303430333032303334393030333034363032323130306336663032336362323631346262333033383838613136323938336531613933663130353666353066613738636462396261346361323431636331346532356530323231303062653363643064666431363234376636343934343735333830653964343463323238613130383930613361316463373234623862346362383838393831386263333038323032656533303832303237356130303330323031303230323038343936643266626633613938646139373330306130363038326138363438636533643034303330323330363733313162333031393036303335353034303330633132343137303730366336353230353236663666373432303433343132303264323034373333333132363330323430363033353530343062306331643431373037303663363532303433363537323734363936363639363336313734363936663665323034313735373436383666373236393734373933313133333031313036303335353034306130633061343137303730366336353230343936653633326533313062333030393036303335353034303631333032353535333330316531373064333133343330333533303336333233333334333633333330356131373064333233393330333533303336333233333334333633333330356133303761333132653330326330363033353530343033306332353431373037303663363532303431373037303663363936333631373436393666366532303439366537343635363737323631373436393666366532303433343132303264323034373333333132363330323430363033353530343062306331643431373037303663363532303433363537323734363936363639363336313734363936663665323034313735373436383666373236393734373933313133333031313036303335353034306130633061343137303730366336353230343936653633326533313062333030393036303335353034303631333032353535333330353933303133303630373261383634386365336430323031303630383261383634386365336430333031303730333432303030346630313731313834313964373634383564353161356532353831303737366538383061326566646537626165346465303864666334623933653133333536643536363562333561653232643039373736306432323465376262613038666437363137636538386362373662623636373062656338653832393834666635343435613338316637333038316634333034363036303832623036303130353035303730313031303433613330333833303336303630383262303630313035303530373330303138363261363837343734373033613266326636663633373337303265363137303730366336353265363336663664326636663633373337303330333432643631373037303663363537323666366637343633363136373333333031643036303335353164306530343136303431343233663234396334346639336534656632376536633466363238366333666132626266643265346233303066303630333535316431333031303166663034303533303033303130316666333031663036303335353164323330343138333031363830313462626230646561313538333338383961613438613939646562656264656261666461636232346162333033373036303335353164316630343330333032653330326361303261613032383836323636383734373437303361326632663633373236633265363137303730366336353265363336663664326636313730373036633635373236663666373436333631363733333265363337323663333030653036303335353164306630313031666630343034303330323031303633303130303630613261383634383836663736333634303630323065303430323035303033303061303630383261383634386365336430343033303230333637303033303634303233303361636637323833353131363939623138366662333563333536636136326266663431376564643930663735346461323865626566313963383135653432623738396638393866373962353939663938643534313064386639646539633266653032333033323264643534343231623061333035373736633564663333383362393036376664313737633263323136643936346663363732363938323132366635346638376137643162393963623962303938393231363130363939306630393932316430303030333138323031383833303832303138343032303130313330383138363330376133313265333032633036303335353034303330633235343137303730366336353230343137303730366336393633363137343639366636653230343936653734363536373732363137343639366636653230343334313230326432303437333333313236333032343036303335353034306230633164343137303730366336353230343336353732373436393636363936333631373436393666366532303431373537343638366637323639373437393331313333303131303630333535303430613063306134313730373036633635323034393665363332653331306233303039303630333535303430363133303235353533303230383136363334633862306533303537313733303062303630393630383634383031363530333034303230316130383139333330313830363039326138363438383666373064303130393033333130623036303932613836343838366637306430313037303133303163303630393261383634383836663730643031303930353331306631373064333233343330333533303339333133363332333033303333356133303238303630393261383634383836663730643031303933343331316233303139333030623036303936303836343830313635303330343032303161313061303630383261383634386365336430343033303233303266303630393261383634383836663730643031303930343331323230343230633364366466616634636131326539643331666630363161636563303536613232653131386261333262633934346664323166336231373838363634646634363330306130363038326138363438636533643034303330323034343733303435303232313030633961346263306665316537366332356636343136303264306238313462363666643264376534623263636537343138633132343532313866356230353963363032323036623632373361383536363830633738313064303131333538666463383563633764303730656531393736333234316537356336636237353732326164303930303030303030303030303030227D
|
package/public/Logo.png
ADDED
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/public/file.svg
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M14.5 13.5V5.41a1 1 0 0 0-.3-.7L9.8.29A1 1 0 0 0 9.08 0H1.5v13.5A2.5 2.5 0 0 0 4 16h8a2.5 2.5 0 0 0 2.5-2.5m-1.5 0v-7H8v-5H3v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1M9.5 5V2.12L12.38 5zM5.13 5h-.62v1.25h2.12V5zm-.62 3h7.12v1.25H4.5zm.62 3h-.62v1.25h7.12V11z" clip-rule="evenodd" fill="#666" fill-rule="evenodd"/></svg>
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export const facebook = (
|
|
2
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256">
|
|
3
|
+
<rect width={256} height={256} fill="none" />
|
|
4
|
+
<circle
|
|
5
|
+
cx={128}
|
|
6
|
+
cy={128}
|
|
7
|
+
r={96}
|
|
8
|
+
fill="black"
|
|
9
|
+
stroke="currentColor"
|
|
10
|
+
strokeLinecap="round"
|
|
11
|
+
strokeLinejoin="round"
|
|
12
|
+
strokeWidth={16}
|
|
13
|
+
/>
|
|
14
|
+
<path
|
|
15
|
+
d="M168,88H152a24,24,0,0,0-24,24V224"
|
|
16
|
+
fill="black"
|
|
17
|
+
stroke="currentColor"
|
|
18
|
+
strokeLinecap="round"
|
|
19
|
+
strokeLinejoin="round"
|
|
20
|
+
strokeWidth={16}
|
|
21
|
+
/>
|
|
22
|
+
<line
|
|
23
|
+
x1={96}
|
|
24
|
+
y1={144}
|
|
25
|
+
x2={160}
|
|
26
|
+
y2={144}
|
|
27
|
+
fill="black"
|
|
28
|
+
stroke="currentColor"
|
|
29
|
+
strokeLinecap="round"
|
|
30
|
+
strokeLinejoin="round"
|
|
31
|
+
strokeWidth={16}
|
|
32
|
+
/>
|
|
33
|
+
</svg>
|
|
34
|
+
);
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export const Instagram = (
|
|
2
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256">
|
|
3
|
+
<rect width={256} height={256} fill="none" />
|
|
4
|
+
<circle
|
|
5
|
+
cx={128}
|
|
6
|
+
cy={128}
|
|
7
|
+
r={40}
|
|
8
|
+
fill="none"
|
|
9
|
+
stroke="black"
|
|
10
|
+
strokeMiterlimit={10}
|
|
11
|
+
strokeWidth={16}
|
|
12
|
+
/>
|
|
13
|
+
<rect
|
|
14
|
+
x={32}
|
|
15
|
+
y={32}
|
|
16
|
+
width={192}
|
|
17
|
+
height={192}
|
|
18
|
+
rx={48}
|
|
19
|
+
fill="none"
|
|
20
|
+
stroke="black"
|
|
21
|
+
strokeLinecap="round"
|
|
22
|
+
strokeLinejoin="round"
|
|
23
|
+
strokeWidth={16}
|
|
24
|
+
/>
|
|
25
|
+
<circle cx={180} cy={76} r={12} />
|
|
26
|
+
</svg>
|
|
27
|
+
);
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export const Mail = (
|
|
2
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640">
|
|
3
|
+
<path d="M125.4 128C91.5 128 64 155.5 64 189.4C64 190.3 64 191.1 64.1 192L64 192L64 448C64 483.3 92.7 512 128 512L512 512C547.3 512 576 483.3 576 448L576 192L575.9 192C575.9 191.1 576 190.3 576 189.4C576 155.5 548.5 128 514.6 128L125.4 128zM528 256.3L528 448C528 456.8 520.8 464 512 464L128 464C119.2 464 112 456.8 112 448L112 256.3L266.8 373.7C298.2 397.6 341.7 397.6 373.2 373.7L528 256.3zM112 189.4C112 182 118 176 125.4 176L514.6 176C522 176 528 182 528 189.4C528 193.6 526 197.6 522.7 200.1L344.2 335.5C329.9 346.3 310.1 346.3 295.8 335.5L117.3 200.1C114 197.6 112 193.6 112 189.4z" />
|
|
4
|
+
</svg>
|
|
5
|
+
);
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export const X = (
|
|
2
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256">
|
|
3
|
+
<rect width={256} height={256} fill="none" />
|
|
4
|
+
<polygon
|
|
5
|
+
points="48 40 96 40 208 216 160 216 48 40"
|
|
6
|
+
fill="none"
|
|
7
|
+
stroke="black"
|
|
8
|
+
strokeLinecap="round"
|
|
9
|
+
strokeLinejoin="round"
|
|
10
|
+
strokeWidth={16}
|
|
11
|
+
/>
|
|
12
|
+
<line
|
|
13
|
+
x1="113.88"
|
|
14
|
+
y1="143.53"
|
|
15
|
+
x2={48}
|
|
16
|
+
y2={216}
|
|
17
|
+
fill="black"
|
|
18
|
+
stroke="black"
|
|
19
|
+
strokeLinecap="round"
|
|
20
|
+
strokeLinejoin="round"
|
|
21
|
+
strokeWidth={16}
|
|
22
|
+
/>
|
|
23
|
+
<line
|
|
24
|
+
x1={208}
|
|
25
|
+
y1={40}
|
|
26
|
+
x2="142.12"
|
|
27
|
+
y2="112.47"
|
|
28
|
+
fill="black"
|
|
29
|
+
stroke="black"
|
|
30
|
+
strokeLinecap="round"
|
|
31
|
+
strokeLinejoin="round"
|
|
32
|
+
strokeWidth={16}
|
|
33
|
+
/>
|
|
34
|
+
</svg>
|
|
35
|
+
);
|
package/public/globe.svg
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><g clip-path="url(#a)"><path fill-rule="evenodd" clip-rule="evenodd" d="M10.27 14.1a6.5 6.5 0 0 0 3.67-3.45q-1.24.21-2.7.34-.31 1.83-.97 3.1M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16m.48-1.52a7 7 0 0 1-.96 0H7.5a4 4 0 0 1-.84-1.32q-.38-.89-.63-2.08a40 40 0 0 0 3.92 0q-.25 1.2-.63 2.08a4 4 0 0 1-.84 1.31zm2.94-4.76q1.66-.15 2.95-.43a7 7 0 0 0 0-2.58q-1.3-.27-2.95-.43a18 18 0 0 1 0 3.44m-1.27-3.54a17 17 0 0 1 0 3.64 39 39 0 0 1-4.3 0 17 17 0 0 1 0-3.64 39 39 0 0 1 4.3 0m1.1-1.17q1.45.13 2.69.34a6.5 6.5 0 0 0-3.67-3.44q.65 1.26.98 3.1M8.48 1.5l.01.02q.41.37.84 1.31.38.89.63 2.08a40 40 0 0 0-3.92 0q.25-1.2.63-2.08a4 4 0 0 1 .85-1.32 7 7 0 0 1 .96 0m-2.75.4a6.5 6.5 0 0 0-3.67 3.44 29 29 0 0 1 2.7-.34q.31-1.83.97-3.1M4.58 6.28q-1.66.16-2.95.43a7 7 0 0 0 0 2.58q1.3.27 2.95.43a18 18 0 0 1 0-3.44m.17 4.71q-1.45-.12-2.69-.34a6.5 6.5 0 0 0 3.67 3.44q-.65-1.27-.98-3.1" fill="#666"/></g><defs><clipPath id="a"><path fill="#fff" d="M0 0h16v16H0z"/></clipPath></defs></svg>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|