// Studija slučaja

FOX Models — sajt modelske agencije bez ijedne 3D linije

Ista agencija, isti sadržaj, druga tehnička odluka. Kada je sadržaj sajta tuđe lice, svaki efekat koji stoji između posetioca i fotografije je trošak — pa je ova verzija pisana u čistom HTML-u, CSS-u i JavaScript-u, bez frameworka i bez koraka izgradnje. Naš poddomen, naš projekat, otvoren za proveru.

Klijent
FOX Models, modelska agencija
Delatnost
Bordovi modela, skauting, booking
Grad
Beograd
Tip
Višestrani sajt bez 3D (naš projekat)
Tehnologije
HTML · CSS · JavaScript bez biblioteka · nginx
Obim
6 tipova strana, 17 profila modela, bez koraka izgradnje
Status
Živ na našem poddomenu, zatvoren za indeksiranje
Naslovna strana sajta FOX Models sa dva panela za ženski i muški bord
Naslovna — dva panela sa slovima W i M, naziv agencije na vrhu

Ko je FOX Models i čiji je ovo sajt

FOX Models je modelska agencija iz Beograda. Vodi ženski i muški bord, traži nova lica i plasira ih kod modnih kuća, magazina i brendova — od prvog test snimanja do kampanje. Posao agencije je da pravo lice dovede pred naručioca koji bira, a sajt je prvo mesto na kome taj izbor počinje: otvori se bord, prelista se, zapamte se dva imena i piše se na booking.

Odmah da se zna čije je ovo. models.svilenkovic.rs je naš poddomen i naš sopstveni projekat. Sajt je nastao kao predlog redizajna za agenciju, stoji živ na našem serveru i služi kao primer rada. Imena, mere i deo fotografija su demo sadržaj koji stoji na jednom mestu u kodu i pri prelasku na pravi domen agencije zamenjuje se podacima iz njene baze.

Zato u tekstu ispod nema nijedne brojke o posećenosti, upitima ni rezultatima kampanja. Ima samo onoga što se može otvoriti i proveriti: kako je sajt sklopljen, zašto je napravljen ovako a ne drugačije, gde je pukao i kako je popravljen.

Dve verzije za istu agenciju i zašto je ova dobila nastavak

Za FOX Models postoje dva sajta, ne jedan. Ovaj je svetao, klasičan i u njemu nema nijedne 3D linije. Drugi je taman, sa 3D prstenom fotografija koji se okreće dok skrolujete, i o njemu piše zasebna studija — FOX Models, tamna 3D verzija. Isti sadržaj, ista agencija, dva potpuno različita utiska.

Razlog za dve izvedbe je prost. Kod modne agencije ukus vlasnika odlučuje više nego bilo koja lista funkcija, pa smo umesto nagađanja napravili dva pola: maksimum atmosfere i maksimum tišine. Kada je agencija pogledala obe, odgovor je bio da je bogatija verzija previše i da naslovna treba da bude znatno jednostavnija, sa referencom na skandinavske agencijske sajtove na kojima nema ničega osim lica.

Tu se prelama cela ova studija. 3D nije loš izbor zato što je 3D, nego zato što na ovom sajtu troši ono što je jedini sadržaj — fotografiju. Kada naručilac dođe da pregleda bord, svaki efekat između njegovog oka i lica je trošak koji neko plaća. Klasična verzija je zbog toga dobila sav dalji rad i sve krugove izmena, a 3D je ostao kao odgovor na pitanje gde je gornja granica atmosfere.

Odluka je povukla i tipografiju. Prvobitni spoj serifnog naslova i drugog pisma za tekst zamenjen je jednim groteskom svuda — istim pismom za naslov, meru i navigaciju. Modni sajtovi retko mešaju dva pisma, a kada mešaju, to im obično bude jedini ukras koji se pamti.

Šta je trebalo rešiti

