Compare commits

...
Author SHA1 Message Date
Unchained 28a6e58dba Merge branch 'dev'
Build and Deploy / build (push) Has been cancelled
2026-03-24 14:17:00 +02:00
Unchained 569a3e65fe fix: correct metadata access and locale variable names 2026-03-24 14:16:49 +02:00
Unchained 1ba81a1fde Merge dev into master: resolve middleware conflict (use dev version with full locale detection)
Build and Deploy / build (push) Has been cancelled
2026-03-24 14:08:17 +02:00
Unchained df95e729fc CSS polish: increase newsletter input height for better UX 2026-03-24 13:46:38 +02:00
Unchained 513dcb7fea feat: add 301 redirects for old Serbian URLs to preserve SEO
Build and Deploy / build (push) Has been cancelled
Redirect old Serbian URLs (without /sr/ prefix) to new /sr/ URLs:
- / → /sr (301)
- /products → /sr/products (301)
- /about → /sr/about (301)
- /contact → /sr/contact (301)
- /checkout → /sr/checkout (301)

English URLs (/en/*) remain unchanged. This preserves SEO value
as Google treats 301 as permanent redirect passing ~90-99% PageRank.
2026-03-24 07:35:07 +02:00
6 changed files with 6 additions and 6 deletions
+1 -1
View File
@@ -48,4 +48,4 @@ export const config = {
"/(sr|en|de|fr)/:path*",
"/((?!api|_next|_vercel|.*\\..*).*)",
],
};
};
+1 -1
View File
@@ -45,7 +45,7 @@ export default async function AboutPage({ params }: AboutPageProps) {
<div className="relative h-[400px] md:h-[500px] overflow-hidden">
<img
src="https://images.unsplash.com/photo-1608571423902-eed4a5ad8108?q=80&w=2000&auto=format&fit=crop"
alt={metadata.productionAlt}
alt={metadata.about.productionAlt}
className="w-full h-full object-cover"
/>
<div className="absolute inset-0 bg-black/20" />
+1 -1
View File
@@ -206,7 +206,7 @@ export default async function Homepage({ params }: { params: Promise<{ locale: s
<input
type="email"
placeholder={t("emailPlaceholder")}
className="flex-1 min-w-0 px-5 !h-14 bg-white/10 border border-white/20 border-b-0 sm:border-b border-r-0 sm:border-r border-white/20 text-white placeholder:text-white/50 focus:border-white focus:outline-none transition-colors text-base text-center sm:text-left rounded-t sm:rounded-l sm:rounded-tr-none"
className="flex-1 min-w-0 px-5 !h-16 bg-white/10 border border-white/20 border-b-0 sm:border-b border-r-0 sm:border-r border-white/20 text-white placeholder:text-white/50 focus:border-white focus:outline-none transition-colors text-base text-center sm:text-left rounded-t sm:rounded-l sm:rounded-tr-none"
/>
<button
type="submit"
+1 -1
View File
@@ -87,7 +87,7 @@ export default async function ProductPage({ params }: ProductPageProps) {
let relatedProducts: Product[] = [];
try {
const allProducts = await getProducts(productLocale, 8);
const allProducts = await getProducts(saleorLocale, 8);
relatedProducts = allProducts
.filter((p: Product) => p.id !== product.id)
.slice(0, 4);
+1 -1
View File
@@ -86,7 +86,7 @@ export default async function ProductsPage({ params }: ProductsPageProps) {
key={product.id}
product={product}
index={index}
locale={productLocale}
locale={validLocale}
/>
))}
</div>
+1 -1
View File
@@ -54,7 +54,7 @@ export default function NewsletterSection() {
onChange={(e) => setEmail(e.target.value)}
placeholder={t("emailPlaceholder")}
required
className="flex-1 px-4 py-4 h-12 border border-[#1A1A1A]/10 rounded-[4px] text-sm focus:outline-none focus:border-[#1A1A1A]/30 transition-colors"
className="flex-1 px-4 py-4 h-14 border border-[#1A1A1A]/10 rounded-[4px] text-base focus:outline-none focus:border-[#1A1A1A]/30 transition-colors"
/>
<button
type="submit"