Commit Graph

48 Commits

Author SHA1 Message Date
debian e85cc70982 Zapisane wyszukiwania na koncie zamiast w przegladarce
Deploy Polska Lokalnie / deploy (push) Successful in 12s
Nowa tabela saved_searches i /api/saved-searches (lista, dodanie,
usuniecie, jednorazowy import wpisow z localStorage). Front czyta liste
z serwera, wiec wyszukiwania sa te same na kazdym urzadzeniu i przezywaja
wyczyszczenie danych strony. Bez powiadomien. Skrypt czyszczacy usuwa
wpisy skasowanych kont.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-23 09:10:20 +02:00
debian 8cd2db38cc Menu konta takze na Wycenie i test opisujacy to zachowanie
Deploy Polska Lokalnie / deploy (push) Successful in 11s
Wycena trafia do AccountShell, jak pozostale narzedzia: gosc widzi sama
strone, zalogowany takze lewe menu konta. Test nie zakladal juz menu
i dlatego nie przechodzil.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-23 08:58:17 +02:00
debian e3cc999343 Martwe przyciski: podepnij pod prawdziwe strony albo oznacz "Wkrotce"
- AI Dopasowanie, "Zobacz kupujacych", kafelek 360 i Konto Premium:
  nieaktywne z plakietka "Wkrotce" zamiast przyciskow bez akcji.
- Pomoc: jeden adres info@polskalokalnie.pl i prawdziwy numer
  +48 453 193 605 jako linki mailto/tel, czat na zywo usuniety,
  FAQ z prawdziwymi odpowiedziami zamiast jednego zdania.
- Poradniki: dzialajaca wyszukiwarka (?szukaj= w adresie), szybkie
  poradniki linkuja do rozdzialow, martwe strzalki karuzeli usuniete.
- Mapa: "Szukaj na biezacej mapie" zaweza liste do widocznych ofert
  (?obszar= w adresie).
- Porownanie: wybrane oferty w adresie (?oferty=), "Udostepnij
  porownanie" kopiuje link.
- Kafelek miast prowadzi na mape, karuzela opinii bez atrap strzalek.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-23 08:08:45 +02:00
debian 017ff4b2c6 Negocjacje na prawdziwych danych zamiast zmyslonego modelu
Deploy Polska Lokalnie / deploy (push) Successful in 11s
Nowa strona /negocjacje/:listingId porownuje cene ogloszenia sprzedazy
z cenami transakcyjnymi NBP i GUS oraz srednia ogloszen w dzielnicy
i miescie. Przedzial: od wartosci wg cen transakcyjnych do polowy
nadwyzki ceny ofertowej. W ogloszeniu przycisk "Ile moge utargowac?".
Usuniety fikcyjny model negocjacji i tabela cen za m2.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 14:56:47 +02:00
debian 556dd6cf6a Popraw naglowek raportu wyceny PDF
Numer raportu mial zerowy prawy margines i wychodzil poza krawedz strony.
Nazwa serwisu w PDF-ach pisana jak w logo: "Polska Lokalnie".

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 14:46:58 +02:00
debian bad91dc205 Nadaj adresy krokom wyceny i popraw pusty wynik
Deploy Polska Lokalnie / deploy (push) Successful in 11s
Kroki kreatora maja wlasne trasy (/wycena/szczegoly, /wycena/stan,
/wycena/wynik), a szkic formularza przetrwa F5. Pusty wynik wskazuje
brakujace dane linkami do kroku, "Co dalej?" prowadzi do prawdziwych stron.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 14:35:34 +02:00
debian 94dd300c53 Wycena na prawdziwych danych zamiast zmyslonej tabeli cen
Deploy Polska Lokalnie / deploy (push) Successful in 11s
Stawka bazowa za m2 pochodzila z tabeli opisanej jako "SonarHome 2026"
i zmyslonych mnoznikow dzielnic. Teraz korzysta z /api/price-history:
- najnowsza cena transakcyjna mieszkan NBP dla miasta i rynku, potem GUS
  (dane najwyzej 3-letnie), a bez nich srednia cen ofertowych z ogloszen;
- korekta dzielnicy liczona z ogloszen (min. 3 w dzielnicy i 5 w miescie);
- domy: srednia z ogloszen domow, gdy sa co najmniej 3, inaczej ceny
  mieszkan z korekta modelu - opisane przy wyniku;
