Vila Etelka: a bilingual website for weddings, ceremonies, and celebrations

Vila Etelka

2026-07-31

Vila Etelka is a historic villa with a garden in Modra – Harmónia, in the foothills of the Little Carpathians, under half an hour from Bratislava. It is rented as a whole — for weddings, civil ceremonies, family celebrations, and small corporate events. It is not a hotel: it has no rooms of its own, and guests stay in a neighbouring hotel fifty metres from the gate. The previous website was static HTML plus a single PHP page, with the content wired straight into the files. We built a new bilingual site on Next.js and Sanity, where the content no longer lives in the code but in the CMS: texts and photographs can be changed without touching the code and without shipping a new build. The first release, covering all eight pages in Slovak and English, was handed over in a single day; five waves of client revisions followed. The whole project took 13 working days on a €300 budget.

Bilingual venue website + CMS

Project type

Enquiries for weddings, ceremonies, and celebrations; content separated from the code

Main goal

€300

Project price

View live website

Selected screens and visuals

Visual project preview shows how the website looks on different devices. Responsive design ensures perfect display on mobiles, tablets and desktops.

Hero with the kicker “V historickom letovisku · Modra — Harmónia” and the boutique stamp.

The non-trivial parts of the project

Building good-looking pages was the fast part — that took a day. The demanding work sat around it: carrying over everything Google already knew about the villa, making the bilingual setup legible to search engines, stating precisely what the venue is and is not, and keeping the copy accurate through five revision waves in which even basic facts about the place changed.

Problem #1

After the domain switch, every old URL answered with a 404

