Skip to content
HC Propeleri

Istorija izmena

Kompletna istorija razvoja sajta

12. maj 2026.

18
Novo

Marketplace Phase 5: admin moderacija (sakrivanje/vraćanje/istorija promena), filteri kataloga (samo sa slikama, otvoreno za ponude, dostava), draft oglasi sa preview-om za prodavca, životni ciklus dogovora (prihvaćena ponuda → rezervisano → prodato), trust signali na profilu prodavca, podešavanja obaveštenja po vrsti, health dashboard za admine, proširene help sekcije (bezbednost kupovine i prodaje, zabranjeni predmeti, privatnost kontakta, disclaimer).

Refaktorisanje

Marketplace: dugme „Zanima me“ spojeno sa „Sačuvaj“ u jedan signal. Detalj oglasa sada ima samo jedno dugme, prodavac vidi javni broj i listu kupaca koji su sačuvali oglas (sa datumom) na istoj kartici. Stranica /shop/my/interested uklonjena, brojač na /shop/my/listings sada vodi direktno na listu sačuvanih kupaca. Help sekcija ažurirana.

Ispravka

Bug: na izmeni oglasa fotografije nisu mogle da se dodaju. Razlog: PhotoUploader je slao sirov fajl iz telefona (3-5 MB) na presign, koji je odbijao sve preko 500 KB → generička greška „upload error“. Dodato klijent-side smanjenje + konverzija u WebP (max 1600 px, ≈400 KB) pre upload-a, /shop/sell/<id>/edit sada prikazuje sve postojeće fotografije sa „X“ za brisanje, nova DELETE ruta /api/listings/<id>/photos/<photoId> briše DB red i čisti R2. Limit na serveru podignut na 1.5 MB kao bezbedna granica.

Bezbednost

Zatvorena dyra u privatnosti: anon Supabase ključ je do sada dao bilo kome pristup contact_phone/contact_telegram/contact_whatsapp/contact_other svih odobrenih profila preko PostgREST direktnog upita (profiles_select USING true + table-level SELECT grant). Migracija revoke-uje table-level SELECT od anon-a i ponovo grant-uje samo bezbedne kolone — contact_* anon više ne vidi (vraća 42501). Adminski/marketplace tokovi prolaze kao authenticated i rade kao i pre. Bonus: usput sređena kupovina koja je padala kad se trogue filtersa kombinovala sa paginacijom.

Novo

Nova sekcija /shop/services — usluge (oštrenje, popravka, treninzi, iznajmljivanje leda) odvojene od kataloga oglasa. Provider podiže ponudu (naslov, opis, cena, jedinica, grad); kontakti se uzimaju iz profila. Veza u headeru shopa, sajt u sitemap-u sa Schema.org Service JSON-LD-om za rich rezultate. Anonimni vide opis i cenu, kontakti otkriveni samo prijavljenim korisnicima.

Ispravka

Marketplace, srpski jezik: zamenjeni ijekavski oblici na ekavske (sajt je na srpskom, ne hrvatskom/bosanskom). „Lijeva (LH)“ → „Leva (LH)“ (filter strane hvataljke kod štapova i vratarske opreme), „Krivulja“ → „Krivina“ (oznaka krivine štapa).

Performanse

Detaljne stranice (/roster/<slug>, /games/<slug>, /events/<slug>, /tournaments/<slug>) više se ne pretplaćuju na kolekcijske tagove (TAG.roster/games/events/tournaments/stats/teams) — samo na svoj per-ID tag. Pre toga jedan admin save na bilo kog igrača flush-ovao je svih 45 stranica igrača × 3 lokala = 135 ISR Writes po izmeni. Sad — 3. ~50× redukcija na detail-page izlivima. Slug→entity lookup uklonjen iz unstable_cache: čitamo jedan red iz baze na svaki render (jeftino), ali stranica više nije gerojzakažena za invalidaciju kolekcijskim tagom.

Performanse

Smanjeno potrošnje ISR Writes na Vercelu: tagsForEntity više ne flush-uje home tag iz profile/team/event/tournament/training/game_stats — daily revalidate je dovoljan za te widget-e. Lista pretplata home stranice istanjena (skinuti roster/teams/tournaments). Aggregate stranice (/stats, /gallery, /events) prebačene na 7-dnevni revalidate umesto dnevnog — on-demand flush preko revalidateTag i dalje radi. Očekivano: <1/3 dosadašnjih ISR Writes/dan.

Novo

