
Vladyslav Chystiakov
Developer and author
Writes about what he builds himself: online stores on OpenCart, applications on Next.js, integrations and site speed. The articles carry measurements and checks a reader can repeat on their own project, not general advice. Commercial development since 2015.
- Online stores and e-commerce
- Next.js and modern front-end
- Site speed and measurement
- Technical SEO
- Integrations and data exchange
Articles (52)
Одна літера в адресі: 76 перейменованих сторінок і шість днів 404
19 серпня 2026 року ми перегенерували 76 російських адрес, бо в межах одного шляху співіснували дві транслітерації, — і майже шість днів старі адреси відповідали 404, бо механізм переїзду шукав сторінку лише за українським slug'ом. Через п'ять тижнів 12 старих адрес досі у видачі, а на юридичній сторінці сума за місяць і тижневі дані кажуть різне. Розповідаємо, чого з цього не випливає і як перевірити свій сайт.
8 min read154 type errors our build was throwing away: what we found in them
On 21 September 2026, a type check on our site reported 154 errors, even though the build had been green every time: the check's result was simply thrown away. Inside, we found zeros in link statistics and in the analytics export, sorting that didn't sort, and tests that never ran. Here is how we worked through them, what we changed, and how to check your own project.
9 min readCertificates renew themselves: TLS on 116 sites, and one that didn't renew
On 22 September 2026 we checked the HTTPS certificates on 116 sites we had already measured for market studies, and for 104 of them we compared the state with August. All 116 passed verification, 108 run on 89- and 90-day free certificates, and only one site's certificate has still not renewed, even though with typical settings it should have by now. We walk through the measurements and the limits of the method, and show how to check your own site with a single command.
9 min readHealthcheck made up 60% of app requests: what the first day of metrics showed
On 21 September 2026, the first day of per-route request tracking, the internal /api/health endpoint received 13,666 requests, 60% of application traffic, and every one of them hit the shared database. Here are the two settings that fixed it, what they cost us, and how to check your own healthcheck.
9 min readFour alerts that never existed: monitoring that lived only in the docs
On 5 September 2026 we opened Grafana to check four alert rules our documentation had promised since 17 January. There were zero rules there, the metrics beneath them were empty, and the delivery channel was a placeholder. Here is what we put in their place, and how to check your own monitoring in half an hour.
9 min readPassengers on every page: a whole language's dictionary, a second header, and a chat nobody asked for
On 5 September 2026 we took our own site's response apart line by line and found five things that shipped to every visitor's browser although nobody used them. On 13 September a sixth turned up. Here are the bytes before and after, a lesson about characters versus bytes, and five checks for your own site.
10 min readWe Lost Our Own Store Along With the Domain: What the Web Archive Knows
On 17 September 2026 we recounted in the web archive what losing our own store along with its domain looked like from the outside: 2,378 captures of the home page in March 2022, the first 301 on the first of April, the last capture of our content on 18 May. We show what the archive restores and what it does not.
9 min readProm, Horoshop or OpenCart: what 43 stores show from the outside
On 15 September 2026 we externally measured 43 stores on Prom, Horoshop and OpenCart. Along the way we found two measurement traps: a HEAD request that made Prom look the fastest, and a check page that 21 of 22 Horoshop stores serve to a client without a browser.
10 min readWhy a page took three seconds: a query you can’t see in the page code
On 16 August 2026 our site responded in 3.05 s, while neighbors on the same server responded in 0.2–0.3 s. The culprit was a mega menu query that pulled 4.3 MB of translations on every page. We break it down along with three similar cases, and show how to find the same thing on your own site.
9 min readA dataset built by AI agents: an audit found 7 codes that silently became “allowed”
On 21 July 2026 we added to kvednace.com.ua a table of verdicts on “can this KVED code be used under the single tax”, compiled by AI agents. 57 minutes later we committed fixes from an independent audit: seven codes were missing from the table, and the service showed them as allowed. Why a gap looked like a verified answer.
8 min readThe Russian version of a website: 60 of 97 Ukrainian sites declare it in hreflang
On 7–8 August 2026 we externally measured Ukrainian websites in 19 niches. Russian appears in hreflang on 60 of the 97 homepages we could read, and on 24 of 34 among stores. We break down the codes, the spread across niches, what a second language does to the sitemap, and how to check your own site.
8 min readIndexNow returned 200, but no pages were submitted: 6 files instead of 867 URLs
From 2 August to 3 September 2026, our IndexNow script submitted six sitemap file URLs to Bing instead of pages, and every submission came back “successful”. We break down why the 200 code proved nothing and how to check in 15 minutes what exactly your module submits.
7 min readKVED 47.91 splits into 32 NACE 2.1-UA codes: what an online store should choose
The old KVED 47.91 for Internet retail has 32 counterparts in NACE 2.1-UA, and the new code with the same number means intermediation. We break down the codes by product group and show how to match your assortment against the descriptions.
7 min readThe form says “thank you,” but no email is sent: what we found by submitting a request ourselves
On 17 August 2026 we went through every form on our own website to the end and found two subsystems that were not working: webhooks failed on every submission, and the confirmation email was not being sent. We break down why nobody saw it and how to check your own form in 15 minutes.
7 min readThe first screen jumps: how we tracked down a font-induced shift and what did not work
On 17.08.2026 an audit showed a CLS of 0.2283 on our website’s desktop homepage. The cause turned out to be the font: the ch unit in a paragraph and a skewed decorative band. We break down which tips measurably did not help, what got us to 0.0056 and how to check your own site.
9 min readA sitemap that lies: 25,537 entries for 6,857 URLs
The sitemap is either empty, bloated with duplicates 3–4 times over, or points to only one of two language versions. We checked dozens of Ukrainian online stores and collected the typical defects with concrete numbers — from a 0-byte file to 33% of URLs leading to the wrong product.
6 min readhreflang that breaks language versions: five ways to turn a bilingual site into a monolingual one
The site has two language versions, the switcher works, hreflang is declared — and yet the search engine sees only one language. We break down five real configurations where the language markup is formally there but works against the site.
6 min read53 of 99 Ukrainian websites have no breadcrumb markup: what the repeat measurement of 19 niches showed
On 7–8 August 2026 we externally measured 102 Ukrainian websites in 19 niches, from fitness to jewelry stores, and repeated the measurement on 17 September 2026. 80% have no breadcrumb markup on the homepage, 54% have none anywhere, and 34% have no structured data at all. We break down the figures by niche.
7 min readIs anyone measuring anything? Analytics counters on 99 Ukrainian sites
Meta Pixel is present on 40% of the sites that answered, the Google Ads tag on 15%, and 8% have no counter at all on the homepage. We break down what this means for an owner who pays for advertising.
5 min readLocal businesses without local business markup: 76 sites out of 99
Restaurants, clinics, beauty salons and fitness clubs live on people nearby finding them in search. We measured 99 sites in 19 niches — 77% have no markup with address and opening hours. In service niches, where it is needed most, the picture is even worse.
5 min readWhat happens to a chat bot when you kill its processes mid-conversation
On 17 August 2026 we loaded LEO Chat with 300 requests per second and forcibly killed the engine, the message queue and the cache in the middle of the test. Here is what we checked, why it is not the same as production traffic, and what the result showed.
5 min readMultiple warehouses, one product price — it doesn't work: why store engines don't calculate this
A typical store engine keeps a product's price as a single number. The moment a second warehouse with its own purchase price appears, or a wholesale tier for a regular client, that model breaks. Here is why, and what we had to compute inside the core of our own LiteShop engine.
5 min readTextory, an AI chat, a copywriter or the supplier's text: filling descriptions
Four ways to fill catalogue descriptions — and none is best in general. What each does well, where its limit sits, and how to choose for your catalogue size.
7 min readIdentical product descriptions: how many sit in 21 Ukrainian feeds
A measurement of 21 public feeds on 8 September 2026, 89,718 products: 19,674 of them (22%) carry a description identical, word for word, to another product in the same feed. How to check your own.
6 min readUkrainian fields in a Prom feed: how many stores actually supply them
A measurement of 21 public feeds on 8 September 2026: name_ua and description_ua appear in five feeds out of 21, keywords in one. What these fields are and how to fill them at scale.
6 min readGEO optimisation of product descriptions: how a product gets into AI search
ChatGPT, Perplexity and AI Overviews return an answer as running text, not a list of links. Here is what makes a product description fit to be quoted — and what that does not guarantee.
7 min readNova Poshta inside the chat: how the bot ships an order without an operator
How the LEO Chat bot finds a city and a branch in the Nova Poshta directory, creates the waybill and returns statuses to the same conversation. The mechanism, requirements and limits.
6 min readHow to rewrite a whole catalogue into unique descriptions without a copywriter
Thousands of products carrying the supplier's description, and the same text sitting in dozens of competitors. Here is how a bulk AI rewrite works and what it does not do.
6 min readThe chatbot that proves revenue: how attribution works in LEO Chat
We built LEO Chat as a bot that not only answers but also shows which scenario a paid order came after. Here is the mechanism, its limit and our own measurements.
7 min readRozetka feed: why products get rejected when the validator says «OK»
The seller's cabinet says «N of M uploaded», the validator awards a hundred points, and it is unclear what is wrong. A run of 21 third-party feeds and 88,991 products on 5 September 2026: the structure is almost always intact, yet one feed breaks none of Rozetka's mandatory elements.
8 min readSearch volatility: telling a Google update from your own breakage
Our daily impressions in August swung from 55 to 579, while the weekly totals rose steadily: 421 → 858 → 2,127 → 2,250. A breakdown of our own data and the five-step method we use to separate movement in search from a fault on the site.
8 min readNova Poshta in the checkout: what has to work so the manager stops retyping addresses
A checkout with a free-text address field works as long as the manager phones every buyer and creates the waybill in the carrier's cabinet himself. A breakdown of what a working integration looks like through the buyer's eyes and the manager's, what breaks most often, and how to check your own checkout in two minutes.
8 min readB2B store: six things a retail shop does not have
A wholesale store looks like a retail one with different prices, yet it diverges in six places: customer groups, pack multiplicity, list ordering, invoices, exchange with the accounting system and catalogue picking. Plus what measuring seven wholesale catalogues on 31 July 2026 showed.
7 min readHow long does it take to build an online store: 25–45 days
«How long does it take» is a separate question on 162 of our service pages. The public ranges in working days: an OpenCart store 25–45, a landing page 7–18, wholesale 30–55. Seven stages of a store project, why the lower bound is rarely reached, and what stretches the timeline.
8 min readHow much does an online store cost: what 24 measured OpenCart shops showed
The question «how much does a store cost» is a question about scope. On 31 July 2026 we took technical readings from 24 live shops on a single engine: catalogues from 76 cards to 116,841 URLs, first server response from 126 ms to a second and a half. A breakdown of the five cost multipliers on those numbers.
10 min readThe product page as Google sees it: what we found in 30 stores
On 8 August 2026 we opened the product pages of thirty live online stores and looked at them not as a shopper but as a crawler. Product markup was present in ten of them, specifications in four. A breakdown of what follows from that.
7 min readThe market's technical baseline: what we found on 35 stores
On 7 and 8 August 2026 we measured live online stores and service sites from the outside, and on 17 September 2026 we repeated the measurement: canonicals, sitemaps, structured data, first response time, PHP version. This is not a bad market — it is the baseline every new store competes against.
9 min read5,226 backlinks from five domains: a backlink audit on our own example
Search Console reports 5,226 external links and, right beside it, the five sites that produce them. A breakdown of our own profile: why link count is the worst metric, what to read instead, and how to pull the same data for free.
7 min readA website audit in one day: what we check and what comes out of it
Our site has been in search for exactly one month. On 2 September 2026 we ran it through our own audit checklist: 5,656 impressions, 41 clicks, 562 URLs walked. A breakdown of all twelve checks, with commands you can repeat on your own site.
7 min readWhere your crawl budget goes: 420 closed pages
The crawler diligently walked hundreds of addresses the site itself had marked «do not index», and never once visited two pages from the main menu. A breakdown of our own indexing report and the checks worth running on your site.
9 min readCompression that only looks like it works: 170 KB instead of 76
The server supports brotli, everything is enabled in the settings, and the check reports «compression is on». Meanwhile the user's browser receives a page twice as heavy, every single time. A breakdown of our own case with before and after measurements.
8 min readThe multilingual site that sends everyone into one language
Language versions can exist, carry hreflang and have a switcher — and still every internal link returns the reader to the default language. A breakdown of our own mistake, with before and after figures and a way to check your own site.
9 min readHeadless CMS: what it changes in the work of the site and when it is not needed
Headless is a decision about where content lives and who is responsible for displaying it. What does separation provide, what new task does it add, and when a monolithic CMS remains a smarter choice.
9 min readAI in e-commerce: what it really changes in the store
Three different projects are hidden behind the word "AI". We analyze the mechanisms that really work in the shop, their limits and checks that are done without a contractor - with examples from our technical measurements.
9 min readAI tools in web development: what they do well and what you have to check by hand
Where code generation saves time, where it fails imperceptibly, and analysis of a defect that we found in our own project during technical measurement.
7 min readSite speed: what numbers to measure and what our measurements showed
TTFB, LCP, and INP are different numbers and are treated differently. Our external measurements of live sites 31/07-01/08/2026, reasons for lost seconds and commands to repeat the test yourself.
11 min readPWA for an online store: what it really does and what it doesn't
A PWA is a manifest, service worker, and HTTPS on top of your site. What's changing technically, where the bottom line is, iOS limitations, and why a non-prerendered SPA can cost you search traffic.
9 min readDesign system: what it consists of and how to check that it is used
Tokens, components, composition — and commands in the terminal, which show whether the system is really used, or if it exists only in mockups.
7 min readVoice search: how assistants find the site and how to test yourself
Where did the figure "50% of voice searches" come from and why it will not be here. As assistant agents read the site, what our measurements showed and what checks you will do yourself in the evening.
9 min readEdge computing and CDN: what it really speeds up and what doesn't
What is the delay, what is removed from it by the distributed network, and what remains in place. Our TTFB measurements on live sites and checks done in half an hour at the terminal.
8 min readOnline store technical checklist: 10 checks you can do yourself
Sitemap, duplicates, speed, markup, hreflang, HTTPS, analytics. Each test comes with an example of a real defect from our measurements and a command for the terminal.
14 min readNext.js 15: what really changed and how to test it in your project
Turbopack, default fetch caching, async params, and what actually gets to the visitor. Plus four commands for checking your own project.
8 min read