Commit Graph

63 Commits

Author SHA1 Message Date
debian c9c78b6db5 Zdjecie na stronach logowania siega gornego menu
Deploy Polska Lokalnie / deploy (push) Successful in 20s
Na /logowanie i pozostalych ekranach z tym ukladem (rejestracja, odzyskiwanie
hasla) zdjecie stalo w dolnej czesci lewej kolumny, a nad nim byl bialy pas.
Teraz wypelnia cala kolumne od gornego menu - tak jak hero na stronie glownej -
a tresc lezy na nim pod biala poswiata, ktora ku dolowi znika.

Na waskim ekranie zdjecie zostaje osobnym kadrem na gorze kolumny, bez poswiaty.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-23 22:11:54 +02:00
debian ca5f3ebfc1 Regulamin i polityka prywatnosci zgodne ze stanem serwisu
Deploy Polska Lokalnie / deploy (push) Successful in 22s
Audyt pokazal rozbieznosci w obie strony: dokumenty opisywaly funkcje,
ktorych nie ma (logowanie Google/Facebook), a kod robil rzeczy, ktorych
dokumenty nie ujawnialy.

Kod:
- zgody marketingowe domyslnie WYLACZONE (byly true dla kazdego nowego
  konta) + skrypt fix-marketing-consents.sql czyszczacy stare wpisy,
- usuniete tlumaczenie przez nieoficjalne API Google - przy zmianie
  jezyka wysylalo do USA tresci stron, w tym wiadomosci i nazwiska,
- osadzone spacery (YouTube, Matterport, Kuula) laduja sie dopiero po
  zgodzie; YouTube w trybie bez ciasteczek; mapy jak dotad,
- usuniecie konta kasuje dane osobowe (AccountErasureService), a nie
  tylko wiersz app_users,
- wygasle tokeny i kody SMS kasowane po 7 dniach (ExpiredTokenCleaner),
- zapisujemy moment akceptacji regulaminu przy rejestracji.

Dokumenty: opisuja realne funkcje, wszystkich odbiorcow danych (OVH,
Autopay, SMTP, SMS, Esri, OpenStreetMap, YouTube/Matterport/Kuula, GUS),
transfery poza EOG, konkretne okresy przechowywania, procedure zgloszen
z DSA, brak profilowania i tabele pamieci przegladarki zamiast fikcyjnych
cookies analitycznych. Zakres NIS2 i DORA opisany zgodnie z prawda.

Uklad stron prawnych jak reszta serwisu: kontener 1760 px, karty,
spis tresci z boku.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-23 21:59:15 +02:00
debian a4457df5f8 Alerty cenowe na serwerze - powiadomienia tylko w serwisie
Deploy Polska Lokalnie / deploy (push) Successful in 22s
Alerty liczyla dotad przegladarka, wiec dzialaly wylacznie przy otwartej
stronie, a rynek porownywaly malymi literami ("wtorny" vs "Wtórny"),
przez co alert lokalizacji z wybranym rynkiem nigdy nie mial danych.

Teraz: tabele price_alerts i price_alert_events, /api/price-alerts oraz
codzienny przeglad o 03:00 (po nocnym zapisie srednich cen). Ogloszenie -
powiadomienie przy kazdej zmianie ceny; lokalizacja - przy zmianie
sredniej o co najmniej 2%. Wynik trafia wylacznie na liste powiadomien
uzytkownika; alerty nie wysylaja zadnych e-maili.

