// Studija slučaja

Tehnički Pregled Stanković 964 — sajt stanice za tehnički pregled vozila

Stanica za tehnički pregled ne prodaje ništa preko interneta. Posetilac ima četiri pitanja — da li radite moje vozilo, koliko košta, kada ste otvoreni i gde ste tačno — i traži odgovor sa telefona, u kolima, na lošoj vezi. Sajt je napravljen tako da ta četiri odgovora budu tu pre nego što strana uopšte počne da se pomera.

Klijent
Tehnički Pregled Stanković 964
Delatnost
Tehnički pregled vozila, ovlašćena stanica
Područje
Pertate, opština Aleksinac
Tip
Višestrani sajt sa privatnim panelom
Tehnologije
PHP 8.3 · Nginx keš · MySQL · PWA
Status
Živ sajt, u aktivnom održavanju
Naslovna strana sajta Tehnički Pregled Stanković
Naslovna — naziv stanice i oba broja telefona u prvom ekranu

Čime se Tehnički Pregled Stanković bavi

Tehnički Pregled Stanković 964 je ovlašćena stanica za tehnički pregled vozila u Pertatama, u opštini Aleksinac. Rade se putnička vozila, laka teretna i dostavna do 2,5 tone i prikolice svih vrsta. Uz pregled ide i popravka svetlosne signalizacije na licu mesta — zamena sijalica, pokazivači pravca, podešavanje farova — što je usluga zbog koje se vozilo ne vraća drugi put.

Radno vreme je od ponedeljka do petka, od 07:00 do 15:30. Subotom i nedeljom se ne radi, i to je na sajtu napisano na tri mesta: na naslovnoj, u podnožju svake strane i na kontaktu. Razlog nije ukras. Čovek koji u subotu ujutru traži gde da uradi pregled ne sme da izgubi pola sata na put do zatvorene kapije.

Posao je lokalni i telefonski. Ne zakazuje se unapred, dolazi se bez najave, a sve što se ne zna rešava se pozivom. Stanica ističe više od deset godina rada i preko pet hiljada pregledanih vozila — to su njene brojke i tako su i postavljene na sajt, kao njena tvrdnja, ne kao naše merenje.

Sve to unapred određuje kakav sajt treba: mali, brz, sa brojem telefona na dohvat palca i bez ijednog koraka između posetioca i poziva.

Šta je trebalo rešiti

Sajt stanice za tehnički pregled ima neobičan zadatak. Nema šta da proda preko interneta, ne prima porudžbine, nema katalog i nema razlog da posetilac ostane duže od minut. Uspeh je poziv, i ništa drugo.

Iz toga je izašao spisak zahteva:

  • Odgovor u prvom ekranu — naziv stanice, šta se radi i dva broja telefona, vidljivi pre bilo kakvog pomeranja strane.
  • Cenovnik koji ne zastareva — iznosi za tehnički pregled se menjaju po važećem cenovniku, pa strana sa cenama mora da bude korisna i onda kada iznosi na njoj nisu ispisani.
  • Adresa koja se ne traži — mapa i tekstualna adresa na dva mesta, jer su Pertate selo i naziv ulice sam po sebi nije dovoljan navigaciji.
  • Sajt bez održavanja — bez sistema za upravljanje sadržajem koji traži nedeljna ažuriranja i bez dodataka koji se raspadnu pri sledećoj verziji.
  • Brzina na slaboj vezi — posetilac je najčešće na telefonu, u kolima, sa dve crtice signala.

Poslednja stavka je odredila sve ostalo. Sajt bez fotografija, bez okvira koji čekaju tuđe servere i bez skripti koje se nadgornjavaju ispada lakši od jedne prosečne slike proizvoda. Ceo sadržaj naslovne strane danas staje u nešto preko dvadeset kilobajta teksta, a sve što izgleda kao slika zapravo je ikona i boja.

Pet strana i ništa više

