Case study · Real estate and hospitality · 2026

Miroset.

A premium country resort in Sochi — and a landing the founder edits without a developer.

Full cycle, one person: design, build, deploy and a hosting rescue.

Design systemProduct designAdmin panelInfrastructure
Mobile scenario card
Mobile location block
Miroset mobile hero with a gold primary button
0
dev requestsfor content edits — the founder
runs the site via the admin
100%content restored after losing the hosting
0developer requests for content edits
89files restored
372 MBvideo, photos, gallery, logos, texts
2domains with SSL
200HTTP on miroset.ru, valid SSL
Overview

A resort-and-business village-hotel on the Matsesta slope, in Santorini style — sold to owners, companies and investors from one landing.

SochiLocationPHP + JSON + adminPlatform1Person, full cycle
IndustryReal estate / hospitality
RoleDesign + build + infra
ScopeProduct design, design system, layout and development, admin panel, deploy
AudiencesIncome-residence owners · corporate retreats · partners and investors
Read the full story

MIROSET is a developer and operator of managed premium country ecosystems. The first location is a resort-and-business village-hotel in Sochi, on the Matsesta slope, in Santorini style. The landing has to attract three audiences: future owners of income residences, companies looking for corporate retreats, and partners and investors. I did the full cycle alone: product design, layout, development, deploy and infrastructure support.

This is not a “drew it and handed it over” project. It combines a design system, my own implementation, a product decision — editable without a developer — and crisis management when the site and the founder’s data had to be saved.

Domains: miroset.ru is the main one, миросеть.рф redirects to it.

The landing

One page. Three audiences.

Owners, companies and investors each find their scenario — on one calm, photo-led page.

8
blocksHero · Scenarios · Location · Product line
OS “ОСЬ” · Partners · Participation · Contacts
The brief

The site must change without a developer.

01 · Brief

Three audiences, one landing

02 · Approach

Content is data

03 · Outcome

Live, editable, resilient

miroset.ru
Miroset hero with a video background, gold primary button and light secondary button
Read the full story

The brief. A landing for a premium country resort in Sochi that speaks to owners, companies and investors at once. The key requirement: the site must be editable without a developer. Texts, photos, video, blocks, colours, fonts and logos are changed by the founder.

The approach. A data-driven landing: all content lives in content.json and PHP renders the page from it. On top, an admin panel for every field, media, blocks and theme. Underneath, one warm design system: neutral palette, a single gold accent, one font.

The outcome. miroset.ru answers HTTP 200 with valid SSL and works fully. The founder edits the whole site via the admin, with zero requests to the developer for content edits. When the hosting was lost, the site came back with no data loss: 100% restored.

Site blocks

Video, scenarios, an app — at 390 px.

Hero · video
Mobile hero
Scenarios
Mobile scenario card
Location · video
Mobile location block
OS “ОСЬ”
Mobile OS block: the management app
Product line
Mobile product line carousel
Participation
Mobile participation formats
All site blocks
  • Hero — video background.
  • Stay scenarios — Own / Visit / Gather your team / Create.
  • Sochi location — video background.
  • Product line — gallery carousel.
  • OS “ОСЬ” — the management app.
  • Partners — logos.
  • Participation — Google Forms.
  • Contacts — how to reach the team.
Design system

Warm neutrals. One gold accent.

A full redesign to the new brand guide in one pass — so the photos of the place carry the colour.

Palette
Background#F8F5F0
Cards#FFFDFC
Headings#574D44
Text#6B635B
Lines#DED5CA
Decor#E8DED1
Gold CTA105° gradient
CTA text#493D32
Type
Aa
64–72

One font — Manrope with Cyrillic — replaces Georgia and Inter. SemiBold headings; only eyebrows in caps.

The gold button rule
YesOne gold button per screen
NoGold competing with gold
miroset.ru · stay scenarios
Stay scenarios: neutral cards with a colour photo on top and gold icons
The full system

The main part of the work: a full redesign to the new brand guide in one pass — palette, a single font, one card system and one rule for the call to action.

Palette. A warm neutral base: background #F8F5F0, cards #FFFDFC, headings #574D44, text #6B635B, lines #DED5CA, decor #E8DED1, photo overlay #4E443C at ~66%.

The gold button rule. A 105° gradient from #D9A03A to #C17D22 with dark brown text #493D32, darkening on hover. One dominant gold button per screen; the rest are light or outline.

Typography. A single font, Manrope with Cyrillic, replacing Georgia and Inter. H1 64–72 px, section headings 42–52 px, body 17–19 px. Dense SemiBold headings and minimal caps: only eyebrows are uppercase.

Cards. One neutral card system: a colour photo on top, never under the text; gold icons, thin borders, radii 18–24 px. The “acid” green gradients were removed. Heavy shadows were removed too: one soft shadow, 0 10px 35px rgba(74,60,45,.08), is kept, and most cards just have a thin border.

