Dekorizon: migrating from WooCommerce to RGS and building a builders' merchant store
Dekorizon is a builders' merchant brand selling waterproofing, pool cladding and acoustic insulation materials. The brand moved from its WooCommerce store to the RGS Ecommerce platform. What we were handed was a completely empty store and the source site's database dump: we extracted the catalogue, the content and the blog archive from that dump and migrated them, then turned the platform's stock theme into the brand's own storefront.
What we inherited
- A freshly opened store with zero products; the storefront still carried the stock theme's fashion and electronics demo content, and the categories in the menu returned 404s.
- The source was WordPress + WooCommerce, and all we had was a 2 MB database dump.
- More than half the products sat in several categories at once, and the category tree had to be preserved exactly.
- Blog post content appeared empty in the dump; at first glance the archive looked lost.
Our goal
- Move the catalogue without losses, including variants, images and category relationships.
- Redirect traffic from the old URLs to the new pages.
- Move every piece of recoverable blog and page content to the new store.
- Turn the stock theme into a storefront that suits how people shop for building materials.
Extracting the catalogue from the database dump
- The dump was parsed directly without setting up a server; WooCommerce product attributes were decoded at byte level to prevent corruption in values with Turkish characters.
- HTML character entities in WordPress titles (–, ×) were fixed, and old-site links inside product descriptions were rewritten to the new paths.
- One wrapper category carrying no products was dropped from 16, leaving 15; the parent and child split was preserved exactly.
- Products were added to their deepest category as the primary and to the parents as secondary links, preserving the multi-category structure for 46 of the 58 products.
Reverse-engineering the platform API and migrating
- Because request bodies were undocumented, the schema was derived by creating trial records and reading them back.
- Variant options were silently dropped by the product creation request; variants were created first, then matched on stock code and written with separate requests.
- The correct order was found by experiment: draft product → image upload → gallery link → cover image → publish.
- 84 variants were migrated with colour, thickness, weight, width and unit options, along with 94 product images and their Turkish alt text.
- Six parent categories with no image were given a representative cover from their child products, so category pages do not look empty.
A migration that survives interruption
- Rate limiting and back-off were set up so the platform's per-minute request budget is never exceeded.
- State was saved after every write; all the migration scripts can be re-run, skipping what is done and resuming what is half-finished.
- Mid-migration, two processes clashed and 21 products appeared to be lost; a reconciliation step mapping the platform's records back to local state was written, and no data was lost.
- Two products with an empty price in the source were left as drafts so they would not go on sale at zero.
Recovering the content and blog archive
- The five source pages with real content (about, FAQ, returns, privacy, contact) were migrated with editor residue cleaned out.
- The content of 18 blog posts was empty in the database dump; the full text of seven was recovered by pulling the content through WordPress's own interface.
- The 11 images in those posts were re-hosted; original-size files were taken rather than the scaled copies, and the URLs in the text were updated.
- The blog category was set up as “Insulation Guide”, and the repetition in the breadcrumb was removed.
Theme: a builders' merchant storefront
- The brand palette was taken from the logo: orange and navy. Because the platform does not accept vector files, the logo was regenerated at high resolution with transparency, in two variants for light and dark backgrounds.
- The header was built in three layers: a contact strip, a search and technical support row, and a category mega menu.
- The home page was built with a category grid, product rails, sub-category boxes and campaign banners; the footer gained a trust strip, a newsletter and collapsible columns on mobile.
- The contact page was written as a separate template: channel cards, a working form, a location card and an FAQ.
- Category, product, search and cart pages were left on the platform defaults; because the migrated variant options work in the filters, no intervention was needed.
Working around the platform's constraints
- Because vector file upload is disabled, icons were drawn as vectors using CSS clip-path; every emoji icon was replaced with one.
- Because embedded frame tags are stripped, the map is injected into the page from the platform's own custom code area.
- Because there is a character limit on the global stylesheet, its size is checked on every write and kept at a tenth of the limit.
- Font loading was set up through a single channel that survives the platform's style sanitiser, with the subsets needed for Turkish characters defined explicitly.
Visual verification and fixes
- White-on-white text in the mega menu dropdown was found by force-rendering the panel open, and fixed.
- Raw tags leaking onto the screen in short product descriptions were cleaned up across all 58 products.
- A reversed redirect left over from the migration was sending the new contact template to the old page; its direction was flipped.
- Icon vertical alignment, horizontal shift caused by a full-width section, and a contact form left too narrow were all fixed; the one-H1-per-page rule was restored.
Result
A project handed over as an empty store became a launch-ready builders' merchant storefront complete with its catalogue, content and blog archive. Category distribution matched the source exactly, old URLs redirect to the new pages, and the whole migration was delivered as re-runnable scripts, so the same flow can be run again as the catalogue grows.




