Redesign phase 1: Homepage polish and design system foundation

- Fix newsletter subscribe box centering on homepage
- Fix header overlap on product pages (pt-[72px] instead of pt-[100px])
- Add scroll-mt-[72px] for smooth scroll anchor offset
- Add HeroVideo component with video hero placeholder
- Add REDESIGN_SPECIFICATION.md with 9-phase design plan
- Clean up globals.css theme declarations and comments
- Update Header with improved sticky behavior and cart
- Update ProductDetail with better layout and spacing
- Update CartDrawer with improved slide-out cart UI
- Add English translations for updated pages
- Various CSS refinements across pages
This commit is contained in:
Unchained
2026-03-21 16:22:17 +02:00
parent 9d639fbd64
commit 7c05bd2346
22 changed files with 2653 additions and 884 deletions

View File

@@ -1,15 +1,26 @@
import { saleorClient } from "./client";
import { GET_PRODUCTS, GET_PRODUCT_BY_SLUG } from "./queries/Products";
import type { Product, ProductList } from "@/types/saleor";
import type { Product } from "@/types/saleor";
const CHANNEL = process.env.NEXT_PUBLIC_SALEOR_CHANNEL || "default-channel";
// GraphQL Response Types
interface ProductsResponse {
products?: {
edges: Array<{ node: Product }>;
};
}
interface ProductResponse {
product?: Product | null;
}
export async function getProducts(
locale: string = "SR",
first: number = 100
): Promise<Product[]> {
try {
const { data } = await saleorClient.query({
const { data } = await saleorClient.query<ProductsResponse>({
query: GET_PRODUCTS,
variables: {
channel: CHANNEL,
@@ -18,7 +29,7 @@ export async function getProducts(
},
});
return data?.products?.edges.map((edge: { node: Product }) => edge.node) || [];
return data?.products?.edges.map((edge) => edge.node) || [];
} catch (error) {
console.error("Error fetching products from Saleor:", error);
return [];
@@ -30,7 +41,7 @@ export async function getProductBySlug(
locale: string = "SR"
): Promise<Product | null> {
try {
const { data } = await saleorClient.query({
const { data } = await saleorClient.query<ProductResponse>({
query: GET_PRODUCT_BY_SLUG,
variables: {
slug,