feat: nowe strony SEO, zdjęcia miast, loga marek, dane firmy, nawigacja, cennik

This commit is contained in:
MichalC
2026-07-04 19:38:22 +02:00
parent cdbc76cf79
commit 03d425d4b1
59 changed files with 71 additions and 675 deletions
+13 -13
View File
@@ -112,24 +112,24 @@ export function Header() {
{
title: "Dolny Śląsk — centrum",
items: [
{ label: "Klimatyzacja Wrocław", href: "/klimatyzacja/wroclaw", description: "Montaż i serwis we Wrocławiu" },
{ label: "Klimatyzacja Oława", href: "/klimatyzacja/olawa", description: "25 km od Wrocławia" },
{ label: "Klimatyzacja Oleśnica", href: "/klimatyzacja/olesnica", description: "30 km od Wrocławia" },
{ label: "Klimatyzacja Środa Śląska", href: "/klimatyzacja/sroda-slaska", description: "35 km od Wrocławia" },
{ label: "Klimatyzacja Trzebnica", href: "/klimatyzacja/trzebnica", description: "25 km od Wrocławia" },
{ label: "Klimatyzacja Siechnice", href: "/klimatyzacja/siechnice", description: "15 km od Wrocławia" },
{ label: "Klimatyzacja Wrocław", href: "/klimatyzacja/wroclaw" },
{ label: "Klimatyzacja Oława", href: "/klimatyzacja/olawa" },
{ label: "Klimatyzacja Oleśnica", href: "/klimatyzacja/olesnica" },
{ label: "Klimatyzacja Środa Śląska", href: "/klimatyzacja/sroda-slaska" },
{ label: "Klimatyzacja Trzebnica", href: "/klimatyzacja/trzebnica" },
{ label: "Klimatyzacja Siechnice", href: "/klimatyzacja/siechnice" },
],
},
{
title: "Dolny Śląsk — regiony",
items: [
{ label: "Klimatyzacja Legnica", href: "/klimatyzacja/legnica", description: "Legnica i okolice" },
{ label: "Klimatyzacja Wałbrzych", href: "/klimatyzacja/walbrzych", description: "Wałbrzych i Kotlina" },
{ label: "Klimatyzacja Jelenia Góra", href: "/klimatyzacja/jelenia-gora", description: "Karkonosze i okolice" },
{ label: "Klimatyzacja Lubin", href: "/klimatyzacja/lubin", description: "Zagłębie Miedziowe" },
{ label: "Klimatyzacja Głogów", href: "/klimatyzacja/glogow", description: "Głogów i powiat" },
{ label: "Klimatyzacja Świdnica", href: "/klimatyzacja/swidnica", description: "Świdnica i okolice" },
{ label: "Klimatyzacja Opole", href: "/klimatyzacja/opole", description: "100 km od Wrocławia" },
{ label: "Klimatyzacja Legnica", href: "/klimatyzacja/legnica" },
{ label: "Klimatyzacja Wałbrzych", href: "/klimatyzacja/walbrzych" },
{ label: "Klimatyzacja Jelenia Góra", href: "/klimatyzacja/jelenia-gora" },
{ label: "Klimatyzacja Lubin", href: "/klimatyzacja/lubin" },
{ label: "Klimatyzacja Głogów", href: "/klimatyzacja/glogow" },
{ label: "Klimatyzacja Świdnica", href: "/klimatyzacja/swidnica" },
{ label: "Klimatyzacja Opole", href: "/klimatyzacja/opole" },
],
},
];
+10 -8
View File
@@ -2,14 +2,16 @@ import React from 'react';
import Image from 'next/image';
const brands = [
{ name: 'Daikin', logo: '/brands/daikin.svg' }, // Placeholders, we will just show text if image fails or use a generic box
{ name: 'Mitsubishi', logo: '/brands/mitsubishi.svg' },
{ name: 'Gree', logo: '/brands/gree.svg' },
{ name: 'Rotenso', logo: '/brands/rotenso.svg' },
{ name: 'LG', logo: '/brands/lg.svg' },
{ name: 'Samsung', logo: '/brands/samsung.svg' },
{ name: 'Panasonic', logo: '/brands/panasonic.svg' },
{ name: 'Aux', logo: '/brands/aux.svg' },
{ name: 'Daikin', logo: '/brands/daikin.webp' },
{ name: 'Mitsubishi Electric', logo: '/brands/mitsubishi.webp' },
{ name: 'Gree', logo: '/brands/gree.webp' },
{ name: 'Rotenso', logo: '/brands/rotenso.webp' },
{ name: 'LG', logo: '/brands/lg.webp' },
{ name: 'Samsung', logo: '/brands/samsung.webp' },
{ name: 'Haier', logo: '/brands/haier.webp' },
{ name: 'CHV', logo: '/brands/chv.webp' },
{ name: 'Toshiba', logo: '/brands/toshiba.webp' },
{ name: 'Fuji Electric', logo: '/brands/fuji.webp' },
];
export const BrandsGrid = () => {
+1 -1
View File
@@ -27,7 +27,7 @@ export function HeroSection({
ctaLink = "/kontakt",
secondaryCtaText = "Zobacz ofertę",
secondaryCtaLink = "/sklep",
backgroundImage = "/hero.jpg",
backgroundImage = "/images/hero/hero-section-image.webp",
features
}: HeroSectionProps = {}) {
return (
+9 -10
View File
@@ -10,16 +10,15 @@ import { useState } from 'react';
const brandLogos: Record<string, string> = {
'Gree': '/brands/gree.webp',
'Rotenso': '/brands/rotenso.png',
'Toshiba': '/brands/toshiba.jpg',
'Daikin': '/brands/daikin.png',
'CHV': '/brands/chv.jpeg',
'Haier': '/brands/haier.jpg',
'Aux': '/brands/aux.png',
'LG': '/brands/lg.png',
'Samsung': '/brands/samsung.png',
'Mitsubishi Electric': '/brands/mitsubishi-electric.png',
'Fuji Electric': '/brands/fuji-electric.png',
'Rotenso': '/brands/rotenso.webp',
'Toshiba': '/brands/toshiba.webp',
'Daikin': '/brands/daikin.webp',
'CHV': '/brands/chv.webp',
'Haier': '/brands/haier.webp',
'LG': '/brands/lg.webp',
'Samsung': '/brands/samsung.webp',
'Mitsubishi Electric': '/brands/mitsubishi.webp',
'Fuji Electric': '/brands/fuji.webp',
};
interface ProductCardProps {
+9 -10
View File
@@ -14,16 +14,15 @@ import { getProductVariants } from '@/content/product-variants';
const brandLogos: Record<string, string> = {
'Gree': '/brands/gree.webp',
'Rotenso': '/brands/rotenso.png',
'Toshiba': '/brands/toshiba.jpg',
'Daikin': '/brands/daikin.png',
'CHV': '/brands/chv.jpeg',
'Haier': '/brands/haier.jpg',
'Aux': '/brands/aux.png',
'LG': '/brands/lg.png',
'Samsung': '/brands/samsung.png',
'Mitsubishi Electric': '/brands/mitsubishi-electric.png',
'Fuji Electric': '/brands/fuji-electric.png',
'Rotenso': '/brands/rotenso.webp',
'Toshiba': '/brands/toshiba.webp',
'Daikin': '/brands/daikin.webp',
'CHV': '/brands/chv.webp',
'Haier': '/brands/haier.webp',
'LG': '/brands/lg.webp',
'Samsung': '/brands/samsung.webp',
'Mitsubishi Electric': '/brands/mitsubishi.webp',
'Fuji Electric': '/brands/fuji.webp',
};
interface Props {
+3 -5
View File
@@ -81,8 +81,8 @@ export function ProductsGrid({ products, brands }: ProductsGridProps) {
const urlBrand = searchParams.get('brand') || '';
const urlCategory = searchParams.get('category') || 'all';
const [category, setCategory] = useState<'all' | 'scienne' | 'multisplit' | 'kasetonowe' | 'kanalowe' | 'konsolowe' | 'podlogowe' | 'jednostka-scienna'>(
urlCategory as 'all' | 'scienne' | 'multisplit' | 'kasetonowe' | 'kanalowe' | 'konsolowe' | 'podlogowe' | 'jednostka-scienna'
const [category, setCategory] = useState<'all' | 'scienne' | 'multisplit' | 'kasetonowe' | 'podlogowe' | 'jednostka-scienna'>(
urlCategory as 'all' | 'scienne' | 'multisplit' | 'kasetonowe' | 'podlogowe' | 'jednostka-scienna'
);
const [selectedBrands, setSelectedBrands] = useState<string[]>(urlBrand ? [urlBrand] : []);
const [searchQuery, setSearchQuery] = useState(urlSearch);
@@ -99,7 +99,7 @@ export function ProductsGrid({ products, brands }: ProductsGridProps) {
setSearchQuery(urlSearch);
setSelectedBrands(urlBrand ? [urlBrand] : []);
if (urlCategory !== 'all') {
setCategory(urlCategory as 'scienne' | 'multisplit' | 'kasetonowe' | 'kanalowe' | 'konsolowe' | 'podlogowe' | 'jednostka-scienna');
setCategory(urlCategory as 'scienne' | 'multisplit' | 'kasetonowe' | 'podlogowe' | 'jednostka-scienna');
} else {
setCategory('all');
}
@@ -227,8 +227,6 @@ export function ProductsGrid({ products, brands }: ProductsGridProps) {
{ val: 'scienne', label: 'Ścienne split' },
{ val: 'multisplit', label: 'Multisplit' },
{ val: 'kasetonowe', label: 'Kasetonowe' },
{ val: 'konsolowe', label: 'Konsolowe' },
{ val: 'kanalowe', label: 'Kanałowe' },
].map(opt => (
<li key={opt.val}>
<button