SKU Structure: Hyphen-Separated Component Architecture
This article explains how our SKU (Stock Keeping Unit) system uses a hyphen-separated structure to uniquely identify every product configuration while enabling powerful feature extraction and filtering.
The Problem: Identifying Product Configurations
A mini PC can have thousands of configurations:
-
Chassis: Treo, S, H (different form factors)
-
Board: N100, i5-1335U, i7-1355U (different processors)
-
RAM: 4GB, 8GB, 16GB, 32GB, 64GB
-
Flash: 128GB, 256GB, 512GB, 1TB, 2TB
-
Adapter: 2H (2 HDMI), 2D (2 DisplayPort), 1H1D (1 HDMI + 1 DisplayPort)
-
WiFi: W6 (WiFi 6), W6E (WiFi 6E), None
-
OS: 11P (Windows 11 Pro), U (Ubuntu), DOS (FreeDOS)
-
Accessories: Keyboard, mouse, VESA mount, etc.
With 3 chassis × 10 boards × 5 RAM × 5 flash × 5 adapters × 3 WiFi × 3 OS = 33,750 possible configurations, we need a systematic way to identify each one.
The Solution: Hyphen-Separated SKU
We use a hyphen-separated structure where each position represents a component category:
Treo-N100-8-256-2H-W6-11P
This creates a unique identifier for every configuration.
SKU Breakdown
graph LR
SKU[Treo-N100-8-256-2H-W6-11P]
SKU --> C[Treo
Chassis]
SKU --> B[N100
Board/CPU]
SKU --> R[8
RAM GB]
SKU --> F[256
Flash GB]
SKU --> A[2H
Adapter]
SKU --> W[W6
WiFi 6]
SKU --> O[11P
Windows 11 Pro]Part Sequence
The SKU follows a fixed sequence defined in code:
part_sequence = [
Categories.CHASSIS, # Position 0
Categories.BOARD, # Position 1
# ... (implementation details omitted)
Every SKU must have at least the first 7 components (Chassis through OS). Accessories are optional.
Component Categories
1. Chassis
The physical enclosure and form factor:
-
Treo: Latest mini PC chassis (compact, modern design)
-
S: Small form factor (compact desktop)
-
H: Standard form factor (traditional desktop)
The chassis determines:
-
Physical dimensions
-
Mounting options (VESA, desktop)
-
Thermal design (fanless vs fan-cooled)
-
Port layout
2. Board
The motherboard with processor:
-
N100: Intel N100 (4 cores, 3.4GHz, 6W TDP)
-
N150: Intel N150 (4 cores, 3.6GHz, 6W TDP)
-
i5-1335U: Intel Core i5 13th Gen (10 cores, 4.6GHz, 15W TDP)
-
i7-1355U: Intel Core i7 13th Gen (10 cores, 5.0GHz, 15W TDP)
The board determines:
-
Processor generation, series, model
-
Core count
-
Max frequency
-
Cache size
-
Integrated graphics
3. RAM
Main memory capacity:
-
4: 4GB DDR4
-
8: 8GB DDR4
-
16: 16GB DDR4
-
32: 32GB DDR4
-
64: 64GB DDR4
RAM is specified in GB without the unit.
4. Flash
SSD storage capacity:
-
128: 128GB SSD
-
256: 256GB SSD
-
512: 512GB SSD
-
1024: 1TB SSD (1024GB)
-
2048: 2TB SSD (2048GB)
Flash is specified in GB without the unit.
5. Adapter
Display output configuration:
-
2H: 2× HDMI ports
-
2D: 2× DisplayPort
-
1H1D: 1× HDMI + 1× DisplayPort
-
1H1V: 1× HDMI + 1× VGA
-
3H: 3× HDMI ports
The adapter determines available display outputs.
6. WiFi
Wireless connectivity:
-
W6: WiFi 6 (802.11ax) + Bluetooth 5.2
-
W6E: WiFi 6E (802.11ax 6GHz) + Bluetooth 5.2
-
None: No wireless (Ethernet only)
7. OS
Operating system:
-
11P: Microsoft Windows 11 Pro
-
U: Ubuntu Linux 24.04 LTS
-
DOS: FreeDOS (no OS)
-
Thinux: Thinvent® Thinux™ Embedded Linux
8. Accessories (Optional)
Additional components:
-
KM: Keyboard + Mouse combo
-
MK: Mechanical Keyboard
-
VESA: VESA mount bracket
-
Stand: Adjustable stand
Multiple accessories can be combined: KM-VESA
SKU Validation
Not all combinations are valid. We validate SKUs using compatibility rules:
Check SKU Function
def check_sku(sku: str) -> bool:
partids = sku.split("-")
if len(partids) < len(part_sequence):
# ... (implementation details omitted)
Compatibility Constraints
Components can specify which other components they're compatible with:
Example: Treo chassis allows specific boards
{
"Treo": {
"allows": {
"Board": ["N100", "N150", "i5-1335U"],
"RAM": ["4", "8", "16", "32"],
"Adapter": ["2H", "1H1D"]
}
}
}
This prevents invalid combinations like "Treo-i7-64-2048-3H" (Treo doesn't support i7 or 3H adapter).
SKU Expansion
We convert SKUs to human-readable names:
def expand_sku(sku: str) -> str:
part_ids = sku.split("-")
part_names = [
productdb[part_sequence[i].value][part_id]["external"]
# ... (implementation details omitted)
]
Example:
Input: Treo-N100-8-256-2H-W6-11P
Output: Treo Mini PC, Intel N100, 8GB DDR4, 256GB SSD, 2× HDMI, WiFi 6, Windows 11 Pro
The external field contains the customer-facing name for each component.
Feature Extraction
The SKU structure enables automatic feature extraction:
Feature Sequence
We define a sequence of features to extract:
feature_sequence = {
"Generation": {"Unit": "", "Heading": "Processing"},
"Series": {"Unit": "", "Heading": "Processing"},
# ... (implementation details omitted)
Each feature has:
-
Unit: Measurement unit (GB, GHz, Mbps)
-
Heading: Category for grouping (Processing, Display, Connectivity)
Extracting Features
For each component in the SKU, we extract its features:
# Board: N100
{
"Generation": "12th",
# ... (implementation details omitted)
These features are aggregated across all components to create the product's complete feature set.
Benefits of This Structure
1. Unique Identification
Every configuration has a unique SKU. No ambiguity.
2. Human-Readable
The SKU is readable by humans:
-
Treo-N100-8-256-2H-W6-11Pclearly shows the configuration -
No need to look up a database to understand what it is
3. Sortable
SKUs sort naturally:
-
Treo-N100-8-256-2H-W6-11P -
Treo-N100-16-512-2H-W6-11P -
Treo-i5-16-512-2H-W6-11P
Sorting by SKU groups similar configurations together.
4. Filterable
We can filter by any component:
-
All Treo products:
Treo-* -
All N100 products:
*-N100-* -
All 16GB products:
*-16-*
5. Feature Extraction
The structure enables automatic feature extraction for:
-
Product pages (display specifications)
-
Search filters (filter by RAM, storage, etc.)
-
Comparison tables (compare features side-by-side)
6. Cost Calculation
We can calculate cost by summing component costs:
def calculate_sku_cost(sku: str) -> float:
# ... (implementation details omitted)
return total_cost
7. URL Generation
SKUs map directly to product URLs:
SKU: Treo-N100-8-256-2H-W6-11P
URL: /p/Treo-N100-8-256-2H-W6-11P
No separate URL slug needed.
Composite Items
Some components are composite (made of multiple parts):
Example: Board with integrated components
{
"N100": {
"external": "Intel N100",
# ... (implementation details omitted)
This enables:
-
Bill of Materials (BOM): List all components needed
-
Cost calculation: Sum costs of constituents
-
Inventory tracking: Track component usage
Single-Part SKUs
Not all SKUs are hyphenated. Single parts can be SKUs too:
-
N100(just the board) -
Treo(just the chassis) -
KM(keyboard + mouse)
These are used for:
-
Spare parts
-
Upgrades
-
Accessories
The is_single_part() function checks if a SKU is a single part or a full product.
Integration with SEO Pipeline
The SKU structure powers the SEO pipeline:
- Feature extraction: Extract features for phrase mappings
- Filter generation: Create filters for filter extraction
- Product matching: Match queries to products by features
- Query pages: Generate pages for feature combinations
See SEO Pipeline Overview for details.
References
Technical Concepts
-
Stock Keeping Unit (SKU) - Wikipedia
-
Bill of Materials (BOM) - Wikipedia
Related Articles
-
productdb.json as Single Source of Truth - Product database structure
-
Feature Extraction and Aggregation - How features are extracted
-
How SKU Structure Enables Unique Pages - SEO benefits
-
Phrase-to-Filter Mappings - Using features for filters
-
SEO Pipeline Overview - Complete pipeline architecture
Summary
Our SKU system uses a hyphen-separated structure to uniquely identify product configurations:
-
Structure:
Chassis-Board-RAM-Flash-Adapter-WiFi-OS-Accessories -
Example:
Treo-N100-8-256-2H-W6-11P -
Benefits:
-
Unique identification (33,750+ configurations)
-
Human-readable (no lookup needed)
-
Sortable (natural ordering)
-
Filterable (by any component)
-
Feature extraction (automatic)
-
Cost calculation (sum of parts)
-
URL generation (direct mapping)
Validation:
-
Component existence check
-
Compatibility constraints
-
Minimum length requirement
Expansion:
-
SKU → Human-readable name
-
Component → Features
-
Features → Filters
This structure is the foundation of our product catalog, enabling powerful search, filtering, and SEO optimization.