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
Success Criteria
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
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.