Skip to content
HC PropeleriHC Propeleri
Poslednje izmene

Izmene: april 2026.

Izmene, nove funkcije i ispravke na sajtu kluba, april 2026..

30. april 2026.

1
Novo

Sastav 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.

5
Novo

Admin/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.

Novo

/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.

Refaktorisanje

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.

Refaktorisanje

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.

Bezbednost

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.

5
Novo

Onboarding 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.

Novo

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.

Novo

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.

Novo

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.

Novo

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.

2
Novo

PWA: 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.

Novo

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.

13
Novo

On-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

Novo

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)

Tehnicko

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

Novo

Dodat kredit studija u footer sa stilizovanom indeksabilnom linkom na Render Room (pill sa narandžastim pulsnim indikatorom, vidljiv na svim stranicama)

Stil

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

Tehnicko

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

Refaktorisanje

Očišćeni svi ESLint warning-i (24 -> 0): uklonjeni neiskorišćeni importi i lokalne varijable u admin stranicama, GameForm-u, PlayerStatsTable-u

Bezbednost

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

Ispravka

Dodat og:image na sve stranice — raniji deljeni linkovi su bili bez slike jer je Metadata API u Next-u potpuno zamenjivao parent openGraph

Performanse

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

Bezbednost

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

Tehnicko

Obrisani mrtvi fajlovi: GameStatsEditor (zamenjen UnifiedGameEditor-om), BracketView/PlacementView/SimpleTournamentMatch (stare verzije), image-loader.ts

Ispravka

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.

2
Performanse

Javne 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

Refaktorisanje

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