feat: filtr jednostek multisplit, ostatnio oglądane, sklep pompy ciepła, czyszczenie komentarzy, checkbox zgody

- Filtr 'Ilość jednostek wewn.' w sklepie (1–9 jednostek, checkboxy, liczniki)
- Komponent RecentlyViewedProducts + Zustand store (recently-viewed-store.ts)
- Pompy ciepła dodane do sklepu i nawigacji (Header + MobileMenu)
- Logotypy marek zaktualizowane (Daikin, Panasonic + odświeżone istniejące)
- Checkbox zgody RODO w /zamowienie powiększony (w-5 h-5)
- Usunięcie ~65 zbędnych komentarzy WHAT z 12 plików (build: 0 errors)
- Plik analyze_products.ts (pomocniczy skrypt diagnostyczny)
This commit is contained in:
MichalC
2026-08-02 20:31:55 +02:00
parent 092cff1899
commit c9e4283789
37 changed files with 331 additions and 123 deletions
+33 -13
View File
@@ -83,7 +83,18 @@ const USLUGI = [
},
];
const MARKI = ['Daikin', 'Mitsubishi Electric', 'LG', 'Samsung', 'Gree', 'Rotenso', 'Haier', 'Aux', 'Fuji Electric', 'Toshiba', 'Fujitsu', 'Bosch'];
const BRANDS_WITH_LOGOS = [
{ name: 'Aux', src: '/brands/aux-brand.webp' },
{ name: 'CHV', src: '/brands/chv.webp' },
{ name: 'Fuji Electric', src: '/brands/fuji.webp' },
{ name: 'Gree', src: '/brands/gree.webp' },
{ name: 'Haier', src: '/brands/haier.webp' },
{ name: 'LG', src: '/brands/lg.webp' },
{ name: 'Mitsubishi Electric', src: '/brands/mitsubishi.webp' },
{ name: 'Rotenso', src: '/brands/rotenso.webp' },
{ name: 'Samsung', src: '/brands/samsung.webp' },
{ name: 'Toshiba', src: '/brands/toshiba.webp' },
];
export default function SerwisKlimatyzacjiPage() {
const jsonLd = {
@@ -189,16 +200,27 @@ export default function SerwisKlimatyzacjiPage() {
</section>
{/* Marki */}
<section className="py-16 bg-slate-50">
<section className="py-16 bg-slate-50 overflow-hidden">
<div className="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8">
<h2 className="text-2xl font-extrabold text-primary font-heading mb-6">Serwisujemy wszystkie popularne marki</h2>
<div className="flex flex-wrap gap-2 mb-4">
{MARKI.map(m => (
<span key={m} className="px-4 py-2 bg-white border border-border rounded-xl text-sm font-semibold text-primary">
{m}
</span>
))}
<div className="relative flex overflow-hidden w-full mb-4">
<div className="flex w-max animate-marquee gap-4 whitespace-nowrap items-center">
{/* Pierwszy zestaw */}
{BRANDS_WITH_LOGOS.map(m => (
<div key={m.name} className="flex-shrink-0 px-6 py-4 bg-white border border-border rounded-xl flex items-center justify-center w-40 h-20 hover:shadow-md transition-shadow">
<Image src={m.src} alt={m.name} width={120} height={60} className="object-contain w-full h-full" />
</div>
))}
{/* Drugi zestaw (klon) do płynnego przejścia */}
{BRANDS_WITH_LOGOS.map(m => (
<div key={`dup-${m.name}`} className="flex-shrink-0 px-6 py-4 bg-white border border-border rounded-xl flex items-center justify-center w-40 h-20 hover:shadow-md transition-shadow">
<Image src={m.src} alt={m.name} width={120} height={60} className="object-contain w-full h-full" />
</div>
))}
</div>
</div>
<p className="text-xs text-text-muted">Nie widzisz swojej marki? Zadzwoń — prawdopodobnie też ją obsługujemy.</p>
</div>
</section>
@@ -234,15 +256,13 @@ export default function SerwisKlimatyzacjiPage() {
</p>
<div className="flex flex-col sm:flex-row gap-4 justify-center">
<a href={`tel:${companyDetails.phoneRaw}`}>
<Button variant="primary" size="lg">
<Button variant="primary" size="md">
<Phone className="size-5" /> {companyDetails.phone}
</Button>
</a>
<Link href="/zgloszenie-awarii" className={buttonClasses({ variant: 'outline', size: 'lg' })}>
<Link href="/zgloszenie-awarii" className={buttonClasses({ variant: 'outline', size: 'md' })}>
Zgłoś online <ArrowRight className="size-5" />
</Link>
</Link>
</div>
</div>
</section>