Files
thermcool/app/klimatyzacja-do-biura/page.tsx
T
MichalC c9e4283789 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)
2026-08-02 20:31:55 +02:00

295 lines
14 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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, Building2, Thermometer, Wind, Zap, Clock } from 'lucide-react';
import { companyDetails } from '@/content/company';
import { buttonClasses, Button } from '@/components/ui/Button';
export const metadata: Metadata = {
title: 'Klimatyzacja do biura Wrocław — montaż, serwis',
description: 'Klimatyzacja do biura i lokalu we Wrocławiu. Montaż split, multisplit, kasetonowych. Serwis z umową abonamentową. Bezpłatna wycena dla firm. Zadzwoń!',
alternates: { canonical: '/klimatyzacja-do-biura' },
openGraph: {
title: 'Klimatyzacja do biura Wrocław',
description: 'Montaż i serwis klimatyzacji dla biur, lokali i firm. Wrocław i Dolny Śląsk. Bezpłatna wycena.',
},
};
const faqItems = [
{
q: 'Ile kosztuje klimatyzacja dla biura?',
a: 'Koszt zależy od powierzchni i liczby pomieszczeń. Małe biuro (1 pokój, do 25 m²) — klimatyzator split od ok. 3000 zł łącznie z montażem. Większe biuro (kilka pomieszczeń) — system multisplit lub kasetonowy od 6000–15000 zł. Wystawiamy bezpłatną wycenę po oględzinach.',
},
{
q: 'Jaka klimatyzacja najlepsza do biura open space?',
a: 'Do dużych przestrzeni open space najlepiej sprawdzają się systemy kanałowe. Zapewniają równomierne chłodzenie całej powierzchni bez tworzenia stref zimnego nawiewu. Dla mniejszych biur — system multisplit z kilkoma jednostkami ściennymi.',
},
{
q: 'Czy możecie serwisować klimatyzację w ramach umowy?',
a: 'Tak, oferujemy umowy serwisowe dla firm — 2 przeglądy rocznie (przed sezonem letnim i zimowym), priorytetowy czas reakcji przy awarii i zniżkę 15% na naprawy. Idealne rozwiązanie dla biur, restauracji, sklepów i innych lokali.',
},
{
q: 'Czy montaż klimatyzacji w biurze wymaga pozwolenia?',
a: 'W większości przypadków montaż klimatyzacji w biurze nie wymaga pozwolenia na budowę — wystarczy zgłoszenie. Wyjątkiem są budynki zabytkowe lub objęte ochroną konserwatora. W lokalach handlowych i biurowcach często wymagana jest zgoda zarządcy budynku — pomożemy z dokumentacją.',
},
{
q: 'Jak szybko możecie zamontować klimatyzację w biurze?',
a: 'Standardowy czas realizacji to 1–2 tygodnie od wyceny do montażu. W sezonie (maj–sierpień) terminy mogą być dłuższe — warto planować z wyprzedzeniem. Dla firm możemy zaproponować montaż w weekend lub poza godzinami pracy, żeby nie zakłócać działalności.',
},
{
q: 'Czy wystawiacie faktury VAT?',
a: 'Tak, wystawiamy faktury VAT za montaż i serwis. Klimatyzacja w biurze to koszt uzyskania przychodu — możesz odliczyć VAT i wpisać wydatek w koszty działalności. Chętnie omówimy szczegóły z Twoim księgowym.',
},
];
const TYPY_BIUR = [
{
icon: Building2,
name: 'Małe biuro / gabinet',
powierzchnia: 'do 25 m²',
rozwiazanie: 'Klimatyzator split',
opis: 'Jednostka ścienna z jedną jednostką zewnętrzną. Najprostsze i najtańsze rozwiązanie dla pojedynczego pomieszczenia.',
cena: 'od 3000 zł',
},
{
icon: Building2,
name: 'Biuro wielopokojowe',
powierzchnia: '50–150 m²',
rozwiazanie: 'System multisplit',
opis: 'Jedna jednostka zewnętrzna obsługuje 2–5 pomieszczeń. Estetyczne i ekonomiczne — mniej przewiertów i kabli na zewnątrz.',
cena: 'od 6000 zł',
},
{
icon: Building2,
name: 'Open space / sala konferencyjna',
powierzchnia: '50–200 m²',
rozwiazanie: 'Klimatyzator kasetonowy',
opis: 'Montaż w suficie podwieszanym — niewidoczny, równomierny nawiew w czterech kierunkach. Idealne do dużych otwartych przestrzeni.',
cena: 'wycena indywidualna',
},
{
icon: Building2,
name: 'Lokal handlowy / restauracja',
powierzchnia: 'powyżej 100 m²',
rozwiazanie: 'System kanałowy',
opis: 'Klimatyzacja kanałowa ukryta w suficie — jedyne widoczne elementy to kratki nawiewne. Maksymalna estetyka i równomierny rozkład temperatury.',
cena: 'wycena indywidualna',
},
];
export default function KlimatyzacjaDoBiuraPage() {
const jsonLd = {
'@context': 'https://schema.org',
'@type': 'Service',
name: 'Klimatyzacja do biura 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: 'Montaż i serwis klimatyzacji dla biur, lokali i firm we Wrocławiu i na Dolnym Śląsku.',
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/klimatyzacja_do_biura.webp"
alt="Klimatyzacja do biura"
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">
<Building2 className="size-4" />
Klimatyzacja dla firm i biur
</div>
<h1 className="text-3xl md:text-5xl font-extrabold font-heading leading-tight mb-6">
Klimatyzacja do biura Wrocław<br />
<span className="text-accent">montaż i serwis dla firm</span>
</h1>
<p className="text-lg text-white/80 mb-8 max-w-2xl">
Komfortowa temperatura w biurze to wyższa produktywność i zadowolenie pracowników.
Dobieramy, montujemy i serwisujemy klimatyzację dla biur, lokali handlowych
i restauracji na terenie Wrocławia i Dolnego Śląska.
</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="/kontakt" className={buttonClasses({ variant: 'outline', size: 'md' })}>
Zapytaj o wycenę dla firmy <ArrowRight className="size-5" />
</Link>
</div>
</div>
</section>
{/* Typy rozwiązań */}
<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-2">Jakie rozwiązanie dla Twojego biura?</h2>
<p className="text-text-muted text-sm mb-8">Dobór uzależniony od powierzchni, układu pomieszczeń i rodzaju sufitu.</p>
<div className="grid grid-cols-1 sm:grid-cols-2 gap-4 mb-12">
{TYPY_BIUR.map((t, i) => {
const Icon = t.icon;
return (
<div key={i} className="bg-slate-50 rounded-2xl border border-border p-5 flex flex-col gap-3">
<div className="flex items-start justify-between gap-2">
<div className="flex items-center gap-2">
<div className="size-9 rounded-lg bg-accent/10 flex items-center justify-center shrink-0">
<Icon className="size-4 text-accent" />
</div>
<div>
<p className="font-bold text-primary text-sm">{t.name}</p>
<p className="text-xs text-text-muted">{t.powierzchnia}</p>
</div>
</div>
<span className="text-xs font-bold text-accent whitespace-nowrap">{t.cena}</span>
</div>
<div>
<span className="inline-block text-xs font-semibold text-accent bg-accent/10 px-2 py-0.5 rounded-md mb-1">{t.rozwiazanie}</span>
<p className="text-xs text-text-muted leading-relaxed">{t.opis}</p>
</div>
</div>
);
})}
</div>
{/* Zalety dla firm */}
<h2 className="text-2xl font-extrabold text-primary font-heading mb-8">Dlaczego firmy wybierają ThermCool?</h2>
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
{[
{ icon: Thermometer, title: 'Faktura VAT i koszty firmy', desc: 'Klimatyzacja w biurze to koszt uzyskania przychodu. Odlicz VAT i wpisz inwestycję w koszty działalności.' },
{ icon: Clock, title: 'Montaż poza godzinami pracy', desc: 'Możemy montować w weekendy i wieczorami — bez zakłócania pracy biura i obsługi klientów.' },
{ icon: Wrench, title: 'Umowa serwisowa dla firm', desc: '2 przeglądy rocznie, priorytetowy czas reakcji przy awarii i 15% zniżki na naprawy przez cały rok.' },
{ icon: Zap, title: 'Szybka wycena', desc: 'Przyjeżdżamy na oględziny i w ciągu 24 godzin dostarczamy szczegółową wycenę z doborem urządzeń.' },
{ icon: Wind, title: 'Wszystkie typy instalacji', desc: 'Split, multisplit, kanałowe — dobieramy rozwiązanie do Twoich potrzeb i budżetu.' },
{ icon: Check, title: 'Gwarancja i dokumentacja', desc: '2 lata gwarancji na montaż, pełna dokumentacja F-Gaz wymagana przy przeglądach gwarancyjnych.' },
].map((item, i) => {
const Icon = item.icon;
return (
<div key={i} className="flex gap-3 p-4 bg-slate-50 rounded-xl">
<Icon className="size-5 text-accent shrink-0 mt-0.5" />
<div>
<p className="font-bold text-primary text-sm">{item.title}</p>
<p className="text-xs text-text-muted mt-0.5">{item.desc}</p>
</div>
</div>
);
})}
</div>
</div>
</section>
{/* Abonament serwisowy */}
<section className="py-16 bg-slate-50">
<div className="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8">
<div className="bg-primary rounded-2xl p-8 text-white">
<div className="flex flex-col sm:flex-row items-start sm:items-center justify-between gap-6">
<div>
<h2 className="text-xl font-extrabold font-heading mb-2">Serwis sezonowy dla firm</h2>
<p className="text-white/70 text-sm mb-4">Umowa serwisowa — spokój głowy przez cały rok.</p>
<ul className="flex flex-col gap-2">
{[
'2 przeglądy rocznie (przed latem i zimą)',
'Priorytetowy czas reakcji przy awarii',
'Zniżka 15% na wszystkie naprawy',
'Powiadomienia SMS o terminie przeglądu',
'Pełna dokumentacja F-Gaz',
].map((p, i) => (
<li key={i} className="flex items-center gap-2 text-sm text-white/80">
<Check className="size-4 text-accent shrink-0" />{p}
</li>
))}
</ul>
</div>
<div className="shrink-0 text-center sm:text-right">
<p className="text-white/50 text-xs mb-1">od</p>
<p className="text-4xl font-extrabold text-white mb-1">199 zł</p>
<p className="text-white/50 text-xs mb-4">rocznie / urządzenie</p>
<Link href="/kontakt" className="inline-flex items-center gap-2 px-5 py-2.5 bg-accent text-white font-bold rounded-xl text-sm hover:bg-accent/90 transition-colors whitespace-nowrap">
Zapytaj o abonament <ArrowRight className="size-4" />
</Link>
</div>
</div>
</div>
</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">
Chcesz klimatyzację w swoim biurze lub lokalu?
</h2>
<p className="text-white/80 mb-8">
Zadzwoń po bezpłatną wycenę — przyjeżdżamy do firm w całym Wrocławiu i Dolnym Śląsku.
</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="/kontakt" className={buttonClasses({ variant: 'outline', size: 'md' })}>
Napisz do nas <ArrowRight className="size-5" />
</Link>
</div>
</div>
</section>
</main>
</>
);
}