Supplier Catalogue Manager.
An internal application to import, normalise and manage the supplier's product catalogue delivered as CSV files — mapping supplier SKUs to store products, handling price updates, and flagging discrepancies automatically.
2 Months
Medium
Manual CSV Wrangling Every Week.
The supplier delivers a new catalogue CSV weekly. Manually cross-referencing hundreds of lines against the Shopify store to update prices, add new products, and retire discontinued ones was error-prone and took hours.
Next.js 16 (App Router)
TypeScript
Shopify Admin API
Papaparse (CSV parsing)
PostgreSQL
MUI v7 DataGrid
Zod (schema validation)
The CSV is uploaded via a drag-and-drop interface, parsed client-side with Papaparse, and validated against a Zod schema. A diff engine compares the incoming catalogue against the current store state and produces a change-set (new / updated / removed) ready for one-click sync via the Shopify Admin API.
// lib/catalogue/diff.ts
export function diffCatalogue(
incoming: SupplierRow[],
current: ShopifyProduct[]
): CatalogueChangeset {
const currentMap = new Map(current.map(p => [p.sku, p]))
return {
toCreate: incoming.filter(r => !currentMap.has(r.sku)),
toUpdate: incoming.filter(r => {
const existing = currentMap.get(r.sku)
return existing && existing.price !== r.price
}),
toArchive: current.filter(p =>
!incoming.find(r => r.sku === p.sku)
)
}
}From Hours to One Click.
↗
Automated Diff Engine
Compares incoming supplier CSV against live store state and categorises every product into new, updated, or discontinued — no manual cross-referencing needed.
↗
One-Click Shopify Sync
The validated change-set is applied to Shopify via the Admin API in batch, with conflict resolution and a rollback log for any failed operations.
4h
Saved Per Week~4h/wk
Time Saved500+
Products~0%
Error Rate