Case study · Premium transport and transfers

Elite Ride – Premium Chauffeur Service with Online Payments

A premium transfer website: live pricing per vehicle class, card payments through Monri WebPay and an admin panel for bookings. Read the case study.

Zeta, Podgorica Year: 2026 ME
Payments: Monri, 3-D SecurePricing: live per vehicle classAdmin: Vue panel

Business card or sales channel

Elite Ride Mugoša runs premium transfers in Montenegro. Airport transport, business travel, weddings, private tours. The fleet ranges from a limousine for two to a minibus for sixteen.

Operators like this usually have a website that looks good and does nothing. A photo of a car, a list of services, a contact form, and then waiting for someone to send an enquiry and ask what it costs.

Our job was to flip that: the guest should get a price before asking anyone, and be able to pay straight away if they want to.


Live pricing, per vehicle class

The homepage carries a booking bar: date, time, pickup and drop-off.

Addresses are picked through Google Places search that runs via our own server and is cached, so it is fast and does not burn quota on every keystroke. Search suggests Montenegrin results first, then widens to the region.

Once the guest confirms, the system requests a price from the operator's dispatch system, for exact coordinates and an exact time, and returns an amount for every active vehicle class. Alongside the base fare come the surcharges the operator applies: extra stop, child seat, meet and greet, gratuity, fuel, airport fee, night driving and rush hour.

When a booking goes through, it is pushed back into the dispatch system, so the driver receives the job through the tool they already use. Nothing is retyped from an email into a schedule.


Payments that had to wait for a bank

This was the longest part of the project and it is worth telling honestly.

The site launched on one gateway, and during the summer of 2026 we migrated to Monri WebPay using their components integration. The migration meant a new request signature, new webhook verification and a fresh round of validation with the bank.

A few decisions made that safe:

  • The webhook is verified by signature, compared in constant time, so a forged call cannot mark a booking as paid
  • The card payment switch is enforced on the server. Until the bank approved, the payment path returned an error and the card field was not rendered at all. This was a closed path, not a hidden button.
  • "Order and pay later" always works, so the business never stalled for a single day while approval was pending
  • There is a separate password-protected test page the bank uses to validate the integration on a real transaction, with no contact whatsoever with the live flow

The footer carries Visa, Mastercard and Maestro marks, alongside pages on payment security, cancellation and refunds, because card payments require a legal framework and not only a technical one.


Fleet and services the client manages

Vehicle classes sync from the dispatch system, but everything the guest sees stays in the client's hands: name, description, images, drag-and-drop ordering and a visibility toggle. The sync deliberately does not resurrect locally deleted classes and does not overwrite manually entered names, because otherwise every sync would undo the editing.

Services, homepage banners and news all run through the same admin, with a rich text editor and translations for both languages in tabs.

The news module is not decoration. Through it the site captures seasonal searches: a new airline arriving in Podgorica, festivals, transfer advice. Those are the topics that bring in guests who are still planning a trip.


Rules that protect the schedule

Rides are not accepted without limits. The admin configures advance notice rules by distance band from Podgorica, so long-distance rides require more notice. Distance is calculated against a fixed base point, so the rule behaves the same regardless of where the guest is coming from.

Abandoned bookings are cleared by a scheduled job, so the booking list stays usable.


Under the hood

Backend: PHP 8.2, Laravel 13, Spatie packages (permission, translatable, sitemap, honeypot), Sentry, reCAPTCHA Enterprise alongside a honeypot.

Public site: Blade with an SCSS theme and Alpine.js.

Admin: Inertia.js with Vue 3 and Vuetify, fourteen screens, with per-section permissions (bookings, articles, services, banners, vehicle classes, advance rules, translations, users).

Integrations: the operator's dispatch system for pricing, extra fees and pushing bookings back, Google Places for addresses, Monri WebPay for cards.

SEO: a sitemap generated by crawling the site with hreflang alternates, seven JSON-LD schemas (organisation, local business, website, breadcrumbs, FAQ, site navigation), GA4, Google Ads and Clarity, each rendered only when its identifier is set.

Scope: 12 models, 26 migrations, two languages (English and Montenegrin), around 95 commits between April and July 2026.

You can read how we approach projects like this on our Web development and UX and web pages.


What came out of it

Working on this site showed that the same operator has two entirely different audiences. A guest looking for a wedding limousine and a passenger looking for an airport taxi do not search the same way and do not decide the same way.

So for the same client we also built Podgorica Airport Taxi, a site focused purely on airport transfers with fixed prices per route. Both sites carry the Zayoto mark, and the experience from both is built into the transfers module on the Zayoto platform.


Visit the website

eliteride.me


If you run a transport business and need a website that quotes and takes payment rather than simply showing vehicles, get in touch. Have a look at the other projects in our portfolio.

Next step

Have an idea for a similar project or want a system review?

Based on projects like these, we build digital systems that give you back your time. Get in touch so we can see what's realistic for your business in the next 6-12 months.