- zrodlo stawki w podgladzie, zalozeniach i raporcie PDF;
- brak danych dla lokalizacji to komunikat zamiast wymyslonej kwoty.

Korekty modelu (stan, pietro, rok budowy, udogodnienia) bez zmian.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 14:21:22 +02:00
debian e92c68ec93 Historia cen na prawdziwych danych: ogloszenia, NBP i GUS
Deploy Polska Lokalnie / deploy (push) Successful in 12s
Strona /historia-cen pokazywala pusty wykres (wczesniej zmyslony). Teraz:

Ceny ofertowe z ogloszen:
- Tabela price_snapshots: codzienny zapis srednich cen za m2 z opublikowanych
  ogloszen per miasto i dzielnica, typ (mieszkanie/dom) i rynek. Zapis co noc
  (02:30) i przy starcie, gdy brakuje dzisiejszego. Historii sprzed pierwszego
  zapisu nie odtwarzamy.

Ceny transakcyjne ze zrodel publicznych (porownanie, cale miasto, mieszkania):
- NBP: plik ceny_mieszkan.xlsx (baza BaRN) - 17 miast, rynek pierwotny
  i wtorny, od III kw. 2006. Odczyt XLSX bez nowych zaleznosci.
- GUS: API Banku Danych Lokalnych (temat P3794) - miasta na prawach powiatu,
  kwartalnie od 2010, z opoznieniem ok. roku.
- Import raz w tygodniu i przy starcie, gdy dane sa starsze niz tydzien;
  blad zrodla nie kasuje poprzednich danych.
- GET /api/price-history (publiczny): historia, biezaca srednia z ogloszen,
  od kiedy zbieramy dane oraz serie NBP i GUS.

Frontend:
- Okresy "Ostatnie 5 lat" (domyslny), "Od 2006 (NBP)", "2026 do dzis";
  trzy serie z legenda, dymek ze wszystkimi zrodlami, statystyki i wnioski
  z prawdziwych liczb, porownanie cen ofertowych z NBP i GUS oraz roznica
  i srednia, gdy zrodla sie roznia. Ceny w "Porownaj lokalizacje".