Sajt modelske agencije izgleda kao obična galerija dok se ne sedne da se sklopi. Onda ispadne da ima pet zahteva koji vuku na različite strane:

  • Fotografija je proizvod. Sve što stoji preko slike, seče je ili razvlači radi protiv sajta. Kadar mora da bude tačan na svakoj širini, od telefona do velikog monitora.
  • Bord se ne čita, bord se skenira. Naručilac ne čita opise nego prelazi pogledom preko lica i zaustavi se na jednom. Mreža mora da bude brza, a osnovne mere na dohvat bez otvaranja profila.
  • Svaki model je svoja adresa. Profil se prosleđuje kolegi, otvara na telefonu i lepi u poruku, pa mora da ima sopstveni URL, sopstveni naslov i sopstvenu sliku za pregled.
  • Prijava novih lica nije isto što i booking. Skauting stiže od nepoznatih ljudi, sa telefona, sa dve do tri fotografije. To nije ista forma i ne sme da izgleda isto.
  • Sadržaj na kraju dolazi iz baze. Na pravom domenu modele i editorijale služi PHP iz agencijske baze, pa front mora biti pisan tako da mu je svejedno odakle podaci stižu.

Poslednja stavka je odredila tehnologiju. Kada se unapred zna da će sadržaj jednog dana doći iz baze i da će se menjati češće nego kod, sajt koji se pri svakoj izmeni mora ponovo izgraditi radi protiv sebe.

Naslovna: dva slova i ništa više

Prvi ekran je visok tačno koliko i ekran uređaja i podeljen je na dva panela: leva polovina vodi u ženski, desna u muški bord. Preko svakog panela stoji jedno ogromno slovo — W levo i M desno — a ispod njega sitan potpis sa strelicom. Naziv agencije je na vrhu, preko mekog zatamnjenja koje ga drži čitljivim i kada je fotografija ispod svetla.

Detalj koji niko ne primeti, a bio je izričito tražen: slovo M nije slovo M. To je isto slovo W okrenuto naopako, pa su dva panela simetrični blizanci umesto dva različita znaka. Podizanje slova pri prelasku mišem moralo je zato da se piše tako da okretanje ostane, jer bi ga obična animacija pomeranja tiho poništila i M bi se usred pokreta vratio u W.

Izbor fotografija za panele nije estetika nego provera na širokom ekranu. Slika se na panelu skalira po širini, bez horizontalnog sečenja, pa se na monitoru od 1920 piksela vidi ceo kadar. Prva slika za muški panel imala je pun logo brenda na odeći, koji se na tri manje širine uopšte nije video, i zamenjena je drugom. Iz istog razloga u izbor ispod nisu ušle magazinske naslovnice sa ispisanim imenom magazina ni fotografija sa reklamnim tekstom preko pola kadra — sajt agencije ne sme da izgleda kao da reklamira tuđi brend.

Ispod prvog ekrana stoji sekcija Izdvojeni: osam lica, četiri iz ženskog i četiri iz muškog borda, balansirano i sa Main Board-om napred. Tu je bio i jedan tih bug. Redosled bordova se čita iz tabele u kojoj Main nosi nulu, a nula je u JavaScript-u lažna vrednost, pa je rezervni broj pregazio pravi i Main Board bi ispao poslednji umesto prvi. Popravka je provera da li ključ uopšte postoji, umesto oslanjanja na to da nije prazan.

Bordovi, tabovi i A–Z indeks

Ženski i muški bord su zasebne strane, ne dva stanja iste. Na ženskom bordu i na muškom stoji ista pod-navigacija: Main Board, New Faces, Commercial i, malo odvojeno, Kontakt. Svaki bord ima svoju adresu, pa se link na New Faces može poslati kao link na New Faces, a ne kao uputstvo da se negde još klikne.

Iznad mreže su pretraga po imenu koja radi dok se kuca i broj prikazanih modela koji se menja u hodu. Uz njih ide A–Z indeks sa srpskim slovima, uključujući Č, Ć, Đ, Š i Ž, u kome su slova bez ijednog modela vidljivo ugašena i ne mogu da se kliknu. Indeks u kome slovo vodi na praznu stranu je gori od indeksa koga nema, jer posetilac pomisli da je sajt pokvaren.

Sam indeks se sakriva na malim bordovima i pojavljuje tek kada bord ima dvanaest ili više modela. Na demo bordu od šest lica azbuka u kojoj je skoro svako slovo ugašeno izgleda kao kvar; na pravom bordu agencije, sa nekoliko stotina imena, ista traka je najbrži način da se stigne do prezimena. Ista logika, dva različita ponašanja, bez ijedne izmene u kodu pri prelasku na bazu.