Marketplace SEO pass: shop.propeleri.rs sada ima svoj sitemap.xml (kategorije + svi aktivni oglasi + javni prodavci, ~350 URL-ova) i robots.txt koji isključuje /shop/admin, /shop/my, /shop/login itd. JSON-LD na detalji oglasa: Product (cena, valuta, dostupnost, prodavac, stanje) + BreadcrumbList; LocalBusiness na /shop home. Sve javne stranice imaju canonical na shop.propeleri.rs, generateMetadata sa opisom i OG/Twitter card-ovima; sold oglasi → noindex; privatne stranice (admin/my/sell/settings/login/register/disabled/notifications) zatvorene metadata robots: noindex.

Novo

Marketplace: dodato sortiranje kataloga — Preporučeno (default), Prvo novi, Prvo stari, Prvo jeftiniji, Prvo skuplji. Sort radi i preko valuta: u bazi je generisana kolona `price_rsd` (RSD-ekvivalent koristeći 117 RSD/EUR), pa cene u evrima i dinarima sortiraju zajedno bez čudnih skokova. Promena sortiranja resetuje page=1.

Ispravka

Marketplace filter fix: hokejaške pantalone sada koriste prostu odeću S/M/L/XL/XXL skalu umesto strukova u inčima, a polje „Kroj“ (Regular/Tapered/Loose) je uklonjeno — kupci nisu filtrirali po njemu, a prodavci su pogađali. Postojeći oglasi se migriraju (28-30"→S, 32-34"→M, 36"→L, 38-40"→XL). Vratarska oprema: filter „Strana hvataljke“ (LH/RH) sada se vidi i pre nego što kupac odabere `kind` — ranije je bio sakriven sve dok se ne klikne pads/catcher/blocker.

Novo

Marketplace: toggle EUR/RSD u filtrima — svaki oglas se prikazuje u odabranoj valuti sa ≈ prevodom i originalnom cenom ispod. Tekst marketplace-a ažuriran: platforma je otvorena za hokejiste svih timova, ne samo HC Propeleri.

Performanse

Marketplace: katalog se sada otvara osetno brže — lista kategorija je u unstable_cache (1h, deljen između /shop i /shop/[slug]), generateMetadata i page handler dele isti React `cache()` poziv, a auth/blocked/listing upiti idu paralelno umesto sekvencijalno. Dodata paginacija (?page=N) sa numerisanim UI-em u dnu kataloga (30 oglasa po strani). Filteri i pretraga resetuju page=1 da bi izbegli praznu stranicu, dugme „← Nazad“ na oglasu sada poziva router.back() pa se vraćaš na tačno isti broj strane i filter kombinaciju (uz scroll restore iz browser history-ja).

Novo

Marketplace (faza 5): obaveštenja end-to-end — emitNotification helper piše u notifications iz interest / contact / offer / report flow-ova; nova zvona u ShopHeader sa brojem nepročitanih, lista na /shop/notifications sa „označi pročitano“. Blokiranje sada zaista isključuje korisnika — interest/contact/offer/report vraćaju 403 ako jedna strana je blokirala drugu, a stranica oglasa skriva kontrole. Banned-words matcher na POST /api/listings (hard hit odbija, soft šalje na pending_review) + admin tabovi /shop/admin/moderation-queue i /shop/admin/banned-words. PriceDropDialog na mojim oglasima sa 7-dnevnim debounce-om i fan-out obaveštenjima. /shop/admin/listings sa featured toggle-om. /shop/help dokumentacija. Bug fix: login se sada deli između propeleri.rs ↔ shop.propeleri.rs (cookie domain `.propeleri.rs`), button „Login“ više ne vodi na glavni sajt, /shop/login poštuje ?next=. 24 nova testa (chromium), email-gate ponovljen na sve nove endpoint-e.

Novo

Marketplace (faza 4 — buyer flow II): kupci sada mogu predložiti svoju cenu (offers) na oglase sa „pregovaračka“ oznakom — prodavac vidi dolazne ponude u /shop/my/offers i prihvata ili odbija; prihvatanje automatski otvara prodavčev kontakt kupcu. Dodate i sačuvane pretrage: dugme „Sačuvaj pretragu“ na katalogu hvata aktivne filtere, /shop/my/saved-searches lista snimke sa povratkom na jedan klik. 15 novih Playwright testova (chromium).

Novo

Marketplace (faza 3 — buyer interactions): kupci sada mogu otkriti prodavčev kontakt (telefon, Telegram, WhatsApp) — klikom se piše u contact_views; pritisnuti „Zanima me“ (javni signal prodavcu sa brojačem) i „Sačuvaj“ (privatno omiljeno, niko ne vidi). Dodate i odvojene liste /shop/my/interested i /shop/my/favorites. Korisnik može da blokira prodavca (/shop/my/blocks) i da prijavi oglas — administrator obrađuje prijave na /shop/admin/reports. 35 novih Playwright testova (chromium).

Ispravka

