[{"data":1,"prerenderedAt":399},["ShallowReactive",2],{"portfolio-en-/en/portfolio/visit-pljevlja":3},{"project":4,"isFallback":379},{"id":5,"title":6,"body":7,"description":334,"extension":346,"head":347,"meta":348,"navigation":385,"path":386,"schemaOrg":347,"seo":387,"sitemap":390,"stem":397,"__hash__":398},"portfolio_en/en/portfolio/visit-pljevlja.md","Visit Pljevlja – Destination Platform for Northern Montenegro",{"type":8,"value":9,"toc":333},"minimark",[10,15,19,22,30,33,37,40,47,50,72,75,82,84,88,91,97,104,111,114,116,120,127,133,136,162,169,171,175,178,184,187,194,196,200,203,222,225,247,249,253,259,265,271,277,290,292,296,303,305,309,319,321],[11,12,14],"h2",{"id":13},"a-town-that-did-not-exist-online","A town that did not exist online",[16,17,18],"p",{},"Pljevlja is Montenegro's northernmost town. The Tara Canyon, the Ćehotina river, Durmitor within reach, the Roman Municipium S. at Komini, Husein Pasha's mosque, the Holy Trinity Monastery. All of it has been there for centuries.",[16,20,21],{},"Online, far less of it existed. Tours were sold through foreign platforms or over the phone, information was scattered, and a guest trying to plan a trip had nowhere to go.",[16,23,24,25,29],{},"The brief was not to build a presentation of the town. It was to build ",[26,27,28],"strong",{},"a platform that works like a tour operator",": it sells tours, it takes money, it manages partners, and it works in the languages guests actually arrive from.",[31,32],"hr",{},[11,34,36],{"id":35},"tours-as-a-product-not-a-page","Tours as a product, not a page",[16,38,39],{},"Every tour is a full product with pricing, a season, capacity, departures and rules.",[16,41,42],{},[43,44],"img",{"alt":45,"src":46},"Visit Pljevlja – tour listing with prices, duration and season","/portfolio/visit-pljevlja/tours.webp",[16,48,49],{},"The pricing model follows how operators actually charge:",[51,52,53,60,66],"ul",{},[54,55,56,59],"li",{},[26,57,58],{},"Per person",", price times the number of guests",[54,61,62,65],{},[26,63,64],{},"Per group",", a base price covers a set number of guests, with a supplement for each additional one",[54,67,68,71],{},[26,69,70],{},"Per unit",", price times the number of vehicles or boats, for example two jeeps at €160 each",[16,73,74],{},"On top of that come seasonal prices, a child discount, per-tour add-on options, a card fee and a manual price override for negotiated bookings.",[16,76,77,78,81],{},"Commission is kept separate from price and has five models, from included in the price to a fixed amount per guest. The part that is not obvious is that ",[26,79,80],{},"commission is never visible to the partner",", and that is covered by a test, not by an agreement.",[31,83],{},[11,85,87],{"id":86},"a-booking-flow-that-does-not-charge-immediately","A booking flow that does not charge immediately",[16,89,90],{},"The guest submits a booking request and gets an immediate confirmation. The team sets the price and the deposit, then sends a payment link.",[16,92,93],{},[43,94],{"alt":95,"src":96},"Visit Pljevlja – tour booking request form","/portfolio/visit-pljevlja/booking.webp",[16,98,99,100,103],{},"Payment runs through Stripe, using an embedded payment element ",[26,101,102],{},"on the site's own domain",", not a redirect to somebody else's page. The deposit defaults to 30%, and 1% of every payment goes to charity, shown to the guest before they pay.",[16,105,106,107,110],{},"After payment the guest receives a ",[26,108,109],{},"QR voucher",". The operator scans it on arrival, marks the tour as redeemed, then as completed. The day after the tour a review request goes out with a single-use token, so only guests who actually turned up can leave a rating.",[16,112,113],{},"The whole flow is covered by tests that deal with money: tour pricing, seasonal pricing, per-guest commission, payment idempotency, vendor settlement, pay-on-site, vouchers and worker check-in.",[31,115],{},[11,117,119],{"id":118},"a-partner-portal-with-moderation","A partner portal with moderation",[16,121,122,123,126],{},"Restaurants, accommodation, ethno villages and operators ",[26,124,125],{},"register themselves"," on the site. Once approved they get their own panel where they add tours and places, follow their own bookings and reviews, and create worker accounts that scan vouchers.",[16,128,129],{},[43,130],{"alt":131,"src":132},"Visit Pljevlja – tour page with details, pricing and gallery","/portfolio/visit-pljevlja/tour-detail.webp",[16,134,135],{},"A few decisions here paid off:",[51,137,138,144,150,156],{},[54,139,140,143],{},[26,141,142],{},"Moderation fails closed."," Public visibility requires an explicit approval. If something breaks, the outcome is that nothing shows, not that something unapproved shows.",[54,145,146,149],{},[26,147,148],{},"Edits do not take live listings down."," When a partner edits a tour that is already live, it stays live but is flagged for review, and the admin gets an email and a push notification.",[54,151,152,155],{},[26,153,154],{},"Partners write in one language."," We do not ask a restaurant to translate into eighteen languages. They write in their own, and the translation pass runs after approval.",[54,157,158,161],{},[26,159,160],{},"Workers do not see money."," Worker accounts see the voucher and the tour, not the commission or the earnings.",[16,163,164,165,168],{},"For training there is also a ",[26,166,167],{},"practice voucher",", a page where every button works but nothing is saved, so a new worker can rehearse the check-in flow without any risk of breaking real data.",[31,170],{},[11,172,174],{"id":173},"a-destination-not-just-an-offer","A destination, not just an offer",[16,176,177],{},"Beyond tours, the site runs a full directory of places: nature and landscapes, culture and heritage, where to eat, where to stay, ethno villages.",[16,179,180],{},[43,181],{"alt":182,"src":183},"Visit Pljevlja – Explore Pljevlja page with place categories","/portfolio/visit-pljevlja/explore.webp",[16,185,186],{},"Technically, a place is a single record type with a primary role and secondary ones. A garden that is both a landmark and a restaurant appears in both sections, from one record. The revenue model is tied to the type: restaurants, accommodation and shops pay an annual listing fee, while ethno villages run on per-booking commission like tours.",[16,188,189,190,193],{},"The content about the town was not written from memory. Behind the site sits a ",[26,191,192],{},"knowledge base of 76 documents",", where every non-obvious claim carries a source and a confidence tag, and disputed figures are never published as fact. Because of that the site corrects several local myths instead of repeating them.",[31,195],{},[11,197,199],{"id":198},"eighteen-languages-and-visibility","Eighteen languages and visibility",[16,201,202],{},"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.",[204,205,209,210,209,214,209,218],"div",{"className":206},[207,208],"markdown-image-grid","markdown-image-grid--thumbs","\n  ",[43,211],{"src":212,"alt":213},"/portfolio/visit-pljevlja/lang-en.webp","Visit Pljevlja – homepage in English",[43,215],{"src":216,"alt":217},"/portfolio/visit-pljevlja/lang-me.webp","Visit Pljevlja – homepage in Montenegrin",[43,219],{"src":220,"alt":221},"/portfolio/visit-pljevlja/lang-de.webp","Visit Pljevlja – homepage in German",[16,223,224],{},"Translations are not patched by hand. English is the source, translations are generated per locale, checked structurally and written out as versioned files that a single command applies to the database. A corrected fact goes into the source and is re-run through every language.",[16,226,227,228,232,233,236,237,240,241,246],{},"The site is prepared for both search engines and AI assistants: a per-domain ",[229,230,231],"code",{},"robots.txt"," that explicitly allows GPTBot, ClaudeBot and PerplexityBot, plus an ",[229,234,235],{},"/llms.txt"," following the standard. There is also a Google Ads offline conversion export that reports the ",[26,238,239],{},"net value"," of a paid booking, so Ads optimises on margin rather than turnover. We explain why in our piece on ",[242,243,245],"a",{"href":244},"/en/blog/remarketing-campaigns-for-tourism-how-to-bring-visitors-back","remarketing campaigns for tourism",".",[31,248],{},[11,250,252],{"id":251},"under-the-hood","Under the hood",[16,254,255,258],{},[26,256,257],{},"Backend:"," PHP 8.3, Laravel 13, Filament v4 as the admin with 19 resources and nine dashboard widgets, Spatie Translatable, mcamara localization, Stripe, IMAP mailbox sync, Web Push.",[16,260,261,264],{},[26,262,263],{},"Frontend:"," Blade and Alpine.js, Tailwind CSS v4, Vite, critical CSS. No React, no Vue.",[16,266,267,270],{},[26,268,269],{},"Scope:"," 33 models, 151 migrations, 31 transactional emails, 48 test files, seven scheduled jobs.",[16,272,273,276],{},[26,274,275],{},"On-site operations:"," a PWA with web push, so the owner gets a phone notification the moment a booking or a chat message arrives.",[16,278,279,280,284,285,289],{},"You can read how we approach projects like this on our ",[242,281,283],{"href":282},"/en/services/web-development","Web development"," and ",[242,286,288],{"href":287},"/en/services/system-integrations","System integrations"," pages.",[31,291],{},[11,293,295],{"id":294},"what-came-out-of-it","What came out of it",[16,297,298,299,246],{},"The platform proved solid enough that we turned it into a network. Content is tagged per destination, so the same operator and the same tour can sit on several sites without duplication. The first additional destination is ",[242,300,302],{"href":301},"/en/portfolio/visit-zabljak","Visit Žabljak",[31,304],{},[11,306,308],{"id":307},"visit-the-website","Visit the website",[16,310,311],{},[26,312,313],{},[242,314,318],{"href":315,"rel":316},"https://visitpljevlja.com",[317],"nofollow","visitpljevlja.com",[31,320],{},[16,322,323,324,328,329,246],{},"If you run a tourism board, an agency or a destination and need a platform that actually sells, ",[242,325,327],{"href":326},"/en/contact","get in touch",". Have a look at the other ",[242,330,332],{"href":331},"/en/portfolio","projects in our portfolio",{"title":334,"searchDepth":335,"depth":335,"links":336},"",2,[337,338,339,340,341,342,343,344,345],{"id":13,"depth":335,"text":14},{"id":35,"depth":335,"text":36},{"id":86,"depth":335,"text":87},{"id":118,"depth":335,"text":119},{"id":173,"depth":335,"text":174},{"id":198,"depth":335,"text":199},{"id":251,"depth":335,"text":252},{"id":294,"depth":335,"text":295},{"id":307,"depth":335,"text":308},"md",null,{"slug":349,"industry":350,"location":351,"countryCode":352,"year":353,"date":354,"cover":355,"gallery":358,"results":361,"pattern":374,"draft":379,"readingTime":380},"visit-pljevlja","Destination tourism","Pljevlja","ME",2026,"2026-07-24",{"src":356,"alt":357},"/portfolio/visit-pljevlja/cover.webp","Visit Pljevlja shown on a laptop, tablet and phone",[359,46,132,96,183,360],"/portfolio/visit-pljevlja/home.webp","/portfolio/visit-pljevlja/mobile.webp",[362,365,368,371],{"label":363,"value":364},"Languages","18",{"label":366,"value":367},"Data models","33",{"label":369,"value":370},"Payments","Stripe, deposit",{"label":372,"value":373},"Partners","own portal",{"context":375,"challenge":376,"solution":377,"results":378},"Pljevlja is Montenegro's northernmost town, with the Tara Canyon, Durmitor nearby and layers of history from the Roman Municipium S. to the Ottoman period, but nothing online that actually sold it to a traveller.","They needed a platform that behaves like a tour operator: it sells tours, takes a deposit, manages partners and works in the languages guests actually arrive from.","We built a Laravel platform with a Filament admin: booking with a Stripe deposit, QR vouchers, a partner portal with moderation, a places directory and content in 18 languages.","The site is in production, takes bookings and charges card deposits, partners submit their own listings, and the platform became the basis for a network of Montenegrin destinations.",false,{"text":381,"minutes":382,"time":383,"words":384},"5 min read",5,300000,1000,true,"/en/portfolio/visit-pljevlja",{"title":388,"description":389},"Visit Pljevlja – Tourism Platform for Northern Montenegro","Destination platform for Pljevlja: tour booking with a card deposit, a partner portal, QR vouchers and 18 languages. Read the case study.",{"loc":386,"priority":391,"changefreq":392,"lastmod":354,"images":393},0.8,"monthly",[394],{"loc":395,"caption":396},"https://leovacdigital.me/portfolio/visit-pljevlja/cover.webp","Visit Pljevlja – destination platform for northern Montenegro","en/portfolio/visit-pljevlja","XzLtUpqqCGbVuuhSxbooyZbupcu-2g5DCGEqTtlrfQc",1785756106723]