@model PowderCoating.Application.DTOs.Inventory.PowderCatalogStatsDto @{ ViewData["Title"] = "Powder Catalog"; ViewData["PageIcon"] = "bi-palette2"; Layout = "_Layout"; }
@if (TempData["Success"] != null) { } @if (TempData["Error"] != null) { }
@Model.TotalProducts.ToString("N0")
Total Products
@Model.ActiveProducts.ToString("N0")
Active
@Model.DiscontinuedProducts.ToString("N0")
Discontinued
@Model.VendorCount
@(Model.VendorCount == 1 ? "Vendor" : "Vendors") @if (Model.LastImportedAt.HasValue) {
Last sync @Model.LastImportedAt.Value.ToString("MMM d, yyyy") }
@Model.UserContributedProducts.ToString("N0")
Tenant Contributed
Import Catalog Data

Upload a Prismatic Powders scrape JSON file (the prismatic_powders.json format with a top-level results array). Existing SKUs are updated in-place; new ones are inserted. Discontinued products remain in the catalog flagged as IsDiscontinued.

Must match exactly — used as the upsert key alongside SKU.
Max 50 MB. Must be the scraped format with results[] array.
How It Works
  • Platform-level: One shared catalog, no per-tenant copies.
  • Catalog-first lookup: When a tenant adds inventory, the form searches here before calling the AI API.
  • Auto-fill: Selecting a result fills color name, manufacturer, part number, unit cost, SDS/TDS links, and product image.
  • Discontinued: Flagged IsDiscontinued = true — never hidden, always available for historical lookups.
  • Phase 2: Monthly price sync + push to tenant inventory items.