{
  "schemaVersion": 1,
  "project": "ErgoPoint42 P1 compact travel split",
  "revision": "P1 / v3",
  "sourceCheckedDate": "2026-09-07",
  "quantityBasis": "One complete left + right pair, 42 keys and two TrackPoints",
  "currency": "USD",
  "status": "Unbuilt prototype; supplier pricing is a dated snapshot, not a purchase or production approval.",
  "schemaNotes": {
    "qtyPerPair": "Installed count; null for consumables measured as needed. Included contacts and harness assemblies are documented but not purchased twice.",
    "orderQuantity": "Number of packs or units to buy. Null means quote or final fit selection required.",
    "unitPrice": "Price per order unit at stated tier. A 30-switch pack price is not a single-switch price.",
    "lineCost": "orderQuantity times unitPrice where both are verified and unambiguous. Null means unknown, never zero.",
    "costGroup": "required, conditionalRequired, optionalDisplay, customFabrication, consumables, optionalAccessories or included.",
    "rightFrame": "Exactly one of frame_right and frame_right_plain is installed; their rows are alternatives, not additive.",
    "minimumOrderQuantity": "Supplier minimum in order units when verified; null when unavailable or not a separate purchase. Suggested orderQuantity may be larger for fit spares."
  },
  "parts": [
    {
      "id": "controller",
      "name": "XIAO nRF52840 Plus, plain",
      "category": "Core electronics",
      "kind": "purchased",
      "qtyPerPair": 2,
      "qtyText": "2 each",
      "unit": "each",
      "manufacturerPartNumber": "Seeed 102010672",
      "package": "21 x 17.8 mm module, direct castellated soldering",
      "supplier": "Seeed Studio",
      "orderUrl": "https://www.seeedstudio.com/Seeed-Studio-XIAO-nRF52840-Plus-p-6359.html",
      "sourceCheckedDate": "2026-09-07",
      "stockStatus": "inStock",
      "stockDetail": "Supplier page says In Stock.",
      "orderQuantity": 2,
      "orderUnit": "each",
      "packSize": 1,
      "suppliedQuantity": 2,
      "spareQuantity": 0,
      "unitPrice": 10.4,
      "priceBasis": "Per selected order unit, at stated quantity",
      "currency": "USD",
      "lineCost": 20.8,
      "costGroup": "required",
      "fitNotes": "Use the Plus plain version, with no tall headers. The original non-Plus XIAO lacks the required accessible pins. Solder both underside battery joints.",
      "minimumOrderQuantity": 1,
      "minimumOrderUnit": "each"
    },
    {
      "id": "switch",
      "name": "Kailh Deep Sea Silent Mini Whale tactile",
      "category": "Keys",
      "kind": "purchased",
      "qtyPerPair": 42,
      "qtyText": "42 each",
      "unit": "each",
      "manufacturerPartNumber": "CPG1353S01D02-03; retail SKU CPG1353S01D02-03-30PCS",
      "package": "PG1353 through-hole, MX cross stem",
      "supplier": "Kailh direct",
      "orderUrl": "https://kailhswitch.net/products/kailh-deep-sea-silent-min-low-profile-keyboard-switch?variant=43950809743546",
      "sourceCheckedDate": "2026-09-07",
      "stockStatus": "inStock",
      "stockDetail": "Exact Tactile / Whale / 30 pcs variant reports available=true in supplier product data.",
      "orderQuantity": 2,
      "orderUnit": "pack",
      "packSize": 30,
      "suppliedQuantity": 60,
      "spareQuantity": 18,
      "unitPrice": 18.3,
      "priceBasis": "Per selected order unit, at stated quantity",
      "currency": "USD",
      "lineCost": 36.6,
      "costGroup": "required",
      "fitNotes": "Two 30-packs supply 60 switches: 42 fitted and 18 spare. The default product page may select the linear version; use the exact tactile variant link. Physical fit of retail suffix -03 still needs a sample check against the family drawing.",
      "sourceDataUrl": "https://kailhswitch.net/products/kailh-deep-sea-silent-min-low-profile-keyboard-switch.js",
      "minimumOrderQuantity": 1,
      "minimumOrderUnit": "pack"
    },
    {
      "id": "trackpoint",
      "name": "Complete Sprintek TrackPoint assemblies",
      "category": "Pointing",
      "kind": "purchased",
      "qtyPerPair": 2,
      "qtyText": "2 each",
      "unit": "each",
      "manufacturerPartNumber": "SK8707-01-004",
      "package": "Sensor plus separate 23 x 14.5 mm driver PCB",
      "supplier": "Holykeebs",
      "orderUrl": "https://holykeebs.com/products/sk8707-01-trackpoint-sensor",
      "sourceCheckedDate": "2026-09-07",
      "stockStatus": "conflicting",
      "stockDetail": "Product page says Sold out, while supplier product data reports available=true for variant 50086255821090. Confirm before relying on availability.",
      "orderQuantity": 2,
      "orderUnit": "each",
      "packSize": 1,
      "suppliedQuantity": 2,
      "spareQuantity": 0,
      "unitPrice": 24,
      "priceBasis": "Per selected order unit, at stated quantity",
      "currency": "USD",
      "lineCost": 48.0,
      "costGroup": "conditionalRequired",
      "fitNotes": "Each order must include the sensor, driver PCB and working OEM sensor-to-driver interconnect. Listing explicitly includes sensor, driver and red cap; interconnect completeness needs confirmation. Keep the OEM link. Five carrier wires attach to castellated driver pads 1 through 5, not the FFC pin numbering.",
      "sourceDataUrl": "https://holykeebs.com/products/sk8707-01-trackpoint-sensor.js",
      "alternateSources": [
        {
          "label": "Sprintek manufacturer store; price and stock not reconfirmed in this ordering pass",
          "url": "https://store.sprintek.com/products"
        }
      ],
      "minimumOrderQuantity": 1,
      "minimumOrderUnit": "each"
    },
    {
      "id": "battery",
      "name": "Protected LiPo battery, 3.7 V 150 mAh",
      "category": "Power",
      "kind": "purchased",
      "qtyPerPair": 2,
      "qtyText": "2 each",
      "unit": "each",
      "manufacturerPartNumber": "Adafruit 1317",
      "package": "Reserved pack envelope 20.5 x 29 x 4.3 mm",
      "supplier": "Adafruit",
      "orderUrl": "https://www.adafruit.com/product/1317",
      "sourceCheckedDate": "2026-09-07",
      "stockStatus": "inStock",
      "stockDetail": "Supplier page says In stock.",
      "orderQuantity": 2,
      "orderUnit": "each",
      "packSize": 1,
      "suppliedQuantity": 2,
      "spareQuantity": 0,
      "unitPrice": 5.95,
      "priceBasis": "Per selected order unit, at stated quantity",
      "currency": "USD",
      "lineCost": 11.9,
      "costGroup": "required",
      "fitNotes": "Ships with JST-PH. P1 uses JST-SH, so convert the leads using the connector items below and verify polarity: J3 pin 1 BAT+, pin 2 GND. Firmware selects 50 mA charge. Battery switch must be ON to charge; USB still powers the controller with it OFF. Do not assume the TrackPoint works down to the pack cutoff.",
      "minimumOrderQuantity": 1,
      "minimumOrderUnit": "each"
    },
    {
      "id": "display",
      "name": "nice!view right display",
      "category": "Optional display",
      "kind": "optional",
      "qtyPerPair": 1,
      "qtyText": "1 each",
      "unit": "each",
      "manufacturerPartNumber": "nice!view",
      "package": "36 x 14 x 2.9 mm, five direct wires",
      "supplier": "Typeractive",
      "orderUrl": "https://typeractive.xyz/products/nice-view",
      "sourceCheckedDate": "2026-09-07",
      "stockStatus": "inStock",
      "stockDetail": "Supplier product data reports available=true for variant 44753694228711.",
      "orderQuantity": 1,
      "orderUnit": "each",
      "packSize": 1,
      "suppliedQuantity": 1,
      "spareQuantity": 0,
      "unitPrice": 20,
      "priceBasis": "Per selected order unit, at stated quantity",
      "currency": "USD",
      "lineCost": 20.0,
      "costGroup": "optionalDisplay",
      "fitNotes": "Right half only. Select the display right frame and matching right firmware. The supplied tall headers are not used. Omit this item for the plain right frame.",
      "sourceDataUrl": "https://typeractive.xyz/products/nice-view.js",
      "secondarySources": [
        {
          "label": "Manufacturer specifications and vendors",
          "url": "https://nicekeyboards.com/nice-view/"
        }
      ],
      "minimumOrderQuantity": 1,
      "minimumOrderUnit": "each"
    },
    {
      "id": "diode",
      "name": "Matrix signal diodes",
      "category": "PCB components",
      "kind": "purchased",
      "qtyPerPair": 42,
      "qtyText": "42 each",
      "unit": "each",
      "manufacturerPartNumber": "Diodes Incorporated 1N4148W-7-F",
      "package": "SOD-123",
      "supplier": "DigiKey",
      "orderUrl": "https://www.digikey.com/en/products/detail/diodes-incorporated/1N4148W-7-F/814371",
      "sourceCheckedDate": "2026-09-07",
      "stockStatus": "inStock",
      "stockDetail": "1,409,610 listed at check.",
      "orderQuantity": 50,
      "orderUnit": "each",
      "packSize": 1,
      "suppliedQuantity": 50,
      "spareQuantity": 8,
      "unitPrice": 0.0768,
      "priceBasis": "Each at the 50-piece cut-tape tier; no DigiReel fee",
      "currency": "USD",
      "lineCost": 3.84,
      "costGroup": "required",
      "fitNotes": "21 diodes per half, 42 total. Buy 50 cut-tape parts, leaving 8 spare. Cathode stripe faces ROW. Installed component height must be no more than 1.35 mm; do not select another package.",
      "references": "D1-D21 on each PCB",
      "minimumOrderQuantity": 1,
      "minimumOrderUnit": "each"
    },
    {
      "id": "load-switch",
      "name": "Peripheral rail load switches",
      "category": "PCB components",
      "kind": "purchased",
      "qtyPerPair": 2,
      "qtyText": "2 each",
      "unit": "each",
      "manufacturerPartNumber": "Texas Instruments TPS22919DCKR",
      "package": "SC70-6 / SOT-363",
      "supplier": "DigiKey",
      "orderUrl": "https://www.digikey.com/en/products/detail/texas-instruments/TPS22919DCKR/10434801",
      "sourceCheckedDate": "2026-09-07",
      "stockStatus": "inStock",
      "stockDetail": "108,643 listed at check.",
      "orderQuantity": 2,
      "orderUnit": "each",
      "packSize": 1,
      "suppliedQuantity": 2,
      "spareQuantity": 0,
      "unitPrice": 0.23,
      "priceBasis": "Per selected order unit, at stated quantity",
      "currency": "USD",
      "lineCost": 0.46,
      "costGroup": "required",
      "fitNotes": "U2, one per half. Carrier ties pin 5 QOD to pin 6 OUT. Keep the exact DCK package.",
      "references": "U2 on each PCB",
      "minimumOrderQuantity": 1,
      "minimumOrderUnit": "each"
    },
    {
      "id": "battery-switch",
      "name": "Battery isolation slide switches",
      "category": "PCB components",
      "kind": "purchased",
      "qtyPerPair": 2,
      "qtyText": "2 each",
      "unit": "each",
      "manufacturerPartNumber": "C&K PCM12SMTR",
      "package": "PCM12 SMD slide switch",
      "supplier": "DigiKey",
      "orderUrl": "https://www.digikey.com/en/products/detail/c-k/PCM12SMTR/1640112",
      "sourceCheckedDate": "2026-09-07",
      "stockStatus": "inStockObsolete",
      "stockDetail": "5,781 listed; product is obsolete and will not be restocked.",
      "orderQuantity": 2,
      "orderUnit": "each",
      "packSize": 1,
      "suppliedQuantity": 2,
      "spareQuantity": 0,
      "unitPrice": 1.28,
      "priceBasis": "Per selected order unit, at stated quantity",
      "currency": "USD",
      "lineCost": 2.56,
      "costGroup": "required",
      "fitNotes": "Exact native footprint. A different slide switch needs a footprint and enclosure check. OFF disconnects battery power and charging; it does not disconnect USB power.",
      "references": "S1 on each PCB",
      "minimumOrderQuantity": 1,
      "minimumOrderUnit": "each"
    },
    {
      "id": "battery-header",
      "name": "JST-SH side-entry battery headers",
      "category": "Connectors and wiring",
      "kind": "purchased",
      "qtyPerPair": 2,
      "qtyText": "2 each",
      "unit": "each",
      "manufacturerPartNumber": "JST SM02B-SRSS-TB",
      "package": "2-position, 1.0 mm pitch, side entry, 2.9 mm high",
      "supplier": "DigiKey",
      "orderUrl": "https://www.digikey.com/en/products/detail/jst-sales-america-inc/SM02B-SRSS-TB/926708",
      "sourceCheckedDate": "2026-09-07",
      "stockStatus": "inStock",
      "stockDetail": "84,212 listed at check.",
      "orderQuantity": 2,
      "orderUnit": "each",
      "packSize": 1,
      "suppliedQuantity": 2,
      "spareQuantity": 0,
      "unitPrice": 0.38,
      "priceBasis": "Per selected order unit, at stated quantity",
      "currency": "USD",
      "lineCost": 0.76,
      "costGroup": "required",
      "fitNotes": "J3, one per half. Mouth points outward. Pin 1 BAT+, pin 2 GND.",
      "references": "J3 on each PCB",
      "minimumOrderQuantity": 1,
      "minimumOrderUnit": "each"
    },
    {
      "id": "battery-housing",
      "name": "JST-SH battery cable housings",
      "category": "Connectors and wiring",
      "kind": "purchased",
      "qtyPerPair": 2,
      "qtyText": "2 each",
      "unit": "each",
      "manufacturerPartNumber": "JST SHR-02V-S",
      "package": "2-position housing, 5 mm overall width",
      "supplier": "DigiKey",
      "orderUrl": "https://www.digikey.com/en/products/detail/jst-sales-america-inc/SHR-02V-S/759881",
      "sourceCheckedDate": "2026-09-07",
      "stockStatus": "inStock",
      "stockDetail": "88,710 listed at check.",
      "orderQuantity": 2,
      "orderUnit": "each",
      "packSize": 1,
      "suppliedQuantity": 2,
      "spareQuantity": 0,
      "unitPrice": 0.11,
      "priceBasis": "Per selected order unit, at stated quantity",
      "currency": "USD",
      "lineCost": 0.22,
      "costGroup": "required",
      "fitNotes": "One housing per battery. Contacts are not included; use the precrimped leads below.",
      "minimumOrderQuantity": 1,
      "minimumOrderUnit": "each"
    },
    {
      "id": "precrimp-wire",
      "name": "JST-SH precrimped battery lead wires",
      "category": "Connectors and wiring",
      "kind": "purchased",
      "qtyPerPair": 2,
      "qtyText": "2 each",
      "unit": "each",
      "manufacturerPartNumber": "JST ASSHSSH28K51",
      "package": "28 AWG, 2 inch / 50.8 mm, female contacts at both ends",
      "supplier": "DigiKey",
      "orderUrl": "https://www.digikey.com/en/products/detail/jst-sales-america-inc/ASSHSSH28K51/6009451",
      "sourceCheckedDate": "2026-09-07",
      "stockStatus": "inStock",
      "stockDetail": "24,056 listed at check.",
      "orderQuantity": 2,
      "orderUnit": "each",
      "packSize": 1,
      "suppliedQuantity": 2,
      "spareQuantity": 0,
      "unitPrice": 0.46,
      "priceBasis": "Per selected order unit, at stated quantity",
      "currency": "USD",
      "lineCost": 0.92,
      "costGroup": "required",
      "fitNotes": "Cut each double-ended lead at its middle to make four roughly 25 mm contact tails total. These supply all four SH contacts. Mark polarity because the wires are black, splice to the original pack leads, insulate and verify the finished connector. Check routing length before cutting.",
      "provides": [
        {
          "id": "battery-contact",
          "quantity": 4
        }
      ],
      "references": "Four contacts across two battery harnesses",
      "minimumOrderQuantity": 1,
      "minimumOrderUnit": "each"
    },
    {
      "id": "battery-contact",
      "name": "JST-SH cable contacts, supplied by precrimp leads",
      "category": "Connectors and wiring",
      "kind": "included",
      "qtyPerPair": 4,
      "qtyText": "4 each",
      "unit": "each",
      "manufacturerPartNumber": "JST SSH-003T-P0.2-H",
      "package": "28 to 32 AWG SH crimp contact",
      "supplier": "JST / DigiKey",
      "orderUrl": "https://www.digikey.com/en/products/detail/jst-sales-america-inc/SSH-003T-P0-2-H/2804713",
      "sourceCheckedDate": "2026-09-07",
      "stockStatus": "included",
      "stockDetail": "Provided by the two double-ended precrimped wires above. No separate purchase.",
      "orderQuantity": 0,
      "orderUnit": "each",
      "packSize": 1,
      "suppliedQuantity": 0,
      "spareQuantity": 0,
      "unitPrice": 0,
      "priceBasis": "Per selected order unit, at stated quantity",
      "currency": "USD",
      "lineCost": 0.0,
      "costGroup": "included",
      "fitNotes": "Counted here for native BOM coverage only. Buying loose contacts instead requires correct tooling; the linked base listing has a full-reel minimum of 23,000, unsuitable for this prototype.",
      "includedIn": "precrimp-wire",
      "minimumOrderQuantity": null,
      "minimumOrderUnit": null
    },
    {
      "id": "resistor-5k6",
      "name": "5.6 kΩ 1% pull-up resistors",
      "category": "PCB components",
      "kind": "purchased",
      "qtyPerPair": 4,
      "qtyText": "4 each",
      "unit": "each",
      "manufacturerPartNumber": "YAGEO RC0603FR-075K6L",
      "package": "0603 imperial / 1608 metric",
      "supplier": "DigiKey",
      "orderUrl": "https://www.digikey.com/en/products/detail/yageo/RC0603FR-075K6L/727275",
      "sourceCheckedDate": "2026-09-07",
      "stockStatus": "inStock",
      "stockDetail": "129,396 listed at check.",
      "orderQuantity": 10,
      "orderUnit": "each",
      "packSize": 1,
      "suppliedQuantity": 10,
      "spareQuantity": 6,
      "unitPrice": 0.025,
      "priceBasis": "Per selected order unit, at stated quantity",
      "currency": "USD",
      "lineCost": 0.25,
      "costGroup": "required",
      "fitNotes": "R1 and R2 on each half. Ten at the quantity tier cost less than four at the single-piece price; 6 spare.",
      "references": "R1,R2 on each PCB",
      "minimumOrderQuantity": 1,
      "minimumOrderUnit": "each"
    },
    {
      "id": "resistor-10k",
      "name": "10 kΩ 1% reset pull-down resistors",
      "category": "PCB components",
      "kind": "purchased",
      "qtyPerPair": 2,
      "qtyText": "2 each",
      "unit": "each",
      "manufacturerPartNumber": "YAGEO RC0603FR-0710KL",
      "package": "0603 imperial / 1608 metric",
      "supplier": "DigiKey",
      "orderUrl": "https://www.digikey.com/en/products/detail/yageo/RC0603FR-0710KL/729827",
      "sourceCheckedDate": "2026-09-07",
      "stockStatus": "inStock",
      "stockDetail": "2,884,355 listed at check.",
      "orderQuantity": 10,
      "orderUnit": "each",
      "packSize": 1,
      "suppliedQuantity": 10,
      "spareQuantity": 8,
      "unitPrice": 0.025,
      "priceBasis": "Per selected order unit, at stated quantity",
      "currency": "USD",
      "lineCost": 0.25,
      "costGroup": "required",
      "fitNotes": "R3 on each half. Suggested prototype order leaves 8 spare.",
      "references": "R3 on each PCB",
      "minimumOrderQuantity": 1,
      "minimumOrderUnit": "each"
    },
    {
      "id": "capacitor-100n",
      "name": "100 nF X7R bypass capacitors",
      "category": "PCB components",
      "kind": "purchased",
      "qtyPerPair": 2,
      "qtyText": "2 each",
      "unit": "each",
      "manufacturerPartNumber": "YAGEO CC0603KRX7R9BB104",
      "package": "0603, 50 V, X7R, ±10%",
      "supplier": "DigiKey",
      "orderUrl": "https://www.digikey.com/en/products/detail/yageo/CC0603KRX7R9BB104/2103082",
      "sourceCheckedDate": "2026-09-07",
      "stockStatus": "inStock",
      "stockDetail": "517,033 listed at check.",
      "orderQuantity": 10,
      "orderUnit": "each",
      "packSize": 1,
      "suppliedQuantity": 10,
      "spareQuantity": 8,
      "unitPrice": 0.055,
      "priceBasis": "Per selected order unit, at stated quantity",
      "currency": "USD",
      "lineCost": 0.55,
      "costGroup": "required",
      "fitNotes": "C1 on each half. Maximum listed body height 0.90 mm; keep installed height at or below 1.0 mm. Eight spare.",
      "references": "C1 on each PCB",
      "minimumOrderQuantity": 1,
      "minimumOrderUnit": "each"
    },
    {
      "id": "capacitor-1u",
      "name": "1 µF X7R bypass capacitors",
      "category": "PCB components",
      "kind": "purchased",
      "qtyPerPair": 4,
      "qtyText": "4 each",
      "unit": "each",
      "manufacturerPartNumber": "YAGEO CC0603KRX7R6BB105",
      "package": "0603, 10 V, X7R, ±10%",
      "supplier": "DigiKey",
      "orderUrl": "https://www.digikey.com/en/products/detail/yageo/CC0603KRX7R6BB105/5195204",
      "sourceCheckedDate": "2026-09-07",
      "stockStatus": "inStock",
      "stockDetail": "193,319 listed at check.",
      "orderQuantity": 10,
      "orderUnit": "each",
      "packSize": 1,
      "suppliedQuantity": 10,
      "spareQuantity": 6,
      "unitPrice": 0.095,
      "priceBasis": "Per selected order unit, at stated quantity",
      "currency": "USD",
      "lineCost": 0.95,
      "costGroup": "required",
      "fitNotes": "C2 and C3 on each half. Maximum listed body height 0.90 mm; keep installed height at or below 1.0 mm. Six spare.",
      "references": "C2,C3 on each PCB",
      "minimumOrderQuantity": 1,
      "minimumOrderUnit": "each"
    },
    {
      "id": "peripheral-wire",
      "name": "Fine stranded wire for both TrackPoints and optional display",
      "category": "Connectors and wiring",
      "kind": "consumable",
      "qtyPerPair": 10,
      "qtyText": "10 short runs; 15 with the display",
      "unit": "short runs",
      "manufacturerPartNumber": "NCE 5240253 Ultra-flex 32 AWG orange",
      "package": "One 10 ft / 3.05 m length; 32 AWG stranded PVC, nominal 0.584 mm OD",
      "supplier": "Lombard Hobbies",
      "orderUrl": "https://lombardhobby.com/products/nce-dcc-5240253-10-of-32-gauge-wire-orange",
      "sourceCheckedDate": "2026-09-07",
      "stockStatus": "inStock",
      "stockDetail": "Supplier product data reports available=true.",
      "orderQuantity": 1,
      "orderUnit": "10 ft length",
      "packSize": 1,
      "suppliedQuantity": 1,
      "spareQuantity": null,
      "unitPrice": 7.69,
      "priceBasis": "Per selected order unit, at stated quantity",
      "currency": "USD",
      "lineCost": 7.69,
      "costGroup": "consumables",
      "fitNotes": "Five short carrier-to-driver wires per half, plus five for the optional right display. Keep the original sensor-to-driver links. Cut to the measured route, leave service slack, and label both ends if using one color. Do not run wires across the XIAO antenna.",
      "qtyWithDisplay": 15,
      "secondarySources": [
        {
          "label": "NCE manufacturer wire specification",
          "url": "https://ncedcc.zendesk.com/hc/en-us/article_attachments/201919476"
        }
      ],
      "sourceDataUrl": "https://lombardhobby.com/products/nce-dcc-5240253-10-of-32-gauge-wire-orange.js",
      "minimumOrderQuantity": 1,
      "minimumOrderUnit": "10 ft length"
    },
    {
      "id": "battery-harness",
      "name": "Compact PH-to-SH battery lead conversion assemblies",
      "category": "Connectors and wiring",
      "kind": "customAssembly",
      "qtyPerPair": 2,
      "qtyText": "2 each",
      "unit": "each",
      "manufacturerPartNumber": "Project assembly using JST items above",
      "package": "One two-wire harness per pack",
      "supplier": "Assemble locally",
      "orderUrl": null,
      "sourceCheckedDate": "2026-09-07",
      "stockStatus": "notDisclosed",
      "stockDetail": "",
      "orderQuantity": null,
      "orderUnit": "each",
      "packSize": 1,
      "suppliedQuantity": null,
      "spareQuantity": null,
      "unitPrice": null,
      "priceBasis": "Per selected order unit, at stated quantity",
      "currency": null,
      "lineCost": 0,
      "costGroup": "included",
      "fitNotes": "Retain a compact lead by replacing the original PH connector with the SH housing and insulated precrimped tails above. A plug-to-plug PH-to-SH adapter is an alternative only after checking its extra bulk in the case; the model does not reserve a mated PH pair. Components are already counted.",
      "includedIn": [
        "battery",
        "battery-housing",
        "precrimp-wire"
      ],
      "minimumOrderQuantity": null,
      "minimumOrderUnit": null
    },
    {
      "id": "screw",
      "name": "M1.6 x 7 mm countersunk case screws",
      "category": "Hardware",
      "kind": "purchased",
      "qtyPerPair": 12,
      "qtyText": "12 each",
      "unit": "each",
      "manufacturerPartNumber": "Hardware Specialty 906178 / DIN965A-M1.6X7-A2-H",
      "package": "M1.6, 7 mm overall, 90° flat head, Phillips No. 0",
      "supplier": "Hardware Specialty",
      "orderUrl": "https://www.hardwarespecialty.com/Product/906178",
      "sourceCheckedDate": "2026-09-07",
      "stockStatus": "quoteRequired",
      "stockDetail": "Exact 7 mm catalog item and dimensions verified. Price, stock and minimum order are not disclosed; quotation required.",
      "orderQuantity": 12,
      "orderUnit": "each",
      "packSize": 1,
      "suppliedQuantity": 12,
      "spareQuantity": 0,
      "unitPrice": null,
      "priceBasis": "Per selected order unit, at stated quantity",
      "currency": null,
      "lineCost": null,
      "costGroup": "required",
      "fitNotes": "Six per half. Supplier lists 7 mm length, 90° head, 2.88 mm head diameter and 0.96 mm head height. This is a dimensional candidate for the model's 6.9 mm screw, not a physical fit approval. Confirm head seating, nut engagement and tip clearance on a sample. Exact item uses Phillips No. 0; the 8 mm Accu fallback uses PZ0 and requires qualified shortening.",
      "minimumOrderQuantity": null,
      "minimumOrderUnit": null,
      "alternateSources": [
        {
          "label": "8 mm Accu SPK-M1.6-8-A2 fallback; requires qualified shortening/deburring, price/stock unconfirmed",
          "url": "https://www.accu.co.uk/pozi-countersunk-screws/9488-SPK-M1-6-8-A2"
        }
      ]
    },
    {
      "id": "nut",
      "name": "M1.6 captive hex nuts",
      "category": "Hardware",
      "kind": "purchased",
      "qtyPerPair": 12,
      "qtyText": "12 each",
      "unit": "each",
      "manufacturerPartNumber": "MS&TCO 16368 / DIN 934 M1.6 brass",
      "package": "3.2 mm across flats x 1.3 mm thick",
      "supplier": "Timesavers",
      "orderUrl": "https://timesavers.com/i-8946810-brass-hex-nut-m1-6-4-pack.html",
      "sourceCheckedDate": "2026-09-07",
      "stockStatus": "listedForOrder",
      "stockDetail": "Supplier lists 4-pack at $4.00 and an order control; no stock count disclosed.",
      "orderQuantity": 3,
      "orderUnit": "pack",
      "packSize": 4,
      "suppliedQuantity": 12,
      "spareQuantity": 0,
      "unitPrice": 4,
      "priceBasis": "Per selected order unit, at stated quantity",
      "currency": "USD",
      "lineCost": 12.0,
      "costGroup": "required",
      "fitNotes": "Six per half. Three 4-packs give exactly 12 nuts. Model pockets are 3.3 mm across flats; verify actual nuts fit without splitting the print.",
      "minimumOrderQuantity": 1,
      "minimumOrderUnit": "pack"
    },
    {
      "id": "feet",
      "name": "Custom Ø5 mm adhesive feet from 3M SJ5832",
      "category": "Hardware",
      "kind": "customFabricated",
      "qtyPerPair": 12,
      "qtyText": "12 each",
      "unit": "each",
      "manufacturerPartNumber": "3M Bumpon SJ5832, cut to Ø5 mm",
      "package": "Ø5 mm, nominal 0.8 mm total with factory adhesive",
      "supplier": "Gleicher Manufacturing or local cutting from SJ5832 rollstock",
      "orderUrl": "https://www.gleicher.com/3m-bumpon-protective-products",
      "sourceCheckedDate": "2026-09-07",
      "stockStatus": "quoteRequired",
      "stockDetail": "3M material thickness and converter capability verified. Exact Ø5 mm retail foot not found; request a cut-part/material quote. Converter lists pre-production work from $250, not a quote for these feet.",
      "orderQuantity": null,
      "orderUnit": "each",
      "packSize": 1,
      "suppliedQuantity": null,
      "spareQuantity": null,
      "unitPrice": null,
      "priceBasis": "Per selected order unit, at stated quantity",
      "currency": null,
      "lineCost": null,
      "costGroup": "required",
      "fitNotes": "Six per half. 3M specifies solid polyurethane with R-30 natural-rubber adhesive, nominal 0.8 mm total thickness excluding the release liner, tolerance ±0.13 mm. Cut twelve Ø5 mm circles. Seats are Ø5.2 mm and 0.2 mm deep, giving nominal 0.6 mm exposed height. Do not add another adhesive layer. Check actual thickness, roundness, grip and adhesion to the finished PA12 sample. This is a verified material route, not an off-the-shelf or physically qualified finished foot.",
      "minimumOrderQuantity": null,
      "minimumOrderUnit": null,
      "secondarySources": [
        {
          "label": "3M SJ5832 manufacturer product page",
          "url": "https://www.3m.com/3M/en_US/p/d/b5005035229/"
        },
        {
          "label": "3M technical data: construction, total thickness, tolerance and measurement without liner",
          "url": "https://multimedia.3m.com/mws/media/120317O/3m-bumpon-protective-products-resilient-rollstock-opaque.pdf"
        }
      ],
      "alternateSources": [
        {
          "label": "Bulk SJ5832-4.5-5 rollstock listing; 37-roll minimum and not kept in stock when checked, unsuitable as the default prototype buy",
          "url": "https://www.digikey.com/en/products/detail/3m-tc/SJ5832-4-5-5/7589301"
        }
      ]
    },
    {
      "id": "pcb-left",
      "name": "Custom left carrier PCB",
      "category": "Custom fabrication",
      "kind": "customFabricated",
      "qtyPerPair": 1,
      "qtyText": "1 each",
      "unit": "each",
      "manufacturerPartNumber": "ErgoPoint42 P1 left",
      "package": "1.0 mm FR4, 2 layers, 1 oz copper",
      "supplier": "JLCPCB or equivalent fabricator",
      "orderUrl": "https://jlcpcb.com/quote",
      "sourceCheckedDate": "2026-09-07",
      "stockStatus": "quoteRequired",
      "stockDetail": "Custom fabrication. Price and supplier minimum require the final file quote.",
      "orderQuantity": null,
      "orderUnit": "each",
      "packSize": 1,
      "suppliedQuantity": null,
      "spareQuantity": null,
      "unitPrice": null,
      "priceBasis": "Per selected order unit, at stated quantity",
      "currency": null,
      "lineCost": null,
      "costGroup": "required",
      "fitNotes": "One fitted board of this hand. Left and right are distinct designs, not two copies of one board. Keep board thickness at 1.0 mm. These are prototype fabrication previews; physical component fit remains to be checked.",
      "assets": [
        "v3/pcb/ergopoint42_p1_left.kicad_pcb"
      ],
      "secondarySources": [
        {
          "label": "Supplier ordering and quotation guide",
          "url": "https://jlcpcb.com/help/article/how-do-i-place-an-order"
        }
      ],
      "minimumOrderQuantity": null,
      "minimumOrderUnit": null
    },
    {
      "id": "pcb-right",
      "name": "Custom right carrier PCB",
      "category": "Custom fabrication",
      "kind": "customFabricated",
      "qtyPerPair": 1,
      "qtyText": "1 each",
      "unit": "each",
      "manufacturerPartNumber": "ErgoPoint42 P1 right",
      "package": "1.0 mm FR4, 2 layers, 1 oz copper",
      "supplier": "JLCPCB or equivalent fabricator",
      "orderUrl": "https://jlcpcb.com/quote",
      "sourceCheckedDate": "2026-09-07",
      "stockStatus": "quoteRequired",
      "stockDetail": "Custom fabrication. Price and supplier minimum require the final file quote.",
      "orderQuantity": null,
      "orderUnit": "each",
      "packSize": 1,
      "suppliedQuantity": null,
      "spareQuantity": null,
      "unitPrice": null,
      "priceBasis": "Per selected order unit, at stated quantity",
      "currency": null,
      "lineCost": null,
      "costGroup": "required",
      "fitNotes": "One fitted board of this hand. Left and right are distinct designs, not two copies of one board. Keep board thickness at 1.0 mm. These are prototype fabrication previews; physical component fit remains to be checked.",
      "assets": [
        "v3/pcb/ergopoint42_p1_right.kicad_pcb"
      ],
      "secondarySources": [
        {
          "label": "Supplier ordering and quotation guide",
          "url": "https://jlcpcb.com/help/article/how-do-i-place-an-order"
        }
      ],
      "minimumOrderQuantity": null,
      "minimumOrderUnit": null
    },
    {
      "id": "print-base_left",
      "name": "Left lower shell",
      "category": "Custom fabrication",
      "kind": "customFabricated",
      "qtyPerPair": 1,
      "qtyText": "1 each",
      "unit": "each",
      "manufacturerPartNumber": "Project STL base_left",
      "package": "PA12 preferred; Rigid print, black",
      "supplier": "JLC3DP or local printing",
      "orderUrl": "https://jlc3dp.com/3d-printing-quote",
      "sourceCheckedDate": "2026-09-07",
      "stockStatus": "quoteRequired",
      "stockDetail": "Print from the supplied project file; process, material and price need a quote.",
      "orderQuantity": null,
      "orderUnit": "each",
      "packSize": 1,
      "suppliedQuantity": null,
      "spareQuantity": null,
      "unitPrice": null,
      "priceBasis": "Per selected order unit, at stated quantity",
      "currency": null,
      "lineCost": null,
      "costGroup": "customFabrication",
      "fitNotes": "PA12 is the preferred structural prototype material. Print local FDM fit samples before that expense. Choose exactly one right upper shell. Validate the actual switch, pegs, nut pockets and battery fit before final finishing.",
      "assets": [
        "v3/cad/base_left.stl"
      ],
      "appliesTo": "both",
      "choiceGroup": null,
      "minimumOrderQuantity": null,
      "minimumOrderUnit": null
    },
    {
      "id": "print-base_right",
      "name": "Right lower shell",
      "category": "Custom fabrication",
      "kind": "customFabricated",
      "qtyPerPair": 1,
      "qtyText": "1 each",
      "unit": "each",
      "manufacturerPartNumber": "Project STL base_right",
      "package": "PA12 preferred; Rigid print, black",
      "supplier": "JLC3DP or local printing",
      "orderUrl": "https://jlc3dp.com/3d-printing-quote",
      "sourceCheckedDate": "2026-09-07",
      "stockStatus": "quoteRequired",
      "stockDetail": "Print from the supplied project file; process, material and price need a quote.",
      "orderQuantity": null,
      "orderUnit": "each",
      "packSize": 1,
      "suppliedQuantity": null,
      "spareQuantity": null,
      "unitPrice": null,
      "priceBasis": "Per selected order unit, at stated quantity",
      "currency": null,
      "lineCost": null,
      "costGroup": "customFabrication",
      "fitNotes": "PA12 is the preferred structural prototype material. Print local FDM fit samples before that expense. Choose exactly one right upper shell. Validate the actual switch, pegs, nut pockets and battery fit before final finishing.",
      "assets": [
        "v3/cad/base_right.stl"
      ],
      "appliesTo": "both",
      "choiceGroup": null,
      "minimumOrderQuantity": null,
      "minimumOrderUnit": null
    },
    {
      "id": "print-frame_left",
      "name": "Left upper shell and switch plate",
      "category": "Custom fabrication",
      "kind": "customFabricated",
      "qtyPerPair": 1,
      "qtyText": "1 each",
      "unit": "each",
      "manufacturerPartNumber": "Project STL frame_left",
      "package": "PA12 preferred; Rigid print, white",
      "supplier": "JLC3DP or local printing",
      "orderUrl": "https://jlc3dp.com/3d-printing-quote",
      "sourceCheckedDate": "2026-09-07",
      "stockStatus": "quoteRequired",
      "stockDetail": "Print from the supplied project file; process, material and price need a quote.",
      "orderQuantity": null,
      "orderUnit": "each",
      "packSize": 1,
      "suppliedQuantity": null,
      "spareQuantity": null,
      "unitPrice": null,
      "priceBasis": "Per selected order unit, at stated quantity",
      "currency": null,
      "lineCost": null,
      "costGroup": "customFabrication",
      "fitNotes": "PA12 is the preferred structural prototype material. Print local FDM fit samples before that expense. Choose exactly one right upper shell. Validate the actual switch, pegs, nut pockets and battery fit before final finishing.",
      "assets": [
        "v3/cad/frame_left.stl"
      ],
      "appliesTo": "both",
      "choiceGroup": null,
      "minimumOrderQuantity": null,
      "minimumOrderUnit": null
    },
    {
      "id": "print-frame_right",
      "name": "Right upper shell with display opening",
      "category": "Custom fabrication",
      "kind": "customFabricated",
      "qtyPerPair": 1,
      "qtyText": "1 each",
      "unit": "each",
      "manufacturerPartNumber": "Project STL frame_right",
      "package": "PA12 preferred; Rigid print, white",
      "supplier": "JLC3DP or local printing",
      "orderUrl": "https://jlc3dp.com/3d-printing-quote",
      "sourceCheckedDate": "2026-09-07",
      "stockStatus": "quoteRequired",
      "stockDetail": "Print from the supplied project file; process, material and price need a quote.",
      "orderQuantity": null,
      "orderUnit": "each",
      "packSize": 1,
      "suppliedQuantity": null,
      "spareQuantity": null,
      "unitPrice": null,
      "priceBasis": "Per selected order unit, at stated quantity",
      "currency": null,
      "lineCost": null,
      "costGroup": "customFabrication",
      "fitNotes": "PA12 is the preferred structural prototype material. Print local FDM fit samples before that expense. Choose exactly one right upper shell. Validate the actual switch, pegs, nut pockets and battery fit before final finishing.",
      "assets": [
        "v3/cad/frame_right.stl"
      ],
      "appliesTo": "display",
      "choiceGroup": "rightFrame",
      "minimumOrderQuantity": null,
      "minimumOrderUnit": null
    },
    {
      "id": "print-frame_right_plain",
      "name": "Right upper shell without display",
      "category": "Custom fabrication",
      "kind": "customFabricated",
      "qtyPerPair": 1,
      "qtyText": "1 each",
      "unit": "each",
      "manufacturerPartNumber": "Project STL frame_right_plain",
      "package": "PA12 preferred; Rigid print, white",
      "supplier": "JLC3DP or local printing",
      "orderUrl": "https://jlc3dp.com/3d-printing-quote",
      "sourceCheckedDate": "2026-09-07",
      "stockStatus": "quoteRequired",
      "stockDetail": "Print from the supplied project file; process, material and price need a quote.",
      "orderQuantity": null,
      "orderUnit": "each",
      "packSize": 1,
      "suppliedQuantity": null,
      "spareQuantity": null,
      "unitPrice": null,
      "priceBasis": "Per selected order unit, at stated quantity",
      "currency": null,
      "lineCost": null,
      "costGroup": "customFabrication",
      "fitNotes": "PA12 is the preferred structural prototype material. Print local FDM fit samples before that expense. Choose exactly one right upper shell. Validate the actual switch, pegs, nut pockets and battery fit before final finishing.",
      "assets": [
        "v3/cad/frame_right_plain.stl"
      ],
      "appliesTo": "plain",
      "choiceGroup": "rightFrame",
      "minimumOrderQuantity": null,
      "minimumOrderUnit": null
    },
    {
      "id": "print-battery_tray_left",
      "name": "Left insulated battery tray",
      "category": "Custom fabrication",
      "kind": "customFabricated",
      "qtyPerPair": 1,
      "qtyText": "1 each",
      "unit": "each",
      "manufacturerPartNumber": "Project STL battery_tray_left",
      "package": "PA12 preferred; Rigid insulating print",
      "supplier": "JLC3DP or local printing",
      "orderUrl": "https://jlc3dp.com/3d-printing-quote",
      "sourceCheckedDate": "2026-09-07",
      "stockStatus": "quoteRequired",
      "stockDetail": "Print from the supplied project file; process, material and price need a quote.",
      "orderQuantity": null,
      "orderUnit": "each",
      "packSize": 1,
      "suppliedQuantity": null,
      "spareQuantity": null,
      "unitPrice": null,
      "priceBasis": "Per selected order unit, at stated quantity",
      "currency": null,
      "lineCost": null,
      "costGroup": "customFabrication",
      "fitNotes": "PA12 is the preferred structural prototype material. Print local FDM fit samples before that expense. Choose exactly one right upper shell. Validate the actual switch, pegs, nut pockets and battery fit before final finishing.",
      "assets": [
        "v3/cad/battery_tray_left.stl"
      ],
      "appliesTo": "both",
      "choiceGroup": null,
      "minimumOrderQuantity": null,
      "minimumOrderUnit": null
    },
    {
      "id": "print-battery_tray_right",
      "name": "Right insulated battery tray",
      "category": "Custom fabrication",
      "kind": "customFabricated",
      "qtyPerPair": 1,
      "qtyText": "1 each",
      "unit": "each",
      "manufacturerPartNumber": "Project STL battery_tray_right",
      "package": "PA12 preferred; Rigid insulating print",
      "supplier": "JLC3DP or local printing",
      "orderUrl": "https://jlc3dp.com/3d-printing-quote",
      "sourceCheckedDate": "2026-09-07",
      "stockStatus": "quoteRequired",
      "stockDetail": "Print from the supplied project file; process, material and price need a quote.",
      "orderQuantity": null,
      "orderUnit": "each",
      "packSize": 1,
      "suppliedQuantity": null,
      "spareQuantity": null,
      "unitPrice": null,
      "priceBasis": "Per selected order unit, at stated quantity",
      "currency": null,
      "lineCost": null,
      "costGroup": "customFabrication",
      "fitNotes": "PA12 is the preferred structural prototype material. Print local FDM fit samples before that expense. Choose exactly one right upper shell. Validate the actual switch, pegs, nut pockets and battery fit before final finishing.",
      "assets": [
        "v3/cad/battery_tray_right.stl"
      ],
      "appliesTo": "both",
      "choiceGroup": null,
      "minimumOrderQuantity": null,
      "minimumOrderUnit": null
    },
    {
      "id": "print-pointing_extension_left",
      "name": "Left pointing-stick extension",
      "category": "Custom fabrication",
      "kind": "customFabricated",
      "qtyPerPair": 1,
      "qtyText": "1 each",
      "unit": "each",
      "manufacturerPartNumber": "Project STL pointing_extension_left",
      "package": "PA12 preferred; Rigid print, test fit to sensor",
      "supplier": "JLC3DP or local printing",
      "orderUrl": "https://jlc3dp.com/3d-printing-quote",
      "sourceCheckedDate": "2026-09-07",
      "stockStatus": "quoteRequired",
      "stockDetail": "Print from the supplied project file; process, material and price need a quote.",
      "orderQuantity": null,
      "orderUnit": "each",
      "packSize": 1,
      "suppliedQuantity": null,
      "spareQuantity": null,
      "unitPrice": null,
      "priceBasis": "Per selected order unit, at stated quantity",
      "currency": null,
      "lineCost": null,
      "costGroup": "customFabrication",
      "fitNotes": "PA12 is the preferred structural prototype material. Print local FDM fit samples before that expense. Choose exactly one right upper shell. Validate the actual switch, pegs, nut pockets and battery fit before final finishing.",
      "assets": [
        "v3/cad/pointing_extension_left.stl"
      ],
      "appliesTo": "both",
      "choiceGroup": null,
      "minimumOrderQuantity": null,
      "minimumOrderUnit": null
    },
    {
      "id": "print-pointing_extension_right",
      "name": "Right pointing-stick extension",
      "category": "Custom fabrication",
      "kind": "customFabricated",
      "qtyPerPair": 1,
      "qtyText": "1 each",
      "unit": "each",
      "manufacturerPartNumber": "Project STL pointing_extension_right",
      "package": "PA12 preferred; Rigid print, test fit to sensor",
      "supplier": "JLC3DP or local printing",
      "orderUrl": "https://jlc3dp.com/3d-printing-quote",
      "sourceCheckedDate": "2026-09-07",
      "stockStatus": "quoteRequired",
      "stockDetail": "Print from the supplied project file; process, material and price need a quote.",
      "orderQuantity": null,
      "orderUnit": "each",
      "packSize": 1,
      "suppliedQuantity": null,
      "spareQuantity": null,
      "unitPrice": null,
      "priceBasis": "Per selected order unit, at stated quantity",
      "currency": null,
      "lineCost": null,
      "costGroup": "customFabrication",
      "fitNotes": "PA12 is the preferred structural prototype material. Print local FDM fit samples before that expense. Choose exactly one right upper shell. Validate the actual switch, pegs, nut pockets and battery fit before final finishing.",
      "assets": [
        "v3/cad/pointing_extension_right.stl"
      ],
      "appliesTo": "both",
      "choiceGroup": null,
      "minimumOrderQuantity": null,
      "minimumOrderUnit": null
    },
    {
      "id": "print-pointing_nub_left",
      "name": "Left pointing-stick nub",
      "category": "Custom fabrication",
      "kind": "customFabricated",
      "qtyPerPair": 1,
      "qtyText": "1 each",
      "unit": "each",
      "manufacturerPartNumber": "Project STL pointing_nub_left",
      "package": "Flexible TPU print; grip and fit need a sample",
      "supplier": "JLC3DP or local printing",
      "orderUrl": "https://jlc3dp.com/3d-printing-quote",
      "sourceCheckedDate": "2026-09-07",
      "stockStatus": "quoteRequired",
      "stockDetail": "Print from the supplied project file; process, material and price need a quote.",
      "orderQuantity": null,
      "orderUnit": "each",
      "packSize": 1,
      "suppliedQuantity": null,
      "spareQuantity": null,
      "unitPrice": null,
      "priceBasis": "Per selected order unit, at stated quantity",
      "currency": null,
      "lineCost": null,
      "costGroup": "customFabrication",
      "fitNotes": "Print in flexible TPU. Qualify stem retention, hardness, grip and keycap clearance on a physical sample. Use the supplied P1 nub mesh.",
      "assets": [
        "v3/cad/pointing_nub_left.stl"
      ],
      "appliesTo": "both",
      "choiceGroup": null,
      "minimumOrderQuantity": null,
      "minimumOrderUnit": null,
      "secondarySources": [
        {
          "label": "Supplier TPU process and material",
          "url": "https://jlc3dp.com/help/article/tpu"
        }
      ]
    },
    {
      "id": "print-pointing_nub_right",
      "name": "Right pointing-stick nub",
      "category": "Custom fabrication",
      "kind": "customFabricated",
      "qtyPerPair": 1,
      "qtyText": "1 each",
      "unit": "each",
      "manufacturerPartNumber": "Project STL pointing_nub_right",
      "package": "Flexible TPU print; grip and fit need a sample",
      "supplier": "JLC3DP or local printing",
      "orderUrl": "https://jlc3dp.com/3d-printing-quote",
      "sourceCheckedDate": "2026-09-07",
      "stockStatus": "quoteRequired",
      "stockDetail": "Print from the supplied project file; process, material and price need a quote.",
      "orderQuantity": null,
      "orderUnit": "each",
      "packSize": 1,
      "suppliedQuantity": null,
      "spareQuantity": null,
      "unitPrice": null,
      "priceBasis": "Per selected order unit, at stated quantity",
      "currency": null,
      "lineCost": null,
      "costGroup": "customFabrication",
      "fitNotes": "Print in flexible TPU. Qualify stem retention, hardness, grip and keycap clearance on a physical sample. Use the supplied P1 nub mesh.",
      "assets": [
        "v3/cad/pointing_nub_right.stl"
      ],
      "appliesTo": "both",
      "choiceGroup": null,
      "minimumOrderQuantity": null,
      "minimumOrderUnit": null,
      "secondarySources": [
        {
          "label": "Supplier TPU process and material",
          "url": "https://jlc3dp.com/help/article/tpu"
        }
      ]
    },
    {
      "id": "cap-normal",
      "name": "KLP-Lame Normal Tilted caps, original geometry",
      "category": "Keycaps to print",
      "kind": "customFabricated",
      "qtyPerPair": 16,
      "qtyText": "16 each",
      "unit": "each",
      "manufacturerPartNumber": "KLP-Lame MX stem / MX size",
      "package": "MX cross stem, MX-size body for 19.05 mm pitch",
      "supplier": "JLC3DP or local printing",
      "orderUrl": "https://jlc3dp.com/3d-printing-quote",
      "sourceCheckedDate": "2026-09-07",
      "stockStatus": "quoteRequired",
      "stockDetail": "Custom print, not a retail set.",
      "orderQuantity": null,
      "orderUnit": "each",
      "packSize": 1,
      "suppliedQuantity": null,
      "spareQuantity": null,
      "unitPrice": null,
      "priceBasis": "Per selected order unit, at stated quantity",
      "currency": null,
      "lineCost": null,
      "costGroup": "customFabrication",
      "fitNotes": "Original geometry means the unmodified source mesh, not an off-the-shelf set. Preserve the exact orientation and profile recipe. Use MX-size files, not Choc-size files. Test stem fit first.",
      "assets": [
        "research/keyball-reference/reference-assets/MX_Stem_MX_Size_Normal_Tilted.stl"
      ],
      "secondarySources": [
        {
          "label": "KLP-Lame creator and CC BY-SA 4.0 license",
          "url": "https://github.com/braindefender/KLP-Lame-Keycaps"
        }
      ],
      "minimumOrderQuantity": null,
      "minimumOrderUnit": null
    },
    {
      "id": "cap-saddle",
      "name": "KLP-Lame Saddle caps, original geometry",
      "category": "Keycaps to print",
      "kind": "customFabricated",
      "qtyPerPair": 6,
      "qtyText": "6 each",
      "unit": "each",
      "manufacturerPartNumber": "KLP-Lame MX stem / MX size",
      "package": "MX cross stem, MX-size body for 19.05 mm pitch",
      "supplier": "JLC3DP or local printing",
      "orderUrl": "https://jlc3dp.com/3d-printing-quote",
      "sourceCheckedDate": "2026-09-07",
      "stockStatus": "quoteRequired",
      "stockDetail": "Custom print, not a retail set.",
      "orderQuantity": null,
      "orderUnit": "each",
      "packSize": 1,
      "suppliedQuantity": null,
      "spareQuantity": null,
      "unitPrice": null,
      "priceBasis": "Per selected order unit, at stated quantity",
      "currency": null,
      "lineCost": null,
      "costGroup": "customFabrication",
      "fitNotes": "Original geometry means the unmodified source mesh, not an off-the-shelf set. Preserve the exact orientation and profile recipe. Use MX-size files, not Choc-size files. Test stem fit first.",
      "assets": [
        "research/keyball-reference/reference-assets/MX_Stem_MX_Size_Saddle.stl"
      ],
      "secondarySources": [
        {
          "label": "KLP-Lame creator and CC BY-SA 4.0 license",
          "url": "https://github.com/braindefender/KLP-Lame-Keycaps"
        }
      ],
      "minimumOrderQuantity": null,
      "minimumOrderUnit": null
    },
    {
      "id": "cap-thumb",
      "name": "KLP-Lame Thumb caps, original geometry",
      "category": "Keycaps to print",
      "kind": "customFabricated",
      "qtyPerPair": 12,
      "qtyText": "12 each",
      "unit": "each",
      "manufacturerPartNumber": "KLP-Lame MX stem / MX size",
      "package": "MX cross stem, MX-size body for 19.05 mm pitch",
      "supplier": "JLC3DP or local printing",
      "orderUrl": "https://jlc3dp.com/3d-printing-quote",
      "sourceCheckedDate": "2026-09-07",
      "stockStatus": "quoteRequired",
      "stockDetail": "Custom print, not a retail set.",
      "orderQuantity": null,
      "orderUnit": "each",
      "packSize": 1,
      "suppliedQuantity": null,
      "spareQuantity": null,
      "unitPrice": null,
      "priceBasis": "Per selected order unit, at stated quantity",
      "currency": null,
      "lineCost": null,
      "costGroup": "customFabrication",
      "fitNotes": "Original geometry means the unmodified source mesh, not an off-the-shelf set. Preserve the exact orientation and profile recipe. Use MX-size files, not Choc-size files. Test stem fit first.",
      "assets": [
        "research/keyball-reference/reference-assets/MX_Stem_MX_Size_Thumb.stl"
      ],
      "secondarySources": [
        {
          "label": "KLP-Lame creator and CC BY-SA 4.0 license",
          "url": "https://github.com/braindefender/KLP-Lame-Keycaps"
        }
      ],
      "minimumOrderQuantity": null,
      "minimumOrderUnit": null
    },
    {
      "id": "cap-modified",
      "name": "KLP-Lame caps with TrackPoint clearance",
      "category": "Keycaps to print",
      "kind": "customFabricated",
      "qtyPerPair": 8,
      "qtyText": "8 each",
      "unit": "each",
      "manufacturerPartNumber": "Eight distinct project-modified meshes",
      "package": "One copy of each modified cap",
      "supplier": "JLC3DP or local printing",
      "orderUrl": "https://jlc3dp.com/3d-printing-quote",
      "sourceCheckedDate": "2026-09-07",
      "stockStatus": "quoteRequired",
      "stockDetail": "Custom print from eight distinct files.",
      "orderQuantity": null,
      "orderUnit": "each",
      "packSize": 1,
      "suppliedQuantity": null,
      "spareQuantity": null,
      "unitPrice": null,
      "priceBasis": "Per selected order unit, at stated quantity",
      "currency": null,
      "lineCost": null,
      "costGroup": "customFabrication",
      "fitNotes": "Print one each for R, T, F, G, U, Y, J and H. These replace eight source caps; do not add them on top of 42 standard caps. Total cap recipe: 16 Normal Tilted + 6 Saddle + 12 Thumb + 8 modified = 42.",
      "assets": [
        "v2/keycaps/L04_R_trackpoint_clearance.stl",
        "v2/keycaps/L05_T_trackpoint_clearance.stl",
        "v2/keycaps/L09_F_trackpoint_clearance.stl",
        "v2/keycaps/L10_G_trackpoint_clearance.stl",
        "v2/keycaps/R04_U_trackpoint_clearance.stl",
        "v2/keycaps/R05_Y_trackpoint_clearance.stl",
        "v2/keycaps/R09_J_trackpoint_clearance.stl",
        "v2/keycaps/R10_H_trackpoint_clearance.stl"
      ],
      "secondarySources": [
        {
          "label": "KLP-Lame original creator",
          "url": "https://github.com/braindefender/KLP-Lame-Keycaps"
        }
      ],
      "minimumOrderQuantity": null,
      "minimumOrderUnit": null
    },
    {
      "id": "insulation",
      "name": "Polyimide insulation tape",
      "category": "Consumables",
      "kind": "consumable",
      "qtyPerPair": null,
      "qtyText": "As needed",
      "unit": "roll",
      "manufacturerPartNumber": "Adafruit 3057",
      "package": "10 mm x 33 m roll",
      "supplier": "Adafruit",
      "orderUrl": "https://www.adafruit.com/product/3057",
      "sourceCheckedDate": "2026-09-07",
      "stockStatus": "inStock",
      "stockDetail": "32 rolls listed at check.",
      "orderQuantity": 1,
      "orderUnit": "roll",
      "packSize": 1,
      "suppliedQuantity": 1,
      "spareQuantity": null,
      "unitPrice": 4.95,
      "priceBasis": "Per selected order unit, at stated quantity",
      "currency": "USD",
      "lineCost": 4.95,
      "costGroup": "consumables",
      "fitNotes": "Use small pieces to insulate exposed lead joints and likely contact points. Keep the printed battery trays; tape does not replace their rigid insulation. Whole-roll cost is not per-pair material consumption.",
      "minimumOrderQuantity": 1,
      "minimumOrderUnit": "roll"
    },
    {
      "id": "retention-tape",
      "name": "Thin removable retention adhesive",
      "category": "Consumables",
      "kind": "consumable",
      "qtyPerPair": null,
      "qtyText": "As needed",
      "unit": "each",
      "manufacturerPartNumber": "3M 9415PC candidate",
      "package": "Thin removable double-sided tape; choose width to suit",
      "supplier": "FindTape",
      "orderUrl": "https://www.findtape.com/3M-9415PC-Double-Sided-Removable-Repositionable-Tape/p584/",
      "sourceCheckedDate": "2026-09-07",
      "stockStatus": "quoteRequired",
      "stockDetail": "Supplier product page verified; selected-width price not exposed.",
      "orderQuantity": null,
      "orderUnit": "each",
      "packSize": 1,
      "suppliedQuantity": null,
      "spareQuantity": null,
      "unitPrice": null,
      "priceBasis": "Per selected order unit, at stated quantity",
      "currency": null,
      "lineCost": null,
      "costGroup": "consumables",
      "fitNotes": "Candidate for removable non-load-bearing driver or cable retention. Check adhesion to the actual print material and keep the USB antenna area clear. The preferred SJ5832 foot material already includes its own adhesive; do not add this tape to it.",
      "secondarySources": [
        {
          "label": "3M product specification",
          "url": "https://www.3m.com/3M/en_US/p/d/b40070350/"
        }
      ],
      "minimumOrderQuantity": null,
      "minimumOrderUnit": null
    },
    {
      "id": "solder",
      "name": "Fine electronics solder",
      "category": "Consumables",
      "kind": "consumable",
      "qtyPerPair": null,
      "qtyText": "As needed",
      "unit": "spool",
      "manufacturerPartNumber": "Adafruit 1930 SAC305",
      "package": "0.5 mm lead-free SAC305, 50 g",
      "supplier": "Adafruit",
      "orderUrl": "https://www.adafruit.com/product/1930",
      "sourceCheckedDate": "2026-09-07",
      "stockStatus": "inStock",
      "stockDetail": "Supplier page lists In stock.",
      "orderQuantity": 1,
      "orderUnit": "spool",
      "packSize": 1,
      "suppliedQuantity": 1,
      "spareQuantity": null,
      "unitPrice": 27.5,
      "priceBasis": "Per selected order unit, at stated quantity",
      "currency": "USD",
      "lineCost": 27.5,
      "costGroup": "consumables",
      "fitNotes": "For through-hole and SMD joints. Use existing compatible electronics solder if available. Whole-spool price is a workshop purchase, not material consumed by one pair.",
      "minimumOrderQuantity": 1,
      "minimumOrderUnit": "spool"
    },
    {
      "id": "flux",
      "name": "No-clean electronics flux",
      "category": "Consumables",
      "kind": "consumable",
      "qtyPerPair": null,
      "qtyText": "As needed",
      "unit": "pen",
      "manufacturerPartNumber": "Chip Quik CQ4LF; Adafruit 3468",
      "package": "10 ml pen",
      "supplier": "Adafruit",
      "orderUrl": "https://www.adafruit.com/product/3468",
      "sourceCheckedDate": "2026-09-07",
      "stockStatus": "inStock",
      "stockDetail": "Supplier page lists In stock.",
      "orderQuantity": 1,
      "orderUnit": "pen",
      "packSize": 1,
      "suppliedQuantity": 1,
      "spareQuantity": null,
      "unitPrice": 7.95,
      "priceBasis": "Per selected order unit, at stated quantity",
      "currency": "USD",
      "lineCost": 7.95,
      "costGroup": "consumables",
      "fitNotes": "For the small PCB components and castellated module joints. Buy only if not already in the workshop.",
      "minimumOrderQuantity": 1,
      "minimumOrderUnit": "pen"
    },
    {
      "id": "usb-cable",
      "name": "USB data and charging cables",
      "category": "Accessories",
      "kind": "optionalAccessory",
      "qtyPerPair": 2,
      "qtyText": "2 each",
      "unit": "each",
      "manufacturerPartNumber": "Adafruit 4474, USB-A to USB-C",
      "package": "Approximately 1 m data-capable cable",
      "supplier": "Adafruit",
      "orderUrl": "https://www.adafruit.com/product/4474",
      "sourceCheckedDate": "2026-09-07",
      "stockStatus": "inStock",
      "stockDetail": "Supplier page lists In stock.",
      "orderQuantity": 2,
      "orderUnit": "each",
      "packSize": 1,
      "suppliedQuantity": 2,
      "spareQuantity": 0,
      "unitPrice": 4.95,
      "priceBasis": "Per selected order unit, at stated quantity",
      "currency": "USD",
      "lineCost": 9.9,
      "costGroup": "optionalAccessories",
      "fitNotes": "One for the right host connection and one for independent left charging. Existing cables can be reused. Choose a host-end connector that matches your computer or charger; USB-C-to-C alternate is linked. No wired cable connects the two keyboard halves.",
      "alternateSources": [
        {
          "label": "USB-C to USB-C data cable, Adafruit 4199, $9.95 each when checked",
          "url": "https://www.adafruit.com/product/4199"
        }
      ],
      "minimumOrderQuantity": 1,
      "minimumOrderUnit": "each"
    }
  ],
  "tools": [
    {
      "id": "soldering-tools",
      "name": "Temperature-controlled soldering iron, fine tip, tweezers, fine cutters, wire stripper and magnification",
      "purpose": "Assemble SC70/0603 components, solder XIAO castellations and prepare fine leads. Choose a stripper that handles 32 AWG.",
      "orderUrl": "https://www.adafruit.com/category/225",
      "supplier": "Adafruit tools",
      "sourceCheckedDate": "2026-09-07",
      "lineCost": null,
      "buyIfNeeded": true
    },
    {
      "id": "measurement-tools",
      "name": "Multimeter and calipers",
      "purpose": "Check battery polarity and continuity, rail voltages and actual switch, connector, screw and printed dimensions.",
      "orderUrl": "https://www.adafruit.com/category/225",
      "supplier": "Adafruit tools",
      "sourceCheckedDate": "2026-09-07",
      "lineCost": null,
      "buyIfNeeded": true
    },
    {
      "id": "fastener-tools",
      "name": "Phillips No. 0 driver for the exact 7 mm screw candidate, and a 5 mm pad punch if cutting feet",
      "purpose": "Match the final screw. The 8 mm Accu fallback uses PZ0 and requires qualified shortening/deburring. A punch is only needed if making SJ5832 feet locally.",
      "orderUrl": "https://www.hardwarespecialty.com/Product/906178",
      "supplier": "Match the final fastener",
      "sourceCheckedDate": "2026-09-07",
      "lineCost": null,
      "buyIfNeeded": true
    },
    {
      "id": "bench-tools",
      "name": "Current-limited bench supply and logic analyzer, borrow or use existing equipment",
      "purpose": "First power checks and PS/2 clock/data validation for the unbuilt prototype. Not components installed in the keyboard.",
      "orderUrl": null,
      "supplier": "Existing workshop equipment or borrowed test equipment",
      "sourceCheckedDate": "2026-09-07",
      "lineCost": null,
      "buyIfNeeded": true
    }
  ],
  "subtotals": {
    "required": 92.06,
    "conditionalRequired": 48.0,
    "optionalDisplay": 20.0,
    "consumables": 48.09,
    "optionalAccessories": 9.9,
    "currency": "USD",
    "knownRequiredWithoutTrackpoints": 92.06,
    "knownRequiredIncludingConditionalTrackpoints": 140.06,
    "knownRequiredWithDisplay": 160.06,
    "basis": "Suggested buy quantities and packs, including stated spares. TrackPoint price is conditional on seller availability. Not a complete build price.",
    "excludes": [
      "Two custom PCBs and supplier minimum quantities",
      "All printed shells, trays, pointing parts and 42 keycaps",
      "M1.6 screws and finished adhesive feet",
      "Unpriced retention adhesive and splice insulation",
      "Tools, labor, shipping, taxes and import charges"
    ],
    "consumableScope": "Whole packages of priced wire, tape, solder and flux, only if needed; not per-pair consumption. Unpriced materials remain extra."
  },
  "printInventory": {
    "availableStructuralFiles": 11,
    "structuralPiecesPerSelectedBuild": 10,
    "rightFrameChoice": [
      "print-frame_right",
      "print-frame_right_plain"
    ],
    "keycapsPerPair": 42,
    "keycapRecipe": {
      "normalTilted": 16,
      "saddle": 6,
      "thumb": 12,
      "modified": 8
    },
    "spareOrFitTestPrintsIncluded": false
  },
  "alerts": [
    {
      "severity": "stock",
      "text": "TrackPoint seller page and product feed disagree about stock. Confirm two complete assemblies before scheduling the build.",
      "partIds": [
        "trackpoint"
      ]
    },
    {
      "severity": "lifecycle",
      "text": "PCM12SMTR is obsolete although the distributor currently has stock. Keep the exact part or revise and check the PCB and case.",
      "partIds": [
        "battery-switch"
      ]
    },
    {
      "severity": "fit",
      "text": "Exact 7 mm screws now have a dimensioned catalog source, with price and stock requiring a quote. Feet can be cut from verified nominal 0.8 mm adhesive-backed SJ5832 material, but finished Ø5 mm parts and physical fit remain unqualified.",
      "partIds": [
        "screw",
        "feet"
      ]
    },
    {
      "severity": "connector",
      "text": "The selected batteries ship PH plugs; the board uses SH. The listed compact conversion supplies four SH contact tails and two housings. Verify polarity.",
      "partIds": [
        "battery",
        "battery-housing",
        "precrimp-wire",
        "battery-harness"
      ]
    },
    {
      "severity": "fabrication",
      "text": "Custom PCBs, 42 exact-profile keycaps and 10 selected structural/pointing print pieces still require fabrication quotes and physical fit checks.",
      "partIds": [
        "pcb-left",
        "pcb-right",
        "cap-normal",
        "cap-saddle",
        "cap-thumb",
        "cap-modified"
      ]
    }
  ],
  "sourceFiles": [
    {
      "path": "v3/pcb/bom.csv",
      "sha256": "a9bf07a97ac134d7414117aa4a0ede21dc4e67d1a6b89e2ed804f09049fa1644"
    },
    {
      "path": "v3/cad/assembly_manifest.json",
      "sha256": "d1b8de22e6203695a351051b2c42d6fff42868698892bff6fcc0e2bc3e04fa78"
    },
    {
      "path": "tools/cad_p1/build.py",
      "sha256": "8b27756d945bf8a6118b5db62beecb1bcee49116fe8f0354aed4397637f5fb7b"
    },
    {
      "path": "v2/keycaps/manifest.json",
      "sha256": "22e81d45816767ec6cff16d02c88b64b6c70222755d8151b428d0e978402209c"
    }
  ]
}