Sajt ima pet strana i dva pravna teksta. Naslovna, usluge, cenovnik, o nama i kontakt — plus politika privatnosti i uslovi korišćenja u podnožju.

Naslovna je složena kao jedna vertikala koja odgovara redom na sva pitanja: ko smo i dva broja telefona, četiri vrste pregleda, ko stoji iza stanice, radno vreme po danima, poziv na dolazak i na kraju kontakt sa mapom. Ko ima strpljenja, pročita sve. Ko nema, poziva iz prvog ekrana.

Strana sa uslugama razlaže ista četiri posla u pojedinosti — šta ulazi u redovni godišnji pregled, šta u vanredni, koja vozila spadaju u laka teretna, koje se prikolice rade. To je strana koja hvata pretragu za konkretnu stvar, na primer pregled prikolice, i zato ima svoj naslov i svoj opis, a ne izvod sa naslovne.

Nema bloga, nema galerije, nema vesti. Stanica ne objavljuje sadržaj i sajt koji bi to očekivao od nje bio bi prazan posle mesec dana, sa poslednjom vešću od prošle godine na vidnom mestu. Ono što postoji je tačno i ažurno, a to je jedini oblik svežine koji ovakav sajt zaista može da drži.

Cenovnik koji ne obećava cifru

Najosetljivija strana je cenovnik. Cene tehničkog pregleda se ne izmišljaju u stanici nego prate važeći cenovnik, i menjaju se. Sajt koji jednom ispiše iznos i zaboravi na njega vremenom postane sajt koji laže: čovek dođe sa cifrom sa ekrana, a naplati mu se druga, i krivac je onaj ko je cifru ostavio.

Zato strana govori istinu o mehanizmu umesto da glumi konačan iznos. Nabrojane su usluge koje se naplaćuju — putnička vozila, teretna do 2,5 tone, prikolice, popravka signalizacije na licu mesta — uz jasnu napomenu da se rade po važećem cenovniku i dva broja telefona za tačan iznos.

Da strana ne bi bila prazna obećanja, ispod cena stoji ono što se retko piše: šta pregled obuhvata. Vizuelna kontrola spolja i iznutra, ispitivanje kočionog sistema, kontrola svih svetala i signalnih uređaja i merenje emisije izduvnih gasova. Čovek koji je došao po cifru odlazi bar sa jasnim odgovorom šta za taj novac dobija — i sa razlogom da pozove umesto da zatvori stranu.

Poziv umesto forme

Na sajtu nema forme za zakazivanje. To nije previd nego odluka.

Stanica ne radi po terminima; dolazi se bez najave u toku radnog vremena. Forma bi napravila obećanje koje niko ne ispunjava — posetilac upiše podatke, čeka odgovor, pa ionako pozove, samo ljut. Umesto nje, oba broja telefona su živi tel: linkovi koji se sa telefona biraju jednim dodirom i ponavljaju se u svakoj sekciji koja se završava pozivom na akciju.

Na kontakt strani stoje telefon, mejl, adresa, radno vreme i mapa. Mapa je bila i jedina prava greška zatečena na sajtu, i to od one vrste koja košta posao: okvir na kontaktu prikazivao je sasvim drugu firmu, auto centar iz drugog grada, dok je na naslovnoj stajao prazan primer iz šablona. Oba su zamenjena okvirom koji cilja pravu adresu u Pertatama, sa poštanskim brojem i opštinom u upitu, jer pretraga samo po nazivu ulice u selu ume da odvede na drugi kraj Srbije.

Ista adresa ispisana je i kao običan tekst, odmah pored mape. Mapa je okvir sa tuđeg servera koji ponekad ne stigne da se učita; adresa u tekstu stigne uvek i može da se prekopira u navigaciju.

Tehnička izvedba

Sajt je pisan u PHP-u 8.3, kao skup strana koje dele zaglavlje i podnožje kroz obične include fajlove. Nema WordPress, nema temu, nema dodatke. Nema ni bazu — sadržaj stoji u samim stranama, jer se menja jednom u nekoliko meseci i ne isplati se ceo sistem koji bi ga čuvao i koji bi mogao da padne.