Google still indexed /index.html, /svadby.html, /historia.html, /galeria.php, and the whole English /en/*.html branch, and third-party sites linked to them. Their ranking signal was quietly leaking away.

Our solution

We did not guess the URL inventory — we pulled it from the Wayback CDX index for the domain and cross-checked it against the old navigation. We shipped 19 permanent redirects, including the non-obvious mappings: /karta.html, the wine list, now points to /gastronomia, and /en/list.html to /en/gastronomia.

Technologies and implementation

Wayback CDX inventory + permanent redirects in next.config

1
Problem #2

The bilingual setup had to be correct for search engines, not just for the visitor

The villa hosts foreign guests, so English cannot be a watered-down echo of the Slovak. At the same time a search engine has to know which version of a page is Slovak and which is English — otherwise the two compete with each other and an English-language searcher is served the Slovak page.

Our solution

Each language has its own localized route — Slovak canonical and unprefixed, English under /en. Every page declares its language from the active locale, carries a canonical and reciprocal hreflang for SK / EN / x-default, and is listed in the sitemap. The English copy is a full human translation, not a machine rendering of the Slovak.

Technologies and implementation

next-intl, localized routes, hreflang and canonical

2
Problem #3

The venue is not a hotel, and that could not be left ambiguous

The villa is rented as a whole and has no rooms of its own — guests stay in a neighbouring hotel fifty metres from the gate. It has no kitchen of its own either and works with a caterer, and it does not host funeral receptions. The old site blurred those boundaries: it mixed the impression of a hotel with that of an event venue, which attracted enquiries the villa cannot serve.

Our solution

We built the page structure around what the villa actually offers: Ceremonies — Weddings — Celebrations — Gastronomy, with copy that promises nothing extra and names the neighbouring accommodation and the catering model outright. In the structured data we deliberately used EventVenue and LocalBusiness rather than Hotel or LodgingBusiness, so that search engines do not file the villa under lodging.

Technologies and implementation

Information architecture + JSON-LD EventVenue and LocalBusiness

3
Problem #4

The content changed five times, and shipping a code release for every wording change made no sense

Every wave of feedback touched dozens of places at once — in both languages. If the copy lived inside the components, each changed sentence would mean a code edit, a build, and a deploy, plus the risk of overwriting a neighbouring block along the way.

Our solution

We lifted the content out of the code and into Sanity — eighteen singleton documents, one per page and language, plus site settings. Each revision wave therefore went in as a content patch applied field by field: no rebuild, no deploy, and no risk of disturbing the neighbouring blocks. That is exactly how the four wedding spaces with capacities of 66 / 66 / 34 / 48 entered the site. It also leaves the site ready to be managed without a developer whenever that is needed.

Technologies and implementation

Sanity singleton schema + field-level content patches

4
Problem #5

Five waves of client revisions changed even the basic facts about the venue

The 15 July call established that the villa is not itself a “historic summer resort” — it is merely located in one — and that the partnership with the neighbouring hotel had ended, so the hotel name, email, and phone had to disappear from every page. The 16 July email corrected the “al fresco” capacity from 66 to 48 and brought the client own copy along with a real photograph attached. On the 31 July call the first hero photograph was dropped, because its windows no longer match the venue and mislead guests; the “V tichu” line was cut; vocals and harp left the music offering while violin and saxophone joined it; and the contact page was to gain a line with the IČO and DIČ registration numbers.

Our solution

We rewrote the phrasing across the whole site, purged the hotel name, email, and phone number from every page, and restructured the weddings page into four spaces with capacities of 66 / 66 / 34 / 48, later 48 for “al fresco”. The wine list disappeared and a new ceremony page took its slot; the “Svadba All Inclusive” popup was removed from the home page; gastronomy was rewritten around the catering model; and on a direct instruction we dropped the phrase “dôstojné spomienky”. The first hero photograph was replaced by a real image supplied by the client, vocals and harp gave way to violin and saxophone in the music offering, and the contact page gained a line for Vila Etelka s. r. o. with its IČO and DIČ registration numbers.

Technologies and implementation

Content revision + patch scripts against live Sanity

5

Similar problems in your business? We will help you solve them with modern tech stack.

Final structure

Complete web structure designed for maximum conversion and user experience. Each page has clear purpose and optimized navigation.

Home
About
Weddings
Ceremonies
Celebrations
Gastronomy
Gallery
Contact
Cookie policy

Most important website sections

Each section solved specific business problem and increased conversions

1

Hero and three numbers

Above a photograph of the garden sits the kicker “V historickom letovisku · Modra — Harmónia”, then the boutique stamp, and immediately after the hero the three facts couples ask about first: ~30 minutes from Bratislava, 50 m to guest accommodation, 66 guests in the garden marquee.

2

The offering trio: ceremonies · weddings · celebrations

Instead of a service list, three equal cards that split the enquiry right on the home page. The ceremony card states what the villa actually supplies: the ceremony table, chairs, sound, and coordination.

3

Four wedding spaces with capacities

Open-air “al fresco” for 48 guests, the garden marquee for 66, the romantic arcade for 34, and the Oblúková sála for 48. Both the order and the numbers came from the client; the copy for the first two spaces is his own, word for word.

4

Gastronomy without an in-house kitchen

The page states openly that the villa has no kitchen of its own and works with a professional catering company. It separately explains that guests often bring their own pastries — the villa provides refrigeration capacity and service staff.

5

A gallery in natural proportions

79 photographs in a CSS-column masonry where each cell takes its aspect ratio from the real image dimensions in Sanity — portraits stay portrait. The lightbox has a focus trap, Esc to close, and arrow-key navigation.

6

Contact and enquiry

The Harmónia 3003 address in Modra, the phone +421 948 008 308, info@vilaetelka.sk, a map, and a “Napíšte nám” form with the date and event type. A separate line lists Vila Etelka s. r. o. with its IČO and DIČ registration numbers.

Project stack

Frontend and design system

App Router, server components, and a custom editorial design system in globals.css instead of a utility mix. Three typefaces with clearly separated roles and restrained scroll reveals.

Hand-written globals.cssMarcellus · Newsreader italic · Hanken Groteskprefers-reduced-motion respected
Next.js 16
React 19
TypeScript
Tailwind CSS v4
framer-motion 12

Content and languages

Sanity as the single source of content: eighteen singleton documents, one per page and language, plus site settings. Components read the CMS with a literal fallback, so the site never renders empty. Slovak is canonical; English is a proper translation, not a machine version.

18 singleton documentsEvery text and photo is a fieldSK as default locale, EN prefixed
Sanity 6
next-sanity 13
next-intl 4
@sanity/image-url

Enquiries and deployment

The contact-page form sends a branded email through Resend, with the visitor in the replyTo field — replying from the inbox answers the couple directly. Validation runs on both the client and the server. Deployment is automatic: previews on branches, production from main.

Server-side validation and input escapingreplyTo set to the visitorPreview and production deploys
Resend 6
Vercel
GitLab CI/CD

SEO, AI, and compliance

Structured data typed as EventVenue and LocalBusiness — deliberately not Hotel or LodgingBusiness, because the villa provides no lodging. Canonical and reciprocal hreflang on every page, a sixteen-URL sitemap, an llms.txt for AI answers, and a GDPR consent banner.

JSON-LD EventVenue + LocalBusinessHreflang SK / EN / x-defaultCookie banner with three categories
JSON-LD
hreflang
robots.txt & sitemap.xml
llms.txt
Cookie consent

💡 Modern tech stack = fast website + easy maintenance + long-term support

Delivery process

We built the site in one go — a complete first release of every page in both languages on day one. The rest of the project was work with the client: five waves of revisions that brought the copy closer to the reality of the venue, and a technical migration at the end.

Day 1 — 21 June

The complete first release

1 day

In a single day we built the design system in globals.css, the Sanity schema, and all eight pages in Slovak and English. A design review of every page at 1440 and 390 px ran the same day; one outcome was fixing the amenities grid on the home page, where three items sat in a four-column grid and left an empty cell.

Day 2–11

Deployment, CMS, and a language pass

10 days

We deployed to Vercel, opened the studio to the client, and polished the UI. On 1 July the whole site went through a Slovak language pass — grammar, Czech-isms, wrong collocations, name declension, and quotation typography; the same fixes were applied to the live CMS content.

15–16 July

The first major wave of client revisions

2 days

The call produced two governing changes: the villa is not a “historic summer resort”, it is only located in one; and the partnership with the neighbouring hotel had ended, so its name, email, and phone had to disappear. We restructured the weddings page into four spaces with capacities of 66 / 66 / 34 / 48, and the phrase “dôstojné spomienky” was dropped from the celebrations page. The next day an email arrived with the client exact copy, the “al fresco” capacity corrected from 66 to 48, and a real photograph attached.

31 July

The second call and handover

1 day

The client had the first large hero photograph removed, because its windows no longer match the venue and mislead guests, and dropped the “V tichu” line, since the place is not marketed as quiet. The music offering lost vocals and harp and gained violin and saxophone. The contact page gained a line for Vila Etelka s. r. o. with its IČO and DIČ, the form got the plain heading “Napíšte nám”, and the date placeholder lost the year. That was the handover, after 13 working days.

After handover

Domain, form, SEO migration, and cookies

5 days

We moved the domain to Vercel without touching the client mail records — MX, SPF, and subdomains stayed intact and were verified afterwards. We wired enquiry delivery through Resend and tested it four times, including against the live domain. Finally came the SEO migration with 19 redirects, robots, sitemap, structured data and llms.txt, the GDPR cookie banner, and a mobile hero fix where the kicker was overlapping the logo.

Project FAQ

Case study summary

This case study shows a specific problem, solution, and outcome. It helps you compare your project to a similar scenario.

Definition: a case study describes a real project with clear inputs and outcomes.

Do you run a wedding or event venue?

We build sites that describe your venue precisely — spaces, capacities, and dates you can edit yourself, in as many languages as you need. And if you are moving off an old site, we carry over what Google already knows about you.

Leave your contact (email or phone is enough)

Write on WhatsApp

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

✨ Content fully in your hands • Bilingual • SEO carried over