4.1 KiB
4.1 KiB
01 — Architektura
Definiuje strukturę projektu, routing i wzorce. Trzymaj się jej ściśle.
Struktura katalogów
.
├── AGENTS.md
├── app/
│ ├── layout.tsx # root layout: font, header, footer, metadata bazowe
│ ├── page.tsx # strona główna
│ ├── globals.css # Tailwind + CSS variables (tokeny)
│ ├── klimatyzacja/
│ │ └── page.tsx
│ ├── pompy-ciepla/
│ │ └── page.tsx
│ ├── uslugi-domowe/
│ │ ├── page.tsx # rozdzielnik
│ │ ├── remonty/page.tsx
│ │ ├── hydraulika/page.tsx
│ │ └── serwis-agd/page.tsx
│ ├── realizacje/
│ │ └── page.tsx
│ ├── blog/
│ │ ├── page.tsx
│ │ └── [slug]/page.tsx
│ ├── o-nas/page.tsx
│ ├── kontakt/
│ │ ├── page.tsx
│ │ └── actions.ts # Server Action formularza
│ ├── sklep/
│ │ ├── page.tsx # listing + filtry
│ │ └── [slug]/page.tsx # karta produktu
│ ├── koszyk/page.tsx
│ ├── raty/page.tsx
│ ├── (formalne)/ # route group dla stron formalnych
│ │ ├── regulamin/page.tsx
│ │ ├── polityka-prywatnosci/page.tsx
│ │ ├── reklamacje/page.tsx
│ │ ├── dostawa/page.tsx
│ │ └── gwarancja/page.tsx
│ ├── sitemap.ts
│ ├── robots.ts
│ ├── not-found.tsx
│ └── loading.tsx
├── components/
│ ├── ui/ # shadcn/ui (button, card, accordion, input, ...)
│ ├── layout/ # Header, Footer, MobileMenu, TrustBar, NavDropdown
│ ├── sections/ # sekcje stron: Hero, ServicesGrid, ProcessSteps, FAQ, ...
│ ├── shop/ # ProductCard, ProductFilters, CartSummary, ...
│ └── common/ # SectionHeading, CTAButton, StatCounter, Placeholder, ...
├── content/ # dane (mock): products.ts, projects.ts, posts.ts, faq.ts, ...
├── lib/ # utils.ts, constants.ts, cart-store.ts (zustand), validations.ts (zod)
├── types/ # product.ts, project.ts, post.ts, ...
├── public/ # zdjęcia placeholder, logo, ikony, og-images
├── tailwind.config.ts
└── tsconfig.json # alias @/*
Zasady routingu
- App Router, Server Components domyślnie.
- Strony formalne w route group
(formalne)— wspólny, prosty layout tekstowy. - Dynamiczne trasy:
blog/[slug],sklep/[slug]—generateStaticParamsz danych wcontent/. - Każda strona eksportuje
metadata(lubgenerateMetadatadla dynamicznych).
Wzorce komponentów
- Strona = kompozycja sekcji.
page.tsximportuje komponenty zcomponents/sections/i przekazuje im dane. Strona nie zawiera logiki layoutu sekcji. - Sekcja = jeden komponent. Np.
HeroSection,ServicesGrid,ProcessSteps,FaqAccordion,PricingTable,Testimonials,StatsBar,BlogPreview,CtaBanner. - Współdzielone bloki (Hero, FAQ, CTA) przyjmują propsy, by można było ich użyć na wielu stronach z różną treścią — nie duplikuj.
- Dane oddzielone od prezentacji — komponent dostaje dane przez propsy, źródło to
content/. - Client Components tylko: formularze, koszyk (Zustand), dropdowny nawigacji, mobile menu, slidery galerii, kalkulator rat, filtry sklepu.
Stan aplikacji
- Koszyk: Zustand store w
lib/cart-store.ts(dodaj/usuń/zmień ilość/suma). Persist do localStorage. - Reszta: stan lokalny komponentów. Bez globalnego store poza koszykiem.
Obsługa obrazów
- Wszystkie zdjęcia jako placeholdery na tym etapie (komponent
Placeholderlub pliki wpublic/). - W kodzie oznacz komentarzem
{/* TODO: docelowe zdjęcie — opis */}, gdzie wstawić realne foto. - Zawsze
next/imagezalt,width/heightlubfill+sizes.