// Studija slučaja

Halo City Leskovac — prodaja i servis telefona na sopstvenom sajtu

Radnja od tri čoveka u centru Leskovca koja već dvanaest godina prodaje i popravlja telefone, a u pretrazi je praktično nije bilo. Trebalo joj je pet strana koje pokrivaju ono što ljudi zaista kucaju, poziv na jedan dodir umesto kontakt-forme, i vizuelni nivo koji ne izgleda jeftinije od konkurencije sa pravim domenom.

Klijent
Halo City Leskovac
Delatnost
Prodaja i servis mobilnih telefona
Područje
Leskovac i Jablanički okrug
Tip
Višestrani sajt, pet javnih strana
Tehnologije
Next.js 16 · React 19 · Tailwind 4 · TypeScript
Status
Živ od maja 2026, na mom poddomenu
Naslovna strana sajta Halo City Leskovac
Naslovna — poziv i Viber odmah ispod naslova, pored prave fotografije telefona

Čime se Halo City bavi

Halo City Leskovac je prodavnica i servis mobilnih telefona na Bulevaru Oslobođenja 1, u samom centru Leskovca. Radnja posluje od avgusta 2014, ima tri zaposlena, a na Google Maps-u nosi ocenu 4,3 od 41 recenzije (stanje od 3. septembra 2026).

Posao stoji na dve noge. Prva je prodaja — novi telefoni popularnih marki (iPhone, Samsung, Xiaomi, Huawei, Honor, OPPO), provereni polovni uređaji i oprema: maske, zaštitna stakla, punjači, kablovi, slušalice, držači. Druga je servis — zamena ekrana i baterije, konektor za punjenje, tečnost i vlaga, softver i sistem, kamera i zvučnik, sve do mikrolemljenja na matičnoj ploči kada telefon više ne daje znake života.

Kupci ne dolaze samo iz Leskovca. U grad gravitiraju Vlasotince, Lebane, Vladičin Han, Bojnik i Medveđa — mesta iz kojih se sa pokvarenim telefonom putuje u najbliži veći centar. To je i razlog zašto sajt ovakvoj radnji uopšte znači: čovek kome je pukao ekran prvo pita pretragu, ne komšiju. Ako radnje nema u rezultatima, ne postoji ni za tog čoveka.

Sve što radnja nudi bilo je već tu — dvanaest godina rada, ocena, redovni kupci i adresa u centru. Nedostajala je jedino adresa na internetu.

Zašto sajt stoji na mom poddomenu

Ovde treba biti otvoren. halocity.svilenkovic.rs je moj poddomen, ne klijentov domen. Radnja je stvarna, sajt je živ od maja 2026, ali firma nema svoj domen — pa sajt stoji na mojoj infrastrukturi, na hostu koji nosi ime radnje.

To nije parkirana stranica koja čeka nešto. Sajt ima sopstveni HTTPS sertifikat koji se automatski obnavlja, sopstveni sitemap i robots.txt, sopstvenu analitiku sa pristankom na kolačiće, sopstveni zapis u Google Search Console-u i u Bing Webmaster alatima, i sopstveni IndexNow ključ kojim se izmene prijavljuju pretraživačima. Radi kao svaki drugi sajt, samo mu je adresa poddomen.

Razlika koja se plaća jeste u lokalnom SEO-u. Sopstveni domen sa imenom firme u adresi ima bolju polaznu poziciju za upite tipa „servis telefona Leskovac" nego poddomen, i to je pošteno reći umesto praviti se da razlike nema.

Selidba je pripremljena i već jednom uvežbana. Sajt je u julu 2026. prebačen sa starog radnog hosta na današnji, i tada je stara adresa dobila trajno preusmerenje u jednom skoku, sa očuvanom putanjom — /servis je otišao na /servis, ne na naslovnu. Ista procedura čeka i pravi domen kada ga bude: DNS zapis, sertifikat, izmena kanonskih adresa, 301 sa poddomena. To je pola dana posla, a ne novi sajt.

Šta je trebalo rešiti

