From dfd38885170fe6556115d15fc33c4ed633aa82c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rados=C5=82aw=20Smoli=C5=84ski?= Date: Sun, 21 Jun 2026 21:53:15 +0200 Subject: [PATCH] feat: complete website implementation --- AGENTS.md | 112 +- README.md | 74 +- app/(formalne)/dostawa/page.tsx | 67 + app/(formalne)/gwarancja/page.tsx | 60 + app/(formalne)/layout.tsx | 17 + app/(formalne)/polityka-prywatnosci/page.tsx | 56 + app/(formalne)/regulamin/page.tsx | 66 + app/(formalne)/reklamacje/page.tsx | 63 + app/blog/[slug]/page.tsx | 252 + app/blog/page.tsx | 53 + app/globals.css | 200 +- app/kalkulator/page.tsx | 51 + app/klimatyzacja/page.tsx | 93 + app/kontakt/actions.ts | 111 + app/kontakt/page.tsx | 33 + app/koszyk/page.tsx | 39 + app/layout.tsx | 44 +- app/o-nas/page.tsx | 51 + app/page.tsx | 122 +- app/pompy-ciepla/page.tsx | 67 + app/realizacje/page.tsx | 41 + app/robots.ts | 12 + app/sitemap.ts | 54 + app/sklep/[slug]/page.tsx | 149 + app/sklep/page.tsx | 46 + app/uslugi-domowe/hydraulika/page.tsx | 92 + app/uslugi-domowe/page.tsx | 86 + app/uslugi-domowe/remonty/page.tsx | 94 + app/uslugi-domowe/serwis-agd/page.tsx | 90 + app/zamowienie/page.tsx | 38 + components.json | 25 + components/common/IconCard.tsx | 79 + components/common/Placeholder.tsx | 35 + components/common/SectionHeading.tsx | 58 + components/forms/ContactForm.tsx | 196 + components/layout/Footer.tsx | 205 + components/layout/GlobalSearch.tsx | 94 + components/layout/Header.tsx | 287 + components/layout/MobileMenu.tsx | 206 + components/layout/NavDropdown.tsx | 101 + components/layout/TrustBar.tsx | 56 + components/sections/AboutStory.tsx | 71 + components/sections/AcTypesSection.tsx | 78 + components/sections/AdvantagesBar.tsx | 26 + components/sections/BeforeAfterSlider.tsx | 121 + components/sections/BenefitsGrid.tsx | 57 + components/sections/BlogPreview.tsx | 107 + components/sections/BrandsGrid.tsx | 34 + components/sections/CertificatesSection.tsx | 37 + components/sections/ConfiguratorTeaser.tsx | 77 + components/sections/ContactSection.tsx | 90 + components/sections/CtaBanner.tsx | 91 + components/sections/EmergencyBlock.tsx | 49 + components/sections/FaqAccordion.tsx | 71 + components/sections/FeaturedPost.tsx | 80 + components/sections/FeaturedProducts.tsx | 39 + components/sections/FundingSection.tsx | 93 + components/sections/HeatPumpTypes.tsx | 63 + components/sections/HeroSection.tsx | 117 + components/sections/InfoHighlights.tsx | 49 + components/sections/MapEmbed.tsx | 33 + components/sections/PillarsSection.tsx | 66 + components/sections/PostsGrid.tsx | 150 + components/sections/PricingTable.tsx | 102 + components/sections/ProcessSteps.tsx | 83 + components/sections/ProjectsGallery.tsx | 54 + components/sections/ProjectsGrid.tsx | 97 + components/sections/ServicesGrid.tsx | 47 + components/sections/StatsBar.tsx | 23 + components/sections/SymptomsList.tsx | 64 + components/sections/Testimonials.tsx | 57 + components/sections/UseCases.tsx | 54 + components/sections/ValuesGrid.tsx | 56 + components/sections/WhyUs.tsx | 89 + components/shop/CartItems.tsx | 120 + components/shop/CartSummary.tsx | 83 + components/shop/ProductCard.tsx | 82 + components/shop/ProductGallery.tsx | 55 + components/shop/ProductInfo.tsx | 276 + components/shop/ProductsGrid.tsx | 160 + components/shop/Tabs.tsx | 118 + content/company.ts | 33 + content/faq.ts | 102 + content/posts.ts | 69 + content/pricing.ts | 67 + content/process.ts | 136 + content/products.ts | 178 + content/projects.ts | 59 + content/services.ts | 41 + content/testimonials.ts | 26 + docs/pages/01-home.md | 58 + docs/pages/02-klimatyzacja.md | 60 + docs/pages/03-pompy-ciepla.md | 42 + docs/pages/04-uslugi-domowe.md | 38 + docs/pages/05-07-podstrony-uslug.md | 65 + .../08-11-realizacje-blog-onas-kontakt.md | 78 + docs/pages/12-15-ecommerce.md | 80 + docs/pages/16-strony-formalne.md | 32 + docs/specs/01-architecture.md | 99 + docs/specs/02-design-system.md | 88 + docs/specs/03-seo.md | 62 + docs/specs/04-layouts.md | 83 + docs/specs/05-data-model.md | 91 + lib/cart-store.ts | 120 + lib/utils.ts | 15 + next.config.ts | 9 +- out.css | 6426 +++++++++++++++++ package-lock.json | 3359 ++++++++- package.json | 17 +- types/types.ts | 66 + 110 files changed, 18276 insertions(+), 217 deletions(-) create mode 100644 app/(formalne)/dostawa/page.tsx create mode 100644 app/(formalne)/gwarancja/page.tsx create mode 100644 app/(formalne)/layout.tsx create mode 100644 app/(formalne)/polityka-prywatnosci/page.tsx create mode 100644 app/(formalne)/regulamin/page.tsx create mode 100644 app/(formalne)/reklamacje/page.tsx create mode 100644 app/blog/[slug]/page.tsx create mode 100644 app/blog/page.tsx create mode 100644 app/kalkulator/page.tsx create mode 100644 app/klimatyzacja/page.tsx create mode 100644 app/kontakt/actions.ts create mode 100644 app/kontakt/page.tsx create mode 100644 app/koszyk/page.tsx create mode 100644 app/o-nas/page.tsx create mode 100644 app/pompy-ciepla/page.tsx create mode 100644 app/realizacje/page.tsx create mode 100644 app/robots.ts create mode 100644 app/sitemap.ts create mode 100644 app/sklep/[slug]/page.tsx create mode 100644 app/sklep/page.tsx create mode 100644 app/uslugi-domowe/hydraulika/page.tsx create mode 100644 app/uslugi-domowe/page.tsx create mode 100644 app/uslugi-domowe/remonty/page.tsx create mode 100644 app/uslugi-domowe/serwis-agd/page.tsx create mode 100644 app/zamowienie/page.tsx create mode 100644 components.json create mode 100644 components/common/IconCard.tsx create mode 100644 components/common/Placeholder.tsx create mode 100644 components/common/SectionHeading.tsx create mode 100644 components/forms/ContactForm.tsx create mode 100644 components/layout/Footer.tsx create mode 100644 components/layout/GlobalSearch.tsx create mode 100644 components/layout/Header.tsx create mode 100644 components/layout/MobileMenu.tsx create mode 100644 components/layout/NavDropdown.tsx create mode 100644 components/layout/TrustBar.tsx create mode 100644 components/sections/AboutStory.tsx create mode 100644 components/sections/AcTypesSection.tsx create mode 100644 components/sections/AdvantagesBar.tsx create mode 100644 components/sections/BeforeAfterSlider.tsx create mode 100644 components/sections/BenefitsGrid.tsx create mode 100644 components/sections/BlogPreview.tsx create mode 100644 components/sections/BrandsGrid.tsx create mode 100644 components/sections/CertificatesSection.tsx create mode 100644 components/sections/ConfiguratorTeaser.tsx create mode 100644 components/sections/ContactSection.tsx create mode 100644 components/sections/CtaBanner.tsx create mode 100644 components/sections/EmergencyBlock.tsx create mode 100644 components/sections/FaqAccordion.tsx create mode 100644 components/sections/FeaturedPost.tsx create mode 100644 components/sections/FeaturedProducts.tsx create mode 100644 components/sections/FundingSection.tsx create mode 100644 components/sections/HeatPumpTypes.tsx create mode 100644 components/sections/HeroSection.tsx create mode 100644 components/sections/InfoHighlights.tsx create mode 100644 components/sections/MapEmbed.tsx create mode 100644 components/sections/PillarsSection.tsx create mode 100644 components/sections/PostsGrid.tsx create mode 100644 components/sections/PricingTable.tsx create mode 100644 components/sections/ProcessSteps.tsx create mode 100644 components/sections/ProjectsGallery.tsx create mode 100644 components/sections/ProjectsGrid.tsx create mode 100644 components/sections/ServicesGrid.tsx create mode 100644 components/sections/StatsBar.tsx create mode 100644 components/sections/SymptomsList.tsx create mode 100644 components/sections/Testimonials.tsx create mode 100644 components/sections/UseCases.tsx create mode 100644 components/sections/ValuesGrid.tsx create mode 100644 components/sections/WhyUs.tsx create mode 100644 components/shop/CartItems.tsx create mode 100644 components/shop/CartSummary.tsx create mode 100644 components/shop/ProductCard.tsx create mode 100644 components/shop/ProductGallery.tsx create mode 100644 components/shop/ProductInfo.tsx create mode 100644 components/shop/ProductsGrid.tsx create mode 100644 components/shop/Tabs.tsx create mode 100644 content/company.ts create mode 100644 content/faq.ts create mode 100644 content/posts.ts create mode 100644 content/pricing.ts create mode 100644 content/process.ts create mode 100644 content/products.ts create mode 100644 content/projects.ts create mode 100644 content/services.ts create mode 100644 content/testimonials.ts create mode 100644 docs/pages/01-home.md create mode 100644 docs/pages/02-klimatyzacja.md create mode 100644 docs/pages/03-pompy-ciepla.md create mode 100644 docs/pages/04-uslugi-domowe.md create mode 100644 docs/pages/05-07-podstrony-uslug.md create mode 100644 docs/pages/08-11-realizacje-blog-onas-kontakt.md create mode 100644 docs/pages/12-15-ecommerce.md create mode 100644 docs/pages/16-strony-formalne.md create mode 100644 docs/specs/01-architecture.md create mode 100644 docs/specs/02-design-system.md create mode 100644 docs/specs/03-seo.md create mode 100644 docs/specs/04-layouts.md create mode 100644 docs/specs/05-data-model.md create mode 100644 lib/cart-store.ts create mode 100644 lib/utils.ts create mode 100644 out.css create mode 100644 types/types.ts diff --git a/AGENTS.md b/AGENTS.md index 8bd0e39..41e1aa8 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,5 +1,109 @@ - -# This is NOT the Next.js you know +# AGENTS.md — Reguły projektu -This version has breaking changes — APIs, conventions, and file structure may all differ from your training data. Read the relevant guide in `node_modules/next/dist/docs/` before writing any code. Heed deprecation notices. - +> Ten plik definiuje stałe zasady dla każdego agenta pracującego nad projektem. +> Czytaj go na początku każdej sesji i stosuj się do niego bez wyjątku. +> Szczegółowe specyfikacje znajdują się w `docs/specs/` i `docs/pages/`. + +--- + +## 1. Czym jest ten projekt + +Strona firmy z branży HVAC i usług domowych. Firma oferuje: +- **Klimatyzacja** — montaż, serwis, sprzedaż (sklep z koszykiem). +- **Pompy ciepła** — dobór, montaż, dofinansowania. +- **Usługi domowe** — remonty i wykończenia, hydraulika, serwis lodówek/AGD, drobne naprawy. + +Dwa cele biznesowe: (1) generowanie leadów (kontakt/wycena), (2) sprzedaż klimatyzatorów online. +Język interfejsu: **polski**. Grupa docelowa: klienci indywidualni i małe firmy. + +--- + +## 2. Rola agenta + +Działaj jak **Senior Next.js Developer** z dbałością o jakość produkcyjną. +- Przed kodowaniem zadania złożonego — przygotuj plan i listę zadań (tryb Planning). +- Po implementacji UI — uruchom dev server i zweryfikuj w przeglądarce (desktop + mobile). +- Na końcu każdego etapu — krótkie podsumowanie + zrzut ekranu, zanim przejdziesz dalej. +- Nie mieszaj refaktoru z nowymi funkcjami w jednym zadaniu. + +--- + +## 3. Stack technologiczny (obowiązkowy) + +- **Next.js** (najnowsza stabilna) — App Router + Server Components. +- **TypeScript** — tryb strict, bez `any` bez uzasadnienia. +- **Tailwind CSS** — stylowanie, tokeny w configu (patrz `docs/specs/02-design-system.md`). +- **shadcn/ui** — biblioteka komponentów bazowych. +- **lucide-react** — ikony. +- **React Hook Form + Zod** — formularze i walidacja. +- **Zustand** — stan koszyka (lekki, bez Reduxa). +- **next/image**, **next/font** — obrazy i fonty. +- Brak zewnętrznego backendu na tym etapie. Dane = pliki w `content/`. Formularze = Server Actions + (przygotuj miejsce na integrację e-mail, na razie bez realnej wysyłki). + +--- + +## 4. Twarde zasady jakości (nie do pominięcia) + +1. **Architektura** — trzymaj się struktury z `docs/specs/01-architecture.md`. Żadnych plików „na skróty". +2. **Komponenty** — reużywalne, typowane, jedna odpowiedzialność. Header/Footer/sekcje współdzielone, + nigdy kopiowane między stronami. +3. **Server vs Client** — domyślnie Server Components. `"use client"` tylko tam, gdzie potrzebna + interaktywność (formularze, koszyk, dropdowny, slidery). +4. **Responsywność** — mobile-first. Każda strona działa od 360px do 1920px. +5. **Dostępność** — semantyczny HTML, ARIA gdzie trzeba, widoczny focus, kontrast min. WCAG AA. +6. **SEO** — patrz `docs/specs/03-seo.md`. Metadata per strona, jeden H1, JSON-LD gdzie wskazano. +7. **Wydajność** — obrazy zoptymalizowane, lazy loading, minimum JS po stronie klienta. +8. **Build** — `npm run build` musi przechodzić bez błędów i ostrzeżeń TypeScript. + +--- + +## 5. Konwencje kodu + +- Nazwy plików komponentów: PascalCase (`HeroSection.tsx`). Pozostałe: kebab-case. +- Jeden komponent = jeden plik. Eksport nazwany dla komponentów współdzielonych. +- Importy absolutne przez alias `@/` (skonfiguruj w tsconfig). +- Teksty UI po polsku, trzymane blisko komponentu lub w `content/` (nie hardcode w wielu miejscach). +- Komentarze tylko tam, gdzie wyjaśniają „dlaczego", nie „co". +- Każda sekcja strony = osobny komponent w `components/sections/`. + +--- + +## 6. System projektowy (skrót — pełnia w docs/specs/02) + +- Kolory: granat `#0F2A47` (primary), cyjan `#2BA8E0` (akcent), pomarańcz `#F39320` (CTA), + biały + jasnoszary `#F5F7FA` (tła), ciemnoszary tekst. +- Font: Inter lub Poppins (next/font). Duże, wyraźne nagłówki. +- Karty: `rounded-xl`, subtelny cień. Przyciski CTA: pomarańcz z wyraźnym hover. +- Estetyka: czysta, profesjonalna, dużo wolnej przestrzeni. NIE zatłaczaj sekcji. +- Spójność: identyczny header, footer i styl na wszystkich stronach. + +--- + +## 7. Kolejność realizacji (etapy) + +Realizuj projekt etapami. Nie przeskakuj — każdy etap bazuje na poprzednim. + +| Etap | Zakres | Dokumentacja | +|------|--------|--------------| +| 1 | Setup: Next.js+TS+Tailwind+shadcn/ui+fonty+tokeny | `docs/specs/01`, `02` | +| 2 | Layout wspólny: header (dropdowny, mobile menu), footer, pasek zaufania | `docs/specs/04-layouts.md` | +| 3 | Strona główna (wszystkie sekcje jako komponenty) | `docs/pages/01-home.md` | +| 4 | Strony usługowe: klimatyzacja, pompy ciepła, usługi domowe + 3 podstrony | `docs/pages/02–07` | +| 5 | Realizacje, blog (+ [slug]), o nas, kontakt (formularz) | `docs/pages/08–11` | +| 6 | E-commerce: sklep, produkt, koszyk, raty | `docs/pages/12–15` | +| 7 | Strony formalne + finalne SEO/JSON-LD | `docs/pages/16`, `docs/specs/03` | +| 8 | Build produkcyjny, naprawa błędów, weryfikacja w przeglądarce | — | + +--- + +## 8. Jak czytać dokumentację + +- `docs/specs/01-architecture.md` — struktura katalogów, routing, wzorce. +- `docs/specs/02-design-system.md` — pełne tokeny, typografia, komponenty UI. +- `docs/specs/03-seo.md` — metadata, JSON-LD, sitemap. +- `docs/specs/04-layouts.md` — header, footer, nawigacja, wspólne elementy. +- `docs/specs/05-data-model.md` — modele danych i mock content. +- `docs/pages/NN-*.md` — szczegółowy brief każdej strony (sekcje, komponenty, treść). + +Gdy budujesz daną stronę — najpierw przeczytaj jej plik w `docs/pages/`, potem odpowiednie specs. diff --git a/README.md b/README.md index e215bc4..83c4441 100644 --- a/README.md +++ b/README.md @@ -1,36 +1,50 @@ -This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app). +# Paczka promptów — strona HVAC w Next.js (dla Google Antigravity) -## Getting Started +Kompletna dokumentacja projektowa rozbita na warstwy. Antigravity czyta `AGENTS.md` +automatycznie i traktuje go jako stałe reguły; reszta to szczegółowe specyfikacje, do których +agent sięga podczas pracy nad konkretnym etapem/stroną. -First, run the development server: +## Jak użyć -```bash -npm run dev -# or -yarn dev -# or -pnpm dev -# or -bun dev +1. Utwórz folder nowego projektu i skopiuj do niego całą tę zawartość + (`AGENTS.md` w katalogu głównym, folder `docs/` obok). +2. Otwórz folder w Antigravity. +3. Agent Manager → New Task → tryb **Planning** (projekt jest wielo-plikowy). +4. Pierwszy prompt: + > Przeczytaj `AGENTS.md` i całą dokumentację w `docs/`. Przygotuj plan implementacji + > i listę zadań zgodnie z etapami z sekcji 7 AGENTS.md. Zacznij od Etapu 1 (setup). + > Po każdym etapie pokaż podsumowanie i zrzut ekranu, zanim przejdziesz dalej. +5. Przejrzyj wygenerowany plan/Task List PRZED akceptacją. Potem prowadź etap po etapie. + +## Struktura paczki + +``` +AGENTS.md # reguły projektu (czytane automatycznie) +docs/ +├── specs/ +│ ├── 01-architecture.md # struktura katalogów, routing, wzorce +│ ├── 02-design-system.md # kolory, typografia, komponenty UI +│ ├── 03-seo.md # metadata, JSON-LD, sitemap +│ ├── 04-layouts.md # header, footer, nawigacja, CTA +│ └── 05-data-model.md # typy i mock content +└── pages/ + ├── 01-home.md + ├── 02-klimatyzacja.md + ├── 03-pompy-ciepla.md + ├── 04-uslugi-domowe.md + ├── 05-07-podstrony-uslug.md # remonty, hydraulika, serwis AGD + ├── 08-11-realizacje-blog-onas-kontakt.md + ├── 12-15-ecommerce.md # sklep, produkt, koszyk, raty + └── 16-strony-formalne.md ``` -Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. +## Kolejność pracy +Trzymaj się etapów z `AGENTS.md` (sekcja 7). Nie buduj wszystkiego naraz — +każdy etap bazuje na poprzednim, a weryfikacja w przeglądarce po etapie łapie błędy wcześnie. -You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. - -This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel. - -## Learn More - -To learn more about Next.js, take a look at the following resources: - -- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. -- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. - -You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome! - -## Deploy on Vercel - -The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. - -Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details. +## Co uzupełnić po wygenerowaniu (właściciel) +- Dane firmy (adres, NIP, telefon, godziny) — `content/company.ts`. +- Zdjęcia (hero, realizacje, produkty) — w miejscach oznaczonych `TODO`. +- Treści prawne — strony formalne. +- Realne ceny i produkty — `content/products.ts`, `content/pricing.ts`. +- Integracja wysyłki formularza (np. Resend) i ewentualny realny checkout. diff --git a/app/(formalne)/dostawa/page.tsx b/app/(formalne)/dostawa/page.tsx new file mode 100644 index 0000000..d56b24d --- /dev/null +++ b/app/(formalne)/dostawa/page.tsx @@ -0,0 +1,67 @@ +import { Metadata } from 'next'; + +export const metadata: Metadata = { + title: 'Dostawa i Płatności | AirProject', + description: 'Koszty, formy i szacowane czasy dostawy urządzeń w sklepie AirProject.', + alternates: { + canonical: '/dostawa', + } +}; + +export default function DostawaPage() { + return ( + <> +

