diff --git a/app/cennik-montazu/page.tsx b/app/cennik-montazu/page.tsx
index 139e780..1f30a4e 100644
--- a/app/cennik-montazu/page.tsx
+++ b/app/cennik-montazu/page.tsx
@@ -140,11 +140,11 @@ export default function CennikMontazuPage() {
Zadzwoń po wycenę
-
-
-
+
+
@@ -251,11 +251,11 @@ export default function CennikMontazuPage() {
{companyDetails.phone}
-
-
-
+
+
diff --git a/app/globals.css b/app/globals.css
index 20c9829..8b1736f 100644
--- a/app/globals.css
+++ b/app/globals.css
@@ -72,7 +72,7 @@
--secondary-foreground: #0f2a47;
--muted: #f5f7fa;
--muted-foreground: #5a6678;
- --accent: #2ba8e0;
+ --accent: #1777a3;
--accent-foreground: #ffffff;
--accent-light: #e3f4fc;
--cta: #F39320;
@@ -81,7 +81,7 @@
--destructive: oklch(0.577 0.245 27.325);
--theme-border: #e2e8f0;
--input: #e2e8f0;
- --ring: #2ba8e0;
+ --ring: #1777a3;
--success: #16a34a;
--chart-1: oklch(0.87 0 0);
--chart-2: oklch(0.556 0 0);
@@ -96,7 +96,7 @@
--sidebar-accent: #f5f7fa;
--sidebar-accent-foreground: #0f2a47;
--sidebar-border: #e2e8f0;
- --sidebar-ring: #2ba8e0;
+ --sidebar-ring: #1777a3;
/* DaisyUI Overrides */
--color-primary: var(--accent);
diff --git a/app/klimatyzacja-do-biura/page.tsx b/app/klimatyzacja-do-biura/page.tsx
index 9950812..2a95f42 100644
--- a/app/klimatyzacja-do-biura/page.tsx
+++ b/app/klimatyzacja-do-biura/page.tsx
@@ -139,11 +139,11 @@ export default function KlimatyzacjaDoBiuraPage() {
Zadzwoń: {companyDetails.phone}
-
-
-
+
+
@@ -231,11 +231,11 @@ export default function KlimatyzacjaDoBiuraPage() {
od
199 zł
rocznie / urządzenie
-
-
-
+
+
@@ -277,11 +277,11 @@ export default function KlimatyzacjaDoBiuraPage() {
{companyDetails.phone}
-
-
-
+
+
diff --git a/app/klimatyzacja-do-domu/page.tsx b/app/klimatyzacja-do-domu/page.tsx
index 69dd71a..38c3157 100644
--- a/app/klimatyzacja-do-domu/page.tsx
+++ b/app/klimatyzacja-do-domu/page.tsx
@@ -117,11 +117,11 @@ export default function KlimatyzacjaDoDomuPage() {
Zadzwoń: {companyDetails.phone}
-
-
-
+
+
@@ -197,16 +197,16 @@ export default function KlimatyzacjaDoDomuPage() {
))}
-
-
-
-
-
-
+
+
@@ -246,11 +246,11 @@ export default function KlimatyzacjaDoDomuPage() {
{companyDetails.phone}
-
-
-
+
+
diff --git a/app/klimatyzacja/[miasto]/page.tsx b/app/klimatyzacja/[miasto]/page.tsx
index 5c78761..607b013 100644
--- a/app/klimatyzacja/[miasto]/page.tsx
+++ b/app/klimatyzacja/[miasto]/page.tsx
@@ -158,12 +158,12 @@ export default async function MiastoPage({ params }: Props) {
Pompa ciepła {city.przyimek} {city.nameDopelniacz}
{city.heatPumpTeaser}
-
-
-
+
+
{[
diff --git a/app/koszyk/page.tsx b/app/koszyk/page.tsx
index 65477dc..eb8e98f 100644
--- a/app/koszyk/page.tsx
+++ b/app/koszyk/page.tsx
@@ -16,9 +16,9 @@ export default function KoszykPage() {
Koszyk jest pusty
Dodaj produkty ze sklepu aby złożyć zamówienie.
-
-
-
+
+Przejdź do sklepu
+
);
@@ -80,11 +80,11 @@ export default function KoszykPage() {
+ koszt montażu ustalany indywidualnie
-
-
-
+
+
diff --git a/app/layout.tsx b/app/layout.tsx
index c77de62..79e5887 100644
--- a/app/layout.tsx
+++ b/app/layout.tsx
@@ -16,7 +16,7 @@ const fontSans = Inter({
const fontHeading = Poppins({
subsets: ["latin"],
- weight: ["400", "500", "600", "700", "800"],
+ weight: ["600", "700", "800"],
variable: "--font-heading",
});
diff --git a/app/montaz-klimatyzacji/page.tsx b/app/montaz-klimatyzacji/page.tsx
index 0079e67..4470e0c 100644
--- a/app/montaz-klimatyzacji/page.tsx
+++ b/app/montaz-klimatyzacji/page.tsx
@@ -117,11 +117,11 @@ export default function MontazKlimatyzacjiPage() {
Zadzwoń: {companyDetails.phone}
-
-
-
+
+
@@ -211,11 +211,11 @@ export default function MontazKlimatyzacjiPage() {
))}
-
-
-
+
+
diff --git a/app/page.tsx b/app/page.tsx
index 3432f63..6afc822 100644
--- a/app/page.tsx
+++ b/app/page.tsx
@@ -161,11 +161,11 @@ export default function Home() {
@@ -197,11 +197,11 @@ export default function SerwisDaikinPage() {
{companyDetails.phone}
-
-
-
+
+
diff --git a/app/serwis-klimatyzacji/page.tsx b/app/serwis-klimatyzacji/page.tsx
index 547ad64..3c13e8c 100644
--- a/app/serwis-klimatyzacji/page.tsx
+++ b/app/serwis-klimatyzacji/page.tsx
@@ -150,11 +150,11 @@ export default function SerwisKlimatyzacjiPage() {
Zadzwoń: {companyDetails.phone}
-
-
-
+
+
@@ -235,11 +235,11 @@ export default function SerwisKlimatyzacjiPage() {
{companyDetails.phone}
-
-
-
+
+
diff --git a/app/serwis-lg/page.tsx b/app/serwis-lg/page.tsx
index 3454103..8ab3d1d 100644
--- a/app/serwis-lg/page.tsx
+++ b/app/serwis-lg/page.tsx
@@ -90,11 +90,11 @@ export default function SerwisLGPage() {
Zadzwoń: {companyDetails.phone}
-
-
-
+
+
diff --git a/app/serwis-mitsubishi/page.tsx b/app/serwis-mitsubishi/page.tsx
index 88320c6..45c7cfd 100644
--- a/app/serwis-mitsubishi/page.tsx
+++ b/app/serwis-mitsubishi/page.tsx
@@ -94,11 +94,11 @@ export default function SerwisMitsubishiPage() {
Zadzwoń: {companyDetails.phone}
-
-
-
+
+
@@ -201,11 +201,11 @@ export default function SerwisMitsubishiPage() {
{companyDetails.phone}
-
-
-
+
+
diff --git a/app/serwis-samsung/page.tsx b/app/serwis-samsung/page.tsx
index 8edd190..c984c70 100644
--- a/app/serwis-samsung/page.tsx
+++ b/app/serwis-samsung/page.tsx
@@ -94,11 +94,11 @@ export default function SerwisSamsungPage() {
Zadzwoń: {companyDetails.phone}
-
-
-
+
+
@@ -197,11 +197,11 @@ export default function SerwisSamsungPage() {
{companyDetails.phone}
-
-
-
+
+
diff --git a/app/sitemap.ts b/app/sitemap.ts
index 079b0f6..ef0d9c5 100644
--- a/app/sitemap.ts
+++ b/app/sitemap.ts
@@ -14,7 +14,8 @@ export default function sitemap(): MetadataRoute.Sitemap {
'/realizacje',
'/blog',
- // '/o-nas',
+ '/o-nas',
+ '/kalkulator',
'/kontakt',
'/sklep',
'/koszyk',
@@ -29,7 +30,7 @@ export default function sitemap(): MetadataRoute.Sitemap {
'/serwis-samsung',
'/serwis-mitsubishi',
'/klimatyzacja-do-domu',
- /* '/klimatyzacja-do-biura', */
+ '/klimatyzacja-do-biura',
'/cennik-montazu',
'/zgloszenie-awarii',
'/dostawa',
diff --git a/app/zamowienie/page.tsx b/app/zamowienie/page.tsx
index 975a45c..c06b1d1 100644
--- a/app/zamowienie/page.tsx
+++ b/app/zamowienie/page.tsx
@@ -22,7 +22,9 @@ export default function ZamowieniePage() {
Koszyk jest pusty.
-
+
+Wróć do sklepu
+
);
@@ -35,7 +37,9 @@ export default function ZamowieniePage() {
Zamówienie przyjęte!
{state.message}
-
+
+Wróć do sklepu
+
);
diff --git a/components/awaria/AwariaClient.tsx b/components/awaria/AwariaClient.tsx
index cb080de..d0c9617 100644
--- a/components/awaria/AwariaClient.tsx
+++ b/components/awaria/AwariaClient.tsx
@@ -168,11 +168,11 @@ export function AwariaClient() {
{companyDetails.phone}
-
-
-
+
+
);
diff --git a/components/kalkulator/KalkulatorClient.tsx b/components/kalkulator/KalkulatorClient.tsx
index cb5c051..792dd12 100644
--- a/components/kalkulator/KalkulatorClient.tsx
+++ b/components/kalkulator/KalkulatorClient.tsx
@@ -949,11 +949,11 @@ export function KalkulatorClient({ products }: Props) {
Bezpłatna wycena
-
-
-
+
+
@@ -976,11 +976,11 @@ export function KalkulatorClient({ products }: Props) {
)
) : (
-
-
-
+
+
)}
diff --git a/components/layout/Header.tsx b/components/layout/Header.tsx
index 54abddb..de0c375 100644
--- a/components/layout/Header.tsx
+++ b/components/layout/Header.tsx
@@ -240,17 +240,17 @@ export function Header() {
{/* CTA Button */}
-
-
-
-
-
-
+
+
diff --git a/components/layout/MobileMenu.tsx b/components/layout/MobileMenu.tsx
index 987f6b5..26e6983 100644
--- a/components/layout/MobileMenu.tsx
+++ b/components/layout/MobileMenu.tsx
@@ -41,7 +41,7 @@ export function MobileMenu({ isOpen, onClose }: MobileMenuProps) {
{ label: 'Serwis Mitsubishi Electric', href: '/serwis-mitsubishi' },
{ label: 'Serwis LG', href: '/serwis-lg' },
{ label: 'Klimatyzacja do domu', href: '/klimatyzacja-do-domu' },
- /* { label: 'Klimatyzacja do biura', href: '/klimatyzacja-do-biura' }, */
+ { label: 'Klimatyzacja do biura', href: '/klimatyzacja-do-biura' },
];
@@ -248,11 +248,11 @@ export function MobileMenu({ isOpen, onClose }: MobileMenuProps) {
Zadzwoń: {companyDetails.phone}
-
-
-
+
+
diff --git a/components/layout/TrustBar.tsx b/components/layout/TrustBar.tsx
index 562aaab..66ea7fc 100644
--- a/components/layout/TrustBar.tsx
+++ b/components/layout/TrustBar.tsx
@@ -39,9 +39,9 @@ export function TrustBar() {
-
+
{item.title}
-
+
{item.description}
diff --git a/components/sections/AboutStory.tsx b/components/sections/AboutStory.tsx
index 2f4630c..4760006 100644
--- a/components/sections/AboutStory.tsx
+++ b/components/sections/AboutStory.tsx
@@ -22,7 +22,7 @@ export function AboutStory() {
-
+
{companyDetails.stats.find(s => s.label.includes("doświadczenia"))?.value || "15+"}
diff --git a/components/sections/BlogPreview.tsx b/components/sections/BlogPreview.tsx
index 01b03a8..3fcc4e1 100644
--- a/components/sections/BlogPreview.tsx
+++ b/components/sections/BlogPreview.tsx
@@ -92,12 +92,12 @@ export function BlogPreview() {
{/* Blog Catalog Button */}
-
-
-
+
+
diff --git a/components/sections/CtaBanner.tsx b/components/sections/CtaBanner.tsx
index 1eb97d6..fbfed66 100644
--- a/components/sections/CtaBanner.tsx
+++ b/components/sections/CtaBanner.tsx
@@ -60,12 +60,12 @@ export function CtaBanner({
{/* Action buttons */}
diff --git a/components/sections/HeroSection.tsx b/components/sections/HeroSection.tsx
index c5b1d00..2881f15 100644
--- a/components/sections/HeroSection.tsx
+++ b/components/sections/HeroSection.tsx
@@ -80,12 +80,12 @@ export function HeroSection({
{/* CTA Buttons */}
{ctaText && ctaLink && (
-
-
-
+
+
)}
diff --git a/components/sections/HomeServices.tsx b/components/sections/HomeServices.tsx
index 86ecec9..3e9a669 100644
--- a/components/sections/HomeServices.tsx
+++ b/components/sections/HomeServices.tsx
@@ -132,11 +132,11 @@ export function HomeServices() {
Nasi certyfikowani technicy są dostępni od poniedziałku do soboty. Zarezerwuj termin już dziś, aby uniknąć kolejek w sezonie.
-
-
-
+
+
@@ -51,12 +51,12 @@ export function PillarsSection() {
-
-
-
+
+
diff --git a/components/sections/Testimonials.tsx b/components/sections/Testimonials.tsx
index dc9510d..05eae3d 100644
--- a/components/sections/Testimonials.tsx
+++ b/components/sections/Testimonials.tsx
@@ -43,11 +43,11 @@ export function Testimonials() {
Opinie klientów
-
-
diff --git a/components/shop/CartSummary.tsx b/components/shop/CartSummary.tsx
index c26d3af..4044af7 100644
--- a/components/shop/CartSummary.tsx
+++ b/components/shop/CartSummary.tsx
@@ -58,12 +58,12 @@ export function CartSummary() {
{/* Przycisk */}
-
-
-
+
+
{/* Zaufanie */}
diff --git a/components/shop/CompareBar.tsx b/components/shop/CompareBar.tsx
index ad53fac..dcb5d9d 100644
--- a/components/shop/CompareBar.tsx
+++ b/components/shop/CompareBar.tsx
@@ -47,11 +47,11 @@ export function CompareBar() {
{items.length >= 2 && (
-
-
-
+
+
)}
)}
{cartState === 'cart' && (
-
-
-
+
+
)}
-
-
-
+
+
);
diff --git a/next.config.ts b/next.config.ts
index 16f1658..81d45fb 100644
--- a/next.config.ts
+++ b/next.config.ts
@@ -1,6 +1,14 @@
import type { NextConfig } from "next";
+import bundleAnalyzer from '@next/bundle-analyzer';
+
+const withBundleAnalyzer = bundleAnalyzer({
+ enabled: process.env.ANALYZE === 'true',
+});
const nextConfig: NextConfig = {
+ experimental: {
+ optimizeCss: true,
+ },
images: {
remotePatterns: [
{ protocol: 'https', hostname: 'images.unsplash.com' },
@@ -23,4 +31,4 @@ const nextConfig: NextConfig = {
},
};
-export default nextConfig;
+export default withBundleAnalyzer(nextConfig);
diff --git a/package-lock.json b/package-lock.json
index 3eb38d8..f52f779 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -30,6 +30,7 @@
"zustand": "^5.0.14"
},
"devDependencies": {
+ "@next/bundle-analyzer": "^16.2.10",
"@tailwindcss/postcss": "^4",
"@types/node": "^20",
"@types/react": "^19",
@@ -527,6 +528,16 @@
}
}
},
+ "node_modules/@discoveryjs/json-ext": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz",
+ "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
"node_modules/@dotenvx/dotenvx": {
"version": "1.75.0",
"resolved": "https://registry.npmjs.org/@dotenvx/dotenvx/-/dotenvx-1.75.0.tgz",
@@ -1706,6 +1717,16 @@
"@emnapi/runtime": "^1.7.1"
}
},
+ "node_modules/@next/bundle-analyzer": {
+ "version": "16.2.10",
+ "resolved": "https://registry.npmjs.org/@next/bundle-analyzer/-/bundle-analyzer-16.2.10.tgz",
+ "integrity": "sha512-KcepWhb3IVniZgm00GSSCQDEUQqZXuXtuXRh8J6e3Un342TcQ77iK4DedeEkct+fcx7yFEDL2J6z4Jeho5JDAw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "webpack-bundle-analyzer": "4.10.1"
+ }
+ },
"node_modules/@next/env": {
"version": "16.2.9",
"resolved": "https://registry.npmjs.org/@next/env/-/env-16.2.9.tgz",
@@ -1920,6 +1941,13 @@
"node": ">=12.4.0"
}
},
+ "node_modules/@polka/url": {
+ "version": "1.0.0-next.29",
+ "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz",
+ "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@rtsao/scc": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
@@ -3102,6 +3130,19 @@
"acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
}
},
+ "node_modules/acorn-walk": {
+ "version": "8.3.5",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.5.tgz",
+ "integrity": "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "acorn": "^8.11.0"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
"node_modules/agent-base": {
"version": "7.1.4",
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz",
@@ -4059,6 +4100,13 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/debounce": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz",
+ "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/debounce-fn": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/debounce-fn/-/debounce-fn-4.0.0.tgz",
@@ -4279,6 +4327,13 @@
"node": ">= 0.4"
}
},
+ "node_modules/duplexer": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz",
+ "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
@@ -5648,6 +5703,22 @@
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
"license": "ISC"
},
+ "node_modules/gzip-size": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz",
+ "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "duplexer": "^0.1.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/has-bigints": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz",
@@ -5766,6 +5837,13 @@
"node": ">=16.9.0"
}
},
+ "node_modules/html-escaper": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
+ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/http-errors": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz",
@@ -6265,6 +6343,16 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/is-plain-object": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
+ "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/is-promise": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz",
@@ -7192,6 +7280,16 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/mrmime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz",
+ "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
@@ -7618,6 +7716,16 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/opener": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz",
+ "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==",
+ "dev": true,
+ "license": "(WTFPL OR MIT)",
+ "bin": {
+ "opener": "bin/opener-bin.js"
+ }
+ },
"node_modules/optionator": {
"version": "0.9.4",
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
@@ -8869,6 +8977,21 @@
"url": "https://github.com/sponsors/isaacs"
}
},
+ "node_modules/sirv": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz",
+ "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@polka/url": "^1.0.0-next.24",
+ "mrmime": "^2.0.0",
+ "totalist": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
"node_modules/sisteransi": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
@@ -9370,6 +9493,16 @@
"node": ">=0.6"
}
},
+ "node_modules/totalist": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz",
+ "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/ts-api-utils": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz",
@@ -9779,6 +9912,44 @@
"node": ">= 8"
}
},
+ "node_modules/webpack-bundle-analyzer": {
+ "version": "4.10.1",
+ "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.1.tgz",
+ "integrity": "sha512-s3P7pgexgT/HTUSYgxJyn28A+99mmLq4HsJepMPzu0R8ImJc52QNqaFYW1Z2z2uIb1/J3eYgaAWVpaC+v/1aAQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@discoveryjs/json-ext": "0.5.7",
+ "acorn": "^8.0.4",
+ "acorn-walk": "^8.0.0",
+ "commander": "^7.2.0",
+ "debounce": "^1.2.1",
+ "escape-string-regexp": "^4.0.0",
+ "gzip-size": "^6.0.0",
+ "html-escaper": "^2.0.2",
+ "is-plain-object": "^5.0.0",
+ "opener": "^1.5.2",
+ "picocolors": "^1.0.0",
+ "sirv": "^2.0.3",
+ "ws": "^7.3.1"
+ },
+ "bin": {
+ "webpack-bundle-analyzer": "lib/bin/analyzer.js"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ }
+ },
+ "node_modules/webpack-bundle-analyzer/node_modules/commander": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+ "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10"
+ }
+ },
"node_modules/which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
@@ -9899,6 +10070,28 @@
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
"license": "ISC"
},
+ "node_modules/ws": {
+ "version": "7.5.13",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.13.tgz",
+ "integrity": "sha512-rsKI6xDBFVf4r/x8XyChGK04QR/XHroxs/jUcoWvtEZM8TPU/X/uIY9B1CsSzYws9ZJb/6bbBu7dPhFW00CAoA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.3.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": "^5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
+ }
+ },
"node_modules/wsl-utils": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.3.1.tgz",
diff --git a/package.json b/package.json
index 1ed9d68..e07b415 100644
--- a/package.json
+++ b/package.json
@@ -31,6 +31,7 @@
"zustand": "^5.0.14"
},
"devDependencies": {
+ "@next/bundle-analyzer": "^16.2.10",
"@tailwindcss/postcss": "^4",
"@types/node": "^20",
"@types/react": "^19",
@@ -39,5 +40,10 @@
"eslint-config-next": "16.2.9",
"tailwindcss": "^4",
"typescript": "^5"
- }
+ },
+ "browserslist": [
+ "defaults",
+ "not IE 11",
+ "maintained node versions"
+ ]
}