Planeta Zolota

We took over maintenance of a live jewelry online store on Yii2 with a 2,300-item catalog and two language versions — and over the course of a year brought the inherited project into shape: reworked the catalog and filtering, eliminated 518 broken pages, restored the 1C integration, and fixed pricing logic.

Task

We were brought in by the owner of the jewelry online store planeta-zolota.com.ua, which already had a working but problematic Yii2 site built by another team: no documentation, a custom-built admin panel missing some basic utility functions, and no proper development environment set up. The task wasn't to rebuild the site from scratch, but to carefully understand someone else's code and keep the store moving forward — clean up the catalog and navigation, fix filtering by price, gemstones, and metal, resolve pricing errors, restore synchronization with 1C, eliminate hundreds of broken pages, and fix order-confirmation email delivery, all without breaking functionality that was already working.

Result

Catalog, menu, and navigation. We reworked the catalog structure and built a new multi-level category and subcategory menu with the correct item order and images. The catalog here isn't built from simple categories but from sets of filters, so any structural change required careful cross-checking — to make sure, for example, that the "Wedding & Engagement" section didn't start showing chains and bracelets. We added a three-items-per-row grid view, pinned the cart and contact info in the header, and reworked the footer and contact block.

Filtering system. The store filters products by price, gemstones, metal, purity, gender, and item type simultaneously, and in the inherited code this mechanic had bugs: the price filter would pull in items above the selected range, the gemstone filter could return the wrong stone, and sorting would break the sidebar filters. We cleaned these defects up in stages, aligned the filter pricing with what's shown on archive pages, and stabilized the dropdown menu, which used to "stick" when a section was reopened.

Product pages and pricing. We cleaned up the product page layout — spacing, font readability, overlapping buttons and text. We also dug into the price-calculation logic, which factors in discounts and add-on costs for product options, and found a long-standing logic bug that meant discounts weren't applying to products with options, producing zero or incorrect prices on the site. At the client's request, we implemented a "fake" marketing discount mechanic — a struck-through "old" price shown next to the current one, editable by the admin.

Technical SEO. Working alongside the client's SEO specialist, we set up robots.txt, fixed the lang attribute for multilingual pages, implemented schema.org markup for products and pages, added alt attributes to images, and embedded Google Search Console verification. The biggest task was cleaning up broken pages: a scan turned up 518 URLs returning 404s, and by tracing the root causes back to the templates — canonical tags in the head, pagination logic — we brought that number down to zero.

1C integration. The most complex part of the project: products, prices, metals, and images sync from 1C automatically once an hour, and when the sync started failing — new products stopped appearing on the site, the price of gold per gram stopped updating — we had to trace the problem literally line by line through the server's JSON responses. We brought in a dedicated Yii specialist and worked closely with the client's 1C developer to dig into the exchange logic: it turned out the sync was failing because of metals with no matching GUID in the site's database, and required fields coming through empty for steel and ceramic items. We fixed the handling of these cases, sorted out the image upload mechanics over FTP, and added logging for all import errors so future issues would be caught immediately — the mass 404 errors that had been generated by these bad syncs disappeared once the exchange was stabilized.

Cart, orders, and email. We restored delivery of new-order emails — the root cause turned out to be SendGrid repeatedly flagging the store's mailbox as blocked, which we identified and cleared. We implemented phone number validation in the cart with masks for Ukrainian and Russian numbers, so incorrect contact details wouldn't slip through during ad campaigns.

Analytics, hosting, and other fixes. We separated Google Tag Manager and Google Analytics, connected Search Console, installed Facebook Pixel, and removed conflicting tracking scripts. We connected the Replain live chat with Telegram notifications. On the infrastructure side, we fixed a memory overflow issue when displaying all 2,300 products in the admin panel and recommended increasing the server's RAM.

Outcome for the client. From a scattered collection of bugs and unreliable mechanics, the store reached a predictable, manageable state: the catalog and filters work correctly, prices calculate accurately, the 1C sync is stable, and the client can confidently run ads and grow sales without worrying the site will fail at a critical moment.

A 2,300-piece jewelry catalog that's just as easy to browse on any device

The product grid, sidebar filtering by price, metal, and gemstones, and the product pages were all adapted for a smooth browsing and buying experience on both desktop and mobile — where most jewelry shoppers actually come from.

Planeta Zolota
The jetbit.pro website uses cookies to store data. By continuing to use the site, you consent to the use of these files. Learn more