The challenge
What we delivered
A shop inherited together with someone else’s code
LikeOn has been knitting clothes in Kharkiv since 2010 — merino, cashmere, silk, cotton. Each piece is knitted to shape rather than cut from fabric, every seam is joined stitch by stitch, and one garment takes two to three days. They sell through their own WooCommerce shop.
We took over a shop with live orders, an outdated core, a home page made of page-builder shortcodes and four backdoors sitting in the theme. We took it apart and rebuilt it — without touching a single customer order.
The first screen says the one thing that separates a maker from a reseller: we knit it ourselves, since 2010, two to three days from yarn to finished garment.
Where it started
The shop was running WordPress 6.9.7 and WooCommerce 5.9.1 — a version six major releases behind. The theme was a purchased Flatsome with a child theme holding edits by several different contractors accumulated over several years.
That child theme’s functions file contained four independent backdoors. Each with its own password, each able to run an arbitrary command on the server. The file had last been modified a month before the work began. Everything else — updates, design, copy — only made sense once that was gone.
A home page built in code
The old home page was a pile of page-builder shortcodes: a banner grid, Russian headings, a “bestsellers” row with product IDs typed in by hand, and customer reviews inserted as images — screenshots of messages. The page body even still contained a stray tag left behind by a browser translation extension, saved into the content along with the text.
The new home page is a plugin of its own with its own sections. Every block pulls its data from the shop: categories show how many models are actually in stock right now, the weekly selection is assembled from real inventory, the articles come from the blog. Nothing needs editing — the page redraws itself as the stock changes.
A product card on the storefront shows price, previous price, discount, the amount saved and the sizes in stock — the decision is made before the click.
The catalogue
425 products across 26 categories, 251 of them in stock. The catalogue lists only what can be bought today; the rest stays in the database and remains reachable by direct link, so already-indexed pages are not lost.
The product page
Sizes are buttons, not a dropdown: all five are visible at once and the unavailable ones are struck through. Next to “Add to cart” sits “Order in one click”, for the buyer who does not want an account.
Below the buttons are the specifications normally buried in a tab: garment length, collar type, colour, knit pattern, yarn composition, production time. Those are the six questions a knitwear buyer would otherwise send by direct message.
The rest of the text is folded into accordions: description, specifications, reviews, delivery and returns. The page stays short without losing anything — and search engines still see the full text, because it is in the markup rather than loaded on demand.
Ordering in one click
The shortest route: name, phone, order. The panel shows exactly what is being bought — photo, chosen size, quantity, discount and total. No checkout page, no registration, none of the fields a manager will confirm by phone anyway.
The same panel opens from the product page and from the cart — the cart logic stays single, wherever it is called from.
Search that answers immediately
Search opens over the page and returns products as you type, with photo, price and discount. An empty search does not stay empty: it holds this visitor’s recent queries, the popular categories and the popular products.
Service instead of small print
In knitwear, two questions kill a sale more often than price does: will I guess the size right, and what if it turns out too long. Both are answered in their own blocks on the home page, rather than in the footer next to the terms of sale.
The size guide has separate tables for cotton and for wool sets, measurements in centimetres and a lettered diagram. The “length retouch” service shortens trousers or a sweater to the customer’s height, with an honest warning: a shortened garment counts as a bespoke order and cannot be returned.
Ukrainian, all the way through
The shop was already “in Ukrainian” — but only in the interface. The product descriptions were full of half-translated Russian: mixed grammar, Russian words left inside Ukrainian sentences, machine-translation seams in the middle of a paragraph. To a customer that reads as carelessness on the brand’s part, not as a technical detail.
The descriptions were edited by hand, paragraph by paragraph. The same pass removed traces of a different brand left in the copy, broken internal links pointing at deleted categories, and links from Ukrainian pages to their Russian duplicates.
The media library was a separate job. In 260 attachments the captions and descriptions were Latin transliteration — kostum_merinos_viski, golf-svobodnoj-posadki-iz-merinosa. 490 fields were rewritten in readable Ukrainian: the text a customer sees in the gallery, and the text a search engine reads in the markup.
The brand in numbers, not adjectives
The production block does not claim the brand is “premium” — it shows how the knitting is actually done: to shape, with no cut edges, seams joined stitch by stitch and steamed, the finished garment washed with a dedicated product. Hence the two to three days per piece.
On a phone
Most traffic to a clothing shop comes from a phone and from Instagram. On a narrow screen the cart opens full-height, sizes stay as buttons, the gallery swipes, and the specification grid does not collapse into a column two words wide.
How it was done
Under the hood
Platform
WordPress 7.1.2 and WooCommerce 11.0.1 in place of 6.9.7 and 5.9.1. A bespoke child theme holding nothing but our own code.
Our own plugins
Four separate plugins: home page, cart drawer, customer account and one-click ordering. Each can be switched off on its own without taking the others down.
For search
Product structured data with price, availability and breadcrumbs, correct page titles, and a robots.txt that closes the cart pages and the parameters that generate duplicates.
What changed
The shop stopped being a stack of other people’s solutions laid on top of each other. The home page assembles itself from real stock, the product page answers the questions before they arrive as direct messages, an order takes two fields, and the copy is written in the language the brand actually speaks to its customers in.
And above all, the thing that let a stranger run any command on a server holding live orders is gone.

