Consumer Electronics / Retail

Custom Returns & Issue Management CRM

A purpose-built returns and issue management system that replaced Linnworks' limited functionality with a structured, multi-level issue tracking platform — processing thousands of product returns across 8 suppliers and multiple sales channels.

Client

Subcold

Product

Internal CRM / Returns Management System

Service

Product Engineering

Engagement

Custom CRM Build & Linnworks Integration

Client Overview

Subcold Ltd is one of the UK's leading compact refrigeration brands, with over 600,000 customers across 48+ countries. They manufacture and sell mini fridges, wine coolers, gaming fridges, and commercial refrigeration units across multiple sales channels — Amazon FBA, eBay, Shopify, and direct — and are trusted by organisations including the BBC, Moxy Hotels, and LNER. With products supplied by 7–8 different suppliers across dozens of SKUs, managing product returns and issues at scale became a critical operational challenge.

Subcold used Linnworks as their primary ERP and order management system. While Linnworks handled order processing effectively, its returns management functionality was too limited for Subcold's needs. With hundreds to thousands of returns arriving monthly across multiple platforms and suppliers, the team had no structured way to categorise issues, track resolutions, assign spare parts, or generate meaningful reports on return patterns.

The goal was to build a custom internal CRM that integrated directly with Linnworks — pulling order data automatically — and provided a fully structured, filterable system for logging, categorising, resolving, and reporting on every product return.

Problem & Challenges

Business Problems

  • Linnworks lacked sufficient returns management functionality for the volume and complexity of issues Subcold handled monthly
  • No structured way to categorise returns across a 3-level hierarchy, making it impossible to identify patterns at scale
  • Spare parts for replacements were managed manually with no system linking specific parts to specific product SKUs
  • No visibility into fault rates per supplier — impossible to determine which of the 7–8 suppliers had the highest defect rates
  • No reporting or filtering capability to analyse returns by source platform, resolution type, SKU, date, or issue category

Technical Challenges

  • Integrating with the Linnworks API to retrieve and import order data (ID, customer, postcode, SKU, supplier, source platform) reliably by reference number
  • Designing a flexible 3-level hierarchical issue taxonomy (parent → sub-issue → nested issue) extensible without system changes
  • Building a dynamic spare parts engine that filters available replacement components based on the selected product SKU with no cross-contamination between products
  • Implementing deep multi-dimensional reporting with simultaneous filtering across resolution, source platform, supplier, date range, SKU, and issue type
  • Processing and aggregating large volumes of issue data efficiently for reports using Pandas on the Django backend, with async task processing via Celery and Redis

Objectives & Success Criteria

Our Objectives

Linnworks Order Integration

Pull order data directly from Linnworks by reference ID — no manual entry of customer, SKU, supplier, or platform details

Success Criteria

Zero Manual Order Entry

Every return starts from a Linnworks order — no manually typed customer or product data

3-Level Issue Hierarchy

Build a structured taxonomy supporting parent, sub-issue, and nested issue categories for precise returns classification

Full Issue Traceability

Every return logged with 3-level categorisation, resolution, and serial/batch number reference

SKU-Specific Spare Parts

Link replacement parts to specific SKUs so agents only see relevant components for the product they are working on

Supplier Accountability

Clear visibility into fault rates per supplier, enabling data-driven procurement decisions

Resolution Lifecycle Tracking

Track every resolution — refund amount, replacement dispatched, undeliverable, RMA booked — against each individual case

Platform-Level Insights

Returns analysed by source platform (Amazon, eBay, Shopify, etc.) to identify channel-specific patterns

Deep Reports & Filtering

Enable multi-dimensional reporting and filtering by SKU, supplier, source platform, date, issue type, and resolution

Scalable to Volume

System handles hundreds to thousands of returns monthly without performance degradation

Our Solution

We built a full-stack custom returns management CRM with a React SPA frontend and a Python/Django REST API backend, backed by PostgreSQL and deployed on AWS EC2 with Docker and NGINX. The system integrates directly with Linnworks — agents enter an order reference and the platform pulls all order data automatically. Issues are created against those orders using a structured 3-level hierarchy, with SKU-specific spare parts dynamically loaded per product. Every resolution is tracked — refund amounts, replacements, RMA status — and a deep reporting engine built on Pandas delivers filterable insights across every dimension of the returns data.

