← back to Majilite Onboard

README.md

41 lines

# Majilite · Metallic Specialties I — onboarding (TK-10403)

Onboards the **Majilite "Metallic Specialties I"** card (*The Nytek® Collection* — engineered
Nylon-Fiber-Matrix faux leather) into DW: **160 SKUs**, original pattern + colorway names kept
**customer-facing**, our internal SKU on the auto-assigned free DW series **`DWMJ-`**, and the one
shared Nytek spec stamped on **every** SKU. Ships a live web viewer that shows the import as it runs.

Source: `Majilite_MetallicSpecialties_I_Digital Card_2026.pdf` (info@ inbox, from Kathryn Gabriel /
Two Gabriels). Card I = 160 SKUs; the card notes I + II together = 320 Nytek SKUs.

## Run
```
node scripts/build.js         # source_swatches.json -> data/products.json + collection.json
node scripts/crop_swatches.py # PDF pages -> public/images/DWMJ-000001..160.png (160 tight swatches)
node scripts/emit_sql.js      # -> migrations/001 (catalog) + 002 (vendor_registry DRAFT)
PORT=9972 node server.js      # live viewer @ http://127.0.0.1:9972  (admin / DW2024!)
```

## Viewer (http://127.0.0.1:9972, admin/DW2024!)
- **▶ Run import** streams all 160 through the pipeline (Parsed → DW SKU → Spec → Image → Staged) via SSE.
- Sort (Newest / Color family / Light→Dark / Pattern / Title / SKU) + density slider (persisted).
- Color-family rail with dots + pattern facets (click-to-filter), search (space = AND).
- Every card: real swatch image, `Pattern Color` title, `DWMJ-` SKU, color dot + family/pattern chips,
  🕓 created date+time, SPEC badge. Click a card → full spec drawer.

## Data model
- `dw_sku` = `DWMJ-600001..600160` (internal, 600000 block per Steve). `mfr_sku` = `"Pattern Colorway"`
  (Majilite is name-keyed). `title` = `Pattern Colorway` (original, customer-facing). Not private-label.
- `spec` (shared): 54"W, 8.8 oz/yd², 28 mil, 300k double-rubs (Wyzenbeek), inherent FR (NFPA-260 Cl.1 /
  CAL TB 117), PFAS/PVC/plasticizer-free, S/W clean, crocking 5/5. Made in MA.
- Pricing: **onboarded as sellable $4.25 samples** (`onboard_status=sample`, `display_prices=true`).
  By-the-yard retail deferred until Majilite sends a cost list.

## Staged / applied (Mac2-canonical, reversible)
- `dw_unified.majilite_catalog` — 160 rows loaded (migrations/001). Rollback: `DROP TABLE majilite_catalog;`

## GATED — needs Steve (see tasks/GOLIVE-pending-approval.md)
1. **Cost list from Majilite** → enables pricing (quote-only until then).
2. `vendor_registry` INSERT (migrations/002 DRAFT) — Mac2-canonical; drift-canary/registry-sync semantics.
3. **Shopify publish** (customer-facing) — build products (sample variant + yard variant + spec metafields).