- Poprawione dopasowanie lokalizacji ("Warszawa" otwierala "Warszawa,
  Mokotów"), usuniete resztki zmyslonych cen i opcja "Lokal uzytkowy".

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 13:56:26 +02:00
debian e7402dbfed Osadz logo w mailach, popraw naglowek i nadaj adresy krokom logowania
Deploy Polska Lokalnie / deploy (push) Successful in 12s
Maile:
- Logo jest zalacznikiem inline (cid:) zamiast obrazka z adresu serwisu.
  Wczesniej w mailach z lokalnego srodowiska (i w programach blokujacych
  obrazki z zewnatrz) w miejscu logo byla ikona bledu. Usuniety tekst
  zastepczy, ktory dublowal napis "Polska Lokalnie".

Naglowek:
- Menu nie nachodzi na logo ani panel przy zadnej szerokosci 1110-1920 px.
  Ponizej 1560 px "Ulubione" to samo serce (nazwa w dymku), mniejsze odstepy
  i przycisk "Dodaj ogloszenie" bez sztywnej szerokosci; w 1101-1270 px
  mniejszy napis logo i tekst przycisku.

Logowanie i rejestracja (standard routingu):
- Kazdy krok ma wlasny adres: /logowanie, /logowanie/nie-pamietam-hasla,
  /rejestracja, /rejestracja/osoba-prywatna, /rejestracja/firma,
  /rejestracja/sprawdz-poczte. Dzialaja F5, Wstecz/Dalej i nowa karta,
  formularz czysci sie takze przy Wstecz/Dalej, a cel powrotu po
  zalogowaniu nie ginie przy przejsciach miedzy krokami.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 11:26:47 +02:00
debian 72af24469a Popraw rejestracje, kod SMS, opisy wysylki i widok wiadomosci
Deploy Polska Lokalnie / deploy (push) Successful in 11s
Rejestracja (/logowanie):
- Formularz rejestracji (osoba prywatna i firma) zawsze zaczyna sie pusty.
  Logowanie i rejestracja dzielily pola e-mail i hasla, wiec dane wpisane
  albo podstawione przez przegladarke przy logowaniu trafialy do nowego konta.
- "Powtorz haslo" ma wlasny przelacznik widocznosci; wczesniej oko przy
  "Haslo" odslanialo oba pola, a ikona przy "Powtorz haslo" nie reagowala.
- Przycisk oka ma normalny obszar klikniecia (mial zerowy rozmiar).

Kod SMS:
- Okno potwierdzania numeru odlicza czas od SMS-a z rejestracji, a odmowa
  serwera ("Kolejny mozesz zamowic za N s") odlicza czas w dol zamiast
  pokazywac stala liczbe sekund. To samo w ustawieniach konta.

Panel admina:
- "Wysylka kampanii e-mail aktywna" -> "Wysylka e-maili aktywna" z opisem:
  przelacznik blokuje wszystkie e-maile (aktywacja, reset hasla,
  powiadomienia), nie tylko kampanie. Podobny opis przy SMS.

Wiadomosci:
- Puste pole pisania bez "Napisz wiadomosc do ...".
- Naglowek rozmowy "Nazwa - opis" zamiast sklejonego tekstu.
- Na liscie rozmow jedna miniatura ogloszenia zamiast dwoch.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 09:30:21 +02:00
debian 9615f131f4 Dodaj skrot do wiadomosci w pasku gornym
Deploy Polska Lokalnie / deploy (push) Successful in 10s
Obok "Ulubione" i dzwonka powiadomien - dla kazdego zalogowanego konta,
takze administratora - ikona prowadzaca do /wiadomosci z plakietka liczby
nieprzeczytanych, na wzor Gieldy Komunalnej.

Licznik nieprzeczytanych wydzielony do useMessagesUnreadCount, wspolnego
dla menu konta i paska gornego; odswieza sie co 25 s i po zmianie strony.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-21 23:26:08 +02:00
debian 5eee33b986 Dodaj prawdziwe wiadomosci miedzy uzytkownikami o ogloszeniach
Deploy Polska Lokalnie / deploy (push) Successful in 12s
Dotad rozmowy z kupujacymi istnialy tylko w przegladarce nadawcy: nic nie
trafialo na serwer, "odczytano" i odpowiedz sprzedajacego byly symulowane
timerem. Wzorem Gieldy Komunalnej:

Backend (/api/conversations):
- Conversation: jeden watek na pare (ogloszenie, kupujacy), sprzedajacy to
  wlasciciel ogloszenia; tytul ogloszenia zapisany na wypadek jego usuniecia.
  Wiadomosci w istniejacej tabeli messages z nowa kolumna conversation_id,
  wiec rozmowa z administracja (conversation_id = null) dziala bez zmian.
- start/list/get/reply, blokada (UserBlock, w obu kierunkach), ukrycie
  rozmowy u siebie (nowa wiadomosc przywraca ja obu stronom). Dostep tylko
  dla stron rozmowy, filtr niedozwolonych slow jak w reszcie serwisu.
- Po zatwierdzeniu transakcji odbiorca dostaje powiadomienie w serwisie
  i - jesli ma wlaczone powiadomienia o wiadomosciach - e-mail (w tle).
- /api/messages/unread-count wlicza rozmowy o ogloszeniach.
- Zgloszenie uzytkownika z rozmowy: zgloszonego, ogloszenie i tresc rozmowy
  serwer bierze z bazy, nie z przegladarki.

Frontend:
- Adresy /wiadomosci/:conversationId, /wiadomosci/administracja
  i /wiadomosci/nowa/:listingId zamiast rozmowy w location.state.
- Lista rozmow odswiezana co 30 s, otwarta rozmowa co 4 s.
- Zdjecia w wiadomosciach usuniete - serwer ich nie przyjmuje (rozmowa
  z administracja i tak je gubila).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-21 23:15:06 +02:00
debian d655bcc9b1 Usun makiety i fikcyjne dane z frontendu
Deploy Polska Lokalnie / deploy (push) Successful in 11s
Strony pokazywaly zmyslone dane jako prawdziwe. Usuwam je i zostawiam
puste stany tam, gdzie funkcja nie ma jeszcze zrodla danych:

- strona glowna: 4 fikcyjne "Polecane ogloszenia" (pokazywane przy mniej
  niz 4 ogloszeniach) - teraz prawdziwe ogloszenia albo pusty stan;
- mapa: zapasowe fikcyjne oferty kupna i wynajmu;
- wyszukiwarka: gotowe wpisy "Ostatnio wyszukiwane";
- negocjacje: zmyslona "szansa na zakup" i "podobne transakcje" - pusty stan;
- historia cen: wykres i statystyki z generatora - puste do czasu podpiecia API;
- alerty cenowe: wykres z generatora; srednia liczona tylko z ogloszen.
  Wczesniej przy braku ogloszen podstawiana byla stawka szacunkowa, przez co
  monitoring w tle zglaszal nieistniejace zmiany cen;
- spotkania: przykladowe i "testowe" spotkania dopisywane kazdemu kontu,
  takze odfiltrowane z localStorage;
- wiadomosci: 7 fikcyjnych rozmow; pusty stan zamiast bledu bez watkow;
- moje oferty: 12 ukrytych fikcyjnych ofert zapisywanych w localStorage;
- poradniki: zmyslone polecane artykuly (teraz najczesciej czytane z API)
  i liczniki "5 120 ofert";
- wycena: wskaznik "% dokladnosci" liczony z liczby wypelnionych pol;
- martwy kod z fikcyjnymi powiadomieniami, znacznikami mapy i statystykami.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-21 15:29:21 +02:00
debian 4453ef2305 Usun symulowane logowanie przez Google i Facebook
Deploy Polska Lokalnie / deploy (push) Successful in 30s
Endpoint /api/auth/social byl atrapa bez prawdziwego OAuth: wydawal token
sesji dla dowolnego adresu e-mail podanego w zadaniu, bez hasla. Podanie
adresu administratora dawalo pelna sesje z rola ADMIN.

Na tym etapie logowanie ma byc wylacznie dla uzytkownikow systemu (e-mail
i haslo), wiec usuwam je w calosci:

- backend: endpoint, wpis permitAll w SecurityConfig, AuthService.socialLogin
  z pomocnikami i DTO SocialLoginRequest. Enum AuthProvider zostaje, bo
  istniejace konta moga miec GOOGLE/FACEBOOK.
- frontend: przyciski Google/Facebook w formularzach logowania i rejestracji,
  socialLogin w AuthContext oraz osierocone style.

Test regresyjny AuthControllerTest nie uruchomi sie jeszcze na H2 - start
kontekstu wywraca sie na split_part w SQL naprawiajacym nicki (ten sam blad
dotyczy istniejacego contextLoads). Zweryfikowane recznie na stacku
z PostgreSQL: /api/auth/social -> 403, logowanie e-mailem -> 200.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-21 14:20:32 +02:00
pascal a3e4505194 emotki i profile
Deploy Polska Lokalnie / deploy (push) Successful in 15s
2026-09-08 16:59:53 +02:00
pascal 6b334cc1b5 poprawki
Deploy Polska Lokalnie / deploy (push) Successful in 13s
2026-09-06 01:05:09 +02:00
pascal fbfb0db38e ladowanie ogloszen
Deploy Polska Lokalnie / deploy (push) Successful in 11s
2026-09-05 21:10:33 +02:00
pascal c981b3cb93 blokady
Deploy Polska Lokalnie / deploy (push) Successful in 11s
2026-09-05 20:54:11 +02:00
pascal e7db409828 wyglad ogloszen
Deploy Polska Lokalnie / deploy (push) Successful in 11s
2026-09-04 14:24:11 +02:00
pascal 282b5e424f dodawanie ogloszen poprawki
Deploy Polska Lokalnie / deploy (push) Successful in 10s
2026-09-03 23:28:43 +02:00
pascal d973b44e47 poprawki
Deploy Polska Lokalnie / deploy (push) Successful in 12s
2026-09-03 16:49:33 +02:00
debian 7aad27a514 test 2026-09-03 14:19:22 +02:00
pascal 38998d8db5 storna glowna 2026-08-25 15:31:40 +02:00
pascal 1a067cce8c panel uzytkownika 2026-08-24 14:14:54 +02:00
pascal 6c35589e70 poradniki 2026-08-20 16:24:47 +02:00
pascal f9f030ba14 firmy i usługi plus ustawiaenia 2026-08-19 17:02:55 +02:00
debian c52bbabec0 Zadania 1, 2, 9 2026-08-18 15:33:53 +02:00
pascal 571ec05d76 aktuazalizacja profilow,prefernecji,bezpiecznestwa 2026-08-13 16:18:46 +02:00
pascal fbb7ab2d90 zmiany w ustawieniach 2026-08-12 17:03:22 +02:00
pascal 1e361bde93 panel glowny poprawki 2026-08-11 17:07:34 +02:00
pascal b30a0b9b95 zminay w alertach cenowych 2026-08-10 18:34:26 +02:00
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