Trening / RSVP: igraci koje je trener rucno oznacio kao prisutne (training_stats) sada se broje u badz „yes“ i „goalkeepers“, i vise ne sede u koloni „cekaju odgovor“. Service worker za detail stranice (training/games/roster/...) prebacen na NetworkFirst — kada trener azurira prisustvo, promene se vide na prvom ucitavanju umesto pri sledecem osvezavanju.

Novo

Admin / trening: legionari (is_match_only) sada su prikazani u editoru prisustva kao posebna grupa „Legionari“ (i na desktopu i na mobilnom), sa malim narandzastim badzom „Лег“ na kartici. Autosave debounce smanjen sa 900ms na 300ms — unos prisustva sad reaguje brze.

11. maj 2026.

2
Novo

Marketplace (faza 2 — prodaja): prodavci mogu kreirati, uredivati i brisati oglase, ucitavati fotografije, postavljati kompleti opreme (bundle sa stavkama), editovati profil kontaktnih podataka (telefon, Telegram, WhatsApp). API blokira nepotvrdjene mejl adrese. 60+ novih Playwright testova (chromium/webkit/Mobile Chrome/Mobile Safari) zelena.

Novo

Marketplace (faza 1 — temelj): pokrenuli smo shop.propeleri.rs sa katalogom, filterima (sekcija/kategorija/brend/grad/komplet), stranama oglasa i profilima prodavaca. U bazi: 16 tabela sa RLS politikama, FTS pretraga, automatsko aggregiranje bundle stavki i okidači za R2 ciscenje. Glavni sajt i marketplace dele Supabase sesiju preko poddomena, a public_profiles view sakriva externalne/odbijene/match-only naloge od javnih lista. 33 testna oglasa pokrivaju sve hokej-kategorije (od stikova i klizaljki do golmanske opreme i kompleta). Cuvanje fotografija ide preko Cloudflare R2, sa direktnim URL-ovima za testne stock slike. Plejer/external/admin razgranicenje na nivou enuma i RLS-a. 33 Playwright testa (chromium) zelena.

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

4. mart 2026.

1
Bezbednost

Statistički SQL view-ovi prebačeni na SECURITY INVOKER da bi se RLS uvek primenjivao za API pozive i uklonili Security Advisor rizici

22. februar 2026.

7
Novo

Trening admin: nova kartica Timovi sa drag-and-drop raspodelom u 2 kolone, slotom golmana i slotovima po ulogama (napadač/odbrana/bez pozicije); ista grupacija prikazana i na javnoj stranici treninga

Ispravka

Ispravljeno poravnanje kartica igrača kada je prisutan bedž Gosta (ujednačena visina reda)

Novo

Opcija "Može u gol" za igrače koji igraju i u polju i u golu — pojavljuju se i u GK slotu i u linijama

Ispravka

Ispravljen bug sa NULL slug-om pri ažuriranju rezultata turnirskih mečeva (trigger u bazi podataka)

Refaktorisanje

Sortiranje igrača po imenu umesto broja dresa u svim listama (admin panel, roster, editor utakmica)

Stil

Veći modal za video golova na desktopu (min 1000px); uklonjene bedževi pozicija sa kartica igrača u grid prikazu

Ispravka

Gost igrači (is_guest) sada se pojavljuju u editoru utakmica za golove i asistencije

16. februar 2026.

1
Novo

URL-ovi bez prefiksa jezika: jezik se automatski određuje po podešavanjima pregledača (Accept-Language) i čuva u kolačiću. Stari linkovi sa /ru/ i /en/ prefiksima automatski preusmeravaju

15. februar 2026.

9
Novo

SEO-friendly URL-ovi: sve javne stranice koriste čitljive slug-ove umesto UUID-ova (npr. /games/2025-02-15-vs-zvezda-home, /roster/stefan-milosevic)

Novo

Slug polje u svim admin formama sa automatskom generacijom, ručnim uređivanjem i proverom jedinstvenosti

Novo

Editor treninga pretvoren u tabove (Info, Dolasci, Meč) sa split prikazom dolazaka na desktopu

Novo

Kartica Sastav u editoru utakmice: izabrani igrači prikazani u listi sa strane na desktopu

Ispravka

Statistika sada prikazuje sve igrače iz postava, ne samo one sa poenima (opšta i turnirska)

Novo

Unos kazni (PIM) u događaje utakmice, kraći naziv kartice

Novo

Podrska za penale (shootout) u turnirskim mečevima + SO oznaka na svim karticama rezultata

Refaktorisanje

Redizajn editora utakmice: spojeni tabovi, vizuelni skor, ogranicena sirina

Novo

Statistika igraca na stranici turnira + univerzalna tabela statistike sa avatarima

