Leto Halkidiki: from WordPress to a Laravel portal
Leto Halkidiki is a private accommodation portal for Halkidiki that I rebuilt from WordPress to Laravel. The new structure connects destinations, towns and properties in four languages, with an admin panel and email inquiries to owners. It brings content, search and property data together in a purpose-built application.
Author: Petar Arsić · Updated:
languages: sr, en, ro, el
portal and admin panel
inquiries to property owners
The starting point
The existing WordPress site needed a replacement whose data model reflected how accommodation is actually organised. Each property needed connected descriptions, photos, prices, location and owner details, within its town and destination.
- Organise the catalogue into destinations, towns and properties with explicit relationships.
- Support Serbian, English, Romanian and Greek content without creating unrelated copies of each property.
- Provide an admin panel for maintaining listings and reviewing inquiries.
- Connect search and property pages to a direct inquiry to the owner.
The verified scope is the public portal, admin panel and inquiry handling. Automatic availability confirmation and accommodation payments are not part of the current flow.
The solution
I built a Laravel application using Blade templates, Tailwind CSS, Alpine.js and MySQL. Destinations, towns, properties and owners share a connected data model. Visitors browse the catalogue while administrators maintain content and prices through forms designed around accommodation. Translated fields use spatie/laravel-translatable. The core page content is rendered on the server without requiring a separate JavaScript frontend.
How the portal is organised
Public URLs follow destination → town → property. The language appears at the start of the URL, with translated slugs where available. The separate admin panel requires authentication and uses Serbian.
Public pages
Blade renders destination, town and property pages. Alpine.js handles interactions and Tailwind styles the mobile and desktop layouts. Visitors can move from a broad catalogue to a particular property.
Structured listings
A property belongs to an owner and a town; the town belongs to a destination. Properties have images, amenities and units. Seasonal periods and unit rates support price lists and stay quotes where the necessary data exists.
Four language versions
The locale configuration lists sr, en, ro and el. Translated descriptions, names and metadata use spatie/laravel-translatable. Shared business data remains attached to the same property rather than being duplicated for each language.
Administration
The admin panel manages destinations, towns, owners, properties, photos, pricing and inquiries. Activation and ordering control the public catalogue. Staff can review inquiry details and retry email delivery when needed.
From search to an owner inquiry
Choose a destination
Guests find a region, town or property and narrow the catalogue using relevant criteria.
Review the property
The property page presents descriptions, photos, location, amenities and pricing information where available.
Enter stay details
Dates and party size can produce a quote from the price list. A quoted price does not confirm that the dates are available.
Send an inquiry
Contact and stay details are recorded in the database, preserving the inquiry even if email delivery fails.
Notify the owner
Email goes to the owner or the configured portal inbox if the owner's contact is missing. Administrators can check the record and delivery status.
Arrange the stay directly
The owner and guest confirm availability and terms themselves. The portal does not label this as an automatically completed booking.
SEO and content management
A clear URL hierarchy
Property URLs reflect the destination and town they belong to. Related pages connect the catalogue, letting visitors return to a broader choice while each property retains its own address.
Metadata by page and language
The models include translated title and description fields. Administrators can tailor metadata to a specific page instead of giving every destination or property the same generic description.
Hreflang and sitemap
Alternate URLs are built from the translated slugs. A language with a missing required slug is omitted from those links. The sitemap and language relationships help discovery of the corresponding public pages.
Quotes without false availability
A price list can calculate the cost of a stay, but the current model does not track free and occupied dates. That distinction matters: a quote is not a promise that an owner can confirm those dates.
My role
I worked on the WordPress-to-Laravel migration, data structure, public pages, administration and technical SEO foundations. The work connects the guest experience with the way the catalogue is maintained. The focus is a clear property model and reliable inquiry handling, with later features treated as separate scope.
A verifiable result
The delivered result is a public portal in four languages, with destination, town and property pages, content administration and email inquiries. The active property count changes, so it is not presented here as a permanent outcome. There are no verified before-and-after traffic, ranking or revenue figures to report.
Technology
Related services
Tourism & Accommodation Portals
Custom tourism platforms with listings, destinations, filters, inquiry forms and admin panels — similar function to Nikana or Grčka Info, original design.
Read moreLaravel Applications
Production-grade Laravel backends, APIs and business applications built for reliability.
Read moreWebsite Redesign
Redesign and rebuild your website for better performance, UX, SEO and easier maintenance.
Read moreExplore the portal
Browse the live destinations and listings to see the accommodation presentation. Contacting an owner starts an inquiry about availability and terms, rather than an automatic purchase.
Related solutions and guides
Planning an accommodation website or portal?
Describe your catalogue, languages and inquiry process. I will propose a scope, timeline and fixed development quote based on how your business works.
Discuss your project