Commit Graph

123 Commits

Author SHA1 Message Date
Unchained
22b0b2c31a fix: Serbian madeWith uses Latin script not Cyrillic 2026-03-24 12:14:25 +02:00
Unchained
5f0ef80fe7 feat: add 'Made with ❤️ by Nodecrew' to footer with translations 2026-03-24 12:13:07 +02:00
Unchained
9a72e46d39 fix: add missing French and German translations for CartDrawer 2026-03-24 12:07:49 +02:00
Unchained
8120f2b908 fix: add missing removeItem translation to French and German 2026-03-24 12:04:17 +02:00
Unchained
b7914303ee fix: add missing French and German Cart translations 2026-03-24 12:01:49 +02:00
Unchained
c40d91e35b fix: buildLocalePath always includes locale prefix - required by routing 2026-03-24 11:56:54 +02:00
Unchained
5ee3ab6713 fix: revert dynamic matcher - Next.js requires static config 2026-03-24 11:54:22 +02:00
Unchained
03becb6ce7 refactor: make locale handling truly centralized and robust
- Added getPathWithoutLocale() and buildLocalePath() helpers to locales.ts
- Updated Header to use centralized helpers instead of hardcoded regex
- Updated middleware to use SUPPORTED_LOCALES in matcher config
- Updated LocaleProvider to use isValidLocale() instead of hardcoded array

To add a new language now, only update:
1. SUPPORTED_LOCALES in locales.ts
2. LOCALE_CONFIG entry with label, flag, saleorLocale
3. Add translation keys to all message files

All routing now uses centralized constants - no more hardcoded locale lists.
2026-03-24 11:52:22 +02:00
Unchained
0a7c555549 fix: ProductDetail using wrong locale comparisons
- Default locale was "SR" instead of "sr"
- Comparisons used "EN" instead of "en" for shortDescription and benefits
- These hardcoded English strings were being skipped due to wrong comparison
2026-03-24 11:46:05 +02:00
Unchained
74ab98ad2f fix: multiple components using wrong locale for ProductCard links
- homepage page.tsx was passing productLocale (SR/EN) instead of locale (sr/en) to ProductCard
- ProductShowcase default locale was "SR" instead of "sr"
- ProductBenefits default locale was "SR" instead of "sr"

These caused URLs like /en/SR/products/... when clicking products
2026-03-24 11:38:14 +02:00
Unchained
ead03bc04f fix: product detail page passing wrong locale to ProductDetail and Footer 2026-03-24 11:34:52 +02:00
Unchained
a5cd048a6e refactor: centralize locale constants to prevent breaking changes
Created src/lib/i18n/locales.ts as single source of truth for:
- SUPPORTED_LOCALES array
- LOCALE_COOKIE name
- DEFAULT_LOCALE
- LOCALE_CONFIG (labels, flags, Saleor locale mapping)
- Helper functions (isValidLocale, getSaleorLocale, getLocaleFromPath)

Updated all files to use centralized constants:
- middleware.ts
- Header.tsx
- ProductCard.tsx
- sitemap.ts
- root layout and locale layout
- routing.ts

Benefits:
- Adding new locale only requires updating ONE file (locales.ts)
- No more hardcoded locale lists scattered across codebase
- Cookie name defined in one place
- Type-safe locale validation
2026-03-24 11:27:55 +02:00
Unchained
a4e7a07adb feat: add hreflang tags and international sitemap for SEO
- Added hreflang alternates to root layout for all locales (sr, en, de, fr)
- Added hreflang alternates to [locale] layout for all locales
- Updated sitemap to include all locale variants for every page
- Google will now properly index all language versions
2026-03-24 11:22:22 +02:00
Unchained
52b2eac5b5 fix: ensure navLinks use correct locale from prop
The navLinks were using localePath which was derived from locale
but the switchLocale was using pathname directly. This caused
mismatch when switching languages.
2026-03-24 11:11:15 +02:00
Unchained
bd95705d72 debug: add console logs to switchLocale 2026-03-24 11:01:28 +02:00
Unchained
75b258330a fix: use window.location for locale switch to ensure URL change 2026-03-24 10:59:32 +02:00
Unchained
4d078677cb fix: change root / redirect from 302 to 301 for SEO 2026-03-24 08:24:59 +02:00
Unchained
b488671bc3 fix: language switcher always includes locale prefix in path 2026-03-24 08:17:30 +02:00
Unchained
b70d46ff95 fix: checkout page not passing locale prop to Header/Footer 2026-03-24 08:15:45 +02:00
Unchained
f95585af58 fix: language switcher path bug causing /en/en/checkout 2026-03-24 08:12:11 +02:00
Unchained
a84647db6c feat: add language switcher with cookie persistence and browser detection
Changes:
- Root page.tsx now detects browser language (Accept-Language header)
  and cookie preference to redirect to correct locale (/sr or /en)