14. februar 2026.

3
Novo

Redizajn unosa golova: jednostavniji formular (strelac + opcioni asistenti), progresivni prikaz na mobilnom

Novo

Tab za golove u editoru utakmice + prikaz strelaca na posteru rezultata

Ispravka

Ispravljen prikaz logotipa protivnika za turnirske utakmice

13. februar 2026.

14
Refaktorisanje

Ujednačen popup za uređivanje igrača: isti dizajn na javnim stranicama i u admin panelu

Novo

Kompletna SEO optimizacija: metadata za sve stranice, Open Graph tagovi, robots.txt, sitemap.xml, manifest, JSON-LD strukturirani podaci, višejezični hreflang linkovi

Ispravka

Ispravljen atribut lang na HTML elementu — sada se menja prema izabranom jeziku

Novo

Lepljivi zaglavlja na svim admin stranicama, uklonjen nepotreban skrol

Novo

Stranica treninga: sledeći trening istaknut, ostali u sklopivim sekcijama

Novo

Brzo uređivanje utakmica, treninga i igrača direktno sa javnih stranica za admine

Novo

Dodata uloga trenera za članove tima

Novo

Poboljšan izbor zemlje sa automatskim dopunjavanjem i zastavicama

Novo

Redizajnirane kartice turnirskih mečeva, razdvojena lista mečeva

Novo

Turnirski mečevi preusmereni na jedinstveni editor igara

Novo

Spinneri zamenjeni skeleton komponentama za učitavanje

Performanse

Dinamički importi, Map lookups, error boundary za bolje performanse

Bezbednost

Poboljšana bezbednost baze podataka i RLS politike

Refaktorisanje

LoadingErrorEmpty primenjen na sve admin stranice, SelectWithNone za timove

12. februar 2026.

13
Novo

Vercel Web Analytics integrisan u aplikaciju

Novo

Testovi pristupačnosti, popravke mobilnog prikaza, WCAG poboljšanja

Novo

Brisanje timova i redizajn grid prikaza timova sa velikim avatarima

Novo

Admin link dodat u header sa uslovnom vidljivošću

Novo

Poboljšan lineup editor sa prikazom svih linija i mobilnim stilom

Novo

Dijalog za isecanje avatara sa zumiranjem i pomeranjem

Novo

Puna imena sa nadimcima u turnirskom rosteru

Novo

Standardizovani zaglavlja admin stranica sa AdminPageHeader

Ispravka

Zamenjeni hardkodirani stringovi i18n prevodima u admin panelu

Ispravka

Ispravljen bug beskonačnog učitavanja u lineup editoru

Refaktorisanje

HockeyRink spojen sa GameLineupEditor u readOnly režimu

Stil

Poliranje lineup komponente: veličine krugova, avatari, mobilni layout

Stil

Finalizacija dizajna meč kartica i redizajn editora mečeva

11. februar 2026.

17
Novo

Jedinstvena struktura stranica mečeva sa 5 tabova za sve tipove mečeva

Novo

Dodato uređivanje osnovnih polja za obične mečeve

Novo

Svi hardkodirani stringovi zamenjeni i18n prevodima

Novo

Admin edit link dodat na GameMatchCard sa poboljšanim responsive dizajnom

Novo

Mobilna horizontalna navigacija i Playwright e2e testovi

Novo

Poboljšano upravljanje igračima i vizuelni dizajn tima

Novo

Uprošćeno kreiranje naloga igrača i poboljšan tok treninga

Novo

Deklarisani roster za turnire sa izborom lineup-a

Novo

Prošireno upravljanje treninzima: zakazivanje, statusi i detalji meča

Novo

Redizajn hokejskog terena: vertikalno polupolje sa ledenom površinom

Novo

Poboljšana tabela igrača u admin panelu

Novo

Redizajn landing stranice sa novim vizualima i logotipom tima

Novo

Poboljšan prikaz rasporeda na terenu sa automatskim čuvanjem

Refaktorisanje

Zamena tabele Opponents sa Teams i migracija baze podataka

Ispravka

Kritične ispravke autorizacije i admin panela

Ispravka

Ispravke sesije, brisanja igrača, ESLint grešaka i DOM nesting errora

Ispravka

Ispravljen cookie maxAge umesto nevažećeg lifetime svojstva

10. februar 2026.

5
Novo

Redizajn lineup editora sa vizuelnim pozicijama i dodati turniri

Novo

Logotip tima dodat na sve brendirane elemente

Novo

Uređivanje igrača, trening timovi i vizualizacija hokejskog terena

Novo

Poboljšan UI svih stranica, priprema za Vercel deployment

Novo

Početno postavljanje projekta — sajt hokejskog tima HC Propeleri