Commit Graph

17 Commits

Author SHA1 Message Date
debian c464c5f708 SMPT, SMS, Rejestracja + GUS 2026-08-09 21:12:16 +02:00
debian 966dd3f209 poprawki graficzne, zdjęcia, panel administarcyjny oraz układ stron 2026-07-24 14:52:19 +02:00
pascal 93e67bd27e Zmiana nazwy na Polska Lokalnie, przyklejony naglowek i uklad stron konta
Nazwa i adres:
- marka "Mieszko" -> "Polska Lokalnie" w calym interfejsie (27 miejsc),
  w tekstach zaleznych dodane slowo "serwis", zeby brzmialy poprawnie po polsku
- domena mieszko.pl -> polskalokalnie.pl (adresy kontaktowe, profil, udostepnianie)
- haslo pod logo: "mieszkania za darmo" -> "ogloszenia za darmo"
- backend: teksty powiadomien, dane demo i domyslna nazwa admina
- nazwa wyswietlana istniejacego admina zaktualizowana w bazie;
  login admin@mieszko.pl celowo bez zmian

Naglowek:
- logo, nawigacja i panel zostaja widoczne przy przewijaniu (position: sticky,
  warstwa 65 - nad listami rozwijanymi, pod lightboxem zdjec)
- sticky sidebary z top: 18-20px wyrownane do 96px, zeby nie wjezdzaly pod naglowek

Uklad stron konta:
- /ulubione, /wiadomosci i /powiadomienia otwieraja sie jak /konto/wyszukiwania -
  wspolny layout AccountShell zamiast powielania ukladu w kazdej stronie
- /konto/porownanie mialo wlasny uklad (sidebar 300px, inny gap i padding),
  przez co menu przeskakiwalo - wyrownane do .account-layout wraz z punktem
  zwijania (1200px zamiast 1500px)
- narzedzia publiczne (/wycena, /historia-cen, /ranking-dzielnic, /negocjacje)
  bez menu konta - dzialaja jak /kupno czy /wynajem

Naprawy regresji po zamianie przyciskow na linki:
- ikona ulubionych na kartach /kupno wracala do przeplywu (nadpisany
  position: absolute) - teraz podnoszona jest tylko warstwa
- menu uzytkownika i "Zobacz wszystkie" w powiadomieniach: reguly CSS
  celowaly tylko w <button>, przez co pozycje rozjezdzaly sie na dwie linie

Testy: 47 (bylo 41), w tym zabezpieczenie przed powrotem przeskoku menu
i przed rozjechaniem pozycji menu uzytkownika.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-24 01:21:20 +02:00
pascal 3e394998a3 Strona /firmy, CTA jako linki i testy Playwright routingu
Nowa trasa:
- /firmy - lista firm i uslug na istniejacych komponentach (.directory-card)
  i stylistyce sekcji uslug; filtr kategorii w query stringu (/firmy?kategoria=remonty)
- serviceCategories dostaly slug, nowa baza companyDirectory pokrywa wszystkie
  8 kategorii, wiec filtrowanie dziala na realnych danych
- "Zobacz firmy" prowadzi do listy z wybrana kategoria, "Zobacz wszystkie"
  do pelnej listy - ostatnie dwie atrapy href="#" usuniete

