[{"data":1,"prerenderedAt":352},["ShallowReactive",2],{"portfolio-en-/en/portfolio/visit-zabljak":3},{"project":4,"isFallback":332},{"id":5,"title":6,"body":7,"description":288,"extension":299,"head":300,"meta":301,"navigation":338,"path":339,"schemaOrg":300,"seo":340,"sitemap":343,"stem":350,"__hash__":351},"portfolio_en/en/portfolio/visit-zabljak.md","Visit Žabljak – Destination Platform for Durmitor in 18 Languages",{"type":8,"value":9,"toc":287},"minimark",[10,15,19,33,36,39,43,46,53,56,89,92,94,98,101,107,114,117,137,140,142,146,149,155,162,169,172,174,178,181,200,203,205,209,212,218,221,223,227,233,239,245,258,260,264,273,275],[11,12,14],"h2",{"id":13},"a-second-destination-on-the-same-engine","A second destination on the same engine",[16,17,18],"p",{},"Žabljak sits at around 1,456 metres, is the highest town in the Balkans and the main gateway to Durmitor National Park. It has eighteen glacial lakes, Bobotov Kuk, and the Tara Canyon on its doorstep. What it did not have was a single place selling all of that.",[16,20,21,22,27,28,32],{},"When we finished ",[23,24,26],"a",{"href":25},"/en/portfolio/visit-pljevlja","Visit Pljevlja",", it was clear the same engine could drive more than one destination. Žabljak was the natural next step, for a practical reason: ",[29,30,31],"strong",{},"rafting on the Tara, canyoning in Nevidio and jeep tours around Durmitor are sold by both destinations",". Same tour, two gateways, one operator.",[16,34,35],{},"So Žabljak is not a new website. It is a second destination in the network, on the same codebase and in the same admin.",[37,38],"hr",{},[11,40,42],{"id":41},"what-a-second-destination-means","What \"a second destination\" means",[16,44,45],{},"Content is tagged per site through a many-to-many relation. One tour can belong to both Pljevlja and Žabljak and will appear on both sites without a single duplicated record. Bookings land in the same inbox, stamped with the site they came from.",[16,47,48],{},[49,50],"img",{"alt":51,"src":52},"Visit Žabljak – tour listing with prices, duration and season","/portfolio/visit-zabljak/tours.webp",[16,54,55],{},"What is specific to Žabljak:",[57,58,59,71,77,83],"ul",{},[60,61,62,65,66,70],"li",{},[29,63,64],{},"Its own domain and brand",", ",[67,68,69],"code",{},"visitzabljak.me",", its own logo and its own homepage",[60,72,73,76],{},[29,74,75],{},"Its own theme",", a blue-green \"alpine\" palette instead of the Pljevlja green, done through CSS variables with no second build",[60,78,79,82],{},[29,80,81],{},"Its own copy",", homepage, a \"Where is Žabljak\" page, legal pages and fun facts, translated into all 18 languages",[60,84,85,88],{},[29,86,87],{},"Its own data",", coordinates for the weather widget and a dedicated sender address for email, so SPF and DKIM always match the domain",[16,90,91],{},"The practical consequence: a new destination launches in days rather than months, and maintenance stays on one codebase.",[37,93],{},[11,95,97],{"id":96},"maya-an-ai-guide-that-only-knows-what-the-site-knows","Maya, an AI guide that only knows what the site knows",[16,99,100],{},"The site has an AI assistant called Maya. She is not decoration.",[16,102,103],{},[49,104],{"alt":105,"src":106},"Visit Žabljak – the Maya AI guide open over the tour listing","/portfolio/visit-zabljak/maya.webp",[16,108,109,110,113],{},"Maya runs on an Anthropic model and ",[29,111,112],{},"her knowledge is the site itself",". Tours, places, guides and practical information are compiled into a knowledge base per destination and per language, and the cache is invalidated the moment something is published or taken down. She cannot quote a tour that has been withdrawn.",[16,115,116],{},"Three things mattered to us:",[57,118,119,125,131],{},[60,120,121,124],{},[29,122,123],{},"She can prepare a booking."," Maya assembles the tour, date, guest count, departure time and meeting point into a single-use token, and the guest reviews and submits it themselves on the booking form. Maya does not book on the guest's behalf.",[60,126,127,130],{},[29,128,129],{},"She never fails onto the guest."," Any error, refusal or timeout ends in a polite apology and a handoff to a human, with the team notified. The guest never sees an error.",[60,132,133,136],{},[29,134,135],{},"She cannot burn the budget."," A daily message cap at site level, a daily cap per visitor and a hard limit per conversation. One abuser cannot switch the chat off for everyone else.",[16,138,139],{},"Conversations are kept for ninety days, then deleted automatically. Once a week an anonymised report arrives on what guests asked, and that becomes the list of gaps in the content.",[37,141],{},[11,143,145],{"id":144},"booking-and-payment","Booking and payment",[16,147,148],{},"Booking does not charge immediately. The guest sends a request, gets a confirmation, the team sets the price and deposit, then the payment link goes out.",[16,150,151],{},[49,152],{"alt":153,"src":154},"Visit Žabljak – tour page with pricing, season and booking form","/portfolio/visit-zabljak/tour-detail.webp",[16,156,157,158,161],{},"Payment runs through Stripe, but ",[29,159,160],{},"on the site's own domain",", using an embedded payment element rather than a redirect. The deposit defaults to 30%, and 1% of every payment goes to charity, visible to the guest.",[16,163,164,165,168],{},"After payment the guest receives a ",[29,166,167],{},"QR voucher",". The operator scans it on site, marks the tour as redeemed, then as completed. A worker signed in with their own account sees the voucher and the tour, but never sees a single commission figure.",[16,170,171],{},"Tour pricing covers how the work is actually done: per person, per group with a base guest count and a supplement for each extra one, or per unit (two jeeps at €160). On top of that come seasonal prices, a child discount and per-tour add-on options.",[37,173],{},[11,175,177],{"id":176},"eighteen-languages","Eighteen languages",[16,179,180],{},"The site runs in 18 languages: English, Montenegrin, German, Russian, Hungarian, French, Italian, Polish, Turkish, Albanian, Spanish, Slovak, Slovenian, Ukrainian, Dutch, Danish, Swedish and Norwegian.",[182,183,187,188,187,192,187,196],"div",{"className":184},[185,186],"markdown-image-grid","markdown-image-grid--thumbs","\n  ",[49,189],{"src":190,"alt":191},"/portfolio/visit-zabljak/lang-en.webp","Visit Žabljak – homepage in English",[49,193],{"src":194,"alt":195},"/portfolio/visit-zabljak/lang-me.webp","Visit Žabljak – homepage in Montenegrin",[49,197],{"src":198,"alt":199},"/portfolio/visit-zabljak/lang-de.webp","Visit Žabljak – homepage in German",[16,201,202],{},"Translation is not a file-by-file chore. The source text is written in English, translations are generated per language, checked structurally, then written out as versioned files that a single command applies to the database. A corrected fact goes into the English source and is re-run through every language, instead of being patched in eighteen places.",[37,204],{},[11,206,208],{"id":207},"what-you-see-on-the-site","What you see on the site",[16,210,211],{},"Beyond tours, the whole destination is there: nature and landscapes, culture and heritage, where to eat, where to stay, ethno villages.",[16,213,214],{},[49,215],{"alt":216,"src":217},"Visit Žabljak – Explore Žabljak page with place categories","/portfolio/visit-zabljak/explore.webp",[16,219,220],{},"Places are modelled as a single record type with multiple roles, so a restaurant that is also a landmark sits in both sections without duplication. There is also a blog of Durmitor stories, a live weather widget for Žabljak, and a partner portal where local operators submit their own tours and places, with mandatory moderation before publication.",[37,222],{},[11,224,226],{"id":225},"under-the-hood","Under the hood",[16,228,229,232],{},[29,230,231],{},"Backend:"," PHP 8.3, Laravel 13, Filament v4 as the admin, Spatie Translatable for translatable columns, mcamara localization for language prefixes, Stripe, the Anthropic API for Maya, Open-Meteo for weather.",[16,234,235,238],{},[29,236,237],{},"Frontend:"," Blade and Alpine.js, Tailwind CSS v4 with CSS-first configuration, Vite, critical CSS at build time. No React, no Vue, no jQuery.",[16,240,241,244],{},[29,242,243],{},"Infrastructure:"," MySQL behind Cloudflare, automatic database backups every two hours with seven-day retention, deployment exclusively through GitHub.",[16,246,247,248,252,253,257],{},"We write more about building tourism sites that actually take bookings in ",[23,249,251],{"href":250},"/en/blog/websites-that-generate-inquiries-bookings","websites that generate inquiries and bookings",", and about reducing dependence on foreign platforms in ",[23,254,256],{"href":255},"/en/blog/direct-bookings-vs-ota-reduce-booking-com-dependence","direct bookings vs Booking.com",".",[37,259],{},[11,261,263],{"id":262},"visit-the-website","Visit the website",[16,265,266],{},[29,267,268],{},[23,269,69],{"href":270,"rel":271},"https://visitzabljak.me",[272],"nofollow",[37,274],{},[16,276,277,278,282,283,257],{},"If you run a destination, a tourism board or a tour operator and need a platform that sells rather than merely displays, ",[23,279,281],{"href":280},"/en/contact","get in touch",". Have a look at the other ",[23,284,286],{"href":285},"/en/portfolio","projects in our portfolio",{"title":288,"searchDepth":289,"depth":289,"links":290},"",2,[291,292,293,294,295,296,297,298],{"id":13,"depth":289,"text":14},{"id":41,"depth":289,"text":42},{"id":96,"depth":289,"text":97},{"id":144,"depth":289,"text":145},{"id":176,"depth":289,"text":177},{"id":207,"depth":289,"text":208},{"id":225,"depth":289,"text":226},{"id":262,"depth":289,"text":263},"md",null,{"slug":302,"industry":303,"location":304,"countryCode":305,"year":306,"date":307,"cover":308,"gallery":311,"results":314,"pattern":327,"draft":332,"readingTime":333},"visit-zabljak","Destination tourism","Žabljak","ME",2026,"2026-07-26",{"src":309,"alt":310},"/portfolio/visit-zabljak/cover.webp","Visit Žabljak shown on a laptop, tablet and phone",[312,52,106,217,154,313],"/portfolio/visit-zabljak/home.webp","/portfolio/visit-zabljak/mobile.webp",[315,318,321,324],{"label":316,"value":317},"Languages","18",{"label":319,"value":320},"AI guide","Maya, 24/7",{"label":322,"value":323},"Bookings","card deposit",{"label":325,"value":326},"Codebase","shared with network",{"context":328,"challenge":329,"solution":330,"results":331},"Žabljak is the highest town in the Balkans and the gateway to Durmitor National Park, but online it was covered by scattered listings and foreign OTA platforms, with no single place selling the destination.","It needed a full destination platform with its own identity, without building a second website from scratch and without duplicating the tours Žabljak shares with Pljevlja.","We launched Žabljak as the second destination in the Visit network: the same Laravel codebase and one admin, but its own brand, theme, homepage, content and domain, with content tagged per site.","The site is in production in 18 languages, with a booking flow and a card deposit, the AI guide Maya and a partner portal, and Pljevlja and Žabljak share tours without a single duplicate record.",false,{"text":334,"minutes":335,"time":336,"words":337},"5 min read",4.56,273600,912,true,"/en/portfolio/visit-zabljak",{"title":341,"description":342},"Visit Žabljak – Destination Platform for Durmitor","Destination platform for Žabljak and Durmitor: tour booking with a card deposit, an AI guide, a partner portal and 18 languages. Read the case study.",{"loc":339,"priority":344,"changefreq":345,"lastmod":307,"images":346},0.8,"monthly",[347],{"loc":348,"caption":349},"https://leovacdigital.me/portfolio/visit-zabljak/cover.webp","Visit Žabljak – destination platform for Durmitor and the Tara Canyon","en/portfolio/visit-zabljak","wgcgbzvwc55NRUp8RnrqQYu3BVEqoWriFh5EwbDJL8g",1785756106720]