Chalupa Za Kútom: a log cottage in the forest that handles its own bookings
Chalupa Za Kútom
Chalupa Za Kútom is a 130-year-old log cottage in Slovinky, in the Spišská Nová Ves district, rented out as a whole: up to eight guests, an outdoor hot tub, a Finnish sauna and a gazebo with a fire pit. The owner had a Webnode site his guests already knew, but bookings arrived through it only as a form, with no calendar and no payment. His own promotional film was embedded as a private YouTube video, so visitors never actually saw it. We built a new site in the spirit of his original design, only cleaner, and put a booking system of its own underneath: an availability calendar in which the departure day can be sold again as an arrival day, payment through Stripe, add-on services, company purchases, an automatic email two days before arrival, and an admin panel where the owner moves bookings and blocks dates from his phone. The site speaks Slovak, English and German. The whole project took 12 working days on a €400 budget.
Cottage website + booking system with payments and admin
Project type
Direct online bookings, paid on the spot, without an intermediary
Main goal
€400
Project price
Selected screens from the live site
Visual project preview shows how the website looks on different devices. Responsive design ensures perfect display on mobiles, tablets and desktops.
The hero with the owner’s own film: the gate with its carved sign, and below it a fact strip of 8 guests, hot tub, sauna, from €110 a night.
The non-trivial parts of the project
A cottage rental site looks simple until real nights start being sold. Then you have to settle when a day ends, who paid first, what a New Year’s Eve night costs, and what the owner gets for his guest register. These are the six tasks the project stood on.
A departure day has to be an arrival day too
Check-out is by 10:00 and check-in from 14:00, so the day between two stays is sold twice. The owner put it in his own words: “ta nedeľa by mala byt voľná keďže odchod je do 10:00 a malo by sa dať rezervovať od nedele do pondelka”. A calendar of whole days would needlessly lock one night every weekend.
The calendar day stopped being indivisible and now has five states: free, booked, a departure day open for arrival, an arrival day open for departure, and past. Half-days are coloured along a diagonal, matching the screenshot the owner sent (“napr 8-9 októbra je to iba na polovicu cervene zelene”). Server and browser exchange ISO dates rather than timestamps, so availability never shifts between a server in UTC and a guest on Bratislava time.
Technologies and implementation
Five day states, ISO dates between server and client
Two guests, one date, one second
There is one cottage, and every night can be sold only once. If two guests click the same weekend at the same moment, the usual “check the database, then write” approach lets both through. On serverless hosting, where each request runs somewhere else, that is not a theoretical risk.
An EXCLUDE constraint inside Postgres forbids overlapping stays, so the database itself rejects the second write and the guest gets a clear message instead of an error. When the guest goes to checkout, the dates are held five minutes longer than the Stripe checkout session lives, and a booking counts as paid only after a signed webhook, not when the guest lands back on the site. Dates imported from external calendars over iCal fall under the same constraint.
Technologies and implementation
Postgres EXCLUDE, Stripe Checkout, signed webhook, Vercel Cron
A price that depends on the date and the add-ons
A night costs €110 midweek, €130 at weekends and €200 over Christmas, New Year and Valentine’s. The owner wanted the higher amount to appear on its own: “dať do aj do cenníka a aj do kalendára aby automaticky keď niekto zaklikne ten termín sa mu zobrazila ta vyššia suma”. On top of that come add-ons with different units: per stay, per person, per morning, and entirely free.
A single function prices every night and every add-on, and the price list, the calendar, the form total, the Stripe line items, the owner’s email and the admin panel all draw from it. The server recalculates the amount and never trusts a figure from the browser. Breakfast is counted as guests × mornings, with the number of mornings capped by the number of nights. The free baby cot is shown with the word “Zdarma” rather than “+0 €”, and it stays in the order, because free does not mean it needs no preparing.
Technologies and implementation
Single source of pricing, server-side recalculation
A promotional film visitors never saw
The owner had his own film made about the cottage and put it on his home page, but as a private YouTube video. Instead of the log cottage, visitors saw a sign-in prompt. The strongest material that existed about the place was, in effect, missing from the site.
From the original edit master we cut a 12.4-second loop of six shots. It starts and ends on a drone shot, so the loop point reads as just another cut. The watermark burned into the picture was cropped out. Encoding settings were chosen from 118 VMAF measurements rather than by eye: 9.4 MB in landscape and 3.4 MB in portrait for phones. The film plays from the site’s own domain, with no YouTube involved.
Technologies and implementation
ffmpeg, VMAF measurement, two video crops
A site guests were already used to
The owner wanted to stay with his design, “just better”. His Webnode site, however, had white button text at a 2.4:1 contrast ratio, a mobile menu that ran off the screen, a heading breaking mid-word at 390 px, two identical forms stacked one under the other, placeholder contacts left over from the template, and an empty terms page reading “Vložte svoj text”.
We measured the look straight from the live page and kept it: typeface, colours, button shape, menu order. The fixes touched only what was broken. The main button became the dark pill that already existed in his own design, a single form remained, and the owner’s rental terms are on the site in full, in three languages. The original authored concept with its woodcarving motif went into the project archive once the owner chose continuity.
Technologies and implementation
Style measurement in headless Chromium, WCAG contrast
Guest register, invoices and company guests
The owner is required to keep a guest register and he issues invoices. A form asking only for name, email and phone gave him data for neither, and a company guest needs an invoice made out to a company ID, not to a private person.
The form asks for a permanent address and says openly why: “Potrebujeme ju do knihy ubytovaných a na faktúru”. Ticking “Nakupujem na firmu” reveals the company name, company ID, VAT number and address, and the server reads them only when that option is actually on. The owner gets the address on a single line in his email and finds it in the admin panel under “Fakturačné údaje”.
Technologies and implementation
Per-field server validation, Drizzle schema migration
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.
Most important website sections
Each section solved specific business problem and increased conversions
Hero with the owner’s film
From the owner’s original film we cut a 12.4-second loop of six shots: drone, the gate with its carved sign, the lantern with the house numbers, the hot tub, the swing by the gazebo, and the drone again. Beneath the headline “Objav miesto, kde splynieš s prírodou.” sits a fact strip: 8 guests, outdoor hot tub, Finnish sauna, from €110 a night.
Booking: calendar, form, payment
On desktop the calendar sits beside the form, so guests see their chosen dates and the running total while filling it in. The form separates adults from children, asks for the address needed for the guest register, offers the add-ons and requires consent to the rental terms before submitting. Stripe Checkout follows.
Price list with seasons
Weekdays €110, weekends €130, and a seasonal €200 a night from 20 December to 1 January and from 13 to 15 February. Below the prices sit the rental conditions and a “Dôležité informácie” block about 4x4-only car access and the lack of any shop or restaurant on site.
A gallery in four groups
Twenty-two of the owner’s photographs in a regular grid, split into Exterior, Interior, Wellness and Garden, with a click-to-open lightbox. We removed the “Obrázky poskytol Pexels” credit, a leftover from the template that sat under his own photographs on the old site.
Voucher
A dedicated gift voucher page with a preview of the voucher bearing the cottage logo and an order form for the number of guests and nights. The description text is the owner’s own, word for word.
Contact with a map
A Google map on the exact point the owner sent himself, and beside it a photograph of the gate so guests know what the place looks like in person. The “Otvoriť trasu v Google Maps” button opens navigation on a phone.
Project stack
Frontend and design
App Router, server components, and a design built on the visual language of the owner’s original site: PT Serif, a muted slate palette, pill-shaped buttons and rounded photographs.
Bookings and payments
A booking first holds the dates, then sends the guest to Stripe Checkout. Double bookings are ruled out by a constraint inside the database itself, not by an application check. One function prices the nights and the add-ons for the price list, the calendar, the form total, the checkout and the email alike.
Admin and email
A password-protected admin panel with a booking list, booking detail, date blocks and settings. Emails reach the guest in their own language and the owner always in Slovak, including the add-on breakdown and invoicing details.
SEO, AI and compliance
Three languages with a path prefix, hreflang and canonical on every page, BreadcrumbList on subpages, and an llms.txt generated from the same dictionaries as the site itself. GA4 and GTM switch on only after consent, in a cookie banner with two equal buttons.
Frontend and design
App Router, server components, and a design built on the visual language of the owner’s original site: PT Serif, a muted slate palette, pill-shaped buttons and rounded photographs.
Bookings and payments
A booking first holds the dates, then sends the guest to Stripe Checkout. Double bookings are ruled out by a constraint inside the database itself, not by an application check. One function prices the nights and the add-ons for the price list, the calendar, the form total, the checkout and the email alike.
Admin and email
A password-protected admin panel with a booking list, booking detail, date blocks and settings. Emails reach the guest in their own language and the owner always in Slovak, including the add-on breakdown and invoicing details.
SEO, AI and compliance
Three languages with a path prefix, hreflang and canonical on every page, BreadcrumbList on subpages, and an llms.txt generated from the same dictionaries as the site itself. GA4 and GTM switch on only after consent, in a cookie banner with two equal buttons.
💡 Modern tech stack = fast website + easy maintenance + long-term support
Delivery process
The owner sent his requests over WhatsApp in short batches. We broke each one down into points with his quotes, implemented it and sent it back for approval. The order of work was agreed with him up front: design, calendar, payments.
10–13 September
Materials and first concept
2 daysWe gathered the content and 24 photographs from the original site, built an authored concept across eight pages, and set up deployment to Vercel through GitLab CI.
14–16 September
The site in the owner’s style, and the hero film
2 daysAt the owner’s request we rebuilt the site in the visual language of his original page, then refined typography and rhythm in a second pass. The hero film, the full rental terms, the Voucher page, the contact map and the availability calendar were added.
17–19 September
Booking system
3 daysA database with double-booking protection, Stripe payments, the admin panel and an end-to-end check against the live database. Alongside came seasonal prices, adults and children counted separately, the add-on services and three languages: Slovak, English and German.
20–22 September
Emails, invoicing and launch prep
3 daysAn email to the guest two days before arrival, re-sent against the new dates whenever a booking is moved. The guest address and the company purchase mode. llms.txt, the cookie banner, BreadcrumbList and a Lighthouse audit: 100 for accessibility, best practices and SEO on every page.
23–24 September
Analytics, half-days and handover
2 daysGA4 and GTM wired to fire only after visitor consent. Following the owner’s last requests, the calendar gained half-day changeovers and the baby cot became free. That was the handover, after 12 working days.
Project FAQ
Do you rent out a cottage, cabin or apartment?
We build sites with bookings that are paid on the spot, a calendar that understands changeover days, and an admin panel you can run from your phone. No intermediary commission on every night.
Leave your contact (email or phone is enough)
✨ Your own bookings • Online payments • Multilingual