{"id":863,"slug":"client-bjf-lubricants-data-pattern-v2","title":"B&J — lubricants module shape (v2): 81 records in a TS module, deliberately lift-and-shift-ready for the Manifold swap","kind":"reference","scope":"client-case-studies","status":"current","audiences":["kevin","candid-team","client-prospect"],"topics":["lubricants","client-boucher-jones","case-study-source","client-tech-stack","architectural-decisions","data-model-design"],"reference_body":"The lubricants dataset surfaced on the marketing site lives in **`src/lib/lubricants.ts` (1,150 lines)** — a TypeScript module — rather than the production database. This is intentional and worth surfacing in case-study copy.\n\n## Module shape\n\n| Item | Count |\n|---|---|\n| Records (rows with `status:` field) | **81** |\n| OEM-spec mentions (`oemSpec:`) | 81 |\n| OEM-name mentions (`oem:`) | 84 (some records carry multiple OEM specs) |\n| Exported types & functions | **11** — `LubricantStatus`, `LubricantRecord`, `LubricantVertical`, `STATUS_LABEL`, `STATUS_BADGE_CLASSES`, `SOURCE_ATTRIBUTION`, `getCrosswalk`, `listOems`, `listModelLines`, `listComponents`, `findRecord` |\n\n## Reconciling the \"350+ products\" vs \"81 records\" numbers\n\nThe \"350+ Petro-Canada products in catalog\" KPI from [[client-bjf-kpi-candidates]] refers to the full Petro-Canada Lubricants catalog and the Manifold ingestion against it (**269 products / 41 families / 95 OEM specs / 280 spec-meeting relationships** per [[client-bjf-manifold-data-platform]]).\n\nThe **81 records in `src/lib/lubricants.ts`** is the **curated subset surfaced on the marketing site OEM crosswalk** — the high-traffic OEM/model combinations that justify a customer-facing crosswalk page today. Both numbers are correct; they count different things.\n\n## The lift-and-shift design (the case-study angle)\n\nThe module documents the four **\"honesty contract\" statuses** (formally-approved / meets-exceeds / industry-equivalent / verify-pcl) and says the same shape will swap to a Manifold API call in **a one-function edit at `getCrosswalk`**.\n\n**This is the craft signal:** the local data layer was deliberately built to be lift-and-shift-able to Manifold once the read API ships. The \"honesty contract\" status taxonomy is the cross-cutting vocabulary that lets the swap be mechanical — same labels in the TS module today, same labels coming out of Manifold tomorrow.\n\nSee [[client-bjf-arch-decisions-ranked]] item 4 (single design system / component library / API layer) for the broader version of the same discipline.","rationale_body":null,"metadata":null,"links":{"outgoing":[{"slug":"client-bjf-manifold-data-platform","title":"Manifold data platform — Candid Creative product powering embedded widgets on the B&J site","kind":"reference","scope":"client-case-studies","link_type":"relates-to"},{"slug":"client-bjf-kpi-candidates","title":"B&J KPI candidates — every defensible metric, with source and confidence","kind":"reference","scope":"client-case-studies","link_type":"relates-to"},{"slug":"client-bjf-arch-decisions-ranked","title":"B&J architectural decisions worth surfacing in case-study narrative — eight, ranked","kind":"reference","scope":"client-case-studies","link_type":"relates-to"}],"incoming":[{"slug":"client-bjf-case-study-source-v2","title":"Boucher & Jones — case-study source material, v2 (technical facts, 2026-05-24)","kind":"reference","scope":"client-case-studies","link_type":"relates-to"}]},"created_at":"2026-05-24T01:16:37.137Z","updated_at":"2026-05-24T01:16:37.137Z"}