VOC GEMS — a premium e-commerce platform for rare coloured gemstones and fine jewellery, built on thousands of lines of custom code.
VOC Gems is not just an online shop. It is a digital showcase of premium gemstones where every exhibit is unique and the user experience has to match a boutique in Geneva.
The task went far beyond “put a theme on WordPress”. What was needed was an engine that can work with unique SKUs — every stone is one of a kind — display them with full gemmological precision and support professional scenarios: price request, reservation, auctions, certificates. All of it in premium aesthetics, with no compromises.
The result is a hybrid architecture: WordPress as the CMS core, WooCommerce as the commercial base, Directory Kit as the catalogue, Elementor as the visual layer — and on top of all that, thousands of lines of custom PHP, JavaScript and CSS that turn a standard stack into a unique product.
Under the premium visual shell there is custom code for every scenario: from the REST API to the favourites system, from catalogue filters to authorisation modals. Pick a file and see what is inside.
// Custom REST endpoint for the gemstone catalogue // with filtering across dozens of gemmological parameters add_action('rest_api_init', function() { register_rest_route('catalog/v1', '/stones', [ 'methods' => 'GET', 'callback' => 'get_catalog_items', ]); }); function get_catalog_items($request) { global $wpdb; $color = trim($request->get_param('color')); $clarity = $request->get_param('clarity') ?: 'any'; // Jewellery items are excluded (category 42) $sql = "SELECT p.*, m.meta_value AS images FROM {$prefix}posts p ..."; return rest_ensure_response($wpdb->get_results($sql)); }
Catalogue REST API. An endpoint for trade colour, clarity, categories and media. Under 150 ms per request.
// One favourites system — it works everywhere: // catalogue, product card, personal account const SiteFav = { toggle(stoneId) { if (!window.SITE_LOGGED_IN) return SiteFav.openLogin(); fetch('/wp-json/catalog/v1/favs', { method: 'POST', headers: { 'X-WP-Nonce': window.SITE_NONCE }, body: JSON.stringify({ id: stoneId }) }).then(r => r.json()).then(SiteFav.updateHearts); } };
Favorites. The database table user_favorites plus REST plus shared JS. Three components — one behaviour.
/* VOC Gems — Design Tokens (single source of truth) */ :root { --voc-teal: #45BDB0; --voc-gold: #C9A86C; --radius-card: 16px; --radius-pill: 50px; --shadow-card: 0 3px 20px rgba(0,0,0,.04); --font-display: 'Playfair Display'; --font-body: 'DM Sans'; }
Design system. A single source of truth for thirty-odd pages and every custom module. On the next spread you can turn these tokens by hand.
// Smart Auth Guard: protecting closed pages // with a modal and a return to the original URL class AuthGuard { init() { if (!this.isProtected(location.pathname) || window.SITE_LOGGED_IN) return; sessionStorage.setItem('return_url', location.href); this.renderModal({ title: 'Access to Private Collection' }); } } new AuthGuard(['/item/', '/collection/', '/private/']);
Auth Guard. Protection for four closed sections, with state preserved and the user returned to exactly where he was turned back.
// AI Jewelry Constructor — a proprietary pipeline built from scratch async function generateJewelry(promptBase, stoneData) { const fullPrompt = `vocgems style, ${promptBase}, ${stoneData.type} (${stoneData.weight}ct)`; const response = await fetch(AI_ENDPOINT, { method: 'POST', body: JSON.stringify({ prompt: fullPrompt, style: 'vocgems_custom' }) }); return response.json().then(r => r.output.image); }
AI Jewelry Constructor (V4). A proprietary AI pipeline, built from scratch for this site and this task. Trained on an in-house dataset of 900+ images.
Every switch in the catalogue is a parameter of the endpoint and a condition in SQL. Tick the filters on the left and watch the request assemble itself and what goes down to the database. Jewellery items are always excluded from the output — that condition never comes off.
The response is cached with WordPress transients and sorted by arrival date. A request takes under 150 ms.
Thirty-odd pages and every custom module take their colours, radii and shadows from one file. Change a value in one place and it changes everywhere. Turn the tokens and watch the stone card on the right: this is the same mechanism that runs on the live site.
This is exactly why redesigning a card does not turn into a week of edits across thirty templates: one line changes in design-tokens.css.
Oval · VS · Muzo, Colombia · GRS certificate
Five layers, each with its own area of responsibility. Pick a layer and below the diagram you will see what lives there and why.
Edge / CDN. Caching, DNS and SSL before a request ever reaches PHP. Static assets go here too: the more is served from the edge, the less the application does. The average TTFB on the catalogue and cards stays under a second and a half precisely because of the edge plus WordPress transients.
Frontend. Thirty-odd pages in two languages, responsive. HTML, CSS and plain JS with no framework — Elementor Pro as the visual layer, Leaflet and CartoDB on the locations map. The AI constructor lives here as a full section, not as a demo page.
Application. WordPress as the CMS core, WooCommerce as commerce, Directory Kit as the catalogue — and custom plugins on top: catalog-api, commerce-bridge, admin-columns, favorites. A standard stack turns into a unique product exactly at this layer.
Data. MySQL with post and meta tables, a dedicated favourites table, file cache and media, the translation store. Unique SKUs — every stone being one of a kind — called for a separate data model rather than the usual product card with sizes and colours.
External. Three regional-bank accounts with automatic selection by the order currency, a proprietary serverless AI pipeline, mapping and mail. Everything external sits outside the application boundary — if any one service goes down, the site does not.
30+ pages, 2 languages, responsive. HTML / CSS / Vanilla JS · Elementor Pro · Leaflet.js · CartoDB
PHP 8 · WordPress · WooCommerce · WDK · site-catalog-api.php (REST) · site-commerce-bridge
MySQL · posts/postmeta · user_favorites table · /site-cache · transients
Custom AI pipeline · 900+ image dataset · built from scratch
Hosting: managed PHP 8, nightly backups, staging environment.
Endpoint /wp-json/catalog/v1/items with filtering by colour, clarity, weight, cut and location. Jewellery items excluded, sorting by date, transient caching.
A dedicated database table user_favorites, three REST endpoints, shared JS. The hearts stay in sync across the catalogue, the product card and the personal account.
A proprietary AI pipeline built from scratch for this site and this task. Trained on an in-house dataset of 900+ images, it produces visualisations exactly in the brand's style. V4 was fully restyled to the site's design system.
Leaflet.js plus CartoDB. Stones are grouped by country of origin. A click on a location shows every gemstone of that region. Branded markers.
Three regional-bank accounts (USD / EUR / SEA) with automatic selection by currency. WooCommerce email notifications rebranded into VOC Gems style.
A canvas animation, “a lighthouse inside a diamond” — a marketing banner in the Emerald category. A conceptual visual that lifts the sense of the premium.
Choosing WordPress, WooCommerce, WDK and Elementor Pro as the hybrid base. Setting up managed hosting, Cloudflare, SSL, backups. The design system and the first layouts. The stack was chosen for the task rather than out of habit: unique SKUs sit badly on an ordinary product catalogue.
Building the catalogue with a REST API, filters and a product card. Integrating the WDK fields. Responsive layout. Pages load in under a second and a half.
A dynamic Featured Stones carousel. An interactive map on Leaflet.js. A dynamic news system. SVG animations of the cuts on the homepage. The “Voyage of Colors” hero. The jewellery module and the favourites system with its own table in the database.
AI Jewelry Constructor — a pipeline for generating jewellery visualisations, built from scratch. Trained on an in-house dataset of 900+ images and integrated into the site as a full production module, not as a demo.
14 April 2026 — the official launch of vocgems.com. In three months: from a blank sheet to a working premium e-commerce with an AI module. Client enquiries, the first orders, email notifications in the brand's style, multi-currency payments through a regional bank.
The project was delivered, but at the client's request I continue to maintain the site: developing functionality, new features, optimisation, support for the AI module. A long-term relationship is part of the work too.
The total volume of custom PHP, JS and CSS. Not counting the template code of WordPress and WooCommerce.
Average TTFB on the catalogue and the cards. Cloudflare edge plus WordPress transients.
Images in the in-house dataset used to train the proprietary VOC Gems AI pipeline.
Plugins, REST endpoints and JS systems written from scratch for the project.
USD · EUR · SEA — multi-currency regional-bank accounts, selected automatically by order currency.
EN / RU. Every page, article and SEO meta tag. Language persists through the session.
I get into the client's business far enough to speak his language — in the case of VOC Gems that meant gemmology.
The stack fits the task, not the habit. Design tokens and API contracts before a line of code.
Fast rounds: prototype → feedback → revision. The problem solved whole, not smeared across weeks.
Monitoring, caching, tests on real traffic, documentation for every non-standard decision.
Every stone in VOC Gems is one of a kind. Which is why the site could not be a template.Design philosophy · 2026
Art Director · Designer · Developer
I am one of those rare hybridswho can both draw a projectand build it by hand — from the first sketch to production code.
My approach is “do not separate design from development”. When one person sees the project whole, from the typographic grid to the REST endpoint, what comes out is more than the sum of the layers. That is how VOC Gems came about: not one pixel was “handed over” from a mock-up to a developer — because the designer and the developer were the same person.
I run projects from zero to release: I get into the client's business far enough to speak his language, whether that is gemmology or AI pipelines. I solve the problem whole rather than smear it across weeks.
I started as an art director — drawing brands, moodboards, identities. At some point I realised: for design to actually live, you have to be able to build it yourself. Now I write PHP, JS and CSS.
I did not wait for ready-made solutions — I built an AI pipeline from scratch for the client's task. Trained my own model on 900+ VOC Gems images. It is now a production module on the site.
One person: developer, designer, PM, AI engineer. Three months from a blank sheet to production. 30K+ lines of code, two languages, integration with a regional bank in South-East Asia. The site is delivered — and I keep maintaining it.
This case study is not a presentation but a cross-section of a real production project that serves clients around the world every day. Every line of code was written. Every pixel was drawn. Every decision was made.
From idea to launch. From the first sketch to production code. One person — the whole way.