Vlad Ilie
TablouriColorate — a WooCommerce photo configurator, from React to 12 KB of vanilla JS
WordPress plugin · Vanilla JS

TablouriColorate — a WooCommerce photo configurator, from React to 12 KB of vanilla JS

tablouricolorate.ro ↗
2 days ago
•••
3 min read

Context

TablouriColorate is a small business in Târgu Mureș that prints customers' photos on canvas, posters, banners and stickers. The shop runs on WooCommerce, and the heart of it is a configurator where a customer uploads a photo, chooses size and finish and sees the price before adding the product to the cart. I've built and maintained that configurator as a custom plugin since 2018.

The problem

After moving from a limited custom e-commerce platform to WooCommerce, the shop needed much richer product options: photos from the device or Facebook, sizes, finishing, packaging, filters and a design service, all in a pleasant interface. The first version, written in jQuery, slowed to a crawl during photo uploads. The ReactJS + Material-UI rewrite that followed fixed the experience, but over the years it grew into five separate React apps that shipped 520–730 KB of JavaScript per page, with Redux, webpack, Babel and Sentry along for the ride.

What I built

In 2026 I replaced the five React apps with one dependency-free vanilla JavaScript configurator of about 12 KB gzipped. It serves six product types, each behind its own shortcode: canvas, multicanvas, collage, poster, banner and sticker.

Under the hood

Result

The configurator went from 520–730 KB to about 12 KB gzipped per page, with no build step and no third-party runtime. The price shown and the price charged come from one formula, and the new multicanvas product shipped on top of the rewrite. The shop has been on a maintenance plan with me since 2018.

Stack

WordPress, WooCommerce, PHP, vanilla JavaScript, Canvas API, Facebook JS SDK, PHPStan, PHPUnit, GitHub Actions.

Technologies:

  • WooCommerce
  • PHP
  • Vanilla JS
  • Canvas API
  • PHPStan
  • PHPUnit
  • GitHub Actions

Share on: