Commit Graph
100 Commits
Author SHA1 Message Date
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
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
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
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
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
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
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
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
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
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
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)
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
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
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
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
Unchained 9e901d7dfe feat: Use actual moumoujus before/after images from MinIO
- Before: use_case_2.webp (wrinkled skin)
- After: use_case_2_1.webp (smooth skin)
- Both images from minio-api.nodecrew.me
2026-03-22 08:26:50 +02:00
Unchained 0e727b2648 feat: Add slider comparison to before/after gallery
- Drag slider to reveal before/after (like example screenshot)
- Timeline showing '4-6 Weeks'
- Stars rating with review count
- Verified Results badge
- Matches moumoujus.com style
2026-03-22 07:32:47 +02:00
Unchained d6523deae5 feat: Add all homepage sections to product pages
Product pages now include:
- Product Benefits
- Product Reviews
- Trust Badges
- Before/After Gallery
- How It Works
- Testimonials
- Newsletter
2026-03-21 20:13:05 +02:00
Unchained 5216abbcc0 feat: Landing page design improvements
Based on landing-page-design skill principles:

Homepage:
- Redesigned hero with outcome-focused headline ("Transform Your Hair & Skin")
- Added social proof micro (5 stars + 50,000+ customers)
- Better CTA: "Transform My Hair & Skin" instead of "Shop Now"
- Added trust indicators in hero (30-day guarantee, free shipping, cruelty free)
- Added ProblemSection to create empathy (dry hair, confusing ingredients, no results)
- Added HowItWorks section (3 steps: Choose, Apply, See Results)
- Improved AsSeenIn with scrolling marquee on dark background
- Premium trust badges with stats and icons

Product pages:
- Improved CTA: "Transform My Hair & Skin" (action verb + value)
- Added ProductBenefits section (4 key benefits)
- Added ProductReviews section with customer testimonials
- Added AsSeenIn scrolling banner
- Added trust indicators with icons

Section order now follows proven conversion sequence:
1. Hero (headline + outcome + CTA)
2. Social Proof (trust badges, logos)
3. Problem (empathy)
4. Solution (products)
5. How It Works
6. Testimonials
7. Final CTA
2026-03-21 19:59:09 +02:00
Unchained 4af5412c76 feat: Add trust indicators to product page
- Add 30-day money-back guarantee, secure checkout, easy returns icons
- Reorganize product page layout with clearer trust messaging
- Update free shipping threshold messaging
2026-03-21 19:00:31 +02:00
Unchained d381cba302 feat: Add social proof sections to homepage
- Add TrustBadges component with ratings, customer count, secure payment icons
- Add AsSeenIn media logos banner
- Add BeforeAfterGallery with interactive gallery
- Add TestimonialsSection (already existed, now integrated into homepage)
- Connect all sections in homepage page.tsx

Sections added to homepage flow:
1. HeroVideo
2. TrustBadges
3. AsSeenIn
4. Products Grid
5. BeforeAfterGallery
6. Brand Story
7. Benefits
8. TestimonialsSection
9. Newsletter
2026-03-21 18:58:33 +02:00
Unchained 26212dec1c fix: Apollo Client cache merge causing product duplication
Build and Deploy / build (push) Has been cancelled
The merge function was concatenating products on each query, causing
4 products to become 8, then 12, etc. Changed to replace incoming
data instead of merging.
2026-03-21 18:04:11 +02:00
Unchained 2876a8f80e fix: Replace WooCommerce env vars with Saleor API URL
Build and Deploy / build (push) Has been cancelled
- NEXT_PUBLIC_WOOCOMMERCE_URL → NEXT_PUBLIC_SALEOR_API_URL
- Remove WooCommerce consumer key/secret (not needed for Saleor public API)
- Saleor API is public, no authentication required
2026-03-21 17:58:13 +02:00
Unchained 93005af0a1 Remove playwright - testing tool only
Build and Deploy / build (push) Has been cancelled
2026-03-21 17:26:46 +02:00
Unchained 0b4e3f89d1 Add playwright for visual testing 2026-03-21 17:25:45 +02:00
Unchained ec287c85ea Fix CSS cascade layers and header layout
- Rewrite globals.css to work properly with Tailwind 4 cascade layers
  - Remove conflicting * { padding: 0 } reset that broke Tailwind utilities
  - Organize styles into @layer base, @layer components, @layer utilities
- Fix newsletter centering (was off due to CSS layer conflicts)
- Fix header overlap on products pages (proper pt-[72px] spacing)
- Add solid header background (bg-white/80) instead of transparent
- Fix logo/nav positioning on desktop

