Klasičan Gejming — gaming portal na srpskom sa sopstvenim CMS-om
Gaming portal kome sadržaj stiže svakog dana i koji zato mora da izdrži godine dopunjavanja bez programera. Sopstveni panel umesto WordPress-a, ručno ređanje naslovne, i borba za sekunde na mobilnoj vezi na strani koja je puna slika.
- Klijent
- Klasičan Gejming
- Delatnost
- Gaming portal — vesti, recenzije, esports
- Područje
- Srbija, sadržaj na srpskom jeziku
- Tip
- Višestrani portal sa sopstvenim CMS-om
- Tehnologije
- PHP 8.3 · MariaDB · Service Worker · PWA
- Obim
- 159 objavljenih vesti u deset kategorija
- Sajt
- klasicangejming.com
- Status
- Živ sajt, u aktivnom održavanju
U ovom tekstu
- Šta je Klasičan Gejming
- Šta je trebalo rešiti
- Kako je sajt složen
- Strana pojedinačne vesti
- Slajder na naslovnoj i bug koji se dugo krio
- Panel — ono što vlasnik koristi svaki dan
- Brzina — najteži deo posla
- Aplikacija na telefonu i kolačići
- SEO i vidljivost
- Bezbednost i održavanje
- Šta klijent na kraju ima
Šta je Klasičan Gejming
Klasičan Gejming je gaming portal na srpskom jeziku. Vesti iz industrije, najave novih naslova, recenzije igara, esports i hardver — sve na jednom mestu i sve pisano na srpskom, sa punim dijakritikama, što je u ovoj niši i dalje retko.
Sadržaj stoji u deset kategorija: PC igre, PlayStation, Xbox, Nintendo, Mobile, Esports, Hardware, Industrija, Recenzije i Retro. Do danas je objavljeno 159 vesti, a najveći deo nose PC igre i industrija — dve teme koje se prate svakodnevno. Čitalac koji dođe zbog jedne vesti o izlasku igre nalazi i kategoriju, i tagove, i pet srodnih tekstova ispod.
Portal nema izlog, radno vreme ni adresu; on je medij, a to menja ceo posao. Sajt ovog tipa se ne napravi jednom pa ostavi. On mora da izdrži da mu se sadržaj dodaje svakog dana, godinama, iz panela i bez programera na vezi — inače prestane da se dopunjuje, a portal koji se ne dopunjuje umire za tri meseca.
Šta je trebalo rešiti
Zahtev nije bio sajt vizitkarta nego portal. Iz toga slede četiri stvari koje moraju da rade zajedno:
- Objavljivanje bez programera — vest se napiše, opremi slikom, kategorijom i tagovima i objavi iz panela, bez dodirivanja koda.
- Kontrola nad naslovnom — vlasnik sam bira koje vesti idu u slajder na vrhu i kojim redom, jer je vrh naslovne najskuplji prostor na sajtu.
- Brzina na telefonu — najveći deo čitalaca dolazi sa mobilne mreže, i to na stranu koja je po prirodi puna slika.
- Sopstveni kod — bez teme i bez dodataka koje treba ažurirati svake nedelje da portal ne bi bio provaljen.
Poslednja stavka je najviše uticala na sve ostalo. Portal na gotovoj platformi sa temom i desetak dodataka je najbrži način da se počne i najskuplji način da se nastavi: svaki dodatak je tuđi kod sa svojim rupama, svojim ažuriranjima i svojim tempom raspadanja, a kada se jedan od njih pokvari, pokvari se u petak uveče. Ovde je sve pisano u PHP-u 8.3 nad MariaDB bazom, pa je količina tuđeg koda koji može da otkaže svedena na minimum i svaki deo se može otvoriti i popraviti.
Kako je sajt složen
Naslovna ima tri sloja. Na vrhu je slajder sa istaknutim vestima, ispod njega mreža najnovijih tekstova, a sa strane kolona sa popularnim sadržajem te nedelje, spiskom kategorija i prijavom na newsletter. Na dnu stoji blok sa svim kategorijama i brojem članaka u svakoj, jer čitalac koji je došao zbog jedne vesti tada vidi koliko sajta ima iza nje.
Odatle idu tri pravca. Sve vesti je hronološki arhiv koji se dopunjuje sam dok se skroluje — bez paginacije i bez klika na sledeću stranu. Kategorije kao PC igre imaju svoju adresu, svoj naslov i svoj opis. Tagovi hvataju ono što ne staje u kategoriju — Steam, Epic Games, ekskluziva — i svaki tag ima svoju stranu, pa čitalac može da prati temu koja preseca sve platforme.
Uz to idu pretraga, prijava i registracija čitalaca, i četiri statične strane: o nama, kontakt, politika privatnosti i uslovi korišćenja. I one se uređuju iz panela, jer je jedina stvar gora od teksta koji niko ne održava tekst koji niko ne može da izmeni bez programera.
Strana pojedinačne vesti
Strana vesti nosi najveći deo saobraćaja, pa je i najviše rađena. Naslov, kategorija, autor, datum, naslovna slika, telo teksta, tagovi na dnu, dugmad za deljenje i komentari za prijavljene čitaoce. Ispod članka idu srodni tekstovi, da poseta ne bi završila na jednoj strani.
Ono što se ne vidi je deo koji čita pretraživač: NewsArticle sa autorom i apsolutnom adresom slike, BreadcrumbList sa putanjom kroz kategoriju, i kanonska adresa oblika /vesti/naslov-vesti. Kanonik je jedna od sitnica koje se plaćaju kasnije — sajt je u jednom trenutku imao članke i pod /vest/ i pod /vesti/, pa je stara putanja trajno preusmerena na novu i ujednačena sa mapom sajta i svim internim linkovima. Dok to nije rešeno, isti tekst je za pretraživač postojao na dve adrese i sam sebi pravio konkurenciju.
Adresa članka se izvodi iz naslova, sa srpskim znakovima prevedenim u latinične parnjake. To znači da adresa ostaje čitljiva i kada se podeli u poruci, i da naslov nosi ključne reči i u samoj adresi.
Još jedan detalj koji radi u pozadini: svaki pregled se beleži u bazu. Blok „Popularno ove nedelje" zato nije ručno održavana lista nego posledica onoga što se stvarno čita.
Slajder na naslovnoj i bug koji se dugo krio
Slajder na vrhu naslovne prikazuje pet istaknutih vesti. Prva verzija ih je birala automatski — pet najnovijih označenih kao istaknute. To zvuči razumno dok vlasnik ne poželi da starija ali dobra vest stoji na prvom mestu; tada automatika radi protiv njega, a on nema način da je nadglasa.
Zato je redosled prebačen na ručni. U panelu postoji tabla „Istaknute vesti — redosled slajdera" u kojoj se stavke prevlače mišem ili pomeraju strelicama sa tastature, sa jasnom linijom koja pokazuje gde prestaje prvih pet, odnosno šta se uopšte vidi na sajtu. Šesta i dalje stoji, samo zatamnjena — da bude očigledno zašto se ne pojavljuje. Ceo redosled se snima jednom transakcijom: ili prođe ceo, ili ne prođe ništa. Ako se u međuvremenu spisak istaknutih promenio u drugom prozoru, snimanje se odbija sa porukom umesto da tiho prepiše tuđu izmenu.
Tu je izašao bug koji je vlasnik prijavio rečima da otkačinjanje ne radi. Nije radilo, a razlog je bio nezgodan: neoznačeno polje za potvrdu brauzer uopšte ne šalje serveru, a serverska strana je odsutnu vrednost tumačila kao uputstvo da vrednost ostane kakva je bila. Označiti vest se moglo, odznačiti nije — i to bez ijedne poruke o grešci, što je najgora vrsta kvara. Uz to je klik na vidljivi prekidač u spisku padao u prazno, jer prekidač nije bio povezan sa poljem koje menja, pa je radila samo nevidljiva kućica ispod njega.
Popravka je išla u tri sloja: obrazac sada uvek eksplicitno šalje i uključeno i isključeno stanje, server menja samo ona polja koja su stvarno stigla, a prekidač je povezan sa svojim poljem. Provereno je na živom sajtu, u oba smera, sa osvežavanjem strane između koraka.
Panel — ono što vlasnik koristi svaki dan
Umesto generičkog sistema za upravljanje sadržajem, panel je skrojen za portal: uređivač vesti sa slikama, kategorijama i tagovima, medijateka, spisak kategorija i tagova, komentari sa odobravanjem, korisnici, newsletter, baneri sa sopstvenim pozicijama u tekstu i izveštaji o saobraćaju.
Slika se otprema jednom, a sistem sam pravi manje verzije za mrežu vesti i veće za stranu članka, sve u WebP formatu. To nije kozmetika. Mreža od dvanaest kartica koja povlači slike u punoj veličini je isti onaj sajt koji se na telefonu čeka pet sekundi, a razlika je jedino u tome što niko nije pripremio derivate.
Panel je i mesto gde se vidi šta se stvarno čita — pregledi po vestima, po kategorijama i po posetiocima koji se vraćaju. Statistika unutar sajta odgovara na pitanje šta pisati sledeće bolje od bilo kog spoljnog alata, jer računa iz istih redova baze iz kojih se sajt i prikazuje.
Pristup panelu je zatvoren na oba nivoa: ko nije prijavljen, biva vraćen na prijavu, a svaki zahtev koji nešto menja mora da nosi i administratorski nalog i token protiv falsifikovanih zahteva. Bez toga je dovoljan jedan pripremljen link u tuđoj poruci da se nešto obriše u ime prijavljenog administratora.
Brzina — najteži deo posla
Portal sa slikom na svakoj kartici je najgori mogući slučaj za mobilnu vezu, i to se videlo na prvim merenjima: vreme do najvećeg prikazanog elementa na telefonu bilo je preko šest sekundi. Kriva su bila tri sloja — fontovi i ikonice sa tuđih servera, dvadesetak zasebnih CSS fajlova u zaglavlju i slike u punoj veličini u mreži.
Rešavano je redom. Google fontovi i skup ikonica prebačeni su sa tuđih servera na sopstveni, čime je nestao ceo krug otvaranja veze prema trećoj strani pre nego što se bilo šta nacrta. Zatim je skup ikonica isečen na one koje se stvarno koriste: sa oko 386 KB na oko 33 KB na žici. Ikonice se prebrojavaju skriptom koja je ostala u projektu, pa se skup može ponovo napraviti kada se doda nova strana. Traženje je bilo dosadnije nego što zvuči — deo imena ikonica ne stoji u kodu nego u bazi, a deo se u brauzeru menja u hodu, na primer oko za prikaz lozinke.
Slike u mreži prešle su na srednje verzije sa srcset opisima, prva slika u slajderu se učitava sa prioritetom i unapred najavljuje, a sve ispod prvog ekrana je odloženo. CSS je spojen u jedan paket.
Rezultat na telefonu, mereno pod uslovima spore veze: LCP sa 6,24 s na 4,91 s, ocena performansi sa 63 na 76, prvi prikaz sadržaja sa 3,01 s na 2,43 s. Na desktopu je ocena 95 uz LCP od oko 1,5 s, a pristupačnost i najbolje prakse su na 100. Portal sa ovoliko slika nikada neće trčati kao prazna strana sa tri reda teksta, i to je iskren okvir u kome ove brojke treba čitati.
Aplikacija na telefonu i kolačići
Sajt je i PWA — ima manifest i servisnog radnika, pa može da se doda na početni ekran telefona i da se ponaša kao aplikacija, uključujući čitanje već posećenih strana kada veza otkaže. Na sajtu se to vidi kao nenametljiva traka sa ponudom za instalaciju, koja se može zatvoriti i ne vraća se nametljivo.
Servisni radnik je koristan i opasan iz istog razloga: pamti. Zato svaka izmena izgleda nosi novu oznaku verzije, i za stilove i za samog radnika. Bez te discipline stari posetioci danima gledaju staru verziju sajta i javljaju da izmena nije urađena, a izmena je urađena i stoji na serveru.
Kolačići idu preko trake sa dva jasna odgovora — prihvatanje ili samo neophodni — a analitika je podešena tako da do pristanka meri samo ono što sme. Izbor se pamti i poštuje pri sledećoj poseti. Na sajtu koji prima registracije to nije formalnost nego obaveza.
SEO i vidljivost
Mapa sajta se pravi iz baze i danas ima 199 adresa: 159 vesti, kategorije, strane tagova i statične strane. Pošto se generiše iz baze, nova vest je u mapi istog trenutka kada je objavljena, bez ijednog dodatnog koraka.
Svaka kategorija ima svoj naslov i opis. To je zvučalo kao gotova stvar dok se nije ispostavilo da su sve kategorije nosile isti generički naslov, jer je šablon čitao promenljivu koja na tim stranama nikada nije bila postavljena. Deset strana sa istim naslovom je za pretraživač deset strana bez naslova. Danas Industrija i PC igre nisu ista strana ni po naslovu ni po opisu.
Uz to idu WebSite i Organization podaci na naslovnoj, lista najnovijih vesti kao ItemList, i pretraga prijavljena kao radnja koju pretraživač može da ponudi direktno u rezultatima. Sajt je verifikovan u Google Search Console-u.
Jedna odluka je namerna i vredi je izgovoriti: robots.txt izričito pušta i botove sistema veštačke inteligencije. Odgovori tih sistema sve češće stoje iznad klasične liste rezultata, a portal koji ih blokira ispada iz njih tiho i bez ijednog upozorenja. Za medij koji živi od toga da bude citiran, to je gubitak koji se ne primeti dok se ne izmeri.
Bezbednost i održavanje
Portal koji prima registracije, komentare i poruke sa kontakt forme je meta, i tako je i tretiran. Zaglavlja su postavljena kompletno: politika sadržaja, obavezan HTTPS sa dugim rokom važenja, ograničenje ugnežđavanja sajta u tuđe strane, isključene dozvole za kameru, mikrofon i lokaciju, i strogo pravilo o tome koliko se podataka šalje pri odlasku na tuđi sajt. Poslednje merenje podešavanja sertifikata dalo je ocenu A+.
Na strani aplikacije popravljeno je nekoliko stvari koje se ne vide spolja. Izmena i brisanje komentara ranije su tražili samo prijavu — sada traže administratorski nalog i token protiv falsifikovanih zahteva. Rezervne kopije fajlova, koje su se u jednom trenutku servirale kao običan tekst, izmeštene su iz javnog dela servera; izvorni kod koji svako može da pročita je propust koji se primeti tek kada bude kasno. Kolačić sesije je sveden na strožu politiku slanja ka drugim sajtovima.
Održavanje je isto tako konkretno. Kada je provera zavisnosti prijavila šest bezbednosnih upozorenja na bibliotekama koje portal koristi, one su ažurirane, a odmah zatim je provereno da kontakt forma i dalje isporučuje poštu — zakrpa koja tiho pokvari mejl je gora od zakrpe koje nema. Otvorenih upozorenja danas nema. Pre svake izmene ide rezervna kopija, kod stoji u privatnom repozitorijumu, a posle svake izmene na serveru se osvežava keš, jer bi se inače nova verzija čekala satima.
Šta klijent na kraju ima
Portal koji je njegov. Vest se napiše i objavi iz panela za nekoliko minuta, slika se otpremi jednom i sama dobije sve potrebne veličine, naslovna se ređa rukom, a čitaoci koji su sajt dodali na početni ekran dobijaju ga kao aplikaciju.
Nema mesečne pretplate platformi i nema dvadeset dodataka koji čekaju ažuriranje. Kod i baza stoje na serveru, mogu se prekopirati i preseliti. Ako sutra zatreba nova kategorija, nova rubrika ili nova strana, to je izmena u panelu, ne izrada novog sajta.
Sajt je i dalje u aktivnom održavanju. Poslednje veće izmene bile su ubrzavanje na telefonu i ručni redosled slajdera, a pre njih ispravke koje su vraćale u život komentare i beskonačno učitavanje u arhivi vesti. Pitanja i predlozi idu preko kontakt strane, na kojoj redakcija navodi da odgovara u roku od 24 do 48 sati.
Sajt u slikama
Klasičan Gejming
Vesti iz gaming industrije, recenzije igara i esports novosti na srpskom — PC, PlayStation, Xbox i Nintendo na jednom mestu.
klasicangejming.comČesto postavljana pitanja
Zašto sopstveni CMS, a ne WordPress?
Može li vlasnik sam da objavljuje vesti?
Kako se bira šta ide u slajder na naslovnoj?
Da li sajt radi na telefonu i može li se instalirati?
Šta se dešava kada portal naraste na hiljadu vesti?
Koliko traje izrada ovakvog portala?
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.