Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
717 commits
Select commit Hold shift + click to select a range
3fb9798
Merge pull request #104: przejęcie wpisu gościa po założeniu konta
fpudelko Aug 6, 2026
780c7fd
fix: zaproszenie na mecz trafia do powiadomien; cofniete obramowanie …
claude Aug 6, 2026
9bdf6d2
Merge pull request #105 from fpudelko/claude/zaproszenia-powiadomienia
fpudelko Aug 6, 2026
bd7b70d
fix: odrzucanie przypisane do karty zaproszenia, dzwonek na mobile
claude Aug 6, 2026
7d16fce
chore: atrybucja ODbL na stronie obiektu, backlog: zglaszanie bledow …
claude Aug 6, 2026
ab4106d
fix: koniec z martwym pasem pod treścią na mobile
claude Aug 6, 2026
d483ec7
feat: kreator meczu pamięta szkic, numer BLIK chowa się do godziny pr…
claude Aug 6, 2026
5b895eb
feat: jedna nazwa domyślna meczu zamiast pięciu niezgodnych kopii
claude Aug 6, 2026
91c5164
feat: górny pasek dla zalogowanych na mobile to dzwonek i awatar, res…
claude Aug 6, 2026
91cfe75
feat: /moje-gry wygląda jak pulpit
claude Aug 6, 2026
50b368b
docs: dokumentacja szkicu kreatora, widoczności BLIKA, nowej powłoki …
claude Aug 6, 2026
923bdd2
feat: zaproszenie ma dwie odpowiedzi - Dolaczam i Odrzuc
claude Aug 6, 2026
262ea34
ci: uruchamiaj CI takze przy pushu na galezie robocze
claude Aug 6, 2026
83ab089
Merge pull request #107: dzwonek na mobile, odpowiedzi na zaproszenie…
fpudelko Aug 6, 2026
402dd24
fix: dwa dzwonki tworzyly ten sam kanal realtime
claude Aug 6, 2026
488b23e
Merge pull request #108: unikalny kanał realtime dla każdego dzwonka
fpudelko Aug 6, 2026
c1b97d7
feat: workflow importujacy OSM dla calej Polski, wojewodztwo po wojew…
claude Aug 6, 2026
7b8ff85
Merge pull request #109 from fpudelko/claude/import-polska
fpudelko Aug 6, 2026
e486987
revert: zaproszenia bez przyciskow odpowiedzi
claude Aug 6, 2026
87e1fa7
Merge pull request #110: zaproszenia bez przycisków odpowiedzi
fpudelko Aug 6, 2026
2948baf
fix: import odrzuca pobrany HTML zamiast dlawic sie nim w osmium
claude Aug 6, 2026
8db27a5
Merge pull request #111: import odrzuca pobrany HTML
fpudelko Aug 6, 2026
baf82ea
fix: karta boiska i podpowiedz trzymaja sie dolnej nawigacji, nie kon…
claude Aug 6, 2026
bb445ee
Merge pull request #112: karta i podpowiedź trzymają się dolnej nawig…
fpudelko Aug 6, 2026
17cb6be
refactor: wspolne moduly filtrow, odmiany, skladania znakow i odleglosci
claude Aug 7, 2026
5affa55
feat: landing pokazuje trzy pelne ekrany aplikacji do przewijania
claude Aug 7, 2026
bf85d86
feat: pasek dla wylogowanych to mapa, Dolacz i awatar
claude Aug 7, 2026
5844a38
feat: dwa przyciski Zorganizuj mecz zamiast czterech
claude Aug 7, 2026
c5df823
feat: /wydarzenia od nowa — filtry z nazwami, sortowanie, podzial na dni
claude Aug 7, 2026
dc8940d
perf: mapa pobiera pinezki, nie pelne karty
claude Aug 7, 2026
89e2631
feat: logowanie na tle listy meczow
claude Aug 7, 2026
2955d1d
perf: mapa pobiera wycinek widoku, a przy oddaleniu tylko liczby
claude Aug 7, 2026
4547af7
fix: strona sportu ma 25 MB - stronicowanie zamiast calego katalogu
claude Aug 7, 2026
6ee08f0
Merge pull request #113: mapa pobiera tylko to, co widać
fpudelko Aug 7, 2026
7925eae
feat: /grupy/[id] od nowa — hero, zakladki, najblizszy mecz
claude Aug 7, 2026
942c6b7
Merge pull request #114: stronicowanie listy boisk dla sportu
fpudelko Aug 7, 2026
4e827da
perf: zdjety limit 5000, wycinek widoku obowiazkowy takze w pickerach
claude Aug 7, 2026
3a2b498
docs: karuzela na landingu, nowy pasek, przeprojektowane /wydarzenia …
claude Aug 7, 2026
83d56d5
Merge pull request #115: zdjęty limit 5000, wycinek widoku w pickerach
fpudelko Aug 7, 2026
fe4f9d9
merge: master (PR #105-#115) do galezi PR #106
claude Aug 7, 2026
1bbe6d5
fix: skupiska na siebie nachodzily, brak liczby w kadrze
claude Aug 7, 2026
34a3941
Merge pull request #116: gęstość skupisk i liczba obiektów w kadrze
fpudelko Aug 7, 2026
c05ce83
chore: usuń nieaktualne zrzuty z public/mockups
claude Aug 7, 2026
91f5d19
Merge pull request #106 from fpudelko/claude/organizer-acquisition-st…
janbrzo Aug 7, 2026
146d035
feat: pasek nawigacji znika na telefonie, /mapa naprawiona, /moje-gry…
claude Aug 7, 2026
a53ab94
Merge pull request #117 from fpudelko/claude/organizer-acquisition-st…
janbrzo Aug 7, 2026
a978237
refactor: RangeSlider, eventFilters (cena/wolne miejsca/miesiąc), Hea…
claude Aug 7, 2026
2526e14
feat: /wydarzenia — jeden pasek filtrów, suwaki w modalu, widok mapy
claude Aug 7, 2026
77b1004
feat: /mapa — tryb "Pokaż gry"
claude Aug 7, 2026
cbff0ec
feat: navbar "bojo" na mobile — /moje-gry, /grupy, /grupy/[id], widok…
claude Aug 7, 2026
c855779
feat: /moje-gry — kompaktowy NextMatchCard
claude Aug 7, 2026
06f924f
fix: baner szkicu kreatora nie zapisuje się na pierwszym wejściu, jed…
claude Aug 7, 2026
dd3d7f2
docs: aktualizacja dokumentacji — filtry-suwaki, mapa gier, navbar bojo
claude Aug 7, 2026
0c146f1
fix: pigułka "Sortuj" ze stałym napisem, czytelniejsze pinezki meczów…
claude Aug 7, 2026
97b60df
Merge pull request #118 from fpudelko/claude/organizer-acquisition-st…
janbrzo Aug 7, 2026
568230b
fix: pinezki jako szare stadiony i drganie mapy po kliknieciu
claude Aug 7, 2026
2ec8477
feat: pinezki meczów z emoji sportu i "kiedy", swipe w panelu, zamyka…
claude Aug 7, 2026
a95caeb
Merge pull request #120 from fpudelko/claude/organizer-acquisition-st…
janbrzo Aug 7, 2026
4e6b771
Merge pull request #119 from fpudelko/claude/mapa-pinezki-drgania
fpudelko Aug 7, 2026
21cab3b
fix: rozwijane pigułki w pełni widoczne, godzina na pinezce meczu, na…
claude Aug 7, 2026
4e966cf
Merge pull request #121 from fpudelko/claude/organizer-acquisition-st…
janbrzo Aug 7, 2026
b675a02
fix: next zachowuje parametry, rejestracja mailem wraca do kreatora
claude Aug 8, 2026
e94d335
fix: nazwa organizatora zamiast adresu e-mail
claude Aug 8, 2026
c72b56c
fix: jeden link i gotowy tekst udostepnienia meczu
claude Aug 8, 2026
1694ea6
feat: podsumowanie meczu przed publikacja
claude Aug 8, 2026
ae072a5
feat: ekran "Mecz gotowy — wyslij link"
claude Aug 8, 2026
758048e
feat: powiadomienie o odwolaniu meczu i o braku nazwy
claude Aug 8, 2026
62dd7f5
feat: szlif kreatora — picker, krok 2, platnosci, wejscie dla wylogow…
claude Aug 8, 2026
cb6bc9b
docs: audyt przeplywu organizatora + aktualizacja dokumentacji
claude Aug 8, 2026
94dc8ae
Merge pull request #122: przepływ organizatora
janbrzo Aug 8, 2026
10189a0
feat: dokonczenie audytu przeplywu organizatora — O-20, O-23, O-24, O-25
claude Aug 8, 2026
a7ed9fd
Merge pull request #123: dokończenie audytu przepływu organizatora
janbrzo Aug 8, 2026
7d1faa1
fix: dołączanie do składu — kod wysyłał kolumnę skasowaną migracją 064
claude Aug 8, 2026
71a7158
feat: Obserwuj → Dołącz pyta o pozycję i płatność
claude Aug 8, 2026
924f3f3
fix: kreator — wordmark, rezerwa bez chowania, widoczny przycisk loka…
claude Aug 8, 2026
7503be1
feat: kreator — ekipa w kroku 3, propozycja ostatniego boiska
claude Aug 8, 2026
21cd0d2
feat: /mapa — przełącznik Gry | Obiekty zamiast pilla „Pokaż gry"
claude Aug 8, 2026
e7cd1a6
fix: powrót na /moje-gry po utworzeniu meczu, „Zaproś całą ekipę"
claude Aug 8, 2026
84644fa
fix: po zalogowaniu na /wydarzenia, baner uzupełnienia profilu tam, g…
claude Aug 8, 2026
3be619e
copy: uczciwe komunikaty o wczesnym etapie
claude Aug 8, 2026
51340fc
docs: aktualizacja dokumentacji po naprawie dołączania i szlifie krea…
claude Aug 8, 2026
b0045c6
Merge pull request #124 from fpudelko/claude/organizer-acquisition-st…
janbrzo Aug 8, 2026
4d15f77
fix: zakładanie ekipy w kreatorze zostaje w kreatorze
claude Aug 8, 2026
521d1f4
fix: kreator — opisy obok kontrolek, nie nad/pod nimi
claude Aug 8, 2026
eff2ed0
Merge pull request #125 from fpudelko/claude/organizer-acquisition-st…
janbrzo Aug 9, 2026
7bb215d
Szlif przepływu organizatora: kafelek cykliczny, panel organizatora, …
claude Aug 9, 2026
650e388
Merge pull request #126 from fpudelko/claude/organizer-acquisition-st…
janbrzo Aug 9, 2026
5bf22b2
Naprawa panelu powiadomień, brakujące powiadomienia, kolor "wymaga ak…
claude Aug 9, 2026
dca59e8
Merge pull request #127 from fpudelko/claude/organizer-acquisition-st…
janbrzo Aug 9, 2026
02978d5
Wydarzenia cykliczne jako prawdziwa seria: auto-tworzenie, zbiorcza e…
claude Aug 9, 2026
487d4d0
Merge pull request #128 from fpudelko/claude/organizer-acquisition-st…
janbrzo Aug 9, 2026
75a7c35
fix: statystyki gracza, zaproszenia po fakcie, imie i nazwisko w profilu
claude Aug 9, 2026
9931610
Merge pull request #129 from fpudelko/claude/trzy-naprawy
fpudelko Aug 9, 2026
a437e5f
PR 3: Rezerwa per rola, powiadomienia, flow — implementacja planu
claude Aug 9, 2026
939080a
Rezerwa per rola, powiadomienia z datami, szlif interfejsu
claude Aug 9, 2026
e9a8a6a
Zmiana numerów migracji 074/075 na 075/076 aby uniknąć konfliktów z m…
claude Aug 9, 2026
02c1198
Merge pull request #130 from fpudelko/claude/organizer-acquisition-st…
janbrzo Aug 9, 2026
c1c6620
Dyskretne usuwanie konta + teksty ogólnopolskie zamiast poznańskich (…
fpudelko Aug 9, 2026
0713338
fix: miejscowosc znika z nazwy obiektu, zostaje w adresie (#133)
fpudelko Aug 9, 2026
7c53dad
fix: nazwa obiektu na karcie urywala sie w polowie wolnej szerokosci …
fpudelko Aug 9, 2026
51b4c5f
ux: rezerwa w liscie skladu, powiadomienia bez falszywej fajki, odmia…
claude Aug 9, 2026
e54cd6a
Merge pull request #134 from fpudelko/claude/rezerwa-w-skladzie-i-odm…
fpudelko Aug 9, 2026
dcfc075
fix: prosby o dolaczenie na /moje-gry, kolejnosc meczow, modale nad n…
fpudelko Aug 10, 2026
089b339
feat: powiadomienia gasna po zalatwieniu, zapowiedz kolejnej gierki, …
fpudelko Aug 10, 2026
30330cc
Domknięcie audytu przepływu organizatora: argument w zaproszeniu gośc…
claude Aug 10, 2026
b50e314
Merge pull request #137 from fpudelko/claude/organizer-acquisition-st…
janbrzo Aug 10, 2026
e880cee
hotfix: modale nie mialy z-indexu — Tailwind nie skanowal src/lib (#138)
fpudelko Aug 10, 2026
4e53cb9
fix: kafelek pokazuje nazwe obiektu zamiast ulicy, komunikaty mapy na…
fpudelko Aug 10, 2026
baaecb9
Powrót na stronę przejęcia wpisu po zalogowaniu (#140)
fpudelko Aug 10, 2026
94dbb22
feat: rezerwa mowi wprost, ze jest rezerwa; role bramkarzy jako swiad…
fpudelko Aug 10, 2026
926a50d
perf: usuniete martwe zapytania po calej tabeli fields, dluzszy TTL i…
fpudelko Aug 10, 2026
d4c46f5
Zaproszenie gościa: kto zaprasza, czas przyszły, realne korzyści (#143)
fpudelko Aug 11, 2026
38e6221
feat: organizator przesuwa graczy miedzy skladem a rezerwa (#144)
fpudelko Aug 11, 2026
d4c0f1e
feat: miejsca dla bramkarzy — rezerwacja albo wspolna pula, do wyboru
claude Aug 11, 2026
b33d5c6
Merge pull request #145 from fpudelko/claude/tryb-miejsc-bramkarzy
fpudelko Aug 11, 2026
c482ea4
Etap 1+2: bramki w CI (lint, build, klikalność) i koniec cichych pora…
fpudelko Aug 11, 2026
83c45e1
Etap 3: reguła składu tylko w bazie + 43 scenariusze regresyjne [MIGR…
fpudelko Aug 11, 2026
830ae15
fix: nazwisko moze byc inicjalem — "Krzysiek W" blokowalo zalozenie k…
fpudelko Aug 11, 2026
4a72b93
Domknięcie audytu przepływu organizatora, runda 4: komplet pod dzwonk…
claude Aug 12, 2026
30dc709
Merge pull request #149 from fpudelko/claude/organizer-acquisition-st…
janbrzo Aug 12, 2026
d58e192
Domknięcie audytu przepływu organizatora, runda 5: zaproszenia gości,…
claude Aug 12, 2026
4436ffe
Merge pull request #150 from fpudelko/claude/organizer-acquisition-st…
janbrzo Aug 12, 2026
e87328c
Backend: funkcja i walidacja do zapisu bez logowania
claude Aug 12, 2026
88bd883
Frontend: modal dołączenia gościa i ekran zachęty do konta
claude Aug 12, 2026
d38e597
Dokumentacja: zapis na mecz bez logowania
claude Aug 12, 2026
7327ab0
Ponownie uruchom CI
claude Aug 12, 2026
c7a08ec
Usuń zduplikowaną deklarację guestName
claude Aug 12, 2026
649e405
Zamień guestIsGk na guestRole === 'goalkeeper'
claude Aug 12, 2026
137200e
Usuń nieużywane zmienne stanu dla karty sportowej gościa
claude Aug 12, 2026
10e85b7
Usuń odwołania do nieistniejących zmiennych karty sportowej gościa
claude Aug 12, 2026
1bc45a2
Napraw datę w teście eventSummary - przesunięcie na przyszłość
claude Aug 12, 2026
a14f725
Zaktualizuj oczekiwane daty w testach eventSummary
claude Aug 12, 2026
340757d
Merge pull request #151 from fpudelko/claude/organizer-acquisition-st…
janbrzo Aug 12, 2026
b51cbd7
Fix: Zmień INSERT+SELECT na INSERT...RETURNING w dolacz_do_meczu_jako…
janbrzo Aug 12, 2026
e528694
fix: aktualizacja znacznika migracji w llm-context.md (082 → 083)
claude Aug 12, 2026
d9dca85
Merge pull request #153 from fpudelko/fix/llm-context-migracja-marker
janbrzo Aug 12, 2026
9940cb5
Napraw self-service zapis gościa: rezerwa, odświeżanie listy, auto-pr…
janbrzo Aug 12, 2026
1c2eb8b
Dodaj logowanie zamiast rejestracji i powiadomienie o wpisie gościa d…
janbrzo Aug 12, 2026
14e2d92
Zapobiegaj duplikatom wpisu gościa i wykrywaj istniejące konto niezal…
claude Aug 12, 2026
a9b7b2d
Merge pull request #156 from fpudelko/claude/organizer-acquisition-st…
janbrzo Aug 12, 2026
836ce63
Dodaj ekran po powtórnym zapisie tym samym mailem (z kontem / bez konta)
claude Aug 12, 2026
5caa9e0
Faza 1 organizatorów: cztery niezależne poprawki (powiadomienie, zapr…
janbrzo Aug 13, 2026
f0cb7b3
Merge remote-tracking branch 'origin/master' into claude/organizer-ac…
claude Aug 13, 2026
4ecb4fe
Merge pull request #158 from fpudelko/claude/organizer-acquisition-st…
janbrzo Aug 13, 2026
5f9e252
test: regresja wizualna obok bramki + baza testowa od zera (#159)
fpudelko Aug 13, 2026
cf5fc31
Rozróżnij ekran po powtórnym zapisie gościa: z kontem i bez konta
claude Aug 13, 2026
e4f527d
Merge remote-tracking branch 'origin/master' into claude/join-without…
claude Aug 13, 2026
fd47934
Merge pull request #160: ekran po powtórnym zapisie gościa (z kontem …
janbrzo Aug 13, 2026
cc82884
test: scenariusze za logowaniem na lokalnym stosie Supabase
claude Aug 13, 2026
72650cc
fix: nie aplikuj migracji dwa razy w lokalnym stosie
claude Aug 13, 2026
27a9619
fix: bez zamrazania zegara — token GoTrue uznawal sie za wygasly
claude Aug 13, 2026
bbd9bf5
test: diagnostyka stosu — czy brak danych, czy brak dostepu
claude Aug 13, 2026
b22c6b7
fix: serwer Next dostawal atrapy kluczy — stad puste strony w scenari…
claude Aug 13, 2026
024263d
test: niech scenariusze same mowia, co widza na stronie
claude Aug 13, 2026
c5a141e
test: zatrzymuj scenariusze na pierwszym bledzie — inaczej nie widac …
claude Aug 13, 2026
b312cd8
Popraw walidację e-maila: kropka musi być w domenie, nie gdziekolwiek…
claude Aug 13, 2026
0a05cb2
Merge pull request #162: popraw walidację e-maila (kropka musi być w …
janbrzo Aug 13, 2026
a6d1d29
Napraw cztery problemy z integracją modali onboardingowych i powiadom…
janbrzo Aug 13, 2026
474abc4
FAQ: napraw kłamstwo o koncie, jedno źródło treści, nowa strona /faq
claude Aug 13, 2026
d34a4b2
Dodaj strony /jak-dziala-bojo i /dlaczego-bojo pod SEO/GEO/AEO
claude Aug 13, 2026
c420f38
Dodaj /o-nas, domknij warstwę treści: stopka, sitemap, llms.txt
claude Aug 13, 2026
98d4a39
Powtórz mecz z domyślną datą, sekcja "Do rozliczenia" w Historii
claude Aug 13, 2026
fd0241b
Karta "Po meczu": rozliczenie, wynik i zaproszenie gości w jednym mie…
claude Aug 13, 2026
fb7e487
Dokumentacja, bramka mobile-first, e2e i testy dla stron treści
claude Aug 13, 2026
2cc9a3b
Merge pull request #164 from fpudelko/claude/organizer-acquisition-st…
janbrzo Aug 14, 2026
1917e88
test: onboarding zaslanial strone, plus pytanie do API o brakujacy mecz
claude Aug 14, 2026
4e278bc
Szlifowanie przepływu organizatora: dzwoneczek, karta "Po meczu", del…
claude Aug 14, 2026
8cad691
Merge pull request #165 from fpudelko/claude/session-294ldo
janbrzo Aug 14, 2026
a933671
Dodaj plik weryfikacyjny Google Search Console (#166)
janbrzo Aug 14, 2026
7a036d9
Modal "Uprawnienia": zwijanie listy kandydatów
claude Aug 14, 2026
f5ef75a
Merge pull request #161 from fpudelko/claude/scenariusze-za-logowaniem
fpudelko Aug 14, 2026
ce2e59e
Merge pull request #167 from fpudelko/claude/session-294ldo
janbrzo Aug 14, 2026
ad8c8df
test: znacznie wiecej zrzutow — komunikaty logowania, rejestracji i p…
claude Aug 14, 2026
e53ee83
Merge pull request #168 from fpudelko/claude/kind-ptolemy-9Mvh0
fpudelko Aug 14, 2026
c774008
test: 22 scenariusze za logowaniem zamiast 9, plus samodzielne wzorce
claude Aug 14, 2026
e24e81c
test: etykieta obowiazuje takze nowe widoki, plus 7 kolejnych scenari…
claude Aug 14, 2026
5d524a7
test: wzorce dla nowych widoków (scenariuszy)
github-actions[bot] Aug 14, 2026
1f5603f
Domyślny cel po rejestracji/logowaniu: strona główna zamiast /wydarzenia
claude Aug 14, 2026
a4ebea9
Revert: wzorce scenariuszy dopisane bez zatwierdzenia
claude Aug 14, 2026
0f6581a
Hero landingu: większy nagłówek na desktopie, zagospodarowany dół ekranu
claude Aug 14, 2026
c84fbfc
Merge pull request #170 from fpudelko/claude/session-294ldo
janbrzo Aug 14, 2026
90a0b53
ci: przegladanie zrzutow z telefonu — obrazki w komentarzu, akceptacj…
claude Aug 14, 2026
eddf144
Landing: prawdziwe zrzuty ekranu w karuzeli zamiast makiet JSX
claude Aug 14, 2026
6ce70e3
ci: raport ze zrzutami na kazdy PR, kasowany po tygodniu
claude Aug 14, 2026
e428c28
ci: zrzuty nigdy nie swieca na czerwono
claude Aug 14, 2026
9ad667c
fix: raport ze zrzutami nie powstawal, gdy nie bylo ANI JEDNEJ roznicy
claude Aug 14, 2026
41c10aa
Merge pull request #171 from fpudelko/claude/bojo-landing-mockups-1r195a
janbrzo Aug 14, 2026
98075bf
Merge pull request #169 from fpudelko/claude/kind-ptolemy-9Mvh0
fpudelko Aug 14, 2026
76d6734
test: przemial po WSZYSTKICH trasach + czytelne roznice w raporcie
claude Aug 14, 2026
5be8e86
Merge pull request #173 from fpudelko/claude/wszystkie-widoki
fpudelko Aug 14, 2026
1b5c514
test: ustal wzorce scenariuszy jako punkt odniesienia
claude Aug 14, 2026
9c281e8
fix: nadanie etykiety nie uruchamialo workflow
claude Aug 14, 2026
3dea3b4
test: zaakceptowane wzorce zrzutów
github-actions[bot] Aug 14, 2026
b1cba95
test: zaakceptowane wzorce scenariuszy
github-actions[bot] Aug 14, 2026
b742b34
Grupy jako magnes na organizatora: uprawnienia, tablica, zaproszenia,…
claude Aug 14, 2026
5a659a3
Merge pull request #176 from fpudelko/claude/organizer-acquisition-st…
janbrzo Aug 15, 2026
9e1d71e
Ekran grupy: niska belka, rozmowa zamiast tablicy, sortowanie po term…
claude Aug 15, 2026
5679582
Merge pull request #177 from fpudelko/claude/organizer-acquisition-st…
janbrzo Aug 15, 2026
02782ad
Czy gramy: próg minimum, kto milczy, otwarcie dla okolicy; poprawki U…
claude Aug 15, 2026
1a588b1
Merge pull request #178 from fpudelko/claude/organizer-acquisition-st…
janbrzo Aug 15, 2026
9935c5c
Strona grupy: własny pasek zamiast navbara, Rozmowa bez Najbliższego …
claude Aug 15, 2026
20f24c7
Merge pull request #179 from fpudelko/claude/organizer-acquisition-st…
janbrzo Aug 15, 2026
c7e6a2d
Grupa: pasek bliżej krawędzi, composer w Rozmowie odsłonięty spod Bot…
claude Aug 15, 2026
f9594c4
Merge pull request #180 from fpudelko/claude/organizer-acquisition-st…
janbrzo Aug 15, 2026
1753307
Rozmowa na stronie meczu (jak w ekipie) + rozmowa ekipy sięga do dołu…
claude Aug 15, 2026
c051103
Merge pull request #181 from fpudelko/claude/organizer-acquisition-st…
janbrzo Aug 15, 2026
68b2edd
Strona meczu: pięć zakładek (Skład/Rozmowa/Wynik/Rozliczenia/Ustawien…
claude Aug 15, 2026
e87b5b9
Merge pull request #182 from fpudelko/claude/organizer-acquisition-st…
janbrzo Aug 15, 2026
8dc0b05
Doszlifowanie zakładek: nazwa meczu nad zakładkami, Rozmowa=tylko cza…
claude Aug 15, 2026
e4c529c
Merge pull request #183 from fpudelko/claude/organizer-acquisition-st…
janbrzo Aug 15, 2026
957d8fc
docs: katalog boisk zrobiony, nowa przeslanka strategiczna, plan PWA
claude Aug 15, 2026
cabfc43
Merge pull request #175 from fpudelko/claude/wzorce-scenariuszy
fpudelko Aug 15, 2026
3b9c69e
Rozmowa meczu też dla organizatora i ekipy, zakładki sticky, klawiatu…
claude Aug 15, 2026
6971d83
Merge pull request #185 from fpudelko/claude/organizer-acquisition-st…
janbrzo Aug 15, 2026
e62f7cd
Info o rozmiarze ekipy dla założyciela; usunięcie panelu "Kto milczy"
claude Aug 15, 2026
39bfad7
Merge pull request #186 from fpudelko/claude/organizer-acquisition-st…
janbrzo Aug 15, 2026
41606c0
Unread messages, recurring UI, and group showcase carousel
janbrzo Aug 16, 2026
bc17564
feat: Bojo jako apka na ekranie glownym (PWA, etap 1)
claude Aug 16, 2026
e8833f4
Kropka "nowość", naprawa uprawnień ekipy, filtr nieprzeczytanych na /…
janbrzo Aug 16, 2026
46d27a5
feat: zacheta do dodania Bojo na ekran glowny (PWA, etap 1b)
claude Aug 16, 2026
eb356af
Merge remote-tracking branch 'origin/master' into claude/backlog-aktu…
claude Aug 16, 2026
937fd6c
Merge remote-tracking branch 'origin/master' into claude/pwa-instalow…
claude Aug 16, 2026
88dee87
Merge remote-tracking branch 'origin/claude/pwa-instalowalna' into cl…
claude Aug 16, 2026
e44eb61
Merge pull request #188 from fpudelko/claude/pwa-instalowalna
fpudelko Aug 16, 2026
31896b8
Merge pull request #190 from fpudelko/claude/zacheta-instalacji
fpudelko Aug 16, 2026
ed8beb9
Merge pull request #184 from fpudelko/claude/backlog-aktualizacja
fpudelko Aug 16, 2026
f06da77
Ustawienia meczu bez wycieku, kropki Grupy przełożone, filtr przy Bra…
janbrzo Aug 16, 2026
c39c3fe
Merge remote-tracking branch 'origin/master' into claude/pwa-bezpiecz…
claude Aug 16, 2026
b614260
chore: odswiez kopie publiczna llm-context po scaleniu
claude Aug 16, 2026
7ce4dc0
fix: pasek nawigacji wjezdzal pod kreske gestow iOS w trybie apki
claude Aug 16, 2026
1033fd3
Przełącznik ekip, ekipa na pulpicie, prawdziwa naprawa kropki na "Moj…
janbrzo Aug 16, 2026
8c11eed
Naprawa wyścigu przy różowej kropce na Moje; dymki jeden na raz, 4 se…
janbrzo Aug 16, 2026
da94b16
Kropka na Moje gaśnie po błędzie zapytania; dymek na skrajnej ikonie …
janbrzo Aug 16, 2026
ece5f8a
fix: sklady w osobnej zakladce, wynik po meczu, koniec cichych odmow …
claude Aug 17, 2026
9283560
Merge remote-tracking branch 'origin/master' into claude/pwa-bezpiecz…
claude Aug 17, 2026
7017ed8
chore: odswiez kopie publiczna llm-context po scaleniu
claude Aug 17, 2026
874cf3a
fix: druzyny wprost w Skladzie, Rozliczenia znikaja przy meczu za darmo
claude Aug 17, 2026
eba1177
Merge pull request #196 from fpudelko/claude/naprawy-sklady
fpudelko Aug 17, 2026
efdbcf6
wip: zgloszenia bledow
claude Aug 17, 2026
be6e345
Merge remote-tracking branch 'origin/master' into claude/zgloszenia-b…
claude Aug 17, 2026
c718a09
Merge remote-tracking branch 'origin/master' into claude/pwa-bezpiecz…
claude Aug 17, 2026
3f17a8e
Merge pull request #192 from fpudelko/claude/pwa-bezpieczny-obszar
fpudelko Aug 17, 2026
864375a
feat: zgloszenia bledow — formularz dla ludzi i automatyczny log awarii
claude Aug 17, 2026
a555a9e
feat: zgloszenie bledu w danych obiektu + wejscie w profilu zamiast s…
claude Aug 17, 2026
289119b
Merge pull request #197 from fpudelko/claude/zgloszenia-bledow
fpudelko Aug 17, 2026
3b3ed69
fix: strona meczu — mniej pigulek nad licznikiem, czytelniejsze wypis…
claude Aug 17, 2026
4ef7564
Merge pull request #198 from fpudelko/claude/zgloszenia-bledow
fpudelko Aug 17, 2026
d86d34c
fix: zapisy w rozmowie ponawiaja sie po wygasnieciu sesji; skrypt obi…
claude Aug 17, 2026
a78ebc6
Merge pull request #199 from fpudelko/claude/naprawa-rozmowy
fpudelko Aug 17, 2026
5873e54
Odznaka Współorganizator tylko dla realnych uprawnień
claude Aug 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
Binary file removed .DS_Store
Binary file not shown.
69 changes: 69 additions & 0 deletions .claude/hooks/doc-guard.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
#!/usr/bin/env bash
# doc-guard — pilnuje, żeby dokumentacja w docs/ nie rozjechała się z kodem.
#
# start (SessionStart) — mówi, gdzie leży dokumentacja
# record (PostToolUse) — po zmianie kodu wskazuje KONKRETNY plik do aktualizacji
#
# To jest PRZYPOMNIENIE, nie bramka. Hook nigdy nie blokuje — kończy się exit 0
# w każdej ścieżce, a jego wyjście to tylko kontekst dla modelu. Odpowiedzialność
# za aktualizację zostaje po stronie piszącego.
#
# Żeby nie hałasować: dla danej kategorii zmian odzywa się raz na sesję, a edycja
# czegokolwiek w docs/ wycisza wszystkie kategorie do końca sesji.
set -uo pipefail

MODE="${1:-record}"
payload="$(cat 2>/dev/null || true)"

sid="$(printf '%s' "$payload" | jq -r '.session_id // "nosession"' 2>/dev/null || echo nosession)"
state="${TMPDIR:-/tmp}/bojo-doc-guard/${sid}"
mkdir -p "$state" 2>/dev/null || exit 0

case "$MODE" in
start)
jq -nc '{hookSpecificOutput:{hookEventName:"SessionStart",
additionalContext:"Dokumentacja projektu leży w docs/ (indeks: docs/README.md), zasady pracy w AGENTS.md. Zmiana kodu pociąga za sobą aktualizację odpowiedniego pliku w docs/ — mapowanie w AGENTS.md, sekcja \"Aktualizacja dokumentacji\". Walidator spójności: npm run check:docs. docs/wizja.md jest dokumentem nadrzędnym: jego sekcji 1 nie parafrazować."}}' 2>/dev/null
;;

record)
f="$(printf '%s' "$payload" | jq -r '.tool_input.file_path // .tool_response.filePath // ""' 2>/dev/null)"
[ -n "$f" ] || exit 0

# Edycja dokumentacji wycisza hook do końca sesji.
case "$f" in
*/docs/*|*/frontend/public/llms.txt|*/frontend/public/llm-context.md|*/AGENTS.md)
: > "$state/docs"
exit 0 ;;
esac
[ -e "$state/docs" ] && exit 0

# Klasyfikacja zmienionego pliku → kategoria + sugerowany plik dokumentacji.
# Flagi sprawdzane przed ogólnym lib/, bo mają węższe i ważniejsze mapowanie.
case "$f" in
*/frontend/src/lib/features.ts|*/frontend/src/config/features.ts)
kat="flagi"
cel="docs/funkcje.md (sekcja \"Flagi funkcji\") — tabela flag jest jedynym miejscem poza kodem, gdzie widać, co jest ukryte" ;;
*/supabase/migrations/*)
kat="migracje"
cel="docs/baza-danych.md — mapa tabela → migracja" ;;
*/frontend/src/lib/*)
kat="lib"
cel="docs/domena.md (jeśli zmieniły się reguły domenowe) lub docs/funkcje.md (jeśli doszła/zniknęła funkcja); jeśli zmiana jest widoczna dla użytkownika — także docs/llm-context.md (RAG INJECTION, patrz AGENTS.md)" ;;
*/frontend/src/app/*)
kat="trasy"
cel="docs/funkcje.md — a jeśli doszła lub zniknęła trasa użytkownika, także frontend/public/llms.txt oraz docs/llm-context.md (RAG INJECTION, patrz AGENTS.md)" ;;
*)
exit 0 ;;
esac

# Raz na sesję dla danej kategorii.
[ -e "$state/seen-$kat" ] && exit 0
: > "$state/seen-$kat"

jq -nc --arg plik "${f##*/bojo-app/}" --arg cel "$cel" \
'{hookSpecificOutput:{hookEventName:"PostToolUse",
additionalContext:("Zmieniłeś " + $plik + ". Przed końcem zadania sprawdź: " + $cel + ". Po zmianach uruchom: npm run check:docs. (Przypomnienie doc-guard — nie blokuje.)")}}' 2>/dev/null
;;
esac

exit 0
27 changes: 27 additions & 0 deletions .claude/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
{
"hooks": {
"SessionStart": [
{
"hooks": [
{
"type": "command",
"command": "bash .claude/hooks/doc-guard.sh start",
"timeout": 10
}
]
}
],
"PostToolUse": [
{
"matcher": "Edit|Write|NotebookEdit",
"hooks": [
{
"type": "command",
"command": "bash .claude/hooks/doc-guard.sh record",
"timeout": 10
}
]
}
]
}
}
78 changes: 78 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
# ============================================================
# Bojo (Boiska Poznań) — zmienne środowiskowe
# Skopiuj ten plik do .env i uzupełnij wartości.
# NIGDY nie commituj pliku .env do repozytorium.
# ============================================================

# ----- Frontend (Next.js) — zmienne publiczne, widoczne w przeglądarce -----

# Supabase: URL projektu, np. https://abcdefghijkl.supabase.co
NEXT_PUBLIC_SUPABASE_URL=

# Supabase: klucz publiczny "anon" (bezpieczny dla frontendu — chroniony przez RLS)
NEXT_PUBLIC_SUPABASE_ANON_KEY=

# Mapbox: token publiczny — używany TYLKO do miniatur zdjęć boisk (opcjonalny).
# Bez niego mapa nadal działa (Leaflet + OpenStreetMap), znikają tylko miniaturki.
# https://account.mapbox.com/
NEXT_PUBLIC_MAPBOX_TOKEN=

# Adres produkcyjny aplikacji — używany w sitemap.xml, robots.txt, JSON-LD
# i znacznikach SEO. Domena kanoniczna: https://bojo.pl
# Opcjonalny — bez niego kod używa https://bojo.pl (NIE localhost), więc przy
# pracy lokalnej ustaw http://localhost:3000, jeśli testujesz linki absolutne.
NEXT_PUBLIC_SITE_URL=

# Włącznik rezerwacji w aplikacji ("true" = pokaż UI rezerwacji globalnie).
# Można też włączyć per-obiekt flagą booking_enabled w bazie. (opcjonalny)
NEXT_PUBLIC_FEATURE_RESERVATIONS=false

# ----- Scraper / wzbogacanie danych — TYLKO lokalnie / w GitHub Actions -----
# Te wartości NIGDY nie trafiają do frontendu. W GitHub Actions trzymaj je w Secrets.

# Supabase: URL projektu (ta sama wartość co NEXT_PUBLIC_SUPABASE_URL)
SUPABASE_URL=

# Supabase: klucz service_role — pełny dostęp do bazy, OMIJA RLS.
# Settings → API → service_role. Trzymaj w sekrecie!
SUPABASE_SERVICE_ROLE_KEY=

# Google Places API — dla enrich_google.py (telefon/strona/godziny).
# https://console.cloud.google.com/
GOOGLE_PLACES_API_KEY=

# Anthropic (Claude) API — dla enrich.py i enrich_booking.py.
# https://console.anthropic.com/
ANTHROPIC_API_KEY=

# Domyślny model Claude dla scrapera (opcjonalny).
ANTHROPIC_MODEL=claude-haiku-4-5-20251001

# ----- Supabase Edge Functions — sekrety (ustawiane przez `supabase secrets set`) -----
# To NIE są zmienne .env frontendu. Ustaw je w projekcie Supabase, np.:
# supabase secrets set RESEND_API_KEY=...
# Używane przez funkcje: notify-game-alert, send-invites, send-event-sms.

# Resend — wysyłka e-maili (powiadomienia o grach, zaproszenia).
# https://resend.com/api-keys Nadawca: noreply@bojo.app (zweryfikuj domenę w Resend).
RESEND_API_KEY=

# SMSAPI.pl — wysyłka SMS (preferowany dostawca dla PL).
# https://ssl.smsapi.pl/ → Ustawienia → Tokeny API
SMSAPI_TOKEN=

# Twilio — zapasowy dostawca SMS (używany, gdy SMSAPI zawiedzie).
# https://console.twilio.com/
TWILIO_ACCOUNT_SID=
TWILIO_AUTH_TOKEN=
TWILIO_PHONE_FROM=

# ----- Logowanie / Auth (konfiguracja w panelu Supabase, nie w .env) -----
# Authentication → Providers:
# • Google OAuth — Client ID/Secret z Google Cloud Console.
# • Email — włącz "Email" provider dla logowania e-mailem + hasłem i magic-linków.
# Authentication → URL Configuration:
# • Site URL: https://bojo.app
# • Redirect URLs: dodaj https://bojo.app/auth/callback i https://bojo.app/auth/reset
# Authentication → Emails (SMTP): podłącz Resend jako custom SMTP, inaczej maile
# potwierdzające / magic-linki są mocno limitowane (kilka/godzinę) na darmowym planie.
62 changes: 62 additions & 0 deletions .github/dopisz-wzorce.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
#!/usr/bin/env bash
# Odsyła wzorce zrzutów na gałąź PR-a. Uruchamiany z katalogu `frontend`.
#
# JEDNA ZASADA: nic nie trafia do repo bez świadomego zatwierdzenia —
# komentarza `/zrzuty ok` w PR-ze albo etykiety `zrzuty:zaakceptuj`.
#
# Dotyczy to tak samo widoków ZMIENIONYCH, jak i CAŁKIEM NOWYCH. Przez chwilę
# nowe wzorce dopisywały się same — z rozumowaniem „nowy zrzut nie ma z czym
# się różnić, więc nie ma czego przeglądać". To rozumowanie jest błędne:
# pierwszy zrzut widoku jest właśnie tym, który warto obejrzeć, bo to on
# staje się wzorcem na zawsze. Jeśli nowy ekran wyszedł krzywo, ciche
# dopisanie utrwala krzywy stan i nikt się o tym nie dowie.
#
# Zrzuty nowych widoków oglądasz w artefakcie (`zrzuty-raport` /
# `scenariusze-raport`), zanim nadasz etykietę.
#
# Argument: dopełniacz do wiadomości commita („zrzutów", „scenariuszy").
set -euo pipefail

CO="${1:-zrzutów}"
AKCEPTUJ="${AKCEPTUJ:-0}"
GALAZ="${GALAZ:?brak nazwy gałęzi w GALAZ}"

NOWE="$(git ls-files --others --exclude-standard e2e/wzorce)"
ZMIENIONE="$(git diff --name-only -- e2e/wzorce)"

if [[ "$AKCEPTUJ" != "1" ]]; then
if [[ -n "$NOWE$ZMIENIONE" ]]; then
echo "Są wzorce do zatwierdzenia, ale nikt ich jeszcze nie zatwierdził."
echo "Nowe: $(echo "$NOWE" | grep -c . || true)"
echo "Zmienione: $(echo "$ZMIENIONE" | grep -c . || true)"
echo "Obejrzyj obrazki w komentarzu do PR-a i odpisz /zrzuty ok, jeśli są w porządku."
else
echo "Wzorce bez zmian."
fi
exit 0
fi

if [[ -z "$NOWE$ZMIENIONE" ]]; then
echo "Wzorce bez zmian — nie ma czego dopisywać."
exit 0
fi

git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add e2e/wzorce
git commit -m "test: zaakceptowane wzorce $CO"

# Oba zadania tego workflow potrafią dopisywać wzorce równocześnie, więc
# odrzucony push nie jest błędem, tylko wyścigiem — po prostu próbujemy jeszcze
# raz na świeżej gałęzi.
for PROBA in 1 2 3; do
if git push origin "HEAD:$GALAZ"; then
echo "✓ Wzorce dopisane do $GALAZ"
exit 0
fi
echo "Push odrzucony (próba $PROBA) — pobieram gałąź i próbuję ponownie."
git pull --rebase origin "$GALAZ"
done

echo "✗ Nie udało się dopisać wzorców po trzech próbach." >&2
exit 1
77 changes: 77 additions & 0 deletions .github/komentarz-zrzutow.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
// Jeden komentarz na zestaw zrzutów, aktualizowany w miejscu.
//
// Osobny plik, a nie `script:` wklejony w YAML-u, bo ta sama treść obsługuje
// dwa zadania (widoki publiczne i scenariusze za logowaniem) — a skopiowany
// kod w dwóch miejscach rozjeżdża się przy pierwszej poprawce.
//
// Komentarz rozpoznajemy po znaczniku (🖼️ / 🎬) w treści, żeby przy każdym
// kolejnym przebiegu nadpisać ten sam wpis zamiast zasypywać wątek.
//
// Zadaniem komentarza jest JEDNO: dać odnośnik do raportu. Niczego nie trzeba
// pisać w odpowiedzi — raport jest do obejrzenia, nie do zatwierdzania.

module.exports = async ({ github, context, znacznik, tytul, udane, akceptacja, obrazki, numer }) => {
const { owner, repo } = context.repo;

const naglowek = `### ${znacznik} ${tytul}`;
let tresc;

if (akceptacja) {
tresc = [
naglowek,
'',
'**Wzorce zaktualizowane.** Nowe obrazki trafiły na gałąź tego PR-a —',
'zobaczysz je w zakładce *Files changed*.',
'',
'**Zdejmij etykietę** `zrzuty:zaakceptuj`, żeby kolejne przebiegi znowu',
'porównywały, zamiast nadpisywać.',
].join('\n');
} else if (udane) {
tresc = [
naglowek,
'',
'Wszystkie zrzuty zgadzają się ze wzorcami — nic się wizualnie nie ruszyło.',
].join('\n');
} else if (obrazki) {
tresc = [
naglowek,
'',
'Widoki się zmieniły. To **nie jest** błąd sam w sobie — zmiana może być',
'dokładnie tym, co chciałeś zrobić.',
obrazki,
'',
'---',
'',
'Nowe wzorce wejdą do repo dopiero po nadaniu etykiety `zrzuty:zaakceptuj`',
'(w aplikacji GitHuba: **ⓘ** w prawym dolnym rogu → *Labels*).',
'',
'_To zadanie nie blokuje merge\'a ani deployu._',
].join('\n');
} else {
// Brak obrazków przy nieudanym przebiegu znaczy coś innego niż zmiana
// wyglądu: test padł zanim doszło do porównania — na asercji zachowania,
// na braku przycisku, na wywróconym logowaniu. Mówienie wtedy „widoki się
// zmieniły" wysyła w złą stronę.
tresc = [
naglowek,
'',
'Testy nie doszły do porównania widoków — coś padło wcześniej',
'(asercja zachowania, brak elementu, logowanie). **Nie chodzi o wygląd.**',
'',
'Szczegóły są w logu przebiegu i w artefakcie z raportem.',
'',
'_To zadanie nie blokuje merge\'a ani deployu._',
].join('\n');
}

const { data: komentarze } = await github.rest.issues.listComments({
owner, repo, issue_number: numer, per_page: 100,
});
const moj = komentarze.find((k) => k.user.type === 'Bot' && k.body.includes(znacznik));

if (moj) {
await github.rest.issues.updateComment({ owner, repo, comment_id: moj.id, body: tresc });
} else {
await github.rest.issues.createComment({ owner, repo, issue_number: numer, body: tresc });
}
};
Loading