Get in touch
Royal Flowers — a flower-shop chain and online store
Online store · 2023

Royal Flowers — a flower-shop chain and online store

Мережа квіткових магазинів на WooCommerce: 4 міста, окремі склади, спільний бренд, доставка за 2 години.

Royal Flowers is a chain of flower shops across four Ukrainian cities: Kyiv, Dnipro, Odesa, Kharkiv. The task was to build a single online storefront where a client first picks their city, then sees the current range, prices, and delivery times specific to it. Technically, this is WordPress + WooCommerce on a multisite architecture across subdomains (kyiv./odesa./kharkiv./the main domain for Dnipro), sharing one design and brand but with separate stock and pricing for each city.

Homepage and brand presentation

The first screen is a centred slick slider with three frames: “Royal Flowers Kyiv — 101 roses that every girl deserves”, a promise of delivery within 2 hours, and a claim of fresh flowers straight from the greenhouse. The neighbouring slides partly “peek” in from the sides — a classic hint that there’s more to scroll through, without extra arrows. Below the hero sits a “Browse the catalogue” CTA and a long SEO block ranking for regional queries like “flower delivery Kyiv” / “buy roses Kyiv”.

Royal Flowers Kyiv hero
A hero with the city swapped in — “ROYAL FLOWERS KYIV”: one template, four subdomains, each with its own urban localisation.

Catalogue and filtering

The catalogue is a two-column WooCommerce shop: filters on the left (stem length 50 / 70 cm and categories with thumbnails), a three-across card grid on the right. Each card shows a photo, title, price in hryvnia, a crossed-out “old” price for items on sale, and a quick “add to cart” button in the bottom-right corner so a client can buy without ever opening the product page.

Royal Flowers Kyiv catalogue
Kyiv catalogue: a sidebar with a stem-length filter and categories (bouquets of 19 / 25 / 51 / 101 roses, baskets, tulips), and a card grid with sale prices.

Category structure

  • Bouquets of 19, 25, 51, 101 roses and “101+ roses” — a dedicated taxonomy by flower count per bouquet;
  • Separate tulip categories: bunches of 25 / 51 / 101 tulips;
  • Flower baskets — a category for arrangements in a wicker basket;
  • A stem-length filter (50 and 70 cm) — the most important parameter for roses, the one clients typically use to search for a bouquet within a specific budget.
'51 roses' category archive
The 51-roses category archive: the same filters as the main catalogue, plus a subcategory heading and a visible discount (2,750₴ → 2,000₴).

The product page

The product page is as lean as possible: a large bouquet photo on the left; on the right, the title, current and old price (if a discount applies), an “Add to cart” button, and a live stock counter (“Available quantity: 3”). The counter pulls straight from WooCommerce stock and gives the client a sense that the bouquet is real and physically in stock today.

Royal Flowers Kyiv product page
A bouquet card: photo, discounted price (1,400₴ → 1,000₴), available quantity, and one main action — “Add to cart”.

A cart drawer instead of a separate cart page

Instead of a traditional /cart/ page, there’s a persistent right-hand side panel present on every page of the site. Click “add to cart” on a card, and the drawer slides smoothly open with the item photo, title, price, quantity, checkboxes for extra wrapping (“No wrapping 0₴” / “Alternative wrapping 200₴”), and the total. At the bottom, a single “Place order” CTA leads straight to checkout. One click from the catalogue to checkout, with no intermediate cart-page load.

Royal Flowers cart drawer with item, wrapping and CTA
The cart drawer: item + quantity control + two wrapping checkboxes + a 1,000₴ total + a button to checkout. The drawer is always ready — no need to visit /cart/.

Checkout: pickup vs. delivery with a slot picker

The /checkout/ page has two tabs up top: Pickup (the shop’s city address: Dnipro, 18 Shevchenko St; open 8-20) and Delivery. A chosen date plus a dropdown list of slots every 30 minutes (11:00–21:00). Name + Phone fields, a “Create an account” toggle, and a “Comment or card message” field — critical for a flower business, where the bouquet is often a surprise. Two payment methods: on receipt, or card/Apple Pay/Google Pay. On the right, a sticky summary shows the total, delivery cost, a checkbox agreeing to the Terms, and a “Submit” CTA. In the table cart below, a stock counter (“In stock: 8 pcs.”) plus a coupon field.

Royal Flowers checkout page with pickup/delivery tabs, slots and a table cart
Checkout: pickup/delivery tabs → date + a 30-minute slot → name/phone + card message → payment on receipt or by card → a sticky sidebar with the total.

Delivery and slot logic

The brand’s own courier service is a key argument, which we surfaced in several places across the site. Base hours are 09:00–21:00, with early (07:00) and late (23:00) slots at extra cost — clear time windows rather than “whenever we manage it.” There’s a field for the recipient’s phone number (if the bouquet is a surprise, the courier agrees the drop-off location directly with them) and a private note to the florist.

Royal Flowers Kyiv 'Delivery' page
“Delivery”: base hours 09:00–21:00, early and late slots (07:00 / 23:00) at extra cost, clear time windows instead of “whenever we manage it.”

The account page — login and registration on one screen

The account page (/my-account/) combines two actions on a single screen: a login form on the left (login/email + password + “Forgot your password?”) and email-based registration on the right — the customer gets a link by email to set a password. It works the same on desktop and mobile. For repeat orders, WooCommerce order history offers one-click reordering.

Royal Flowers account page — login and registration forms side by side
Login + Register on a single screen with no tabs — fast entry for repeat customers and a single-field email registration for new ones.

Content pages

“About” and “Delivery” aren’t just SEO filler — they’re structured pages with illustrations, subheadings and lists. Content work was done so that the same page could rank correctly for regional queries — each of the four subdomains had its pages rewritten around its own city.

Royal Flowers Kyiv 'About' page
“About” with a list of occasions to order (dates, weddings, birthdays, corporate events) and a block on the range and quality of flowers.

Contacts with a map and three physical locations

The /contacts/ page shows a “Have a general question?” card on the left with info@, the service line phone number (open 8:00–20:00), and a compact contact form (name + email + message). On the right, an interactive Google Maps view with pins across three cities. Below that, three location cards: Kyiv (Podil, 43 Khoryva St), Kharkiv (31 Kotsarska St), Dnipro (18 Shevchenko St). Each carries its address and a click-to-call phone link. There’s one shared service line across the whole chain.

Royal Flowers contacts page — form + Google Maps + three city cards
Contacts: a contact form + a pin map + three physical-shop cards (Kyiv / Kharkiv / Dnipro) with a shared service line, 305-35-35.

Responsive layout

Mobile is the main ordering channel. The hero is compact, running through three “screens”-slides with different ad copy, navigation lives in a burger menu, and the cart is an icon in the top-right corner. The catalogue switches to a single-column grid.

Stack and integrations

  • WordPress + WooCommerce as the base — standard CPTs for products, categories, attribute filters;
  • Multisite on subdomains — one code template, separate pricing and stock for each city;
  • Slick for the centred hero slider;
  • Instagram and Facebook integration in the header — these channels bring the chain most of its organic traffic;
  • A customer account area on top of WC My Account, with order history and one-click reordering.

Ready to talk about your release?

We reply within 60 minutes during working hours — with a budget estimate, a rough timeline and the team line-up for your task.

Send a request