A three-star guesthouse at 1,700 m on the Transalpina, presented like a travel feature rather than a booking funnel. The whole site reads as one long-form editorial piece — kicker dashes, oversized decorative numerals, pull-quotes with double rules, headings that rise quietly in the opening section — built on native WordPress site editing, with no visual page builder, and four dedicated content types: rooms, ski slopes, trails and attractions.
The owner answers the phone personally. The site had to sound the same way.
- 35
- Editorial pages
- 4
- Dedicated content types
- 0
- Visual page builders used
- 360
- px — reference screen
The challenge
Most accommodation websites start from the same structure: a gallery, a list of facilities, prices, contact details. For Cabana Rareș, that was not enough. Choosing where to stay in Rânca also depends on questions that do not fit inside a room card: how you get there in winter, what happens when sections of the Transalpina are closed, how close the ski slope is, what is worth seeing at that time of year.
So we built a site that opens with the guesthouse's own snowfall, leads with a specific place ("aproape de Pârtia M1, departe de agitație"), and gives a guest enough context — the winter road, the Transalpina in summer, the rooms — to decide before picking up the phone. A website the owner can confidently send whenever someone asks "where exactly are you?".
01 · The opening

The approach
The site uses WordPress 6.7's own site editing, with no additional visual page builder. The design system lives in theme.json — colour, type scale, spacing, fluid type, layout and motion — and the page patterns, templates and block styles all draw on the same values. The main palette is managed centrally, so it can be adjusted from one season to the next in one place, with contrast re-checked.
Content lives in four dedicated content types — rooms, ski slopes, trails and attractions — each with its own URL structure, taxonomies, schema.org JSON-LD and page template. Text, images and day-to-day information are edited in WordPress; the theme renders them into the agreed structure. No drag-and-drop, no shortcodes, no third-party block libraries.

The solution
A coherent visual system, drawn from travel publishing, plus the WordPress work behind it.
Design language
- Display typography in Cormorant Garamond (variable, self-hosted). Body in Plus Jakarta Sans (variable, self-hosted) — diacritics checked across ă â î ș ț.
- An editorial accent vocabulary: a kicker with a copper dash, a 10 px dot after every major heading, pull-quotes with double rules, oversized decorative numerals as section watermarks.
- Headings that rise quietly in the opening section — the words arrive one after another, kicker first, image credit last. For visitors who have reduced motion enabled, only a plain fade remains.
- YouTube videos appear first as a still preview image with a play button, and load only once the visitor presses play. No iframes on page load.
Information architecture
- At launch, 35 editorial pages, written from scratch, with a chapter structure for the long reads (Drumul de iarnă spre Rânca, Transalpina traseu complet).
- Four dedicated content types and 23 individual pages, generated automatically from one template per type.
- A fixed chapter rail on long reads (three chapters or more), driven by IntersectionObserver — a gold left border marks the active chapter.
- The technical groundwork for an English version is in place via Polylang; for now, only the Romanian site is published.
02 · The room page

Technical implementation
- The structure and base content are initialised from code, through a project-specific module, and stay versioned: every page, room, slope, trail and attraction exists in the repository. The module can be re-run without duplicating content.
- JSON-LD structured data suited to each content type: organisation, local business, breadcrumb navigation, accommodation for rooms, and tourist route for the pages that describe an actual itinerary.
- A custom enquiry form on dedicated REST endpoints — validation, protection against automated submissions, rate limiting and safe handling of the data entered.
- Performance was a project requirement from the start — self-hosted variable fonts, styles loaded only for the components used on a page, lazy-loaded below-fold imagery, and explicit width and height on every
<img>to reduce layout shifts.
Three moments worth zooming into
The opening section
Three lines of serif type rise over a winter sunset photograph of the guesthouse, each line staggered to the same rhythm as the snowfall behind it. The phone number stays visible in a translucent utility bar above. From the first second the site sets its register: an editorial presentation, not a generic list of facilities.

The chapter narrative
The page about the winter road from Novaci to Rânca reads like a travel essay — a kicker, the chapter number enlarged into a decorative numeral, body text wrapping a pull-quote with double copper rules. On larger screens a fixed chapter rail runs down the left edge; an IntersectionObserver switches the active chapter as you scroll. All of it sits in the theme, with no third-party extensions, and on mobile it collapses into a horizontal bar of compact buttons.
03 · The editorial range

The four content types
Rooms, ski slopes, trails, attractions — each has its own columns in the admin interface, its own taxonomy, its own page template and its own JSON-LD shape. The structure lets a new ski slope be added coherently without rebuilding the template: the site generates the page automatically, with breadcrumbs, structured data, related content and the same editorial language as everything else.
04 · The signature

The stack
WordPress 6.7+ FSE PHP 8.2 theme.json Cormorant Garamond + Plus Jakarta Sans (self-hosted)
Custom block theme custom setup module 4 dedicated content types Polylang-ready
Schema.org JSON-LD Native WordPress search YouTube loaded on request
Designed from 360 px up Self-hosted assets No visual page builder
The result
The site is live at cabanarares.ro, written to keep the owner's direct tone and reviewed with her. The design system, the content initialised from code and the dedicated content types sit in the custom theme and the module delivered alongside it; both belong to the client and can be taken over by another team, together with the installation instructions. The main visual elements are controlled centrally, from one place. No agency-owned platform, no obligatory retainer with us, and the core of the site does not depend on an active commercial licence.
You own the code. The site opens like a travel feature, gives the guest the context they need, and leaves the owner one job: answering the phone.