CTA zamienione na <Link> (wylacznie czysta nawigacja, bez akcji):
- 35 przyciskow onClick={() => navigate(x)} zamienionych automatycznie
- 5 skrotow panelu admina (setTab) -> Link do /admin/*
- karty narzedzi konta i kafelek poradnika: zamiast role="button" prawdziwy link
- pozycje menu konta i popovera powiadomien -> Link + zamkniecie popovera
- karty ofert: link rozciagniety na cala karte (.card-stretched-link) zamiast
  role="button", bez zagniezdzania przyciskow w <a>
- bez zmian zostaly przyciski wykonujace akcje: publikacja, zapis draftu,
  wyszukiwanie, oznaczanie powiadomien, bramki logowania

Wyglad 1:1 - rozszerzone selektory kontenerow o warianty <a>, reset :where(a)
o zerowej specyficznosci oraz odtworzenie centrowania tam, gdzie <button>
robil to domyslnie. Zweryfikowane zrzutami ekranu i pomiarem geometrii.

Naprawa: kazdy blad /auth/me (takze chwilowy timeout albo 5xx) kasowal token
i wylogowywal uzytkownika. Teraz sesje konczy tylko odrzucenie tokenu (401/403),
pozostale bledy sa ponawiane raz.

Testy: frontend/tests/routing.spec.ts (41 testow) + playwright.config.ts,
skrypt npm run test:e2e. E2E_BASE_URL pozwala uruchomic je na buildzie
produkcyjnym za nginx.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-24 00:37:04 +02:00
pascal e1ab61ec7c 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 <Link> 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) <noreply@anthropic.com>
2026-07-23 23:58:22 +02:00
pascal f966b4539a Okruszki nawigacyjne i CTA naglowka jako <Link>
- 16 przyciskow w breadcrumbach zamienionych na <Link> (semantyka linku,
  otwieranie w nowej karcie, podglad celu na hover)
- naglowek: "Moje konto" i "Dodaj ogloszenie za darmo" jako <Link>
- CSS breadcrumbow rozszerzony o warianty <a>, wyglad bez zmian
  (zweryfikowane zrzutami ekranu)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-23 23:52:37 +02:00
pascal 5f5bec7232 Przewijanie przy zmianie trasy i naprawa petli renderow w porownaniu ofert
- nowa trasa startuje od gory strony, przy cofaniu (POP) pozycja zostaje
  przy przegladarce, wiec powrot do listy ofert wraca w to samo miejsce
- AccountComparisonPage: setSelectedDetails({}) tworzylo nowy obiekt przy
  kazdym przebiegu efektu zaleznego od selectedDetails, co dawalo
  nieskonczona petle ("Maximum update depth exceeded"). Blad byl obecny
  przed migracja - ujawnily go testy E2E nowej trasy /konto/porownanie.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-23 23:48:43 +02:00
pascal af21991d9f Panel admina: 16 zakladek jako podsciezki /admin/*
- aktywna zakladka wyznaczana z adresu (useParams), nie z useState
- setTab() nawiguje zamiast zmieniac stan lokalny
- sidebar admina: <button> -> <NavLink>
- typ AdminTab zunifikowany z AdminTabKey z routes.ts
- nieznana sekcja /admin/cokolwiek -> strona 404
- CSS .admin-nav rozszerzony o warianty <a>

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-23 23:36:30 +02:00
pascal ec5a7289f6 Zastap useState(view) routingiem opartym o react-router-dom
Rdzen migracji - kazdy widok ma wlasny adres URL:
- render {view === '...'} zastapiony przez <Routes> z 31 trasami
- usuniete: type View, PROTECTED_VIEWS, proteza #login, stan view/mapCity/
  mapOfferType/selectedListingId/messageThreadTarget
- prop onNavigate (166 wystapien) zastapiony hookiem useNavigate w komponentach
- /oferta/:id czyta identyfikator z adresu (ListingDetailRoute)
- /mapa?miasto=&typ= czyta parametry z query stringa (MapSearchRoute)
- dane przejsciowe miedzy trasami (watek wiadomosci, oferta do negocjacji)
  przekazywane w location.state zamiast globalnego stanu
- ProtectedRoute na trasach konta, requireAdmin na /admin
- powrot do zamierzonego celu po zalogowaniu (location.state.from)
- Header i AccountSidebar: <button> -> <NavLink>, aktywnosc z adresu
- strona 404 dla nieznanych adresow
- CSS: selektory menu rozszerzone o warianty <a> (wyglad bez zmian)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-23 23:34:35 +02:00
pascal f072ed0115 Dodaj react-router-dom, mape tras i ProtectedRoute
Fundament migracji z useState(view) na prawdziwy routing:
- react-router-dom 7 w zaleznosciach
- BrowserRouter w main.tsx (nginx ma juz try_files, wiec czyste sciezki dzialaja)
- routes.ts: centralna mapa adresow + helpery listingPath/mapPath/adminTabPath
- ProtectedRoute z obsluga stanu loading z AuthProvider

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-23 23:24:22 +02:00
pascal a6b156695f sms & SMTP 2026-07-23 23:15:15 +02:00
pascal 12fcb60b4c Kalkulator zdolności, integracja Moich ofert i system powiadomień
- Kalkulator zdolności kredytowej: nowy widok z live-obliczeniami (rata
  annuitetowa/malejąca, DTI/DSTI, rekomendacje, donut), wpięty w poradnik,
  panel i stronę główną; pasek boczny konta dla zalogowanych.
- Moje oferty: prawdziwe ogłoszenia (/listings/mine) scalone z listą,
  realne akcje Wstrzymaj/Wznów (PATCH /status, nowy status PAUSED),
  Usuń (DELETE) z kontrolą właściciela; realne wyświetlenia (viewsCount)
  i zapisane z ulubionych. Fix CHECK constraintu enuma w SchemaFixer.
- System powiadomień: encja Notification + serwis + kontroler + SSE
  realtime (token w query param w JwtAuthFilter). Podpięte źródła
  serwerowe (wiadomości, zmiana statusu ogłoszenia, zdarzenia konta)
  i klienckie (ulubione, spadek ceny, spotkania, weryfikacja telefonu).
  Centralny NotificationsProvider; dzwonek i strona bez zmian designu,
  klikalne z deep-linkami i oznaczaniem jako przeczytane.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-21 17:02:25 +02:00
pascal e9673551ce dodanie poradnika 2026-07-20 02:06:11 +02:00
pascal 08f8058efc alery cenowe dokonczyc 2026-07-13 01:15:12 +02:00
pascal 0efc31b000 Dodaj widok Pomoc i kontakt w panelu uzytkownika 2026-07-12 18:06:15 +02:00
pascal 3e00962828 dodawanie alerow cenowych 2026-07-11 01:45:13 +02:00
pascal 0c2ec3fc1c Initial commit 2026-07-09 00:14:45 +02:00