Verified fixes with Playwright screenshots at 1280x800 and 390x844
2026-03-21 17:21:00 +02:00
Unchained 7c05bd2346 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
2026-03-21 16:22:17 +02:00
Unchained 9d639fbd64 fix: Parse JSON description in NewHero component
- Import parseDescription in NewHero.tsx
- Use parseDescription for featured product description
2026-03-21 13:12:30 +02:00
Unchained 0831968881 fix: Suppress hydration warnings from browser extensions
- Add suppressHydrationWarning to html and body elements
- Prevents FoxClocks and other extensions from causing errors
- Extensions modifying DOM won't break React hydration
2026-03-21 13:09:31 +02:00
Unchained 3aaad57076 fix: Parse Saleor JSON description format to plain text
- Add parseDescription() helper to extract text from EditorJS JSON
- Update getLocalizedProduct to use parsed description
- Fix product descriptions showing raw JSON on frontend
2026-03-21 13:06:14 +02:00
Unchained 01d553bfea fix: Add error boundary to handle browser extension errors
- Create ErrorBoundary component to catch extension errors
- Ignore TronLink and other chrome-extension errors
- Prevent extension conflicts from crashing the app
2026-03-21 13:02:55 +02:00
Unchained a47698d5ca fix(saleor): Fix remaining WooCommerce references and configuration
- Fix syntax error in Checkout.ts (extra semicolon)
- Update NewHero.tsx to use Saleor types and store
- Update page.tsx to use Saleor getProducts
- Add Saleor API domain to next.config.ts images config
2026-03-21 13:00:16 +02:00
Unchained 1b733c63d5 feat(saleor): Phase 5 - Remove WooCommerce
- Remove @woocommerce/woocommerce-rest-api dependency
- Delete src/lib/woocommerce.ts
- Delete src/stores/cartStore.ts (replaced by saleorCheckoutStore)
- Clean up package.json dependencies
- Project now fully migrated to Saleor GraphQL API
2026-03-21 12:45:56 +02:00
Unchained d43481716d feat(saleor): Phase 4 - Checkout Flow
- Create checkout page with form validation
- Implement shipping/billing address forms
- Add Cash on Delivery (COD) payment method
- Integrate Saleor checkout completion mutation
- Add order success page with confirmation
- Handle checkout errors gracefully
- Display order summary with line items
2026-03-21 12:45:09 +02:00
Unchained 8b3389725e feat(saleor): Phase 3 - Cart Migration
- Create Saleor checkout store (Zustand + persist)
- Update CartDrawer to use Saleor checkout
- Update Header to use Saleor checkout store
- Update ProductDetail with Add to Cart functionality
- Add checkout initialization on app load
- Handle checkout line add/update/delete operations
- Add error handling and loading states
2026-03-21 12:42:41 +02:00
Unchained 5706792980 feat(saleor): Phase 2 - Product Migration
- Update ProductCard to use Saleor Product type
- Update products listing page to fetch from Saleor
- Update product detail page with Saleor integration
- Add language switching support (SR/EN)
- Add SEO metadata generation
- Implement static params generation for all product slugs
- Add availability checking based on variant quantity
2026-03-21 12:38:24 +02:00
Unchained 7b94537670 feat(saleor): Phase 1 - GraphQL Client Setup
- Add Apollo Client for Saleor GraphQL API
- Create GraphQL fragments (Product, Variant, Checkout)
- Create GraphQL queries (Products, Checkout)
- Create GraphQL mutations (Checkout operations)
- Add TypeScript types for Saleor entities
- Add product helper functions
- Install @apollo/client and graphql dependencies

Part of WordPress/WooCommerce → Saleor migration
2026-03-21 12:36:21 +02:00
Unchained db1914d69b test: verify full auto-deploy pipeline
Build and Deploy / build (push) Has been cancelled
2026-03-07 12:37:05 +02:00
Unchained 2c6889ad20 fix: revert to init container deployment with webhook auto-restart
Build and Deploy / build (push) Has been cancelled
- Init containers clone and build fresh code on each pod start
- Webhook triggers kubectl rollout restart on git push
- This provides true auto-deploy without requiring Docker registry
2026-03-07 12:35:30 +02:00
Unchained 97a9fcf7d5 test: verify auto-deploy webhook triggers pod restart
Build and Deploy / build (push) Has been cancelled
2026-03-07 12:33:23 +02:00
Unchained 9b0d82da30 Add Gitea Actions workflow for CI/CD
Build and Deploy / build (push) Has been cancelled
2026-03-07 12:28:00 +02:00
Unchained 44e033c7ae temp: remove workflow for initial push 2026-03-07 12:27:11 +02:00
Unchained 8f3bcebbf6 feat: implement full CI/CD pipeline with GitHub Actions and Flux
Build and Deploy / build (push) Has been cancelled
- Add GitHub Actions workflow to build and push Docker images to GHCR
- Add Dockerfile for multi-stage builds
- Update deployment to use GHCR images
- Add GHCR authentication secrets
- Configure Flux ImageRepository, ImagePolicy, and ImageUpdateAutomation
- Remove init container approach in favor of proper Docker builds