Stil je jedan minifikovan fajl. Pre sređivanja bilo je devet odvojenih CSS fajlova, što znači devet zahteva pre nego što strana uopšte počne da se iscrtava. Sada je jedan i učitava se odmah, bez odlaganja.

Ponašanje na strani nosi jedan mali main.js: otvaranje menija na telefonu i pojavljivanje sekcija pri skrolovanju kroz IntersectionObserver. Nema biblioteke za animacije, nema jQuery, nema ničega što se ažurira zbog bezbednosnih zakrpa.

Ispred svega stoji nginx koji kešira odgovore PHP-a. Zatečeno podešavanje je to gasilo na podmukao način: u konfiguraciji je stajalo pravilo koje je svakom CSS, JS i PHP odgovoru dodavalo zabranu keširanja, a pritom se poklapalo pre pravila za PHP, pa nije radio ni serverski ni brauzerski keš. Uklonjeno je, keširanje je uključeno, i odgovor servera se sada meri u desetinama milisekundi.

Jedna zamka ostala je zapisana za ubuduće: main.js se servira sa godišnjim kešom, pa svaka izmena mora da nosi novu oznaku verzije u adresi. Bez toga posetilac koji je već bio na sajtu i dalje dobija stari fajl, i popravka za njega prosto ne postoji.

Strana koja ne skače

Prvo ozbiljno merenje posle isporuke dalo je ružnu brojku. Pomeranje sadržaja pri učitavanju, ono što se meri kao CLS, bilo je preko jedan. Praktično: čovek počne da čita, strana mu se prelomi pod prstom i dodir završi na pogrešnom dugmetu. Cilj je nula, i nula je i postignuta, ali tek posle tri odvojena uzroka.

  • Glavni CSS je bio postavljen kao odloženo učitavanje. Strana se prvo iscrtavala bez stilova, pa se prelamala ispočetka kada stilovi stignu. Vraćen je u normalno učitavanje — mereno je gore izgledalo, a stvarno je bilo lošije.
  • Brojači na naslovnoj animirali su se od nule do konačnog broja. Dok broj raste, širina teksta se menja i sve oko njega se pomera. Sada su brojke ispisane statički i strana miruje.
  • Naslovni fontovi se učitavaju sa mreže, a rezervni font je bio drugih proporcija, pa je zamena prelamala naslove. Rezervnom fontu su zadate mere koje odgovaraju pravom, tako da zamena više ne pomera nijedan red.

Uz to je sa prvog ekrana skinuta animacija pojavljivanja. Naslov koji počinje neproziran pa se lagano pojavi lepo izgleda, ali merenje brzine vidi praznu stranu i tako je i ocenjuje. Sada je prvi ekran odmah tu, a pojavljivanje ostaje samo za sekcije niže na strani.

Kasnije se pojavio i skriveni kvar iz iste porodice. Ako se strana sa uslugama otvori i odmah skoči na dno, sekcija sa razlozima ostajala je nevidljiva. Posmatrač koji pušta animaciju čeka da element uđe u ekran, a on je pri naglom skoku već bio prošao pored njega. Rešeno je tako što se pri svakom prolazu proverava i sve što je ostalo iznad vidljivog dela strane.

Ispravnost koda i pristupačnost

Prolaz kroz zvaničnu proveru HTML-a je jeftin posao koji se najčešće preskoči. Ovde je odrađen do nule: na svih pet strana i oba pravna teksta validator ne prijavljuje nijednu grešku ni upozorenje. Ispravljeno je ono što se obično i zatekne — okvir mape sa širinom upisanom kao atribut umesto kao stil, stilovi zalutali u podnožje strane umesto u CSS fajl i naslovi koji preskaču nivo.

