From e1ab61ec7ced5ea30e64c5e36f28e4f4f965c293 Mon Sep 17 00:00:00 2001 From: pascal Date: Thu, 23 Jul 2026 23:58:22 +0200 Subject: [PATCH] Standard routingu w AGENTS.md i usuniecie atrap href="#" - AGENTS.md: obowiazkowy standard architektoniczny - kazdy widok ma wlasny URL w React Routerze, zakaz nawigacji na useState/setView/activeView, identyfikatory w parametrach URL, filtry w query string, ProtectedRoute - 7 z 9 atrap href="#" zamienionych na do istniejacych tras - pozostaly 2 w ServicesPage ("Zobacz firmy", "Zobacz wszystkie") - brak docelowej strony listy firm, wymagaja decyzji produktowej Co-Authored-By: Claude Opus 4.8 (1M context) --- AGENTS.md | 25 +++++++++++++++++++++++++ frontend/src/App.tsx | 14 +++++++------- 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index dae2a0d..299611b 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -44,6 +44,31 @@ Pull requests should include a short summary, testing performed, linked issues w Do not commit secrets, local credentials, generated build output, or machine-specific configuration. Store required environment variables in an ignored `.env` file and document safe example values in `.env.example`. +## Standard architektoniczny: routing (obowiązkowy) + +Każdy nowy widok, ekran, zakładka lub podstrona **musi mieć własny, jednoznaczny adres URL** i być obsługiwana przez React Router. To twardy standard całego projektu, nie sugestia. + +Zasady: + +- **Nie buduj nawigacji na stanie.** Zakazane jako mechanizm przełączania stron: `useState('view')`, `setView`, `activeView`, `selectedPage`, `selectedTab` i pochodne. +- **Nie przełączaj całych stron warunkowym renderowaniem** bez zmiany adresu (`{view === 'x' && }`). +- **Do nawigacji używaj** `Link`, `NavLink`, `useNavigate` oraz tras zadeklarowanych w `Routes`. +- **Identyfikatory obiektów trzymaj w parametrach URL**: `/oferta/:id`, `/profil/:id`, `/wiadomosci/:conversationId` — nie w stanie Reacta. +- **Filtry, sortowanie, wyszukiwanie i paginację zapisuj w query string** wszędzie tam, gdzie użytkownik powinien móc skopiować lub odświeżyć widok. +- **Zakładki paneli twórz jako trasy zagnieżdżone**: `/konto/ustawienia`, `/admin/uzytkownicy`. +- **Trasy wymagające logowania zabezpieczaj `ProtectedRoute`** (`frontend/src/ProtectedRoute.tsx`). Pamiętaj, że to zabezpieczenie interfejsu — autoryzację egzekwuje backend. +- **Nie używaj `href="#"`** ani przycisków imitujących linki. +- **Każdy link musi działać** po odświeżeniu (F5), przy bezpośrednim wejściu z adresu, po użyciu Wstecz/Dalej i po otwarciu w nowej karcie. + +Gdzie co leży: + +- `frontend/src/routes.ts` — centralna mapa adresów (`ROUTES`) i helpery (`listingPath`, `mapPath`, `adminTabPath`). Nowy widok zaczynaj od wpisu tutaj, nie od literału ścieżki w JSX. +- `frontend/src/ProtectedRoute.tsx` — bramka autoryzacji, obsługuje stan `loading` z `AuthProvider`. +- `frontend/src/App.tsx` — deklaracja ``. +- `nginx/default.conf` — `try_files $uri $uri/ /index.html` (SPA fallback, już skonfigurowany). + +Przed zakończeniem każdego zadania sprawdź, czy dodane widoki mają trasy i czy adres zmienia się podczas nawigacji. Jeżeli istniejący kod łamie ten standard, nie powielaj starego rozwiązania — dostosuj go do React Routera. + ## Behavioral Guidelines To Reduce Common LLM Coding Mistakes Tradeoff: These guidelines bias toward caution over speed. For trivial tasks, use judgment. diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 3503dd8..86d9d35 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -10987,7 +10987,7 @@ function HomePage({ filters, onOpenMap }: { filters: FilterState; onOpenMap: (ci

Polecane ogłoszenia

- Zobacz wszystkie + Zobacz wszystkie
@@ -13239,10 +13239,10 @@ function GuidesPage() {
Popularne: - Kredyt hipoteczny - Umowa najmu - Podatek od sprzedaży - Księga wieczysta + Kredyt hipoteczny + Umowa najmu + Podatek od sprzedaży + Księga wieczysta
@@ -13294,7 +13294,7 @@ function GuidesPage() {

Polecane artykuły

- Zobacz wszystkie + Zobacz wszystkie
{guideArticles.map((article) => ( @@ -13327,7 +13327,7 @@ function GuidesPage() {

{offer.title}

{offer.count} - Zobacz oferty + Zobacz oferty