Linnworks Order Integration

Real-time order retrieval from Linnworks by reference ID — auto-importing customer name, postcode, SKU, supplier, and source platform

3-Level Issue Taxonomy

Structured parent → sub-issue → nested issue hierarchy covering all return categories (faulty, damage, lost, and more) with full extensibility

SKU-Specific Spare Parts Engine

Replacement parts database filtered dynamically by product SKU — agents only see relevant parts for the specific product in question

Resolution & Status Tracking

Full resolution lifecycle — refund amounts, replacements dispatched, undeliverable outcomes, and RMA bookings tracked per case

Deep Multi-Filter Analytics

Comprehensive reporting across SKU, supplier, source platform, date range, issue category, and resolution type — powered by Pandas aggregation

PDF & CSV Report Export

Reports exportable as formatted PDFs via jsPDF and CSV files, with interactive chart visualisations via Chart.js and Recharts

Implementation & Delivery

Scope of Work

Vantagon built the complete system — React SPA frontend, Django REST API backend, PostgreSQL schema, Linnworks integration, and AWS EC2 deployment with Docker containerisation and NGINX reverse proxy. The frontend and backend were built as fully separate layers, with the Django API owning all business logic and Pandas-powered data processing, while the React app delivered a fast, interactive interface for the Subcold operations team.

  • React SPA frontend with TypeScript, Tailwind CSS, and Redux Toolkit for state management
  • Django REST Framework API with JWT authentication and Swagger/OpenAPI documentation
  • PostgreSQL schema for orders, issues, issue hierarchy, spare parts, suppliers, and resolutions
  • Linnworks API integration for real-time order retrieval by reference ID
  • 3-level issue hierarchy system with configurable parent, sub-issue, and nested categories
  • SKU-specific spare parts management with dynamic filtering per product
  • Resolution tracking system — refund amounts, replacement status, and RMA management
  • Pandas-powered reporting engine for multi-dimensional data aggregation and export
  • Interactive charts and visualisations via Chart.js and Recharts
  • PDF report export with jsPDF and CSV export functionality
  • Celery and Redis for background task processing
  • Cloudinary integration for file and image uploads
  • AWS EC2 deployment with Docker containerisation and NGINX reverse proxy

Linnworks Integration

Order data flows automatically from Linnworks — agents enter a reference and receive all customer, product, and supplier details instantly

3-Level Issue Classification

Structured taxonomy enabling precise categorisation across thousands of returns, making pattern identification possible for the first time

Dynamic Spare Parts Filtering

Parts database intelligently filtered by SKU — agents working on a specific product only see the relevant replacement components

Supplier Fault Analytics

Dedicated per-supplier reporting showing fault rates, issue types, and resolution outcomes — giving Subcold clear data for supplier accountability

Dockerised Production Deployment

Fully containerised with Docker, deployed on AWS EC2 with NGINX reverse proxy for a clean, maintainable production environment

Technology Stack

ReactReact
TypeScriptTypeScript
Tailwind CSSTailwind CSS
Redux ToolkitRedux Toolkit
PythonPython
DjangoDjango
PostgreSQLPostgreSQL
AWSAWS
DockerDocker
NGINXNGINX
CeleryCelery
RedisRedis
Chart.jsChart.js
RechartsRecharts
jsPDFjsPDF
PandasPandas
CloudinaryCloudinary

Results & Impact

Subcold now processes thousands of product returns through a single structured platform — replacing the limited functionality of Linnworks with a purpose-built CRM that gives their team complete visibility over every return, resolution, and supplier fault pattern. The reporting engine has transformed how they manage supplier relationships, with clear data on which products and suppliers generate the most issues.

Thousands

Returns Processed to Date

7–8

Suppliers Tracked

5+ Platforms

Sales Channels Covered

3-Level Hierarchy

Issue Classification Levels

Evolution & Long-Term Value

Since launch, Subcold's team has logged thousands of returns through the platform, building a rich dataset of issue patterns, resolution rates, and supplier performance. The reporting engine has become a critical tool for procurement and supplier management decisions. The flexible 3-level issue taxonomy has been extended with new categories as new fault types emerged — without any system rework required.

Ready to Take Control of Your Returns?

Let's build a custom system that gives your team the visibility and structure they need to manage returns at scale.