Vila & SPA Stević
Villa & spaSrebrno jezero, Serbia
Dates chosen once follow the guest to Booking.com, WhatsApp or a logged inquiry the owner answers with one reply.
Status
Services
- Website · Booking & orders · Lead pipeline & CRM
Year
2026
Results
Not measured yet.

The problem
The old WordPress site still served template demo pages, room pages whose addresses didn't match their content, and copy full of medical claims. Availability lives in a paper planner, and prices live only on Booking.com. The brief: no booking engine, no payments, just get the guest to Booking.com or to the owner.
What we built
- An 8-page static site that replaces an old WordPress install.
- A check-dates panel: two-month calendar, adults, children and each child's age.
- Dates and guests carried in the URL through every page. No cookies.
- Every see-the-price button rebuilt as a Booking.com link with the guest's dates, guests and children's ages.
- WhatsApp messages prefilled with the unit, dates and guests. Viber and a call one tap away.
- Inquiry and gift-voucher forms that write to a Google Sheet first, with status novo.
- An owner email with the guest as Reply-To, so one reply answers the inquiry.
- A 301 map for every old WordPress URL, and 410 Gone for dead template pages.
How it works
The flow end to end, as the system is built to run. Sheet and status names are the client's own.
08 steps · 1 sheet
- Guest opens any page
- Dates and guests, once
- Carried in every link
- Booking.com · WhatsApp · Inquiry
- Checks and honeypot
- Sheet row · novo
- Owner email, reply-to guest
- Booked on Booking.com or by phone
Under the hood
The details a developer checks first. Most of them exist so an inquiry is never lost or sent twice.
- Sheet first, email second. A mail failure is logged, and the inquiry is kept.
- Three outcomes, not two: sent, rejected or unconfirmed. An unconfirmed inquiry is never asked to be sent again.
- Double-submit guard, a 20-second timeout and a prefilled email when the network is down.
- Honeypot checked on both sides, a formula-injection guard and escaped HTML in every email.
- Phone numbers stored as text, so the leading zero survives.
- Old URLs mapped by their real page titles: 14 room pages to 4 room types, 43 testimonial pages to About.
- One-hop redirect to https and www, written around the host's SSL header so it can't loop.
Stack
What it runs on.
- HTML · CSS · Vanilla JS · Google Apps Script · Google Sheets · MailApp · Booking.com deep links · WhatsApp links · Apache .htaccess
Build QA
From our own test runs before launch. These are build numbers, not business results.
- 27 of 27 functional checks pass.
- No horizontal overflow on 9 pages, tested from 360 to 1920 px.
- Contrast failures: 158 at the start, 0 in content after the redesign.
- Three visual QA rounds found 22, 18 and 13 defects. All fixed.
- Four form failures found and fixed, including one that reported success when nothing was sent.
What we didn't build, on purpose
Scope is a decision. Every line here was decided, not forgotten.
- No booking engine and no online payment. The client ruled out both.
- No availability display. There is no digital calendar to read from, so any availability would be invented.
- No nightly prices on the site. Booking.com shows the real price for the chosen dates.
- No spa scheduling on the site. It stays a conversation with the owner.
- No reCAPTCHA. A honeypot checked on both sides, and no puzzle for the guest.
The build
Captured from our local pre-launch build. Phone numbers, email addresses, prices and photos of people from the client's site are blurred wherever they appear.