Zadatak nije bio „napravi sajt radnji" nego četiri konkretne stvari:

  • Naći se u pretrazi za dva različita posla. Čovek koji kupuje telefon i čovek kome je pukao ekran nisu isti posetilac i ne kucaju istu stvar. Jedna strana ne može da bude prva za oba upita.
  • Poziv na jedan dodir. Vlasnik i dva zaposlena stoje za pultom ceo dan. Kontakt-forma koju niko ne otvara je gore nego da je nema.
  • Izgledati ozbiljno. U gradu već postoji konkurent sa pravim domenom i dužim stažom na internetu. Radnja od tri čoveka ne može da ga pobedi obimom, pa mora izgledom i jasnoćom.
  • Ne obećati cenu koja se menja. Cena ekrana zavisi od modela i od kursa. Broj na sajtu koji ne stoji je gori od nikakvog broja.

Uz to je išao uslov koji se lako previdi: sajt mora da radi na telefonu sa slabom vezom, jer ga najčešće otvara neko kome je uređaj u kvaru i ko sedi u autobusu. Sve odluke o brzini, pa na kraju i ona da 3D ode sa sajta, izvedene su iz te jedne rečenice.

Pet strana umesto jedne duge

Prva verzija je bila jedna duga strana sa svim sekcijama, kako se to obično radi za male firme. Ubrzo je postalo jasno da to ne rešava prvu tačku zadatka. Jedna strana ima jedan naslov, jedan opis i jedan glavni pojam — i tim pojmom se takmiči ili za prodaju ili za servis, nikako za oba.

Sajt je zato razbijen na pet strana, svaka sa sopstvenim naslovom, opisom i kanonskom adresom:

  • Naslovna — tri najkraća puta do informacije (ponuda, servis i adresa), zašto se radnji veruje, utisci kupaca i lokacija.
  • Proizvodi — aktuelna ponuda bez kataloga i bez cena: koja tri podatka poslati da bi odgovor stigao iz prve i pitanja koja kupci postavljaju o ponudi.
  • Servis — šta poslati pre dolaska, šta uraditi pre predaje telefona i najčešća pitanja o servisu.
  • O nama — samo podaci koji mogu da se provere: datum osnivanja, adresa, matični broj, PIB i registrovana delatnost, uz link na javni poslovni profil.
  • Kontakt — adresa, mobilni i Viber, fiksni broj, e-pošta, radno vreme i link za navigaciju.

Naslovi nose grad tamo gde ljudi traže pojam sa gradom: naslovna je „Prodaja i servis mobilnih telefona Leskovac", a servis „Servis mobilnih telefona u Leskovcu". To zvuči kao sitnica, ali je razlika između strane koja se takmiči za pojam sa gradom i strane koja se takmiči sa celom Srbijom.

Strane se ne završavaju slepo. Ponuda i servis se završavaju pozivom, Viberom i putem do adrese, a strana o radnji vodi dalje ka ponudi, servisu i kontaktu.

Poziv i Viber umesto kontakt-forme

Na celom sajtu nema nijedne kontakt-forme. To je bila odluka, ne propust.

Forma na sajtu male radnje radi ovako: posetilac napiše poruku, poruka padne u sanduče koje se otvara uveče ili nikad, a čovek u međuvremenu pozove nekog drugog. Telefon zvoni odmah. Viber poruka stigne odmah. Zato su na sajtu samo ta dva puta, i to na svakom ekranu.

Broj u zaglavlju je aktivan link koji na telefonu otvara pozivnik. Dugme za Viber otvara razgovor sa unapred napisanom porukom: na strani sa ponudom poruka već traži model, memoriju i boju, a na servisu model uređaja i opis problema. Vlasnik dobija poruku koja već kaže o čemu se radi, umesto praznog „zdravo".

Kontakt strana je ostatak: adresa, mobilni i fiksni broj, e-pošta, radno vreme po danima sa jasno napisanim „nedeljom zatvoreno" i link koji otvara navigaciju. Mapa je posebna priča. U prvoj verziji stajala je sa filterom preko sebe pa je izgledala kao pokvarena slika, zatim je zamenjena običnim ugrađenim prikazom, a u drugoj verziji sajta umesto ugrađene mape stoje link za navigaciju i link na Google profil radnje.

