FURAI LAB EN RU

Anna-Maria – a seafront guest-house site

adlanna-maria.ru – the site of Anna-Maria, a guest house on the first line of the seafront in Sirius, Sochi, on the east side of the Olympic Park.

The old site ran on Tilda. We built a new one from scratch: our own design, hand-written markup, a page generator and online booking straight with the guest house – no middlemen.

What a visitor sees

The home page opens on a sea view and a "Check dates" form. A guest enters check-in, check-out and the number of guests and goes straight on to the free rooms. If they would rather look around first, further down they find the guest house itself, the rooms, services, a gallery, the location with distances to the sea, the Olympic Park and the airport, guest reviews and contacts.

The Rooms section gathers five categories, with a filter and a comparison. Each category has its own page: size, number of guests, amenities, a starting price and a photo gallery.

Booking happens on the /booking/ page through the Bnovo module, which shows free rooms and prices in real time. Dates from the home-page form are carried over, so the guest never types them twice.

Right under the booking module sits QR prepayment. A guest scans the code in their banking app, or, on a phone, saves the image and uploads it from the gallery.

A partner's widget offers excursions – to Krasnaya Polyana, Abkhazia and elsewhere. The documents are in place too: a privacy policy, a cookie notice and a public offer.

Getting in touch takes one tap: a call to reception, MAX or email.

How it looks and feels

The gallery opens full screen. Photos swipe with a finger, a mouse or a trackpad, the next one glides in behind, and a downward swipe closes it.

The phone layout was designed on its own terms: a dedicated opening shot, carousels for rooms and reviews, and a slide-out menu.

The pace is calm. A smoky-glass header shrinks as you scroll, and blocks fade in as you read.

And the site is fast. Photos are cut to WebP in two sizes (plus JPEG for older browsers), and the font is served from the site itself.

Brand and materials

Beyond the site, we made everything that shapes how the guest house looks.

The logo comes in several versions – colour, flat and solid – and on the site it appears with an animated reveal. Alongside it came icons for services and contacts and a favicon for the browser tab and the phone home screen.

Photography was a job of its own: the rooms, lobby, veranda and the sea view. We selected the shots, graded them and cut them for the site and for the Bnovo booking module.

Finally, guests get an A4 information leaflet – for print and as a PDF.

So people find it

Search engines get structured data: the guest house with its address and coordinates, every room category and breadcrumbs. Every page has its own title and description, and there are sitemap.xml and robots.txt. There is a single main mirror: www and the second domain lead to adlanna-maria.ru.

The site is connected to Yandex Webmaster and Google Search Console. Yandex Metrica and the map switch on only after the visitor agrees in the cookie banner.

The finishing touch is a typographer. It puts non-breaking spaces through every text, so prepositions and numbers never get stranded at the end of a line.

Under the hood

Stack. Static HTML, CSS and plain JavaScript with no frameworks or bundlers: a dozen small modules – menu, carousels, lightbox, room filter, reveal on scroll, cookies, Metrica, map. Page generators are Python 3. Montserrat (300/400/500, Cyrillic and Latin) is served from the site itself as WOFF2. The whole site, photos included, is about 24 MB.

Generators. Data lives in JSON, and pages are built by scripts.

The main one is build_rooms.py. It takes rooms.json with five categories (size, guests, beds, floor, view, starting price, Bnovo id, gallery) and builds from it the /nomera/ catalogue with filter and comparison, the category pages, the home-page cards and the 404. It cuts the header, menu and footer from index.html, so navigation is edited in one place. --check validates the data without writing anything.

The legal pages come from build_legal.py and build_oferta.py: out of legal.json they produce the privacy policy under 152-FZ with a cookie section and the public offer, plus the business-details line in every footer. The /booking/ page with the Bnovo module is built by build_booking.py.

Photos are handled by build_photos.py. It processes the originals in parallel with Pillow: WebP 1600 goes to galleries and the lightbox, WebP 800 only to tiles and cards, JPEG 1200 to older browsers. EXIF and GPS are stripped, frame sizes go into photos.json, and every <img> carries width/height so the page does not jump while loading.

build_sitemap.py takes lastmod from the file's commit date, or today for uncommitted edits. typograf.py puts non-breaking spaces after prepositions and inside numbers on every page. build_pay_qr.py produces the prepayment QR in the Russian banking format GOST R 56042 (ST00012) – SVG for the page and PNG to save to the gallery.

A page is written to disk only when it changed, and CSS and JS carry ?v=<hash> in their URLs, so browsers never hold on to stale versions.

Booking. The home-page form is a plain GET to /booking/?dfrom=…&dto=…&adults=… and works without JavaScript. A script converts the dates to Bnovo's DD-MM-YYYY and hands them to the module. When the URL has no UTM of its own, the booking gets utm_source=site and the page the guest came from, so Bnovo shows that a booking came from the site and where. If the Bnovo module fails to load, the guest sees a fallback – phone and messenger – instead of an endless spinner.

SEO and server. JSON-LD BedAndBreakfast with address and coordinates, HotelRoom for every category, BreadcrumbList on room pages. robots.txt has Clean-param for the booking-form parameters and Yandex Maps tags. .htaccess: a single main mirror (www and annamariasochi.ru – 301 to adlanna-maria.ru), 301s from old category URLs, /index.html → /, trailing slashes on directories, HSTS, nosniff, no-cache for HTML. Metrica, Webvisor and the Yandex map load only after consent in the cookie banner; the choice is kept in localStorage.

Shipping. ./ship.sh – build, list what is about to go out, confirm, upload over SSH with rsync, and verify. The script refuses to write anywhere but this site's directory on the host. The fallback is an FTP mirror that also removes stale files, over FTPS only. After upload verify_live.py downloads every file from the live address and checks its md5, so a half-uploaded file cannot slip through.

What it costs to run

The site runs on ordinary shared hosting at Timeweb – no dedicated server and no database. There are no subscriptions to site builders or plugins: the owner owns the site outright and can move it to any host.


FURAI LAB

Designed and built by FURAI LAB – from the logo, photography and leaflet to design, markup, booking, legal pages and deployment.