Dostawa i Płatności

+ +

+ Sprawdź dostępne metody wysyłki urządzeń oraz formy płatności akceptowane w naszym sklepie. +

+ + {/* TODO: treść prawna do uzupełnienia przez właściciela */} + +

1. Metody i koszty dostawy

+

Dla wygody naszych klientów przygotowaliśmy kilka opcji odbioru towaru:

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Opcja dostawyCzas realizacjiKoszt brutto
Kurier Paletowy (Klimatyzatory)2-3 dni robocze0 zł (Darmowa)
Kurier Standard (Mniejsze elementy)1-2 dni robocze19 zł
Dostawa przez naszych InstalatorówW dniu montażu0 zł
+
+ +

2. Dostawa podczas montażu

+

+ Jeśli wybierzesz wariant zakupu "Z montażem", urządzenie nie jest wysyłane z wyprzedzeniem za pośrednictwem zewnętrznej firmy kurierskiej. Sprzęt w dniu umówionej instalacji przywozi nasza własna ekipa monterska, dzięki czemu minimalizujemy ryzyko uszkodzenia urządzenia w transporcie i zdejmujemy z Ciebie obowiązek składowania gabarytowych kartonów. +

+ +

3. Metody płatności

+ + + ); +} diff --git a/app/(formalne)/gwarancja/page.tsx b/app/(formalne)/gwarancja/page.tsx new file mode 100644 index 0000000..4810fa4 --- /dev/null +++ b/app/(formalne)/gwarancja/page.tsx @@ -0,0 +1,60 @@ +import { Metadata } from 'next'; +import Link from 'next/link'; +import { ShieldCheck } from 'lucide-react'; + +export const metadata: Metadata = { + title: 'Gwarancja na Klimatyzatory i Montaż | AirProject', + description: 'Szczegółowe informacje dotyczące warunków gwarancji na instalowane urządzenia oraz usługi montażowe.', + alternates: { + canonical: '/gwarancja', + } +}; + +export default function GwarancjaPage() { + return ( + <> +
+ +

Gwarancja i Serwis

+
+ +

+ Jesteśmy autoryzowanym partnerem wszystkich sprzedawanych przez nas urządzeń, co oznacza pełne bezpieczeństwo Twojej inwestycji i bezproblemową realizację świadczeń gwarancyjnych. +

+ + {/* TODO: treść prawna do uzupełnienia przez właściciela */} + +

1. Gwarancja na urządzenia

+

Czas trwania gwarancji zależy od wybranego producenta:

+ + +
+ Ważne: Warunkiem zachowania gwarancji jest wykonywanie regularnych (płatnych) przeglądów technicznych zgodnie z zaleceniami producenta – zazwyczaj dwa razy do roku. +
+ +

2. Gwarancja na usługę montażu

+

+ Bierzemy pełną odpowiedzialność za wykonaną przez nas pracę. Udzielamy 5-letniej rękojmi na poprawność działania całej instalacji chłodniczej i odpływu skroplin. Jeśli jakikolwiek problem wynika z błędu montażowego, naprawimy go na własny koszt. +

+ +

3. Autoryzowany Serwis

+

+ Posiadamy pełne zaplecze techniczne, własnych wykwalifikowanych serwisantów i uprawnienia UDT oraz certyfikaty F-GAZ. Co to oznacza dla Ciebie? + W przypadku awarii, nie odsyłamy Cię do producenta. Przyjeżdżamy na miejsce diagnozując usterkę, a w razie konieczności zamawiamy części i realizujemy naprawę, oszczędzając Twój czas i nerwy. +

+ +

4. Zleć nam przegląd gwarancyjny

+

+ Oferujemy atrakcyjne pakiety stałej opieki serwisowej. Przy stałej współpracy koszty serwisu są niższe, a my sami pilnujemy za Ciebie terminów obowiązkowych przeglądów narzucanych przez producentów sprzętu. +

+ Skontaktuj się z nami, aby zarezerwować termin wizyty serwisowej. +

+ + ); +} diff --git a/app/(formalne)/layout.tsx b/app/(formalne)/layout.tsx new file mode 100644 index 0000000..d8818cb --- /dev/null +++ b/app/(formalne)/layout.tsx @@ -0,0 +1,17 @@ +import React from 'react'; + +export default function FormalneLayout({ + children, +}: { + children: React.ReactNode; +}) { + return ( +
+
+
+ {children} +
+
+
+ ); +} diff --git a/app/(formalne)/polityka-prywatnosci/page.tsx b/app/(formalne)/polityka-prywatnosci/page.tsx new file mode 100644 index 0000000..a0c4328 --- /dev/null +++ b/app/(formalne)/polityka-prywatnosci/page.tsx @@ -0,0 +1,56 @@ +import { Metadata } from 'next'; + +export const metadata: Metadata = { + title: 'Polityka Prywatności i Cookies | AirProject', + description: 'Zasady przetwarzania danych osobowych oraz wykorzystania plików cookies w serwisie AirProject.', + alternates: { + canonical: '/polityka-prywatnosci', + } +}; + +export default function PolitykaPrywatnosciPage() { + return ( + <> +

Polityka Prywatności i Cookies

+ +

+ Twoja prywatność jest dla nas ważna. W tym dokumencie opisujemy, jakie dane zbieramy, w jakim celu je wykorzystujemy oraz jakie masz w związku z tym prawa. +

+ + {/* TODO: treść prawna do uzupełnienia przez właściciela i weryfikacji z inspektorem ochrony danych / radcą prawnym */} + +

1. Administrator danych

+

+ Administratorem Twoich danych osobowych jest: + [TUTAJ WPISZ DANE FIRMY: Nazwa, Adres, NIP, e-mail kontaktowy]. +

+ +

2. Zakres i cele przetwarzania

+

Przetwarzamy dane osobowe podane przez Ciebie w formularzu kontaktowym oraz w procesie składania zamówienia w celu:

+ + +

3. Twoje prawa

+

Zgodnie z przepisami RODO masz prawo do:

+ + +

4. Pliki Cookies

+

+ Nasza strona wykorzystuje pliki cookies (ciasteczka) w celu zapewnienia prawidłowego działania serwisu (np. zapamiętania zawartości koszyka) oraz w celach analitycznych. Możesz zarządzać ustawieniami cookies z poziomu przeglądarki internetowej. +

+ +

+ Ostatnia aktualizacja dokumentu: 1 stycznia 2026 r. +

+ + ); +} diff --git a/app/(formalne)/regulamin/page.tsx b/app/(formalne)/regulamin/page.tsx new file mode 100644 index 0000000..9ccfce4 --- /dev/null +++ b/app/(formalne)/regulamin/page.tsx @@ -0,0 +1,66 @@ +import { Metadata } from 'next'; + +export const metadata: Metadata = { + title: 'Regulamin Sklepu i Usług | AirProject', + description: 'Regulamin świadczenia usług, zasady korzystania ze sklepu, prawa i obowiązki klienta.', + alternates: { + canonical: '/regulamin', + } +}; + +export default function RegulaminPage() { + return ( + <> +

Regulamin Serwisu i Sklepu Internetowego

+ +

+ Niniejszy dokument określa zasady korzystania z serwisu AirProject oraz dokonywania w nim zakupów urządzeń i usług montażu. +

+ + {/* TODO: treść prawna do uzupełnienia przez właściciela i weryfikacji przez radcę prawnego */} + +

§ 1. Postanowienia ogólne

+

+ 1. Sklep internetowy działający pod adresem internetowym airproject.pl prowadzony jest przez: + [TUTAJ WPISZ DANE FIRMY: Nazwa, Adres, NIP, REGON]. +

+

+ 2. Niniejszy Regulamin określa zasady zawierania umów sprzedaży i świadczenia usług za pośrednictwem serwisu. +

+ +

§ 2. Definicje

+ + +

§ 3. Zasady składania i realizacji zamówień

+

+ 1. Informacje zawarte na Stronie Internetowej Sklepu nie stanowią oferty w rozumieniu Kodeksu Cywilnego, a jedynie zaproszenie do zawarcia umowy. +
+ 2. Klient może składać zamówienia 24 godziny na dobę przez 7 dni w tygodniu. +
+ 3. Realizacja usług montażowych odbywa się po uprzednim kontakcie i ustaleniu terminu. +

+ +

§ 4. Płatności i ceny

+

+ 1. Wszystkie ceny na stronie są cenami brutto (zawierają podatek VAT). +
+ 2. Podatek VAT na urządzenia sprzedawane z usługą montażu dla osób fizycznych w budynkach mieszkalnych o powierzchni do 300 m² rozliczany jest zgodnie z odpowiednimi przepisami podatkowymi (np. stawką 8%). +

+ +

§ 5. Odstąpienie od umowy

+

+ 1. Konsument ma prawo odstąpić od umowy zawartej na odległość bez podania przyczyny w terminie 14 dni od dnia dostarczenia towaru. +
+ 2. Prawo odstąpienia nie przysługuje w odniesieniu do usług, które zostały w pełni wykonane za wyraźną zgodą Konsumenta. +

+ +

+ Ostatnia aktualizacja regulaminu: 1 stycznia 2026 r. +

+ + ); +} diff --git a/app/(formalne)/reklamacje/page.tsx b/app/(formalne)/reklamacje/page.tsx new file mode 100644 index 0000000..26a99cf --- /dev/null +++ b/app/(formalne)/reklamacje/page.tsx @@ -0,0 +1,63 @@ +import { Metadata } from 'next'; +import Link from 'next/link'; + +export const metadata: Metadata = { + title: 'Reklamacje i Zwroty | AirProject', + description: 'Zasady i procedury składania reklamacji oraz zwrotów produktów i usług w sklepie AirProject.', + alternates: { + canonical: '/reklamacje', + } +}; + +export default function ReklamacjePage() { + return ( + <> +

Reklamacje i Zwroty

+ +

+ Dokładamy wszelkich starań, aby nasze produkty i usługi były najwyższej jakości. Jeśli jednak cokolwiek nie spełnia Twoich oczekiwań, masz pełne prawo złożyć reklamację lub dokonać zwrotu. +

+ + {/* TODO: treść prawna do uzupełnienia przez właściciela */} + +

1. Zwroty (Odstąpienie od umowy)

+

+ Zgodnie z polskim prawem konsument ma prawo zwrócić zakupiony produkt bez podania przyczyny w ciągu 14 dni od dnia jego otrzymania. Pamiętaj jednak, że: +

+ + +

Jak dokonać zwrotu?

+
    +
  1. Powiadom nas drogą mailową na adres: kontakt@twoj-sklep.pl.
  2. +
  3. Zapakuj bezpiecznie produkt w oryginalne opakowanie.
  4. +
  5. Odeślij go na wskazany przez nas adres magazynu.
  6. +
  7. Po weryfikacji sprzętu, środki zwrócimy Ci w ciągu 14 dni roboczych.
  8. +
+ +

2. Procedura Reklamacyjna (Rękojmia i Gwarancja)

+

+ Wszystkie wady urządzeń mogą być zgłaszane z tytułu gwarancji producenta lub rękojmi. + Gwarancje na poszczególne urządzenia mogą wynosić od 2 do 5 lat (szczegóły w karcie produktu i zakładce Gwarancja). +

+ +

Jak zgłosić usterkę?

+

+ W razie awarii sprzętu zamontowanego przez naszą firmę, zalecamy kontakt telefoniczny lub poprzez e-mail: +

+ + +
+

Masz dodatkowe pytania?

+

Zadzwoń do nas pod numer +48 000 000 000 lub skorzystaj z formularza kontaktowego.

+
+ + ); +} diff --git a/app/blog/[slug]/page.tsx b/app/blog/[slug]/page.tsx new file mode 100644 index 0000000..8f8df42 --- /dev/null +++ b/app/blog/[slug]/page.tsx @@ -0,0 +1,252 @@ +import { Metadata } from 'next'; +import Image from 'next/image'; +import Link from 'next/link'; +import { notFound } from 'next/navigation'; +import { getPosts, getPostBySlug, getRelatedPosts } from '@/content/posts'; +import { CtaBanner } from '@/components/sections/CtaBanner'; +import { Calendar, User, ArrowLeft, ArrowRight } from 'lucide-react'; +import { companyDetails } from '@/content/company'; + +interface BlogPostPageProps { + params: { + slug: string; + }; +} + +// Generowanie ścieżek statycznych dla wpisów +export async function generateStaticParams() { + const posts = getPosts(); + return posts.map((post) => ({ + slug: post.slug, + })); +} + +// Generowanie metadanych dla danego wpisu +export async function generateMetadata({ params }: BlogPostPageProps): Promise { + const { slug } = await params; + const post = getPostBySlug(slug); + + if (!post) { + return { + title: 'Nie znaleziono wpisu', + }; + } + + return { + title: `${post.title} | Blog AirProject`, + description: post.excerpt, + alternates: { + canonical: `/blog/${post.slug}`, + }, + openGraph: { + title: post.title, + description: post.excerpt, + type: 'article', + publishedTime: post.date, + authors: [post.author || companyDetails.shortName], + images: [ + { + url: post.image || '/hero.jpg', + }, + ], + }, + }; +} + +export default async function BlogPostPage({ params }: BlogPostPageProps) { + const { slug } = await params; + const post = getPostBySlug(slug); + + if (!post) { + notFound(); + } + + const relatedPosts = getRelatedPosts(post.slug, post.category, 3); + + const dateObj = new Date(post.date); + const formattedDate = dateObj.toLocaleDateString('pl-PL', { + day: 'numeric', month: 'long', year: 'numeric' + }); + + const categoryLabels: Record = { + 'klimatyzacja': 'Klimatyzacja', + 'pompy-ciepla': 'Pompy Ciepła', + 'remonty': 'Remonty', + 'hydraulika': 'Hydraulika', + 'porady': 'Porady' + }; + + // Ustawienie CTA dopasowanego do kategorii wpisu + const getCtaLink = () => { + switch(post.category) { + case 'klimatyzacja': return '/klimatyzacja'; + case 'pompy-ciepla': return '/pompy-ciepla'; + case 'remonty': return '/uslugi-domowe/remonty'; + case 'hydraulika': return '/uslugi-domowe/hydraulika'; + default: return '/kontakt'; + } + }; + + // --- JSON-LD --- + const jsonLdArticle = { + '@context': 'https://schema.org', + '@type': 'BlogPosting', + headline: post.title, + image: post.image, + datePublished: post.date, + dateModified: post.date, + author: { + '@type': 'Person', + name: post.author || companyDetails.name, + }, + publisher: { + '@type': 'Organization', + name: companyDetails.name, + logo: { + '@type': 'ImageObject', + url: 'https://aeroservice-demo.pl/logo.png', // MOCK URL + }, + }, + description: post.excerpt, + }; + + const jsonLdBreadcrumb = { + '@context': 'https://schema.org', + '@type': 'BreadcrumbList', + itemListElement: [ + { + '@type': 'ListItem', + position: 1, + name: 'Strona Główna', + item: 'https://aeroservice-demo.pl', + }, + { + '@type': 'ListItem', + position: 2, + name: 'Blog', + item: 'https://aeroservice-demo.pl/blog', + }, + { + '@type': 'ListItem', + position: 3, + name: post.title, + item: `https://aeroservice-demo.pl/blog/${post.slug}`, + }, + ], + }; + + return ( +
+ {/* Skrypty JSON-LD dla SEO */} +