Sporedna korist od odluke bez forme je pravna. Sajt ne prikuplja lične podatke kroz veb, pa politika privatnosti može da bude kratka i istinita umesto duga i prepisana.

Cenovnik koji je namerno izbačen

Sajt je jedno vreme imao ceo cenovnik servisa sa iznosima u dinarima. Izbačen je u celosti i to je bila dobra odluka.

Cena zamene ekrana zavisi od modela, od toga da li ide originalni ili proveren deo, i od nabavne cene koja se menja. Cenovnik na sajtu koji ne prati radnju stvara dva problema: kupca koji dođe sa štampanim brojem u glavi, i radnju koja mora da objašnjava zašto broj više ne važi.

Prva zamena za iznose bio je opis postupka: besplatna dijagnostika, cena pre popravke, popravka tek po odobrenju. U septembru 2026. sajt je dobio drugu verziju, pisanu tako da na strani ostane samo ono što može da se proveri, i tada je izbačen i taj opis. Danas sajt ne obećava ništa o ceni. Kaže koje podatke treba poslati, a cenu, dostupnost i prijem uređaja potvrđuje radnja, telefonom ili preko Vibera.

Isti princip je primenjen i kada se posao promenio. Sajt je imao celu stranu o otkupu polovnih telefona; kada je fokus prešao na prodaju i servis, strana je uklonjena zajedno sa svakim pominjanjem otkupa u meniju, opisima, strukturisanim podacima i sitemapu — a stara adresa je dobila preusmerenje na prodaju, da nijedan zapamćen ili indeksiran link ne završi u praznom. Sajt prati radnju, ne obrnuto.

3D koji nije preživeo drugu verziju

Ovo je deo gde je bilo najviše lutanja i gde je najviše rada završilo u kanti.

Ideja je od početka bila da sajt ima živu, trodimenzionalnu pozadinu — nešto što odmah kaže da ovo nije šablon kupljen za dvadeset evra. Prva ozbiljna verzija je otišla korak dalje: telefon je modelovan u Blenderu iz skripte, izvezen kao .glb model od stotinak kilobajta bez ikakvog spoljnog dekodera, pa umnožen u lepezu od pet uređaja u različitim bojama koji stoje u heroju. Iz istog modela je izrenderovana i fotorealistična pozadina sa tri telefona.

Na ekranu je izgledalo lažno. Ne loše — lažno. Telefon u igrici i telefon na sajtu prodavnice nisu ista stvar: kupac zna kako izgleda pravi iPhone i odmah vidi da gleda model. Ceo taj sloj je obrisan istog dana, zajedno sa modelom, renderom i skriptom koja ih pravi.

Zamena je jedna prava fotografija lineup-a telefona bez pozadine, izrezana alatom za uklanjanje pozadine i sabijena u WebP od 46 kilobajta. Rezultat je bolji od svega što je pre toga modelovano, a težak je koliko i jedna ikonica.

Trodimenzionalni sloj je posle toga još neko vreme živeo kao pozadina: WebGL scena sa šesnaest bledih, fasetiranih kristala koji su lebdeli u dubini, uz prašinu, maglu i kameru koja je blago pratila miša i skrol. U drugoj verziji sajta, početkom septembra 2026, ta scena je uklonjena u celosti, zajedno sa three.js-om i ostalim 3D bibliotekama, bibliotekom za animacije, glatkim skrolom, uvodnim ekranom i trakom sa logotipima marki. U kodu sajta danas nema nijedne 3D zavisnosti.

Pozadinu sada crta sam brauzer iz nekoliko CSS pravila: dve meke mrlje boje, plava gore desno i topla žuta dole levo, fina mreža koja bledi naniže i veliki nepravilan prsten koji napravi krug za trideset osam sekundi. Nema skripta koji treba sačekati ni scene koju treba pauzirati i počistiti, a sloj je tu od prvog iscrtavanja strane. Kada je u sistemu uključeno smanjenje animacija, prsten stoji.