Alerty zalozone w przegladarce przenosimy raz przy pierwszym wejsciu.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-23 18:00:40 +02:00
debian ad1d573e89 Drobne poprawki bezpieczenstwa z audytu
Deploy Polska Lokalnie / deploy (push) Successful in 12s
- /api/listings/favorites i /mine/** wymagaja logowania (anonimowo byl blad 500).
- Nowa rozmowa tylko o opublikowanym ogloszeniu.
- Licznik wyswietlen: jedno wyswietlenie na IP i ogloszenie na godzine.
- Rezygnacja z mailingu: GET pyta o potwierdzenie, wypisuje dopiero POST
  (tez z przycisku programu pocztowego); podpis porownywany w stalym czasie.
- Usuniecie konta usuwa jego ogloszenia.
- Haslo przy rejestracji min. 8 znakow; resend-phone-otp nie zdradza, czy konto istnieje.
- docker-compose.prod.yml bez domyslnego Admin123!; bez hasla konto admina
  nie jest zakladane (blad w logu).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 17:03:05 +02:00
debian a53cae7c37 Istotna edycja zatwierdzonego ogloszenia wraca do moderacji
Deploy Polska Lokalnie / deploy (push) Successful in 12s
- Zmiana tytulu, opisu, zdjec, danych kontaktowych lub linku spaceru
  w ogloszeniu opublikowanym albo wstrzymanym ustawia status PENDING;
  cena i parametry zmieniaja sie od razu.
- Frontend nie koduje ponownie zapisanych zdjec JPEG przy edycji (bez utraty
  jakosci i bez falszywej zmiany zdjec); informacja o weryfikacji w formularzu.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 16:39:15 +02:00
debian b850e4c092 Poprawki bezpieczenstwa: maile, kredyty, token strumienia, lokalizacja, spotkania, zgloszenia
Deploy Polska Lokalnie / deploy (push) Successful in 13s
- Imie, tytul artykulu i powod odrzucenia oraz {{name}} w kampaniach
  escapowane w HTML maili; limit dlugosci imienia.
- Kredyty promowania zuzywane i dopisywane warunkowym UPDATE, ITN blokuje
  wiersz zamowienia; zakup i kredyt tylko na aktywny plan/pakiet.
- Strumien powiadomien na krotkim (60 s) tokenie ?ticket= pobieranym przez
  POST /api/notifications/stream-token; token sesji nie jest przyjmowany z adresu.
- Przyblizona lokalizacja jako srodek kratki 300 m zamiast odwracalnego
  przesuniecia liczonego z id.
- Propozycja spotkania respektuje blokade i moderacje, bez e-maila w nazwie.
- Zglaszajacy dostaje samo potwierdzenie; zgloszenia tylko opublikowanych
  ogloszen; nie zapisujemy rozmowy przyslanej przez przegladarke.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 14:36:48 +02:00
debian ac7a3a4efb Sesje sprawdzane w bazie, e-mail ogloszeniodawcy niepubliczny, zgody z formularza
Deploy Polska Lokalnie / deploy (push) Successful in 12s
- JwtAuthFilter bierze role i stan konta z bazy: blokada, usuniecie konta
  i odebranie roli admina dzialaja od razu. Zmiana i reset hasla koncza
  dotychczasowe sesje (sessionsValidFrom); zmiana hasla zwraca nowy token.
- Publiczne odpowiedzi ogloszen bez ownerEmail/contactEmail; inne oferty
  sprzedajacego z GET /api/listings/{id}/seller-listings.
- Publiczny formularz reklamowy nie zmienia zgod ani nazwy istniejacego leada.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 13:56:36 +02:00
debian 3a555e3b24 AutoPay wg rozwiazania z Gieldy Komunalnej
Deploy Polska Lokalnie / deploy (push) Successful in 11s
- ITN: XML w base64 (pole transactions), bezpieczny parser (bez XXE), podpis
  ze stalej listy pol, zgodnosc ServiceID, kwoty i waluty, idempotencja,
  podpisana odpowiedz XML CONFIRMED/NOTCONFIRMED.
- Start transakcji podpisanym formularzem POST ze strony /platnosc/:orderId
  zamiast linku GET z podpisem w adresie; tytul przelewu w ASCII.
- Losowy OrderID (UUID) zamiast Math.random.
- Adres ITN do wpisania w panelu AutoPay widoczny w panelu admina.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 13:22:20 +02:00
debian 1c1162c93e Poprawki bezpieczenstwa: XSS przez zdjecia, darmowe promowanie, ITN
Deploy Polska Lokalnie / deploy (push) Successful in 12s
- Zdjecia ogloszen tylko jako data URL JPEG/PNG/WebP; podglad OG serwuje
  wylacznie te typy z nosniff i CSP sandbox, bez przekierowania na dowolny URL.
- Zakup promowania bez skonfigurowanej bramki AutoPay zwraca 503; automatyczne
  potwierdzanie tylko przy APP_PAYMENTS_AUTO_CONFIRM (lokalnie).
- ITN uznaje platnosc tylko przy jawnym statusie SUCCESS i zgodnej kwocie.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 13:13:29 +02:00
debian c740612b06 "Podglad reklamy" wyglada jak szkic, a nie dzialajacy profil
Deploy Polska Lokalnie / deploy (push) Successful in 11s
Panel na /firmy-i-uslugi mial 9 klikalnych przyciskow bez akcji oraz
zaszyte dane cudzej firmy ("4.8 (96 opinii)", "12 lat na rynku",
"230+ zrealizowanych projektow"). Teraz nic nie jest klikalne, liczby
zastapily podpisy pol, a na okladce jest plakietka "Podglad".

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-23 12:43:34 +02:00
debian d4dd898387 Sprawdzone lokalizacje w Historii cen zapisane na koncie
Deploy Polska Lokalnie / deploy (push) Successful in 12s
Lista ostatnio sprawdzonych lokalizacji zyla w localStorage, wiec ginela
przy zmianie urzadzenia. Teraz jest polem ustawien konta
(user_settings.price_history_markets), a wpisy z przegladarki
przenosimy raz przy pierwszym wejsciu.

To historia przegladania, nie alerty - nic z niej nie wysyla powiadomien.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-23 12:21:39 +02:00
debian 45a32d7ef0 Historia ogladania i uklad panelu osobno dla kazdego konta
Deploy Polska Lokalnie / deploy (push) Successful in 11s
Oba klucze byly globalne dla przegladarki, wiec na wspolnym komputerze
jedno konto widzialo, czego szukalo drugie, i nadpisywalo mu uklad
kafelkow. Teraz oba siedza pod accountProfile:<id>:*.

Zapis do historii czeka na zakonczenie wczytywania konta - wczesniej
oferta otwarta zaraz po wejsciu trafiala do historii "goscia".

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-23 11:43:44 +02:00
debian d6b6e3edd9 Teksty zgodne z tym, co serwis naprawde robi
Deploy Polska Lokalnie / deploy (push) Successful in 11s
- /jak-sprzedawac: zamiast Google, Facebook Marketplace, "ponad 500 grup"
  i newslettera "do tysiecy subskrybentow" - lista ofert, mapa, podglad
  linku w komunikatorach (OgController) i platne wyroznienie.
- "Dodaj do 30 zdjec i film" -> 8 zdjec, tyle przyjmuje backend; wideo nie ma.
- "Pomocny asystent AI" -> poradniki, wycena i kontakt z obsluga.
- Zdania o "tysiacach kupujacych/czytelnikow/klientow" przepisane bez
  twierdzen o skali (10 miejsc).
- Ustawienia: przelaczniki maili, ktorych nikt nie wysyla (zapisane
  wyszukiwania, alerty, nowosci), nieaktywne z wyjasnieniem.
- "Zweryfikowana firma" -> "Adres e-mail potwierdzony" - bo tym to jest.
- Poradniki: "Powiazane oferty" prowadza do zapowiadanych wynikow,
  pasek "Popularne" do poradnikow, a nie do list ofert.
- Kafelek 360 na stronie glownej bez plakietki "Wkrotce" - spacer dziala.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-23 11:34:39 +02:00
debian 557c76257b Ulubione na koncie - koniec kasowania zapisow przez pusta przegladarke
Deploy Polska Lokalnie / deploy (push) Successful in 12s
Dotad front po kazdej zmianie dyktowal serwerowi cala liste ulubionych.
Zalogowanie sie na innym urzadzeniu wysylalo "mam zero ulubionych"
i kasowalo zapisy, przez co wlasciciel ogloszenia tracil licznik zapisan.

Teraz: GET /api/listings/favorites zwraca ulubione konta, dodanie
i usuniecie ida pojedynczo (POST/DELETE /{id}/favorite), a wpisy z
przegladarki dopisuje jednorazowy /favorites/import. Endpoint
/favorites/sync usuniety razem z jego jedynym wywolaniem.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-23 11:26:00 +02:00
debian b9fecdea85 Spotkania na serwerze: umawianie ogladania z druga strona
Deploy Polska Lokalnie / deploy (push) Successful in 12s
Nowa tabela meetings i /api/meetings. Termin proponuje jedna ze stron
rozmowy o ogloszeniu, druga potwierdza albo odrzuca; odwolac moze kazda
ze stron. Kalendarz konta pokazuje oba rodzaje wpisow - umowione
ogladania i wlasne notatki - i jest ten sam na kazdym urzadzeniu.
Powiadomienia: wpis w watku i dzwonek przy kazdej zmianie, e-mail
wylacznie przy potwierdzeniu terminu.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-23 09:57:35 +02:00
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