Kartica pokazuje fotografiju, ime i grad. Pri prelasku mišem preko slike se spusti sloj sa punim setom podataka — visina, mere, obuća, kosa, oči, oznaka borda i poziv da se otvori profil. Na dodirnim ekranima tog sloja nema, jer na telefonu ne postoji prelazak mišem: tamo su fotografije čiste, a podaci se čitaju na profilu. Istu karticu crta isti kod na naslovnoj, na bordu i ispod profila, pa se prikaz ne može razići između tri mesta.

Strana modela i booking koji ide mejlom

Profil je podeljen na galeriju sa jedne i podatke sa druge strane: oznaka borda, ime, grad, pa uredan spisak mera — visina, grudi, struk, bokovi ili odelo, obuća, kosa, oči. Ispod njih su dva poteza: Booking upit i Instagram nalog agencije.

Booking je namerno ostao mejl. Klik otvara poštanski program sa popunjenim primaocem, naslovom u kome piše ime modela i telom poruke u kome već stoje ime, grad i link na profil, sa praznim redovima za projekat, termin i kontakt. Naručilac koji bookira model to radi iz svog sandučeta, jer mu upit mora da ostane u prepisci i da se prosledi kolegi. Forma na sajtu bi ga izbacila iz alata u kome zaista radi, a agenciji dala poruku bez istorije.

Ispod svakog profila stoji četvoro lica iz istog borda i link na ceo bord. To je jedina navigacija koja na ovakvom sajtu stvarno radi: čovek koji je otvorio jedan profil retko traži baš to lice, nego lice tog tipa.

Dugmad na profilu su prošla kroz krug izmena. Prva verzija su bile pilule sa ivicom, koje su na svetloj strani izgledale jeftino, i zamenjene su tankim tekstualnim linkovima sa podvlakom i strelicom. Na modnom sajtu dugme koje viče je jedini element koji se pamti umesto fotografije. Isti je razlog zbog kog je i mobilni meni sveden na dve ravne crte koje se pri otvaranju ukrste.

Editorijali i lajtboks

Strana Editorijali je zid od naslovnica, editorijala i kampanja — ELLE, Grazia, Stylist, Legend, Terranova — sa nazivom i tipom saradnje ispod svake stavke. Klik otvara prikaz preko cele strane.

Lajtboks je pisan i za tastaturu: strelice listaju, taster za izlaz zatvara, fokus ostaje zarobljen unutar prikaza dok je otvoren i vraća se tačno na sliku sa koje je krenuo. Na telefonu se lista prevlačenjem, susedna slika se učitava unapred da prelaz ne bi čekao, a brojač pokazuje gde ste u nizu. Galerija koja se ne može zatvoriti tasterom je galerija iz koje deo posetilaca izađe zatvaranjem cele kartice pregledača.

Slike koje iscrtava JavaScript meko se utapaju kada stignu, umesto da uskaču i pomeraju sve ispod sebe. Statične slike prvog ekrana nemaju to odlaganje — hero fotografija je ono što se meri kao najveći element strane i mora da bude tu odmah, pa se učitava sa prednošću i bez ijednog efekta na putu.

Bez koraka izgradnje: oko sedamdeset kilobajta sopstvenog koda

Sajt je pisan u čistom HTML-u, CSS-u i JavaScript-u. Nema build koraka, nema frameworka, nema nijedne biblioteke. Ceo sopstveni kod su tri fajla — stilovi, ponašanje i podaci — ukupno oko sedamdeset kilobajta pre kompresije, a server ih šalje spakovane. Jedina spoljna stvar koju strana povlači je font.

Sadržaj stoji u jednom fajlu sa podacima: sedamnaest modela, dvanaest u ženskom i pet u muškom bordu, i deset stavki u editorijalima. Polja u tom fajlu su namerno napisana tako da odgovaraju kolonama koje na pravom domenu treba da vrati PHP iz agencijske baze — jedan model je jedan red u tabeli, editorijali su druga tabela. Prelazak sa demo podataka na bazu je zato zamena izvora, a ne prepisivanje sajta.

Tu je i glavna praktična razlika u odnosu na 3D verziju. Ona je Next.js projekat koji se pri svakoj izmeni sadržaja mora ponovo izgraditi na serveru, sa instalacijom zavisnosti i sklapanjem svih statičkih strana. Ovde se izmenjeni fajl prekopira na server i to je ceo posao. Deploy ide direktno, uz rezervnu kopiju svakog fajla pre izmene, bez posrednika i bez koraka koji jednog dana može da padne zbog tuđe izmene u nekom paketu.