Ostatak pokreta je jednako skroman. Sekcije se blago podignu kada uđu u ekran, a na naslovnoj tanka traka pri vrhu pokazuje koliko je strane pročitano i, na širokim ekranima, linija signala sa leve strane se puni dok se skroluje. To su CSS prelazi i dve male komponente, bez ijedne biblioteke za animacije.

Brzina — prvi ekran bez čekanja

Dok je 3D scena postojala, cela izvedba je bila podređena jednom pravilu: ništa od 3D-a ne sme da se dogodi pre nego što posetilac vidi sadržaj. Biblioteka se nije uvozila u glavni paket nego se učitavala naknadno, tek kada se strana potpuno učita i brauzer ostane bez posla. Merenje pre i posle te izmene: rezultat za mobilne uređaje porastao je sa 88 na 92, a vreme u kojem je glavna nit blokirana palo je sa 380 na 250 milisekundi.

Scena se uz to pauzirala kada kartica nije u prvom planu, gustina piksela bila je ograničena odozgo, a pri uklanjanju komponente sve geometrije i materijali su se uredno oslobađali. Uz uključeno smanjenje animacija ili bez podrške za WebGL scena se nije ni pokretala.

Druga verzija je ceo taj posao rešila tako što ga je uklonila. Bez 3D biblioteke nema šta da se odlaže, pauzira ili oslobađa pri prelasku između strana, a pozadina košta koliko i nekoliko pravila u stilu.

Isti oprez važi i za ostatak. Slika u heroju se učitava odmah i sa visokim prioritetom, jer je ona ono što posetilac prvo vidi. Sekcije se pojavljuju pri skrolu, ali ih sakriva tek skript koji ih i otkriva: bez JavaScript-a ništa nije sakriveno, uz smanjenje animacija sve se prikaže odmah, a ako nešto zapne, posle pet sekundi se prikaže i ono što je ostalo.

Iz prve verzije vredi zapamtiti jednu mernu zamku, jer se ponavlja na svakom sajtu sa gradijentnim naslovom. Glavni naslov je tada bio obojen gradijentom kroz tekst, što ga tehnički čini providnim, pa ga automatski test nije računao kao najveći element na ekranu. Na tekstualnim stranama kandidat je umesto njega postajala traka za kolačiće, koja se pojavljuje posle učitavanja, pa je laboratorijski rezultat prikazivao pet sekundi, a nezavisno merenje u pravom brauzeru nešto preko jedne sekunde. Broj iz laboratorije je bio artefakt, ne kvar, i tako je i tretiran.

SEO i lokalna vidljivost

Sve strane su prošle prolaz u kojem su naslovi skraćeni na dužinu koju pretraživač zaista prikazuje, a opisi svedeni ispod sto šezdeset znakova. Naslov naslovne je sa devedeset dva znaka skraćen na pedeset pet i počinje pojmom, ne imenom firme.

Strukturisani podaci su najveći deo lokalnog posla. Sajt nosi povezani graf u kojem su prodavnica mobilnih telefona, registrovana radnja sa punim poslovnim imenom, matičnim brojem i PIB-om, sam sajt i, na podstranama, putanja kretanja. Uz njih idu adresa sa poštanskim brojem, geografske koordinate, radno vreme po danima i datum osnivanja. Ocena, broj zaposlenih i spisak mesta iz okoline bili su deo grafa u prvoj verziji, a u drugoj su izostavljeni.

Jedna stvar je pritom morala da se ispravi. Blok sa čestim pitanjima bio je postavljen na nivou celog sajta, pa je pretraživaču javljan i na stranama na kojima pitanja uopšte nema. Prebačen je da se emituje samo na prodaji i servisu, tamo gde ta pitanja stvarno stoje na ekranu. Podatak koji obećava ono što posetilac ne vidi je greška koja se pre ili kasnije naplati.

Uz to idu hiper-lokalna zaglavlja koja se retko postavljaju: oznaka regiona, koordinate, ime mesta i kontakt podaci u obliku koji čitaju društvene mreže. Datoteka robots.txt izričito pušta i botove veštačke inteligencije, jer se sve više odgovora danas daje u razgovoru sa asistentom umesto u listi rezultata. Sitemap ima šest adresa i prijavljen je u oba pretraživača, a izmene se dodatno guraju kroz IndexNow.