Taj poslednji nije formalnost nego pristupačnost. Čitač ekrana ide kroz naslove kao kroz sadržaj knjige, pa je svaka strana dobila i naslov sekcije koji se ne vidi okom, tamo gde je vizuelno stajao samo razmak.

Ostatak istog prolaza:

  • Dugme na kolačić baneru imalo je kontrast 2,28 prema 1 — beli tekst na svetloj zelenoj, čitljiv taman koliko da se pogodi. Zamenjen je tamnim tekstom, kontrast 8,17 prema 1.
  • Link „Preskoči na sadržaj" na vrhu svake strane, za one koji se kreću tastaturom.
  • Dugme menija na telefonu sada javlja pomoćnoj tehnologiji da li je meni otvoren ili zatvoren, umesto da ćuti.
  • Linkovi u podnožju su podvučeni, da se od okolnog teksta ne razlikuju samo bojom.

Sitnica iz istog reda: pravne strane tražile su ikonicu koje nije bilo i pri svakom otvaranju vraćale grešku u dnevnik. Dodata je. Takve stvari niko ne prijavi, ali se skupljaju.

SEO, sertifikat i higijena domena

Najveći propust nije se video na ekranu. Sajt je pre puštanja u rad živeo na privremenoj adresi na našem poddomenu, i posle prelaska na sopstveni domen na toj staroj adresi ostali su kanonski link, podaci za deljenje, strukturirani podaci, mapa sajta i robots.txt. Pretraživaču je to poruka da je pravi sajt negde drugde. To je jedan od retkih propusta koji sajt učini gotovo nevidljivim, a da se pritom ničim ne oda — sve strane rade, sve izgleda uredno.

Sve je prepisano na stankovic964.rs, a uz to je sređeno i ostalo:

  • Strukturirani podaci prebačeni su sa opšteg tipa za servis na AutomotiveBusiness, sa adresom i poštanskim brojem, koordinatama, oba telefona, radnim vremenom i spiskom od četiri usluge.
  • Svaka strana ima naslov i opis pisane za nju, a ne po šablonu sa imenom firme na kraju.
  • Mapa sajta pokriva svih sedam adresa, uključujući i pravne tekstove, a robots.txt ne blokira ništa što treba da se indeksira.
  • Sajt je potvrđen u Google Search Console-u preko DNS zapisa, a mapa sajta je predata.

Uz to ide i higijena domena, deo koji klijent nikada ne vidi. Sertifikat je na javnom testu ocenjen najvišom ocenom, domen je u listi koju brauzeri uvek otvaraju preko HTTPS-a, u DNS-u stoji zapis koji određuje ko uopšte sme da izda sertifikat za taj domen, a na propisanom mestu stoji security.txt sa kontaktom za prijavu ranjivosti. Strana o nama i sve ostale servira isti server pod istim pravilima, bez izuzetaka koji se posle zaborave.

Panel za inventar stanice

Uz sajt stoji i deo koji posetilac nikada ne vidi: privatna aplikacija za inventar stanice, na posebnom poddomenu. To nije uređivač sajta — sadržaj sajta se kroz njega ne dira — nego evidencija onoga što stanica drži: artikli, kategorije, količine, cene i istorija svake izmene.

Napravljena je kao PWA. Sa strane za prijavu se instalira na telefon ili računar i posle se otvara kao obična aplikacija, sa svojom ikonicom i bez adrese u vrhu, isto na Androidu, iOS-u, Windows-u i macOS-u.

Promene se vide u realnom vremenu. Kada neko na jednom uređaju izmeni stanje, ostali otvoreni uređaji dobiju izmenu bez osvežavanja strane, preko toka događaja koji server drži otvorenim i budi tek kada se nešto stvarno promeni. Ako brauzer to ne podržava, aplikacija se sama vrati na povremenu proveru, pa nema uređaja koji ostaje sa starim brojem.

