Izmene: april 2026.
Izmene, nove funkcije i ispravke na sajtu kluba, april 2026..
30. april 2026.
1Sastav tima: igracke kartice sada nose oznaku trening tima (A — Beli, B — Tamni) u donjem levom uglu avatara, pored postojeceg broja dresa i kapitenske/trener oznake. Dodat treci nacin pregleda — „Po timovima“ — gde su zaglavlja oba tima jedno pored drugog, a ispod su zajednicki redovi po pozicijama (napadaci/odbrana/golmani) sa dve mrezice — leva za tim A, desna za tim B. Tako se grupe poravnavaju vertikalno i mogu da se uporede direktno. Igraci bez dodeljenog trening tima i treneri prikazuju se ispod kao zasebne sekcije.
25. april 2026.
5Admin/igraci: dialog „Dodaj novog igraca“ sada ima kvacicu „Legionar (samo za jedan mec)“ umesto „Gost“ — to je flag koji se najcesce postavlja na licu mesta kad se zove privremeni igrac za turnir/utakmicu. „Gost“ ostaje u edit-dialogu kao informativni tag, ali vise ne iskljucuje igraca iz tournament rostera, RSVP liste ili broja push-pretplatnika — jer „gost klubа“ moze potpuno da igra za nas. Edit-dialog dobija prekidac „Legionar“, tako da admin moze ručno da skine zastavu kad legionar predje u stalni roster.
/install: vizuelni vodic kroz instalaciju. Inline SVG mokapi koji prikazuju iOS Safari Share dugme, „Add to Home Screen“ akcioni list i ekran potvrde, kao i Android Chrome trotackasti meni i „Install app“ stavku — sistemska iOS/Android UI ne moze da se snimi Playwright-om (to je OS-level), pa su mokapi normalni industrijski standard. Iznad svega su pravi device-emulirani snimci same propeleri.rs/install stranice u iPhone 14 Pro Safari-ju i Pixel 7 Chrome-u, generisani novim skriptom npm run screenshots:install.
Auth refactor: requireAdmin() helper centralizovan na 5 admin API ruta, src/lib/auth/login.ts → email.ts (sa mrtvim username helperima izbacenim u prethodnom prolasku), middleware koristi locale-aware startsWith umesto includes (vise nije matchovao podstringove tipa /x/profile-info), magic-link mode iz PasswordlessBlock-a uklonjen — ostao samo OTP tab. profiles.username kolona i profiles_account_status view dropnuti — vise nista ne cita njih. Dodat tests/auth.spec.ts e2e set: prikaz formi, validacija, redirect-ovi za zasticene rute, ceo password sign-in flow + admin badge sanity.
Auth UI: prijava sada radi samo preko stvarne emaila (Google, magic link, OTP, email + lozinka). Polja za username/lozinku u admin formama za kreiranje i izmenu igraca su uklonjena — admin upisuje samo ime, sistem dodeljuje tehnicki @no-login.local marker; kasnije se igrac sam registruje preko mejla i biva povezan kroz „Poveži“. Pomocnici loginToEmail / extractLoginFromEmail / isSyntheticLoginEmail i njihove i18n stringe (sr/ru/en) su uklonjeni iz koda.
Auth: ukinuli smo prijavu preko username-a. Igraci koji su imali synthetic @player-login.local nalog moraju ponovo da se registruju preko stvarne emaila na /register; admin ih onda povezuje sa postojecim profilom kroz „Poveži“ — sve statistike, istorija treninga i utakmica se cuvaju. Filler @propeleri.rs adrese koje su bile placeholderi takodje su sklonjene; profili bez emaila sada imaju jasan tehnicki marker @no-login.local i ne salju im se obavestenja.
24. april 2026.
5Onboarding mejl: kad admin odobri novog igraca, pg trigger na profiles.is_approved aktivira edge funkciju send-approval-email koja preko Resend-a salje dobrodoslicu sa linkovima ka /profile i /install (uputstvo za PWA + push). Tri jezicke varijante (sr/ru/en) biraju se prema preferred_locale. Idempotentnost: approval_email_sent_at kolona + atomicni claim. Svaki pokusaj se loguje u approval_email_log. Tehnicki i @player-login.local emailovi se tiho preskacu. Odluka kanalа u docs/adr/approval-email-delivery.md, DNS i tajne u docs/email-setup.md.
RSVP → prisustvo: kad igrac oznaci „Dolazim“, prisustvo i tim se podesavaju automatski iz njegovog default tima u profilu; golmani zauzimaju slot vrata svoje ekipe, univerzalni igraci biraju izmedju polja i gola. Admin sada vidi badge RSVP kod svakog igraca u listi prisustva (realtime). Dodato: stranica /admin/broadcast za push objave svim pretplatnicima (bez dugmadi Dolazim/Ne dolazim), /admin/notifications sa istorijom slanja, i realtime badge u admin hederu za profile koji cekaju potvrdu.
Auth: dodata Google prijava pored lozinke / magic linka / OTP koda. Novi korisnici sada idu kroz /onboarding (ime, prezime, telefon) i čekaju da ih trener potvrdi. U admin panelu pored „Odobri“ postoji dugme „Poveži“ — omogućava spajanje novog naloga sa postojećom profile-only karticom igrača; sva istorija (lineup, stats, training, tournaments) se prenosi na novi nalog, dupla kartica se briše.
Push: osnova za web push notifikacije. Igraci ukljucuju push u /profile (VAPID), prijave se cuvaju u push_subscriptions sa per-user podesavanjima (24h / 3h / otkazivanje / rucno). Service worker vec obradjuje push i notificationclick akcije (Dolazim / Ne dolazim). Trener u admin panelu treninga vidi broj pretplatnika, istoriju slanja, dugmad „Posalji odmah“ i „Otkazi trening“. Edge funkcija send-training-notification i pg_cron raspored su u repo-u i cekaju rucni deploy.
RSVP: prijavljeni igraci jednim tapom oznacavaju dolazak na trening sa stranice treninga — Dolazim / Mozda / Ne dolazim. Trener vidi sumu u realnom vremenu (Dolaze / Mozda / Ne / Bez odgovora) i deep-link /training/<slug>?rsvp=yes automatski pamti izbor iz push notifikacija.
23. april 2026.
2PWA: sajt se sada moze instalirati kao aplikacija na Android (Chrome), iPhone (iOS 16.4+) i desktop. Dugme „Instaliraj“ u navbaru, posebna instrukcija za iOS. Service worker precache-uje shell stranice za offline rad. Toast „Dostupno azuriranje“ poziva korisnike da osveze stranicu posle svakog deploy-a.
Auth: prijavljivanje preko magic linka i OTP koda na /login (nove dve kartice pored postojece lozinke). Novi admin API /api/admin/invite-player i dugme "Pozovi mejlom" na listi igraca — player-only profili mogu da dobiju nalog bez gubitka istorije u roster/stats. Badge "Bez naloga / Pozvan / Aktivan" preko view-a profiles_account_status.
20. april 2026.
13On-page SEO: dodat screen-reader H1 na detaljnoj stranici utakmice, meta-opisi prosireni na 140-160 znakova radi boljeg CTR u SERP, ItemList JSON-LD na 7 list-stranica (games, roster, training, schedule, gallery, events) za sitelinks u Google, width/height na sve logoi-slike protivnika (CLS fix), robots.txt blokira /api/. TRIM naziva turnira u bazi
SEO: dodat JSON-LD na svim detail stranicama. Person na /roster/<slug>, SportsEvent na /tournaments/<slug> i /training/<slug>, Event na /events/<slug>. Svuda dodat BreadcrumbList za Google rich results; sitemap skriva persistent test-korisnika (is_match_only)
Major dependency bump-ovi: TypeScript 6, @types/node 25, @vercel/analytics 2, lucide-react 1.x, shadcn CLI 4. ESLint 10 odložen dok eslint-config-next ne objavi kompatibilnu verziju
Dodat kredit studija u footer sa stilizovanom indeksabilnom linkom na Render Room (pill sa narandžastim pulsnim indikatorom, vidljiv na svim stranicama)
Poboljšan kontrast na tamnoj temi: podignut --muted-foreground sa #9ca3af na #c3c9d3, 'Запланирована' badge promenjen sa text-blue-500 na text-blue-300 — WCAG AA kontrast 4.5:1 na stranici Raspored
Uklonjena legacy `opponents` tabela (10 redova, nigde se ne koristi u kodu) i `games.opponent_id` + `teams.opponent_id` kolone koje su samo duplikat `opponent_team_id` preko `teams` tabele
Očišćeni svi ESLint warning-i (24 -> 0): uklonjeni neiskorišćeni importi i lokalne varijable u admin stranicama, GameForm-u, PlayerStatsTable-u
Next.js nadograđen na 16.2.4 — zatvoreno 6 HIGH ranjivosti (CSRF bypass u Server Actions, HTTP request smuggling, DoS u Server Components, neograničeni image cache), plus transitivni ReDoS fix-evi u picomatch/minimatch/path-to-regexp
Dodat og:image na sve stranice — raniji deljeni linkovi su bili bez slike jer je Metadata API u Next-u potpuno zamenjivao parent openGraph
DB cleanup: indeksirani svi strani ključevi (20+ kolona), RLS policies na profiles/gallery_photos su obavijene `(select auth.uid())` da se ne preračunavaju za svaki red, seasons_write i tournaments_write razdvojene na INSERT/UPDATE/DELETE da ne dupliraju seasons_select i tournaments_select, uklonjeni neiskorišćeni indeksi
Uklonjene široke SELECT policies sa javnih storage bucket-ova (avatars, events, gallery) — listanje fajlova anonimnim korisnicima više nije dozvoljeno, pristup po URL-u kroz /storage/v1/object/public/… i dalje radi
Obrisani mrtvi fajlovi: GameStatsEditor (zamenjen UnifiedGameEditor-om), BracketView/PlacementView/SimpleTournamentMatch (stare verzije), image-loader.ts
Ispravljen prijavljivanje na iOS Safari i drugim striktnim browserima — prilagođeno ime auth-kolačića, tako da @supabase/ssr samo deli session na delove (.0, .1...) ispod limita kolačića; ranije je ceo token išao u jedan kolačić od ~4KB i sistem ga je tiho odbacivao, pa je admin panel video korisnika samo na serveru dok klijentski Supabase mislio da je anoniman
18. april 2026.
2Javne stranice prešle na statičko generisanje (SSG + ISR): svi matchevi, igrači, trening sesije, turniri, eventi unapred pre-render uju se u build-u; dodato on-demand revalidiranje tagova pri svakoj admin izmeni preko /api/revalidate
Novi public Supabase klijent bez cookies() i posvećena data-cache tags mapa (src/lib/cache/tags.ts); AuthProvider sada sam učitava session na klijentu, pa javni layout više nije dinamičan