Selidba na današnji host donela je i jedan poučan problem. Pretraživač je novi host obišao istog dana kada je pušten, dok je sadržaj bio identičan starom — i proglasio staru adresu kanonskom. Novi sajt je tako neko vreme bio uredan, indeksiran i nevidljiv u isto vreme. Rešenje je bilo trajno preusmerenje starih adresa, ručni zahtev za ponovni obilazak i strpljenje; tehnika je sve vreme bila ispravna, samo je pretraživaču trebalo reći koja je adresa prava. Posle tog prolaza sve strane su nosile stotinu poena na tehničkom delu revizije i prolazile proveru ispravnosti koda bez ijedne greške.

Analitika koja poštuje odgovor

Sajt meri posetu, ali tek kada posetilac to dozvoli. Traka za kolačiće nudi tri odgovora — prihvatanje, samo neophodno i podešavanja — a analitika je unapred postavljena na zabranjeno i čeka odluku. Funkcionalni kolačići rade uvek, jer bez njih sajt ne bi mogao da se prikaže ispravno.

Ta postavka je jedno vreme imala tihu grešku koju vredi ispričati, jer se ne vidi ni na jednom testu. Traka je pristanak upisivala pod jednim imenom, a deo koji pali analitiku čitao je pod drugim. Prvi put je sve radilo — posetilac klikne, merenje krene. Ali povratnik koji je već ranije pristao ne dobija traku, pa merenje za njega nikad nije ni startovalo. Rezultat je bila statistika koja sistematski gubi upravo one koji se vraćaju, dakle najvredniji deo posete. Ispravka je bila jedna reč u kodu; nalaženje je bilo ceo posao.

Politika privatnosti je napisana za ovaj sajt, ne prepisana: piše šta se prikuplja (anonimna statistika posete i to tek po pristanku), šta se ne prikuplja (nijedan podatak kroz formu, jer forme nema), i šta posetilac može da traži.

Šta radnja na kraju ima

Adresu na internetu koja radi bez staranja. Sajt stoji na serveru kao samostalna aplikacija iza servera koji je objavljuje, sa sertifikatom koji se sam obnavlja i punim skupom bezbednosnih zaglavlja. Nema dodataka koji se raspadnu pri sledećem ažuriranju, nema mesečne pretplate platformi, nema panela u koji neko mora da ulazi da bi sajt nastavio da radi.

Praktično, dan izgleda ovako: neko iz Vlasotinca traži gde se menja ekran, nađe stranu o servisu, vidi šta treba da kaže o telefonu, pritisne broj ili Viber i pre puta zna da li radnja prima taj uređaj. Nema forme, nema čekanja odgovora, nema koraka između.

Ostaje jedna stvar koja ne zavisi od koda: prava adresa. Radnja ima profil na Google Maps-u sa ocenom i recenzijama, i taj profil je najjača poluga koju lokalni posao ima — kada mu se u polje sa sajtom upiše ova adresa, obe strane počinju da rade jedna za drugu. Kada radnja bude uzela i sopstveni domen, prelazak je pripremljen unapred.

Do tada sajt radi ono zbog čega je i pravljen: dvanaest godina rada iza pulta konačno ima gde da se vidi, i to na strani koja se otvara odmah i na najslabijoj vezi.

// Tehnički rezultati

Kako živi sajt stoji na merenjima

Izmereno
Performanse na mobilnom
98 od 100
Performanse na računaru
100 od 100
98 od 100 Performanse
100 od 100 Pristupačnost
100 od 100 Dobre prakse
100 od 100 SEO
  • Najveći sadržaj (LCP) 2,4 s
  • Blokiranje glavne niti (TBT) 36 ms
  • Pomeranje rasporeda (CLS) 0,000
  • Prvi sadržaj (FCP) 902 ms
  • Indeks brzine 1,2 s
100 od 100 Performanse
100 od 100 Pristupačnost
100 od 100 Dobre prakse
100 od 100 SEO
  • Najveći sadržaj (LCP) 638 ms
  • Blokiranje glavne niti (TBT) 58 ms
  • Pomeranje rasporeda (CLS) 0,000
  • Prvi sadržaj (FCP) 245 ms
  • Indeks brzine 677 ms