- Middleware handles old Serbian URLs (/products, /about, etc.) with
  301 redirects to /sr/* while respecting locale cookie
- Header component now includes language switcher dropdown with
  flag icons (Serbian and English)
- Language selection sets NEXT_LOCALE cookie and persists preference

Behavior:
- User visits / → redirects to /sr or /en based on cookie/browser
- User selects English from dropdown → cookie set, redirects to /en/*
- User visits /products with en cookie → /en/products (301)
- User visits /products with sr/no cookie → /sr/products (301)
2026-03-24 08:09:27 +02:00
Unchained
8244ba161b feat: enable browser language detection for locale routing
- Root / now uses next-intl locale detection to redirect based on
  Accept-Language header (English browser → /en, Serbian → /sr, etc.)
- Old Serbian URLs (/products, /about, etc.) still redirect to /sr/* with 301
- English URLs (/en/*) remain unchanged
2026-03-24 07:42:18 +02:00
Unchained
887cd7c610 feat: add 301 redirects for old Serbian URLs to preserve SEO
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:36:55 +02:00
Unchained
92b6c830e1 feat: implement locale-aware routing with [locale] dynamic segments
Some checks failed
Build and Deploy / build (push) Has been cancelled
WARNING: This change breaks existing SEO URLs for Serbian locale.

Changes:
- Migrated from separate locale folders (src/app/en/, src/app/de/, etc.)
  to [locale] dynamic segments (src/app/[locale]/)
- Serbian is now at /sr/ instead of / (root)
- English at /en/, German at /de/, French at /fr/
- All components updated to generate locale-aware links
- Root / now redirects to /sr (307 temporary redirect)

SEO Impact:
- Previously indexed Serbian URLs (/, /products, /about, /contact)
  will now return 404 or redirect to /sr/* URLs
- This is a breaking change for SEO - Serbian pages should ideally
  remain at root (/) with only non-default locales getting prefix
- Consider implementing 301 redirects from old URLs to maintain
  search engine rankings

Technical Notes:
- next-intl v4 with [locale] structure requires ALL locales to
  have the prefix (cannot have default locale at root)
- Alternative approach would be separate folder structure per locale
2026-03-23 20:59:33 +02:00
Unchained
5bd1a0f167 feat: translate TestimonialsSection and HeroVideo with i18n 2026-03-23 18:35:52 +02:00
Unchained
bcc51ce282 feat: implement proper i18n translations for Serbian and English
- Add comprehensive Serbian translation file (sr.json) with all UI strings
- Add comprehensive English translation file (en.json) with all UI strings
- Update Serbian root pages (/, /products, /products/[slug], /about, /contact) to use getTranslations()
- Update English pages (/en/*) to use getTranslations()
- Replace all hardcoded strings with translation keys
2026-03-23 18:28:00 +02:00
Unchained
f72f32fe60 feat: phase 1 - i18n core infrastructure with EN/DE/FR locales
- Add middleware.ts for locale detection (URL path, cookie, Accept-Language)
- Update routing.ts to include en, de, fr locales
- Update layout.tsx with NextIntlClientProvider and dynamic lang attribute
- Create EN/DE/FR homepages, product listings, product details, about, and contact pages
- Serbian remains at root URL (/products, /about, /contact)
- English at /en/*, German at /de/*, French at /fr/*
2026-03-23 18:11:08 +02:00
Unchained
ace1ac104e fix: cart delete mutation and console warnings
Some checks failed
Build and Deploy / build (push) Has been cancelled
- Fix checkoutLinesDelete mutation: use 'id' param and 'linesIds' instead of 'lineIds'
- Fix viewport metadata warning: move to separate viewport export in layout.tsx
- Add sizes prop to checkout Image with fill
- Fix CartDrawer init checkout useEffect to prevent re-render loops
- Various product detail improvements
2026-03-23 13:49:14 +02:00
Unchained
7f603c83e9 fix: correct checkoutLinesDelete parameter name lines -> lineIds
Some checks failed
Build and Deploy / build (push) Has been cancelled
2026-03-23 13:20:37 +02:00
Unchained
0e9ad28dcf Fix: remove priority attribute from regular img tag
Some checks failed
Build and Deploy / build (push) Has been cancelled
2026-03-23 11:18:29 +02:00
Unchained
70d6cfc9a7 Fix product images and add carousel; add transformation carousel on mobile
Some checks failed
Build and Deploy / build (push) Has been cancelled
2026-03-23 11:14:15 +02:00
Unchained
f3d60d3c5b Fix product images: use fill with aspect-square container
Some checks failed
Build and Deploy / build (push) Has been cancelled
2026-03-23 10:45:10 +02:00
Unchained
7ecd9c2e22 Fix product images on mobile: use explicit width/height instead of fill
Some checks failed
Build and Deploy / build (push) Has been cancelled
2026-03-22 21:27:38 +02:00
Unchained
e9b95c44b9 Fix hero section on mobile - use background image instead of broken video
Some checks failed
Build and Deploy / build (push) Has been cancelled
2026-03-22 21:19:47 +02:00
Unchained
8a418be7c3 Fix mobile responsiveness: viewport meta, standard Tailwind star colors
Some checks failed
Build and Deploy / build (push) Has been cancelled
2026-03-22 21:05:29 +02:00
Unchained
ba25261a3c Premium design updates: gold accents, improved sections, verified review badges, reordered homepage layout
Some checks failed
Build and Deploy / build (push) Has been cancelled
2026-03-22 17:08:06 +02:00
Unchained
77e19d841b Change review stars to gold color (#FFD700)
Some checks failed
Build and Deploy / build (push) Has been cancelled
2026-03-22 16:16:42 +02:00
Unchained
43d662b54e Add padding to header and ensure mobile menu works
Some checks failed
Build and Deploy / build (push) Has been cancelled
2026-03-22 12:42:38 +02:00
Unchained
625bd727d3 Fix product images showing full picture instead of cropped
Some checks failed
Build and Deploy / build (push) Has been cancelled
2026-03-22 12:05:40 +02:00
Unchained
44d938953b Center related products using flexbox instead of grid
Some checks failed
Build and Deploy / build (push) Has been cancelled
2026-03-22 11:00:44 +02:00
Unchained
97fc5f5f1d Fix JSX indentation in Similar Products section 2026-03-22 09:11:13 +02:00
Unchained
140d82c7f4 Center Similar Products grid on product pages 2026-03-22 09:04:35 +02:00
Unchained
80a388cd7c fix: Center the similar products grid on product pages 2026-03-22 09:00:01 +02:00
Unchained
c3bd0408f4 feat: Add newsletter section back to product pages 2026-03-22 08:57:05 +02:00
Unchained
7618cfa6df fix: Remove non-scrolling testimonials and newsletter from product pages 2026-03-22 08:54:29 +02:00
Unchained
0827147745 fix: Slow down reviews scroll tempo for readability 2026-03-22 08:47:06 +02:00
Unchained
c5e96718a4 feat: Add scrolling reviews marquee with 50 reviews
- Reviews scroll continuously (alternating left-to-right and right-to-left)
- 50 varied Serbian customer reviews praising Manoon products
- Mentions Anti-age Serum, Day Serum, Night Serum, Morning Glow, Anti-age Set
- Scroll effect similar to As Seen In banner
2026-03-22 08:43:25 +02:00
Unchained
7febe90b36 fix: Move Customer Reviews above AsSeenIn on product pages 2026-03-22 08:39:44 +02:00
Unchained
c723d72508 fix: Move BeforeAfterGallery to right after AsSeenIn on product pages 2026-03-22 08:37:12 +02:00
Unchained
bf6362d3ad feat: Add second transformation with side-by-side sliders
- First transformation: use_case_2 (4-6 weeks)
- Second transformation: use_case_3 (6-8 weeks)
- Both sliders displayed side by side on same line
2026-03-22 08:32:22 +02:00