Zastosowanie wszystkich poprawek UI i logiki kalkulatora

This commit is contained in:
AI Assistant
2026-08-10 23:26:52 +02:00
commit 7324a6f800
218 changed files with 33628 additions and 0 deletions
+272
View File
@@ -0,0 +1,272 @@
import type { Metadata } from 'next';
import { JsonLd } from '@/components/ui/JsonLd';
import Link from 'next/link';
import Image from 'next/image';
import { Check, Phone, Wrench, ArrowRight, Thermometer, Wind, Zap, ShieldCheck } from 'lucide-react';
import { companyDetails } from '@/content/company';
import { buttonClasses, Button } from '@/components/ui/Button';
export const metadata: Metadata = {
title: 'Serwis klimatyzacji Wrocław — przegląd, czyszczenie, naprawa',
description: 'Serwis klimatyzacji we Wrocławiu i na Dolnym Śląsku. Czyszczenie, odgrzybianie, przegląd, naprawa — wszystkie marki. Szybki termin, uczciwa cena. Zadzwoń!',
alternates: { canonical: '/serwis-klimatyzacji' },
openGraph: {
title: 'Serwis klimatyzacji Wrocław',
description: 'Czyszczenie, przegląd i naprawa klimatyzatorów wszystkich marek. Wrocław i Dolny Śląsk.',
},
};
const faqItems = [
{
q: 'Jak często należy serwisować klimatyzację?',
a: 'Zalecamy przegląd i czyszczenie klimatyzatora co najmniej raz w roku — najlepiej przed sezonem letnim (kwiecień–maj). Urządzenia pracujące intensywnie lub w zapylonych pomieszczeniach warto serwisować dwa razy do roku. Regularne przeglądy wydłużają żywotność urządzenia i obniżają rachunki za prąd.',
},
{
q: 'Ile kosztuje czyszczenie klimatyzatora?',
a: 'Czyszczenie i odgrzybianie klimatyzatora split zaczyna się od 250 zł. Cena obejmuje czyszczenie filtrów, lameli, tacy ociekowej, wentylatora i dezynfekcję układu nawiewu. Dokładna cena zależy od stanu urządzenia i jego modelu.',
},
{
q: 'Jakie marki klimatyzatorów serwisujecie?',
a: 'Serwisujemy wszystkie popularne marki: Daikin, Mitsubishi Electric, LG, Samsung, Gree, Rotenso, Haier, Aux, Fuji Electric, Toshiba, Fujitsu i inne. Jeśli masz mniej popularny model — zadzwoń, prawdopodobnie też go obsługujemy.',
},
{
q: 'Czy przyjeżdżacie w ten sam dzień?',
a: 'Staramy się zapewnić wizytę serwisową w ciągu 24–48 godzin od zgłoszenia. W przypadku awarii krytycznych (brak chłodzenia podczas upałów) priorytetyzujemy pilne wyjazdy. Zadzwoń i opisz sytuację — dopasujemy termin.',
},
{
q: 'Co obejmuje przegląd techniczny klimatyzatora?',
a: 'Przegląd obejmuje: kontrolę szczelności układu chłodniczego (wymóg F-Gaz), pomiar ciśnień roboczych i temperatur, sprawdzenie układu elektrycznego, kontrolę wentylatora i silnika, czyszczenie filtrów oraz raport z przeglądu.',
},
{
q: 'Czy serwisujecie klimatyzatory na gwarancji?',
a: 'Tak, wykonujemy przeglądy gwarancyjne które są wymagane przez producentów do zachowania gwarancji. Wystawiamy dokumentację potwierdzającą wykonanie przeglądu. W przypadku usterek gwarancyjnych kontaktujemy się z importerem w imieniu klienta.',
},
];
const USLUGI = [
{
icon: Thermometer,
title: 'Czyszczenie i odgrzybianie',
desc: 'Kompleksowe czyszczenie jednostki wewnętrznej i zewnętrznej. Dezynfekcja chemiczna, odgrzybianie parowe, czyszczenie filtrów i tacy ociekowej.',
cena: 'od 250 zł',
},
{
icon: Wind,
title: 'Przegląd techniczny (F-Gaz)',
desc: 'Kontrola szczelności układu chłodniczego, pomiar ciśnień i temperatur, sprawdzenie układu elektrycznego. Wymagany prawem co 1–2 lata.',
cena: 'od 150 zł',
},
{
icon: Zap,
title: 'Uzupełnienie czynnika chłodniczego',
desc: 'Lokalizacja nieszczelności próbą azotem, próżniowanie układu, dobicie czynnika R32 lub R410A do właściwego ciśnienia.',
cena: 'od 180 zł',
},
{
icon: Wrench,
title: 'Naprawa i diagnostyka',
desc: 'Odczyt kodów błędów, wymiana uszkodzonych podzespołów elektroniki, sprężarki, wentylatora, czujników. Oryginalne części zamienne.',
cena: 'wycena po diagnostyce',
},
{
icon: ShieldCheck,
title: 'Serwis gwarancyjny',
desc: 'Przeglądy gwarancyjne wymagane przez producenta do zachowania gwarancji. Pełna dokumentacja i raport z przeglądu.',
cena: 'od 150 zł',
},
{
icon: Check,
title: 'Serwis sezonowy / abonament',
desc: '2 przeglądy rocznie (przed latem i zimą), priorytetowy czas reakcji i 15% zniżki na naprawy. Idealne dla biur i restauracji.',
cena: 'od 199 zł/rok',
},
];
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 = {
'@context': 'https://schema.org',
'@type': 'Service',
name: 'Serwis klimatyzacji Wrocław',
provider: {
'@type': 'HVACBusiness',
name: companyDetails.name,
telephone: companyDetails.phone,
address: {
'@type': 'PostalAddress',
addressLocality: companyDetails.address.city,
addressRegion: companyDetails.address.region,
addressCountry: 'PL',
},
},
areaServed: { '@type': 'AdministrativeArea', name: 'Dolny Śląsk' },
description: 'Serwis, czyszczenie, przegląd i naprawa klimatyzatorów wszystkich marek na Dolnym Śląsku.',
offers: {
'@type': 'Offer',
priceCurrency: 'PLN',
price: '250',
priceSpecification: { '@type': 'UnitPriceSpecification', price: '250', priceCurrency: 'PLN', name: 'Czyszczenie klimatyzatora od' },
},
mainEntityOfPage: {
'@type': 'FAQPage',
mainEntity: faqItems.map(f => ({
'@type': 'Question',
name: f.q,
acceptedAnswer: { '@type': 'Answer', text: f.a },
})),
},
};
return (
<>
<JsonLd data={jsonLd} />
<main>
{/* Hero */}
<section className="relative text-white py-24 md:py-32 overflow-hidden">
<Image
src="/images/services/czyszczenie.webp"
alt="Serwis klimatyzacji Wrocław"
fill
className="object-cover"
priority
/>
<div className="absolute inset-0 bg-primary/50" />
<div className="relative z-10 max-w-4xl mx-auto px-4 sm:px-6 lg:px-8">
<div className="inline-flex items-center gap-2 px-3 py-1.5 bg-white/10 rounded-full text-sm font-medium mb-6">
<Wrench className="size-4" />
Wszystkie marki — Dolny Śląsk
</div>
<h1 className="text-3xl md:text-5xl font-extrabold font-heading leading-tight mb-6">
Serwis klimatyzacji Wrocław<br />
<span className="text-accent">szybko i z gwarancją jakości</span>
</h1>
<p className="text-lg text-white/80 mb-8 max-w-2xl">
Czyszczenie, odgrzybianie, przeglądy techniczne i naprawy klimatyzatorów wszystkich marek.
Działamy na terenie Wrocławia i całego Dolnego Śląska — szybki termin, uczciwa cena.
</p>
<div className="flex flex-col sm:flex-row gap-4">
<a href={`tel:${companyDetails.phoneRaw}`}>
<Button variant="primary" size="md">
<Phone className="size-5" /> Zadzwoń: {companyDetails.phone}
</Button>
</a>
<Link href="/zgloszenie-awarii" className={buttonClasses({ variant: 'outline', size: 'md' })}>
Zgłoś awarię online <ArrowRight className="size-5" />
</Link>
</div>
</div>
</section>
{/* Usługi serwisowe */}
<section className="py-16 bg-white">
<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-8">Co obejmuje nasz serwis?</h2>
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
{USLUGI.map((u, i) => {
const Icon = u.icon;
return (
<div key={i} className="flex gap-4 p-5 bg-slate-50 rounded-2xl border border-border">
<div className="size-10 rounded-lg bg-accent/10 flex items-center justify-center shrink-0">
<Icon className="size-5 text-accent" />
</div>
<div className="flex-1">
<div className="flex items-start justify-between gap-2 mb-1">
<p className="font-bold text-primary text-sm">{u.title}</p>
<span className="text-xs font-bold text-accent whitespace-nowrap">{u.cena}</span>
</div>
<p className="text-xs text-text-muted leading-relaxed">{u.desc}</p>
</div>
</div>
);
})}
</div>
</div>
</section>
{/* Marki */}
<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="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>
{/* FAQ */}
<section className="py-16 bg-white">
<div className="max-w-3xl mx-auto px-4 sm:px-6 lg:px-8">
<h2 className="text-2xl font-extrabold text-primary font-heading mb-8">Często zadawane pytania</h2>
<div className="flex flex-col gap-4">
{faqItems.map((item, i) => (
<details key={i} className="group bg-slate-50 rounded-xl border border-border overflow-hidden">
<summary className="flex items-center justify-between p-5 cursor-pointer font-semibold text-primary text-sm list-none">
{item.q}
<ArrowRight className="size-4 text-text-muted group-open:rotate-90 transition-transform shrink-0 ml-3" />
</summary>
<div className="px-5 pb-5 text-sm text-text-muted leading-relaxed border-t border-border pt-4">
{item.a}
</div>
</details>
))}
</div>
</div>
</section>
{/* CTA */}
<section className="py-16 bg-primary text-white">
<div className="max-w-2xl mx-auto px-4 text-center">
<h2 className="text-2xl font-extrabold font-heading mb-4">
Twój klimatyzator wymaga serwisu?
</h2>
<p className="text-white/80 mb-8">
Zadzwoń lub zgłoś awarię online — przyjeżdżamy na terenie Wrocławia i Dolnego Śląska.
</p>
<div className="flex flex-col sm:flex-row gap-4 justify-center">
<a href={`tel:${companyDetails.phoneRaw}`}>
<Button variant="primary" size="md">
<Phone className="size-5" /> {companyDetails.phone}
</Button>
</a>
<Link href="/zgloszenie-awarii" className={buttonClasses({ variant: 'outline', size: 'md' })}>
Zgłoś online <ArrowRight className="size-5" />
</Link>
</div>
</div>
</section>
</main>
</>
);
}