Stvarni posetioci (Chrome UX Report)

Sajt još nema dovoljno poseta za Google-ov javni uzorak sa terena, pa su prikazana samo laboratorijska merenja.

Bezbednosna zaglavlja

  • HSTS
  • Politika sadržaja (CSP)
  • X-Content-Type-Options
  • Referrer-Policy
  • Permissions-Policy
  • Zaštita od uokviravanja

SSL ocena

A+

testssl.sh

Validan HTML

0

grešaka, W3C Nu HTML Checker

Pristupačnost

0

kršenja WCAG 2.2 AA, axe-core

Strukturirani podaci

MobilePhoneStore · Organization · WebSite

0 grešaka u obaveznim poljima

PageSpeed izveštaj, mobilni uređaj za halocity.svilenkovic.rs, 24.09.2026.
PageSpeed izveštaj, mobilni uređaj
PageSpeed izveštaj, računar za halocity.svilenkovic.rs, 24.09.2026.
PageSpeed izveštaj, računar

Google PageSpeed Insights (Lighthouse), medijana tri uzastopna merenja po uređaju. Ocene se razlikuju od merenja do merenja. Izmeri ponovo

// Sajt uživo

Halo City Leskovac

Prodaja i servis mobilnih telefona u centru Leskovca — Bulevar Oslobođenja 1.

halocity.svilenkovic.rs

Često postavljana pitanja

Zašto sajt stoji na poddomenu, a ne na sopstvenom domenu?
Zato što radnja još nema svoj domen, a sajt je trebalo pustiti u rad. Poddomen ima sve što ima i pravi domen — sertifikat, sitemap, analitiku, zapis u alatima pretraživača. Jedina razlika je slabija polazna pozicija za lokalne upite. Prelazak na pravi domen je izmena DNS zapisa, sertifikata i kanonskih adresa uz trajno preusmerenje, ne izrada novog sajta.
Zašto na sajtu nema kontakt-forme?
Zato što u radnji sa tri čoveka za pultom niko ne prati sanduče tokom dana. Poruka iz forme čeka, telefon zvoni odmah. Umesto forme, na svakom ekranu stoje broj koji se pritiskom otvara u pozivniku i Viber sa unapred napisanom porukom, drugačijom za kupovinu i za servis.
Zašto na sajtu nema cena servisa?
Zato što cena zavisi od modela i od nabavne cene delova, pa cenovnik na sajtu zastari brže nego što se ažurira. Umesto iznosa, sajt kaže koje podatke treba poslati: proizvođača, tačan model i kratak opis problema. Cenu i prijem uređaja potvrđuje radnja, telefonom ili preko Vibera.
Da li animirana pozadina usporava sajt na starijem telefonu?
Ne. Pozadinu crta sam brauzer iz nekoliko CSS pravila: dve meke mrlje boje, fina mreža i prsten koji se polako okreće. Za to nije potreban nijedan red JavaScript-a ni 3D biblioteka, a ako je u sistemu uključeno smanjenje animacija, prsten stoji. Ranija WebGL scena uklonjena je u septembru 2026.
Zašto Next.js, a ne WordPress?
Zbog brzine i zbog toga što nema šta da se održava. Strane se serviraju kao unapred pripremljene, bez baze i bez dodataka koji traže ažuriranje svake nedelje. Sajt ove veličine na WordPress-u bi značio nekoliko dodataka za ono što ovde radi sam okvir, plus stalnu brigu o bezbednosti.
Koliko strana ima sajt i može li da se proširi?
Pet javnih strana plus politika privatnosti. Nova strana je nova ruta u kodu i jedan red u sitemapu — sajt je već jednom rastao iz jedne duge strane u pet, i već jednom smanjen kada je jedna usluga izbačena iz ponude.

Treba vam ovakav sajt?

Recite mi čime se bavite i šta sajt treba da uradi za vas — dobijate fiksnu ponudu i rok, u pisanoj formi.

Pozovi