Након неколико дугих година коришћења WordPress-а заједно са Elementor (Pro)-ом као примарним алатом за дизајн, одлучио сам да је коначно време да видим шта вештачка интелигенција и vibe coding заправо могу да ураде за мене. Познати стек ми је добро служио за лични сајт, али радозналост је превладала и желео сам да сазнам да ли савремени радни процес потпомогнут вештачком интелигенцијом може да замени CMS на који сам се навикао.
Да будемо јасни, ово ми није био први пут да се сусрећем са vibe coding-ом. Пре неколико већ сам га користио да помогнем у стварању основе за један од својих пројеката, једноставну 301 redirect усмерену лендинг страницу под називом Buymeachinesetakeaweay, о којој можете прочитати овде: https://idzan.hr/project/buymeachinesetakeaweay-com-fan-redirect-support-page/. Тај пројекат ме је научио како да дотерам излаз вештачке интелигенције како бих касније могао ручно да уређујем HTML и сам настављам да додајем нове коментаре и занимљиве цитате аутора. Била је то мала ствар, али ми је дала самопоуздање да развој потпомогнут вештачком интелигенцијом може да функционише за мене у већем обиму.
Припрема за скок
Свака озбиљна миграција почиње резервном копијом, а моја није била изузетак. Пре било чега другог направио сам резервну копију оригиналне базе података и свих медијских датотека, и извезао сваки комад садржаја из WordPress-а у његов изворни XML формат. Taj извоз се касније испоставио као златни рудник, јер је дао вештачкој интелигенцији структурирани извор истине за сав садржај који се накупио на сајту током година.
План за нови дизајн је био прилично једноставан. Желео сам да задржим исти или бар веома сличчан изглед и осећај оригиналног сајта, који намерно нисам гасио током прелаза. На тај начин Claude је могао да види сајт уживо и да користи његов постојећи садржај као референцу за нацрте, а кад год мују су били потребни подаци из прве базе података, могао сам једноставан да их повучем из оригиналног садржаја.
Избор темеља
За сам CMS темељ одабрао сам опробану и поуздану комбинацију PHP-а и MySQL-а. У то време је изгледало као досадан, поуздан избор, мада се касније испоставило да има више грешака него што је ико очекивао када су објављене две велике рањивости удаљеног извршавања кода, CVE-2026-109618 и CVE-2026-109619. Срећом, моје вишегодишње искуство као системског администратора и самосталног хостеровања на VPS-у се исплатило. На дан када је закрпа стигла, нисам закрпио PHP само за свој сајт већ за сваки сајт хостован на том VPS-у. Брза захвалност овде за Hetzner и Leaseweb што су тако брзо гурнули закрпљене PHP верзије за моју одабрану дистрибуцију у своје кеш меморије, што је целу операцију учинило много мање болном него што је могла да буде.
Сама изградња
Процес vibe coding-а и дотеривања трајао је укупно неколико дана. Први дан је потрошен на дизајн и основе безбедности, заједно са конфигурацијом чишћења CDN-а преко мог DNS провајдера, па још једна захвалност иде за Bunny.net што је то учинио безболним.
Затим је дошла једна од занимљивијих функција, вишејезични превод покренут вештачком интелигенцијом користећи више AI модела. Тренутно подешавање укључује Google Gemini (gemini-3.5-flash-lite), OpenAI ChatGPT (gpt-6-luna), Anthropic Claude и Google Translate са API-јем ако је потребно. Имати неколико доступних модела значи да нисам закључан у једног провајдера и да могу да упоредим квалитет превода између њих.
Сајт тренутно подржава хрватски (/hr/), босански (/bs/), српски (/sr/) и словеначки (/sl/), при чему сваки добија сопствену копију преведеног садржаја. Енглески остаје оригинал на роут путањи и служи као подразумевани за све што још увек није преведено. Иза тренутног .hr домена, активни су и домени специфични за земље .ba, .si и .rs, заједно са претходно коришћеним .eu и .com.hr, као и .name TLD, при чему сви врше 301 преусмеравање на главни .hr домен без обзира на све. Дакле, ако неко подели објаву са путањом попут /ba/post-name, она пролази кроз .hr/ba/ и слеће на оригиналну путању у њеном босанском преводу. А ако неко слети на сајт и не разуме енглески, нема бриге, превод вештачке интелигенције је ту да помогне путем бирача језика.
Тај бирач језика је сам по себи направљен са SVG иконама застава из мог сопственог скупа икона, којим се управља преко административног панела, а свака је праћена својим ISO 639 језичким кодом, као што је наведено на Википедији на https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes. Занимљиво је да само код хрватског заправо одговара његовом националном TLD-у, при чему hr ознака стоји за оба. Остали се разликују: босански је означен са BS док је његов домен државе .ba, српски је SR наспрам .rs, а словеначки је SL наспрам .si. Енглески је означен са EN, нема сопствени домен државе и приказан је као en-US на сајту.
Око овог времена административни панел је такође добио неопходну пажњу. Постао је мало хаотичан, па сам га сређивао и организовао са одговарајућим подменијима тако да се подешавања поново могу пронаћи.
}Касније сам имплементирао функционалност која невероватно много помаже у вези са брзином и компатибилношћу. Све слике сада добијају WebP и AVIF копије ради бржег учитавања, док оригинални JPG или PNG служе као резервна опција за старије прегледаче. Иконе су очишћени SVG фајлови исцртани директно у страници, никада објављени као фајлови за преузимање, тако да се моји плаћени SVG комплети икона не могу једноставно преузети.
Пуштање у рад је обављено у духу „живог покретања са брзим враћањем на стару и стабилну верзију ако било шта пође наопако“. И искрено, скоро да је и пошло наопако неколико пута због лоше подешених VHOST, NGINX и Varnish Cache конфигурација, да и не спомињем Google PageSpeed модул. Морам бити поштен овде и признати да су те грешке биле моје, а не вештачке интелигенције.
Мали детаљи који су важни
Када је језгро прорадило, додао сам завршна улепшавања. Сајт сада има robots.txt са листом дозвола за добре AI сајт-пецаче, аутоматски ажурирани sitemap.xml са пуном вишејезичном подршком, плус llms.txt за AI асистенте и подршку за IndexNow. Све странице се испоручују као чист статични HTML са структурираним подацима у JSON-LD формату, тако да AI агенти могу лако да читају и прегледају сајт. Добри ботови су добродошли; они који игноришу robots.txt блокирани су на CDN-у путем ивичних правила, уз још једно захваливање за Bunny.net, и директно у vhost конфигурацији.
Што се тиче безбедности, административни панел је заиста сакривен. Не налази се на класичној /admin путањи нити било којој другој која је позната по привлачењу напада грубом силом. Уместо тога, налази се иза заиста јединственог сегмента који нико неће погодити.
Документација и отворени код
Пошто верујем да је пројекат добар колико и његова документација, затражио сам и README и водич за подешавање. Оба су објављена у GitHub репозиторијуму на https://github.com/idzanhr/idzan_custom_cms_refresh. Водич објашњава пројекат и пролази кроз његово подешавање без мог стварног садржаја. Све што је лично моје, попут детаља конфигурације или мојих сопствених кодова, остаје ван јавног репозиторијума и замењено је генеричким еквивалентима за приказ који и даље омогућавају било коме да сам ажурира CMS.
Заврсне мисли
Са овом поставом на месту, такође сам ребазирао и поново изградио свој Music Works сајт на music.idzan.hr користећи исти CMS на истој основи и платформи. За њега је требало мало мање времена да се заврши пошто је то један поддомен који једноставно листа моје радове, а заменио је стару почетну страницу која је имала неки садржај о мени, померајући га на посебну страницу. Што се тиче контаката, он и даље води ка мојој другој страници друштвених мрежа на socials.idzan.hr, коју сам такође креирао у оквиру vibe coding-а али користећи само статичну страницу, пошто ти подаци не морају лако да се мењају или додају и требало би да остану у истом облику. Та страница је једноставна, чиста, уштеђена и брза, са скором 100/100 на Google Lighthouse тестовима без икаквог сувишног терета.
Кад погледам уназад, одлазак са WordPress-а и Elementor-а након свих ових година деловао је ризично, али комбинација пажљиве припреме, солидних резервних копија и развоја уз помоћ вештачке интелигенције показала је да је прилагођени CMS изграђен на овај начин апсолутно изводљив. Сајт је бржи, чистији, лакши за разумевање и ја контролишем сваку његову линију. И ако се било шта икада поквари, још увек имам тај WordPress извоз који сигурно стоји на полици.
Ипак, ово није објава рата WordPress-у. За све будуће пројекте којима је потребан сложенији сајт или веб-продавница, и даље ћу радо посегнути за радно способном и стабилном WordPress инсталацијом са додацима попут WooCommerce-а, плус прилагођеним кодом где је то потребно. А неки сајтови, због свог дизајна и сложености, никада неће бити претворени у пројекте рађене помоћу AI vibe coding-а, и то је свесна одлука донета уз узимање у обзир њихових захтева.
Изнад овог пројекта, мој лични GitHub такође садржи још два пројекта настала vibe coding методом базирана на PHP-у и MySQL-у, направљена за интерну употребу заједно са неколико колега са посла. Они управљају предњим делом док је позадински део у потпуности мој, а можете их погледати на https://github.com/idzanhr?tab=repositories.
Још једна напомена зарад транспарентности: овај текст је генерисан и лекторисан уз помоћ модела Proton Lumo 2.0 Max, на основу мог оригиналног садржаја и белешки.