Prijava je urađena ozbiljno, jer panel stoji na javnom internetu. Lozinke se čuvaju kroz bcrypt, svaki upis nosi token protiv falsifikovanja zahteva, posle pet pogrešnih pokušaja nalog se zaključava na pola sata, a pokušaji se broje i po korisniku i po adresi sa koje dolaze. Sesija ističe posle pola sata mirovanja i najviše osam sati ukupno. Svaki ulaz, izlaz i izmena upisuju se u dnevnik sa vremenom, adresom i uređajem, a spisak trenutno prijavljenih uređaja vidi se u samom panelu. Pristupni podaci za bazu stoje van foldera koji server objavljuje, tako da ne mogu da se pročitaju kroz brauzer ni kada nešto drugo pukne.

Taj modul stoji i kao primer u radu na strani o aplikaciji za stanice za tehnički pregled.

Šta klijent na kraju ima

Sajt od pet strana koji se otvara odmah, radi isto na telefonu i na računaru i ne traži ništa od vlasnika. Nema mesečne pretplate platformi, nema dodataka koji se ažuriraju, nema panela koji mora da radi da bi se strana prikazala. Domen, kod i sadržaj su njegovi i mogu se preseliti kod drugog izvođača ako ikad zatreba.

Praktično, čovek koji u pretrazi ukuca tehnički pregled i ime mesta dobija adresu, radno vreme, spisak vozila koja se rade i broj telefona koji se bira jednim dodirom. To je ceo posao ovakvog sajta, a sve napisano iznad postoji samo zato da se taj put ne prekine ni na jednom mestu — ni na sporoj vezi, ni na starom telefonu, ni kod čoveka koji ide tastaturom.

Sajt je u održavanju i proverava se u redovnim prolazima kroz celu flotu. Poslednji su doneli popravku sekcije koja je pri naglom skrolovanju ostajala nevidljiva i oznaku verzije na skripti, koja sprečava da posetilac sa starim kešom nikada ne vidi ono što je popravljeno.

// Sajt uživo

Tehnički Pregled Stanković 964

Ovlašćena stanica u Pertatama: putnička vozila, teretna do 2,5 tone, prikolice i popravka svetlosne signalizacije.

stankovic964.rs

Često postavljana pitanja

Zašto sajt nema formu za zakazivanje?
Zato što stanica ne radi po terminima — dolazi se bez najave u toku radnog vremena. Forma bi obećala odgovor koji niko ne bi slao, pa umesto nje na svakom koraku stoje dva broja telefona koja se sa telefona biraju jednim dodirom.
Zašto na cenovniku ne stoje iznosi?
Cene tehničkog pregleda prate važeći cenovnik i menjaju se. Strana zato nabraja usluge i objašnjava šta pregled obuhvata, a tačan iznos se dobija telefonom. Tako se ne dešava da posetilac dođe sa cifrom sa ekrana koja više ne važi.
Ko menja tekst na sajtu?
Sajt nema sistem za upravljanje sadržajem, pa izmene idu preko nas, uz rezervnu kopiju pre svake. Za ovakvu stanicu se to menja retko — radno vreme, broj telefona, nova usluga. Ono što se menja svakodnevno drži se u odvojenom panelu, koji sa sadržajem sajta nema veze.
Da li sajt radi na telefonu?
Radi, i prvo je za telefon i pravljen. Najveći deo poseta dolazi sa telefona i najčešće iz kola, pa prvi ekran nosi ime stanice, delatnost i oba pozivna broja bez ijednog pomeranja strane.
Šta je panel i ko mu pristupa?
Privatna aplikacija za inventar stanice na posebnom poddomenu, sa prijavom, ograničenjem broja pokušaja, zaključavanjem naloga i dnevnikom izmena. Otvorena je samo zaposlenima i ne utiče na sadržaj javnog sajta.
Ima li ovakav sajt mesečne troškove?
Plaćaju se domen i hosting. Nema pretplate platformi ni licenci za dodatke, jer sajt ne koristi ni jedno ni drugo. Održavanje ide po dogovoru, a kod i sadržaj ostaju klijentovi.

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