Skip to content
HC PropeleriHC Propeleri
Poslednje izmene

Izmene: maj 2026.

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

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.