Text on photos. On photos and video: a warm brown overlay #4E443C at about 66% and white text #F8F5F0.

Product decision

Editable without a developer.

The requirement became the architecture: content.json holds everything, PHP renders it, and /admin edits content — never the layout.

  1. 01
    Visual editorEvery heading, text, button and link.
  2. 02
    Photo and video uploadStraight into any media field.
  3. 03
    Media libraryReuse any file uploaded before.
  4. 04
    Logo changeSwapped like any other image.
  5. 05
    Block managementShow, hide, duplicate, reorder.
  6. 06
    Theme editorButton colours and fonts, no CSS.
content.json
"theme": {
  "button_from": "#D9A03A",
  "button_to":   "#C17D22",
  "font_heading": "Manrope",
  "font_body":    "Manrope"
},
"layout": [
  { "block": "scenarios", "on": true },
  { "block": "location",  "on": true },
  { "block": "spaces",    "on": true },
  { "block": "axis",      "on": true },
  …
]

Theme and block order are just data — the template never changes.

Why data, not layout

The landing is data-driven. All content sits in content.json and PHP renders the page from it, so edits only ever touch content, never the layout. That one rule is what lets the founder change texts, media, colours and the order of blocks without breaking the design.

The theme editor writes the button gradient and fonts; block management writes the layout list. The page template never changes, so the founder cannot break the design by editing it.

Technical decisions

Small calls that protect the founder.

AI-generated hero background
HeroAI-generated background
AI-generated location background
LocationAI-generated background
AI-generated final block background
Final blockAI-generated background
01

On-brand AI visuals

No photos yet — so backgrounds were generated.

02

Mistake-tolerant fields

A video in an image field still plays.

03

Edits never lost

Saves deep-merge, even from a stale tab.

Miroset gold wordmark on a transparent background
Miroset favicon: the infinity loop

Gold wordmark with the white background keyed out · “∞” loop cut for the favicon.

Read the full story
  • AI-generated backgrounds. The founder had no visuals yet, so the hero, location and final backgrounds were generated on-brand with AI.
  • Logo and favicon from the wordmark. Removed the white background from the gold logo with ImageMagick (min-channel key). Cut the “∞” loop out of the wordmark for the favicon and exported it in the required sizes.
  • Tolerance to content-manager mistakes. If a video is uploaded into an “image” field, the site still plays it as <video>. Image, video and logo fields get an upload button and the media library.
  • Protection of edits. Rewrote the admin save mechanism: saving from a stale tab no longer wipes fields, because the save now deep-merges instead of overwriting. Before that, edits were being lost — the main pain of the project.
Process

One redesign, then targeted edits.

Step 1Full redesignPalette, Manrope and gold across the site, in one pass.
Step 2Edits from screenshotsSeven targeted fixes the founder marked up.
Step 3The founder takes overTexts and media refined via the admin.
miroset.ru · partners
Partners block with logos instead of icons

Partners: logos instead of icons — one of the edits.

The seven edits
  • Put photos back in cards
  • Hid extra blocks
  • Partner logos instead of icons
  • A large eyebrow “First location”
  • Air under headings
  • The final block
  • The favicon

Then the founder refined texts and uploaded media via the admin — proof that the “editable without a developer” goal was met.

Infrastructure rescue

The site went down. Nothing was lost.

The hosting expired: a 403, and every uploaded file locked with the account.

01DiagnoseDNS, HTTP and FTP checked.
02New serverSite moved, A/AAAA records set.
03Domains & SSLRedirect and certificates for both.
04Content restoredNothing had to be re-uploaded.
89files restored
372 MBvideo, photos, gallery, logos, texts
2domains with SSL
100%content restored
Step by step
  • Diagnose — checked DNS, HTTP and FTP to find what exactly had failed.
  • Move to a new server — moved the site and set DNS records (A/AAAA).
  • Domains and certificates — set the redirect миросеть.рф → miroset.ru and issued Let’s Encrypt certificates for both domains.
  • Restore the content — restored everything from the old server: video, photos, gallery, logos and texts. The founder didn’t have to re-upload anything.

A non-obvious gotcha. The nginx HTTP → HTTPS redirect was swallowing the Let’s Encrypt acme check, so the domain couldn’t get a certificate. Found and fixed.

Results

Live, editable, resilient.

  • 200Fully workingmiroset.ru, valid SSL.
  • 0The founder owns itNo developer requests for content.
  • 100%No data lossSurvived losing its hosting.
miroset.ru · participation
Participation formats for owners, companies and partners
Stack

Participation formats cover all three audiences: owners, companies and communities, partners and investors.

  • PHP, data-driven from JSON
  • HTML / CSS, custom design system, no frameworks
  • Vanilla JS: carousels, menu
  • ImageMagick
  • Managed hosting + ISPmanager
  • Let’s Encrypt
  • FTPS deploy
  • AI image generation

Thank you.

A site your team edits itself — designed, built and kept alive.

Create bold.
Deliver better.

See our workGet in touch