# Server Hardware Catalog — Implementation Plan

## Overview
Add a complete server hardware product catalog (Dell PowerEdge, HPE ProLiant,
Enterprise Processors, Enterprise SSDs) to the existing shop, with full specs,
tag-based filter facets, product comparison, and a quote workflow that reuses
the existing ContactModals "Request Quote" form.

## Image Plan
4 datacenter-style hero images used as product placeholders per category:
- dell-poweredge-rack.jpg — 2U Dell PowerEdge rack server, datacenter bokeh
- hpe-proliant-rack.jpg — HPE ProLiant rack server with blue accent lights
- enterprise-cpu.jpg — close-up of a server Xeon CPU on a motherboard
- enterprise-ssd.jpg — enterprise 2.5" SSD drives in a datacenter tray

## Catalog Structure
- 4 top-level categories
- 6 Dell models (R420, R520, R640, R720, R730, R750)
- 6 HPE models (DL380 Gen9/10/11, DL360 Gen9/10/11)
- 5 processor lines (Core i7, Core i9, Xeon Silver, Xeon Gold, Xeon Platinum)
- 3 SSD types (SATA, SAS, NVMe) × 6 capacities (480GB–15.36TB) = 18 SSD SKUs
- Total: 4 categories + 35 products

Each product stores full specs in the `variants` JSON column (already exists):
```json
{
  "brand": "Dell",
  "model": "PowerEdge R640",
  "condition": "Refurbished",
  "warranty": "12 months",
  "specs": [{"label": "CPU", "value": "Up to 2x Xeon Scalable Gen1/Gen2"}, ...],
  "quote_only": false
}
```

Filter facets are stored as `facet:value` entries in the `tags` comma list so
the existing Shop.tsx tag filter can drive them (brand:dell, gen:gen10,
cpu:xeon-gold, ram:128gb, storage:ssd, capacity:1.92tb, condition:refurbished).

## Development Tasks
- [x] Generate 4 category/placeholder images via image-generation skill, record in image_manifest.json
- [x] Create `scripts/seed_server_hardware.py` — idempotent seed of 4 categories + 35 products
- [x] Add `POST /api/v1/admin/catalog/seed-server-hardware` admin endpoint that runs the seed
- [x] Run the seed once from within the session to populate the live database
- [x] Extend `pages/shop/ProductDetail.tsx` — parse variants JSON, render specs table, brand/model badges, Request Quote button
- [x] Wire Request Quote → open ContactModals GetPriceModal
- [x] Existing `pages/shop/Shop.tsx` generic tag-filter sidebar already supports hardware facets (Brand, Model, CPU, RAM, Storage, Capacity, Generation, Condition) via the seeded `facet:value` tags — no extra code required
- [ ] Compare drawer (deferred — out of MVP scope, can be added later on request)
- [x] Run `pnpm run lint` on frontend (passed)