Auto Delovi RM — web prodavnica karoserijskih delova za sve marke
Prodavnica novih karoserijskih delova kojoj je trebalo da prestane da zavisi od tuđe oglasne platforme. Kupac mora da nađe deo po marki, modelu i godištu svog auta, da ga poruči za dva klika i da plati kuriru kad mu stigne. Sve to na sopstvenom domenu, sa panelom iz kog se ceo katalog vodi bez nas.
- Klijent
- Auto Delovi RM
- Delatnost
- Novi karoserijski delovi za putnička i laka komercijalna vozila
- Područje
- Zaječar — slanje širom Srbije
- Tip
- Web prodavnica sa izborom po vozilu i admin panelom
- Obim
- 1.081 deo · 29 kategorija · 69 marki · oko 1.794 modela
- Tehnologije
- Next.js 15 · Node.js · SQLite · nginx
- Sajt
- autodelovirm.com
- Status
- Živ sajt, u aktivnom održavanju
U ovom tekstu
- Čime se Auto Delovi RM bavi
- Šta je trebalo rešiti
- Katalog, kategorije i strane po vozilu
- Pretraga koja razume kako ljudi pišu
- Izbor vozila koji se ne gubi
- Korpa, pouzeće i porudžbina
- Tehnička izvedba
- Fotografije delova — najprljaviji deo posla
- SEO i vidljivost
- Panel — sve na jednom mestu
- Šta klijent na kraju ima
Čime se Auto Delovi RM bavi
Auto Delovi RM iz Zaječara prodaje nove karoserijske delove za putnička i laka komercijalna vozila. Branici, krila, haube, farovi, štop svetla, maglenke, maske, retrovizori, potkrila, klizači za klizna vrata — sve što se na autu vidi spolja i što se posle sudara najčešće menja. Radnje sa izlogom nema: poručuje se preko sajta, plaća pouzećem, šalje kurirskom službom širom Srbije.
U katalogu je 1.081 deo raspoređen u 29 kategorija, a stablo vozila pokriva 69 marki i oko 1.794 modela. Najveća grupa su štop svetla sa oko 350 artikala, pa farovi, maglenke, zaštite motora, branici i klizači. Ponuda nije zamrznuta — vlasnik je dopunjava sam, iz panela, i to se na sajtu vidi istog trenutka.
Po sopstvenom opisu, iza radnje stoje tri decenije rada sa vozačima i majstorima. Ono što je nedostajalo bila je adresa koja je njihova. Do tada je sve išlo preko oglasne platforme, gde je konkurencija na istoj strani, redosled tuđa odluka, a oglas nevidljiv onog trenutka kad se tuđi algoritam predomisli.
Šta je trebalo rešiti
Zahtev je bio jednostavan da se izgovori i nimalo jednostavan da se izvede: kupac mora da nađe deo baš za svoj auto, i to za dva klika.
- Izbor po vozilu, ne po nazivu. Čovek ne zna kataloški broj. Zna marku, model i godište, a ponekad ni to — zna samo broj šasije sa saobraćajne.
- Svaki deo mora imati svoju stranu. Zato što se ona može podeliti, zapamtiti i indeksirati. Na tuđoj platformi deo je jedan red u tuđem spisku.
- Bez kartica i bez plaćanja unapred. Kupac plaća kuriru; sajt ne sme da traži broj kartice ni registraciju naloga.
- Vlasnik sam vodi ponudu. Nov deo, nova cena, nova slika, akcija — sve iz panela, sa telefona, bez nas.
- Isti deo za više vozila. Ducato, Boxer i Jumper su isti kombi. Klizač koji staje na jedan staje i na druga dva, a kupac ga traži po svojoj marki.
Uz to je išao uslov koji se lako previdi: sve mora da radi na telefonu, jer najveći deo saobraćaja stiže sa Facebooka i Vibera — mali ekran, slaba veza, čovek koji je upravo slikao slupan branik i hoće da vidi cenu.
Katalog, kategorije i strane po vozilu
Ponuda na stranici svih delova ima filtere po tipu dela, marki i modelu, godištu, strani i poziciji, uz pretragu i sortiranje po nazivu i ceni. To je radna strana za nekoga ko pretražuje.
Ali filtriran katalog je za pretraživače bezvredan — to je jedna adresa sa hiljadu lica. Zato pored njega postoje prave adrese: strana kategorije, strana marke, strana marke i modela, i ukrštanja kategorije sa markom i sa modelom. Upit „stop svetla za Golf 5" tako ima gde da sleti, na stranu sa svojim naslovom, svojim opisom i svojim spiskom.
Strana pojedinačnog dela nosi ono što majstor traži: vozilo i generaciju, raspon godišta, stranu i poziciju, kataloški broj kad postoji, cenu i opis pisan ljudski. Ispod stoje delovi za isto vozilo iz iste grupe i dugme koje vraća na sve delove za taj auto — jer čovek koji je kupio far obično kupuje i migavac.
Delovi koje vlasnik želi da istakne skupljaju se na stranici izdvojenih delova, a akcijski artikli nose staru i novu cenu jedno pored drugog. Kategorije, spiskovi po vozilu i pojedinačni delovi imaju dugmad za deljenje sa gotovom adresom u serverskom kodu strane — ne popunjenom naknadno, jer se tako gubila tačno onda kada je najpotrebnija.
Pretraga koja razume kako ljudi pišu
Prva verzija pretrage tražila je da se svaka otkucana reč poklopi. To zvuči ispravno dok neko ne otkuca „stop svetlo za audi a4 04-07" i dobije nulu, ili „браник" pa dobije ceo katalog. Pretraga je zato prepisana od nule i testirana nad celim katalogom.
- Prazne reči se ignorišu — za, od, do, treba, hitno, molim. Cela rečenica više ne obara rezultat.
- Godine iz upita postaju filter, ne tekst. „04-07" i „2006" sužavaju godište umesto da se traže kao niska znakova.
- Kataloški broj se čita zbijeno — „1K0 853 677", „1K0-853-677" i „1K0853677" daju isti rezultat.
- Sinonimi u uskim grupama: blatobran i krilo, retrovizor i ogledalo, migavac i žmigavac, maska i rešetka. Namerno uskim — široka grupa far, svetlo, lampa vraćala je pola kataloga.
- Ćirilica i strana slova. Zbog jednog propuštenog slova upit „citroen" je davao nulu, a Citroën ima preko osamdeset delova u ponudi.
- Rangiranje po mestu reči u nazivu. „Prednji branik" ide ispred „Katadiopter u zadnjem braniku". Bez toga je „branik" davao punu prvu stranu katadioptera.
Kada upit stvarno nema smisla, sajt kaže da nema rezultata. Ne izbacuje ceo katalog — to je najbrži način da kupac pomisli da ga sajt ne razume, pa ode negde drugde.
Izbor vozila koji se ne gubi
Najčešća pritužba nije bila greška u prikazu nego gubitak konteksta. Kupac otvori deo, podeli ga na Facebook, vrati se na sajt — i zatekne prazan katalog. Za svaki sledeći deo mora ponovo da kuca marku i model.
Uzrok je bio to što je ceo izbor živeo samo u memoriji stranice i nikada nije stizao u adresu. Rešenje je bilo da adresa postane jedini izvor istine: svaka promena filtera upisuje se u adresu, ali kroz istoriju pregledača, bez novog zahteva ka serveru. To je bitno jer strana nosi preko hiljadu delova, pa bi puno osvežavanje na svako otkucano slovo bilo neupotrebljivo sporo.
Uz to sajt pamti izabrano vozilo. Lupa u zaglavlju, stavka „Delovi" u meniju i povratak sa strane dela vode nazad u ponudu za taj auto, a ne u prazno. Na strani svakog dela stoji prečica „Svi delovi za" sa imenom vozila, tačno ispod dugmadi za deljenje — na mestu na kom čovek stane kad se vrati sa mreže.
Vredi reći i da je ovo bio niz sitnih curenja, ne jedan bug: pretraga u zaglavlju je slala samo upit i gutala vozilo, logo je resetovao izbor, dugme za nazad je umelo da vrati na Facebook, a putanja kategorije je bacala model. Svako od njih je zasebno delovalo bezazleno, a zajedno su značili da kupac počinje ispočetka pri svakoj poseti.
Korpa, pouzeće i porudžbina
Korpa je namerno kratka. Deo se dodaje sa kartice ili sa strane dela, u korpi se vidi zbir, a porudžbina traži ime, telefon i adresu. Nema registracije, nema naloga, nema lozinke koju treba pamtiti.
Plaćanje ide pouzećem. Za ovakvu prodavnicu to nije nedostatak nego prednost: manje troška, nijedna tuđa kartica na serveru i nijedna obaveza koja uz nju ide. U polje za napomenu kupac može da upiše broj šasije, pa se kompatibilnost potvrđuje pre nego što paket krene.
Ono što se ne vidi: cenu porudžbine računa server iz svoje baze, a ne pregledač. Korpa koja veruje ceni iz brauzera je prodavnica u kojoj se cena menja iz konzole. Porudžbina dobija svoj kod, upisuje se u bazu sa svim stavkama i istog trenutka odlazi na mejl sa domena prodavnice. Kupac dobija potvrdu, vlasnik dobija porudžbinu — bez čekanja da neko otvori panel.
Forme koje primaju porudžbine i upite imaju kočnicu po broju pokušaja sa iste adrese. Prva verzija te kočnice brojala je promašaje po zaglavlju koje sam posetilac upisuje, pa se zaobilazila prostim menjanjem te vrednosti; sada se broji po adresi koju postavlja naš server. To je greška koju je lako napraviti i teško primetiti, jer se ograničenje spolja i dalje ponaša kao da radi.
Tehnička izvedba
Sajt je Next.js aplikacija koja se izvršava na serveru, a podaci stoje u SQLite bazi: delovi, marke, modeli, kategorije, porudžbine, upiti, sav tekst sajta i reklame. Baza se čita ugrađenim modulom, bez nativnih dodataka koji se lome pri svakoj nadogradnji.
Zašto SQLite, a ne MySQL: prodavnica ovog obima ima jednog pisca i mnogo čitalaca. Ceo sadržaj sajta staje u jedan fajl koji se prekopira u sekundi, a jedan sistem manje znači jedan sistem manje koji može da padne. Ako obim jednog dana naraste, prelazak je izmena sloja za pristup podacima, ne izrada novog sajta.
Aplikacija radi kao servis pod svojim korisnikom, iza nginx-a, sa sopstvenim domenom i sertifikatom, i sa punom poštom za taj domen — potpisane poruke, SPF i DMARC, da porudžbine ne završavaju u nepoželjnoj pošti.
Sve strane se crtaju na svaki zahtev. To je odluka koja je jednom bila problem, i to poučan: dok deo strana nije bio dinamičan, izmene iz panela videle su se na naslovnoj a nisu na strani O nama — tekst je bio zamrznut u trenutku pravljenja sajta, pa je vlasnik s pravom prijavio da panel ne radi, iako je sve uredno pisalo u bazu. Otkad ceo sajt čita bazu na svaki zahtev, izmena iz panela vidi se odmah, bez ijednog ponovnog pravljenja.
Fotografije delova — najprljaviji deo posla
Ponuda je prvo prebačena sa oglasne platforme, i 957 fotografija nosilo je tuđi vodeni žig preko sredine. Nova prodavnica ne može da otvori vrata sa tuđim imenom na svakoj slici, a ponovno slikanje hiljadu delova nije bila opcija.
Žig nije bio jedna boja preko slike nego providni sloj sa belom ispunom slova i tamnom konturom, u različitoj razmeri po slici — zato se na beloj podlozi video samo obris, a na tamnoj puna bela slova. Rešeno je računski: prvo je izmerena providnost i boja žiga iz slika koje pod njim imaju i čisto belu i čisto tamnu podlogu, pa je za svaku sliku pogođena amplituda, pomeraj i razmera i preklop poništen. Ispravljena je 951 slika; na 23 je ostao vidljiv trag i one su popisane da se zamene pravim fotografijama. Sve je rađeno nad kopijom, sa punom rezervnom kopijom originala.
Druga polovina problema bila je što slike nisu imale zajednički okvir — od dvestotinak do hiljadu piksela širine, pa je u istom redu jedna kartica bila puna a druga skoro prazna. Sada svaka fotografija ulazi u isti okvir odnosa 4:3, bez sečenja i bez uvećavanja, a slika otpremljena iz panela sama se smanjuje pre slanja. Mala slika se ne razvlači da popuni okvir, jer razvučena slika izgleda mutno i vlasnik to prvi primeti.
Detalj koji je koštao vremena: kopije istog dela za druga vozila dele istu datoteku slike. Zamena slike na jednom kombiju ostavljala je ostale sa starom. Sada panel sam kaže koliko delova koristi tu sliku i nudi da je promeni svuda, i to je podrazumevano ponašanje.
SEO i vidljivost
Najskuplja greška u ovom projektu bila je nevidljiva golim okom. Sajt je slao naslov, opis i kanonsku adresu tek negde u sredini dokumenta, umesto u zaglavlju. Bingbot je to dobijao ispravno, a Googlebot i običan pregledač nisu — merenjem se videlo da naslov stiže tek na sto dvadesetom hiljaditom znaku. Ispravka je bila jedna linija u konfiguraciji, ali se do nje stiglo merenjem, ne čitanjem koda.
Posle toga je dodato ono što je stvarno nedostajalo — strane po vozilu i strane kategorije ukrštene sa vozilom. Upit „stop svetla za ducato" ranije nije imao gde da se rangira. Mapa sajta je narasla sa oko hiljadu na 1.733 adrese, svaka sa svojim naslovom, opisom i pravim vremenom poslednje izmene. Strane sa premalo delova namerno ostaju van indeksa: strana sa jednim jedinim delom je skoro doslovna kopija strane tog dela, pa bi se dve naše adrese otimale o isti upit.
Uz to: naslovi skraćeni tako da ne ponavljaju vozilo dvaput, srpski oblici uz brojeve („1 deo", „2 dela", „5 delova"), podaci o proizvodu bez izmišljene cene za delove koji je nemaju, i unutrašnje povezivanje koje sa strane dela vodi na indeksiranu stranu vozila umesto na filtriran katalog koji robot ionako ne indeksira.
Svaka izmena u panelu prijavljuje nove i izmenjene adrese servisima za brzo indeksiranje, a jednom dnevno se šalje i cela mapa sajta. Na dan 20.08.2026. Google Search Console je za ovaj domen prijavio 1.438 indeksiranih adresa, na domenu koji je registrovan u julu iste godine.
Panel — sve na jednom mestu
Vlasnik ne dobija sistem za upravljanje sadržajem nego panel koji radi tačno ono što mu treba, i to sa telefona: instalira se kao aplikacija, na svom poddomenu koji nije indeksiran i koji se ne meša sa prodavnicom.
U njemu su delovi, kategorije, marke i modeli sa slikama, porudžbine sa stavkama i statusima, upiti sa kontakt-forme i sav tekst sajta. Tekstovi su važniji nego što zvuče: naslovi, opisi sekcija, radno vreme, telefon i mejl menjaju se iz panela i menjaju se svuda odjednom — u zaglavlju, u futeru, na strani za kontakt i u podacima koje čita Google. Ranije je isti telefon stajao na sedam mesta u kodu.
Tri stvari su nastale direktno iz pritužbi:
- Kopiranje dela na više vozila. Izbor marke i čekboksovi modela, pregled „Nastaće ovi artikli" sa tačnim nazivima pre snimanja, i naziv koji se prepisuje umesto da lepi dva vozila jedno na drugo.
- Odgovor kupcu iz panela. Uz svaku porudžbinu vidi se koji je deo naručen, sa slikom i vezom ka njegovoj strani, a odgovor napisan u panelu odlazi kao pravi mejl sa prodajne adrese i beleži se uz porudžbinu.
- Prostor za reklame. Preko dvadeset pozicija na sajtu — iznad pretrage, na vrhu svake strane, u kategorijama, na strani dela i u korpi. Reklame se smenjuju, tri u redu na računaru i jedna po jedna na telefonu, imaju rok prikaza i vode gde vlasnik kaže. Napravljeno je za sopstvene akcije, ali je to isto tako mesto koje se može izdati drugoj firmi.
Panel se osvežava sam: kada se nešto promeni sa drugog uređaja, otvoren panel to vidi bez ručnog osvežavanja, preko trajne veze ka malom servisu napisanom bez ijedne biblioteke. Sitnica, ali razlika između panela kome se veruje i panela koji se stalno reloaduje.
Šta klijent na kraju ima
Prodavnicu na svom domenu, sa svojom poštom i svojom bazom. Nema mesečne pretplate platformi, nema provizije po prodaji, nema tuđeg algoritma koji odlučuje da li će je neko danas videti. Ako sutra poželi da se seli, kod i baza se prekopiraju i odu s njim.
Praktično, dan izgleda ovako: nov deo se doda u panelu i istog trenutka je u katalogu i prijavljen pretraživačima; porudžbina stiže na mejl sa svim stavkama; kupac koji je poslao broj šasije dobija odgovor pre nego što paket krene; akcija se digne kao reklama na vrh sajta i sama siđe kad joj istekne rok.
Sajt je i dalje u aktivnom održavanju. Ono što se menja, menja se na živom sajtu, sa rezervnom kopijom pre svake izmene i proverom u pravom pregledaču posle nje. Na ovom projektu se to više puta isplatilo: reklama je bila u HTML-u a nije se crtala, video je bio u HTML-u a pravilo bezbednosti ga je blokiralo, boja dugmeta je bila u klasi a kaskada ju je gutala. Nijedno od toga se ne vidi kroz proveru koda — vidi se samo kad se sajt stvarno otvori i izmeri.
Sajt u slikama
Auto Delovi RM
Preko hiljadu karoserijskih delova, izbor po vozilu, plaćanje pouzećem i slanje širom Srbije.
autodelovirm.comČesto postavljana pitanja
Zašto sopstveni sajt kad već postoji oglasna platforma?
Može li vlasnik sam da dodaje delove i menja cene?
Kako kupac zna da deo odgovara baš njegovom autu?
Zašto pouzeće, a ne plaćanje karticom?
Koliko delova ovakav sajt može da izdrži?
Koliko traje izrada ovakve prodavnice?
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.