Postoji i osigurač za slučaj da JavaScript zakaže. U zaglavlju se dokumentu odmah upisuje oznaka da skripte rade, i od te oznake zavisi pojavljivanje sadržaja pri skrolu. Ako se posle učitavanja ispostavi da zaglavlje sajta nije iscrtano, oznaka se skida i sve što je čekalo pojavljivanje postaje odmah vidljivo. Sajt bez skripti nije lep, ali je čitljiv — a sajt koji ćutke ostane prazan je izgubljen posetilac.

Prilagođavanje ekranu je provereno od uskih telefona do vrlo širokih monitora. Vodoravno prelivanje je isečeno na nivou dokumenta, pa se strana ne klati levo-desno ni na 320 piksela, a duge adrese i mejlovi u podnožju prelamaju se umesto da guraju raspored van ivice. Sadržaj ima gornju granicu širine, jer mreža lica razvučena preko celog vrlo širokog ekrana više nije mreža nego traka.

Dve greške koje su se videle tek na telefonu

Prva: posetioci sa telefona zaglavili su na staroj verziji i morali su ručno da brišu keš da bi videli izmene. Uzrok nije bio u kodu nego u podešavanju servera — stilovi i skripte slati su sa nalogom da se čuvaju trideset dana i da se pri tome uopšte ne proveravaju. Ta oznaka ima smisla samo za fajlove kojima je otisak sadržaja u imenu; ovde je ime bilo isto svaki put, pa je pregledač mesec dana pokazivao ono što je zapamtio, ma šta se na serveru promenilo.

Popravka je bila dvodelna. Stilovi, skripte i HTML sada se uvek proveravaju kod servera; ako se ništa nije promenilo, server odgovori kratkim „isto je" i ne šalje sadržaj ponovo. Slike se i dalje keširaju sedam dana, ali bez zabrane provere. Uz to je jednom promenjena adresa stilova i skripti, jer promena pravila ne deluje unazad na ono što je telefon već zapamtio — samo nova adresa odlepi takav keš.

Uz tu popravku išla su i dva iznenađenja koja vrede više od same popravke. Prvo: čim se u jedan deo konfiguracije doda sopstveno zaglavlje, nasleđena bezbednosna zaglavlja tiho nestanu iz tog dela, pa se moraju vratiti u svaki takav blok — inače se popravkom keša izgubi zaštita, a niko to ne primeti. Drugo: fajl koji server stvarno čita nije bio veza ka fajlu koji se uređuje, nego zaseban fajl sa svojim sadržajem, pa prve izmene nisu imale nikakvog efekta i izgledalo je kao da server ignoriše konfiguraciju.

Druga greška je bila gora, jer je izgledala kao greška u kodu: na koji god se model kliknulo, otvarala se ista osoba — prva iz spiska. Lokalno je sve radilo, na živom sajtu nije. Uzrok je bio red u konfiguraciji koji stare adrese sa nastavkom preusmerava na čiste: preusmeravao je ispravno, ali je pri tome bacao deo adrese u kome piše o kom je modelu reč. Strana je zato dobijala prazan podatak i prikazivala prvog iz niza. Ista stvar je pogađala i unapred popunjen booking upit. Popravka je jedan dodatak u tom redu koji prosleđuje upitni deo adrese dalje.

Obe greške vrede zapisa iz istog razloga: nijedna se ne vidi u kodu sajta i nijedna se ne bi našla testom na lokalnoj mašini. Vide se samo ako se sajt otvori onako kako ga otvara posetilac.

SEO, zatvoreno indeksiranje i šta agencija dobija

Sve što pretraga traži je već na mestu. Svaka strana ima svoj naslov, opis i kanonsku adresu; naslovna nosi podatke o agenciji i o sajtu, bordovi nose listu modela kao kolekciju, profili nose podatke o osobi i putanju kroz sajt, editorijali nose galeriju. Adrese su čiste — /women, /men, /editorials, /contact — a stare adrese sa nastavkom trajno se preusmeravaju na njih.