Auto-deploy flow:
1. Push to master triggers GitHub Actions
2. GitHub Actions builds image with commit hash tag
3. Image pushed to ghcr.io/unchainedio/manoon-headless
4. Flux ImageRepository detects new image
5. Flux ImageUpdateAutomation updates kustomization.yaml
6. Flux Kustomization applies new deployment
7. Kubernetes restarts pods with new image
2026-03-07 12:26:37 +02:00
Unchained 2c27fc65d0 Revert to init container approach
The Docker-based CI/CD approach is the industry standard but requires:
- Proper container registry (GHCR, Docker Hub) with HTTPS
- Or complex local registry setup with containerd HTTP configuration

The init container approach works reliably for now. To enable auto-deploy:
1. Flux detects git changes in 30s (via webhook)
2. Kustomization applies new config
3. Manually run: kubectl rollout restart deployment/storefront -n manoonoils

For true auto-deploy, consider:
- Setting up GHCR with proper auth
- Using GitHub Actions to build/push images
- Using Flux ImageUpdateAutomation

Or simpler: A post-deploy webhook that triggers rollout restart.
2026-03-07 11:33:07 +02:00
Unchained 8f2b214c9f deploy: use registry ClusterIP instead of DNS name 2026-03-07 11:23:23 +02:00
Unchained c4ff39394e deploy: use local registry image 2026-03-07 11:21:24 +02:00
Unchained c3b3e133a8 fix: yaml indentation in deployment.yaml 2026-03-07 11:10:45 +02:00
Unchained 81d74ced0c feat: migrate to standard Docker-based CI/CD deployment
- Add Dockerfile for building Next.js images
- Replace init-container deployment with standard deployment
- Add kustomization with image tag tracking
- Add deploy.sh script for CI/CD pipeline

This enables proper GitOps auto-deployment:
1. Build image with commit hash tag
2. Push to GHCR
3. Update kustomization.yaml image tag
4. Flux detects change and restarts pods
2026-03-07 11:09:59 +02:00
Unchained 467b513b67 feat: add gitRevision annotation for auto-restart on git changes 2026-03-07 11:06:15 +02:00
Unchained c1038245e8 test: verify auto-deploy with ConfigMap trigger 2026-03-07 11:02:49 +02:00
Unchained ee391a7b8d feat: add deployment-metadata configmap to trigger pod restarts on git changes 2026-03-07 11:01:04 +02:00
Unchained 5ce35817a1 feat: add git revision annotation to force pod restart on updates 2026-03-07 10:57:58 +02:00
Unchained 81580de2a5 test: verify flux auto-deploy webhook 2026-03-07 10:55:48 +02:00
Unchained 2129e1c115 Replace ManoonOils text logo with image logo in header and footer 2026-03-07 10:38:00 +02:00
Unchained 103309e0ff Fix broken image in StatsSection - use manoon-luksuzni-set product image 2026-03-07 07:27:15 +02:00
Unchained 2dc837b0e9 Add queryStringAuth to WooCommerce API for better authentication 2026-03-07 07:12:34 +02:00
Unchained 214547362c Remove secret from deployment - must be created manually with real credentials 2026-03-07 07:04:31 +02:00
Unchained a1090e0e2c Fix kustomization.yaml - use deployment-nodejs.yaml 2026-03-07 06:31:35 +02:00
Unchained 72fe1d4079 Remove Docker-related files - using pure Node.js deployment 2026-03-07 06:20:00 +02:00
Unchained e1120f617e Remove middleware temporarily to fix routing 2026-03-06 21:04:27 +02:00
Unchained 236eb628d2 Fix i18n: use localePrefix: never to serve default locale at root 2026-03-06 20:59:48 +02:00
Unchained d88d77b082 Fix i18n routing: use shared routing config 2026-03-06 20:52:53 +02:00
Unchained c065b5ee17 Fix probes: use /favicon.ico instead of static dir 2026-03-06 20:50:09 +02:00
Unchained bd423dbcc6 Fix health probes - use /_next/static/ path 2026-03-06 20:40:45 +02:00
Unchained ee8902b843 Working Node.js deployment - use npm install instead of ci 2026-03-06 20:40:08 +02:00
Unchained ba0e789b80 Fix Node.js deployment: add debug output, increase resources for npm install 2026-03-06 20:32:14 +02:00
Unchained d8fe9337bb Update Node.js deployment with resource limits for k3s 2026-03-06 19:34:29 +02:00
Unchained ced136fb4d Add pure Node.js deployment without Docker 2026-03-06 19:10:56 +02:00
Unchained cac26e73ce Add Docker-less Node.js deployment config 2026-03-06 18:56:22 +02:00
Unchained 0fab8b6d42 Restore multilingual support: / for sr, /en for en with browser detection 2026-03-06 18:51:38 +02:00
Unchained 2c8cf68e89 Refactor WooCommerce API to lazy initialization for build compatibility 2026-03-06 16:34:49 +02:00
Unchained c45aefde6e Add error handling to sitemap.ts for build time 2026-03-06 16:34:00 +02:00
Unchained 42793da45f Remove 'en' locale from i18n routing config 2026-03-06 16:33:31 +02:00
Unchained 8aa849f4ba Add error handling for API calls during build time 2026-03-06 16:30:54 +02:00