Uz to ide potez koji izgleda kao propust dok se ne objasni: sajt je zatvoren za indeksiranje, a kanonska adresa pokazuje na domen agencije. Na našem poddomenu on ne treba da bude u pretrazi, jer bi se pojavljivao kao još jedan rezultat za ime agencije i cepao signale na dve adrese. To je jedan red koji se skida na dan prelaska na pravi domen, i tada sve gore navedeno počne da radi za agenciju umesto da samo stoji.

Na strani Kontakt i prijava stoji i deo koji nije tehnika nego zaštita branše: skauting je uvek besplatan, agencija nikada ne traži uplatu za upis u bord i ne javlja se preko nezvaničnih naloga. Lažni skauti na društvenim mrežama su realan problem ovog posla i jedino što sajt tu može da uradi jeste da jasno kaže kako prava komunikacija izgleda. Otvoreno o granici ove izvedbe: prijava proverava polja, prihvata dve do četiri fotografije prevlačenjem i prikaže potvrdu, a stvarno slanje i prijem fotografija vezuju se pri prelasku na pravi domen, na isti serverski sloj koji tada služi i podatke o modelima.

Šta agencija na kraju dobija. Sajt koji se otvara odmah jer nema šta da se izvršava; profil za svakog modela sa adresom koja se šalje naručiocu; bord koji se filtrira i pretražuje umesto da se skroluje do dna; jedan fajl na koji se kači njena baza, tako da dodavanje modela ne znači zvati nas; i izgled koji ne konkuriše fotografijama. Bez pretplate, bez zavisnosti koje zastarevaju i bez koraka izgradnje koji jednom prestane da radi.

I onaj deo zbog kog ova studija uopšte postoji. 3D verzija je jača na prvom ekranu, ova je bolja za posao koji se radi svakog dana. Kada je sadržaj sajta tuđe lice, najbolja tehnička odluka je obično ona koja se ne primeti.

// Sajt uživo

FOX Models

Ženski i muški bord, profili modela sa merama, editorijali i prijava za nova lica.

models.svilenkovic.rs

Često postavljana pitanja

Zašto ova verzija nema 3D, kad postoji i takva?
Zato što na sajtu modelske agencije fotografija nosi ceo posao, a svaki efekat oko nje troši pažnju koja je njoj namenjena. Agencija je posle poređenja obe verzije tražila znatno jednostavniju naslovnu, pa je ova dobila sav dalji rad. Tamna 3D izvedba i dalje stoji živa, kao odgovor na pitanje gde je gornja granica atmosfere.
Zašto bez frameworka i bez koraka izgradnje?
Zato što je sadržaj ovde jedino što se stvarno menja. Ceo sopstveni kod su tri fajla od oko sedamdeset kilobajta, pa svaka izmena znači prekopirati jedan fajl na server. Kod sajta koji se mora ponovo izgraditi, ista izmena znači instalaciju zavisnosti i sklapanje svih strana — i jedan korak više koji može da padne.
Može li agencija sama da dodaje modele?
U ovoj izvedbi sadržaj stoji na jednom mestu u kodu, jer je reč o prikazu. Polja u tom fajlu su unapred složena tako da odgovaraju kolonama iz agencijske baze, pa se pri prelasku na pravi domen izvor podataka zamenjuje bez diranja izgleda, a modeli i editorijali idu kroz administraciju.
Zašto se sajt ne pojavljuje u Google pretrazi?
Namerno je zatvoren za indeksiranje jer stoji na našem poddomenu. Da je otvoren, konkurisao bi pravom sajtu agencije za njeno sopstveno ime i cepao signale na dve adrese. Zabrana je jedan red u zaglavlju i skida se onog dana kada sajt pređe na domen agencije.
Zašto booking upit ide mejlom, a ne kroz formu?
Zato što naručilac koji bookira model radi iz svog sandučeta — upit mu mora ostati u prepisci i mora da se prosledi kolegi. Klik na profilu otvara poruku sa popunjenim primaocem, naslovom u kome je ime modela i telom u kome već stoje grad i link na profil. Forma bi ga izbacila iz alata u kome zaista radi.
Zašto se mere modela ne vide na telefonu pri dodiru kartice?
Zato što na dodirnom ekranu ne postoji prelazak mišem, pa bi sloj sa merama ili stalno stajao preko fotografije ili bi se pojavljivao na prvi dodir umesto da otvori profil. Na telefonu su zato fotografije čiste, a ceo set podataka stoji na strani modela, do koje se stiže istim tim dodirom.

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