{
  "version": "1.0",
  "kicad_tools_version": "0.20.0",
  "generated_at": "2026-09-10T18:44:00.840097+00:00",
  "manufacturer": "jlcpcb-tier1",
  "files": {
    "DESIGN_REVIEW.md": {
      "sha256": "2d571857bdd8edcc223c93e8ba8ae5dfd50553599a85ce65fbbdf59e9b7e48c4",
      "size": 10194
    },
    "README.txt": {
      "sha256": "648aa702974f1ff596afc1ac627d351365a57db675323bfe7ef60c86aa99efd3",
      "size": 896
    },
    "assembly-back.pdf": {
      "sha256": "5ae31f3a0e5f3d63ddbba30d616df3dd993aa171f4a484cd961c9c46a05fea38",
      "size": 22968
    },
    "assembly-bom.csv": {
      "sha256": "d699ced94327304215238928f381e41a8ea89f5028130f5d21ac489352892c21",
      "size": 2634
    },
    "assembly-front.pdf": {
      "sha256": "b8c565de7b9ab4b2e9b7f66a39ddeedd8ffcabd5c2694e1abfebe7e323c76edb",
      "size": 53519
    },
    "bom_jlcpcb.csv": {
      "sha256": "2faf53be9ce8deb27c7a1c4b659df78a40234997c8a69265415f36608527e5ab",
      "size": 982
    },
    "check-report.json": {
      "sha256": "fb8e32ca19567bab583f91e0f08d9cefebc1ad7e7645a5c0d60a070b1fcf435d",
      "size": 4819
    },
    "cpl_jlcpcb.csv": {
      "sha256": "a2685952c4a28521fe6ad5df90bb1d252928fc1774014c4dc78bbbda57fd8de8",
      "size": 2682
    },
    "design-source/DESIGN_REVIEW.md": {
      "sha256": "2d571857bdd8edcc223c93e8ba8ae5dfd50553599a85ce65fbbdf59e9b7e48c4",
      "size": 10194
    },
    "design-source/README.md": {
      "sha256": "11896207bf8db9666efdf6f990b173d4b3e33a2c3be754cdf89c8d51766c6bd7",
      "size": 2055
    },
    "design-source/assembly-bom.csv": {
      "sha256": "d699ced94327304215238928f381e41a8ea89f5028130f5d21ac489352892c21",
      "size": 2634
    },
    "design-source/check_manufacturing.py": {
      "sha256": "4c9cb827e0b5c48635799a1ba30a84071e589ca05e983ddeddd9c82cc1f8e766",
      "size": 4160
    },
    "design-source/generate_design.py": {
      "sha256": "393d97bf44cecb74b00fdeb93c285eef33f6ce70b34b54f1b3ca80cb127393ea",
      "size": 44726
    },
    "design-source/generate_pcb.py": {
      "sha256": "3724dbddf1e655d999db3bae8cc64150f0a450fd055a089db921bfbf4cc82e0b",
      "size": 5824
    },
    "design-source/generate_schematic.py": {
      "sha256": "f509834c144b688688971cfc0ea7614977457f4f56e402dcc569551fa909c464",
      "size": 4291
    },
    "design-source/joystick_hardware.py": {
      "sha256": "ff31a60e7b453fd16e56cc04c2d176de951838f8a0a176a5d7838fb1658a5da0",
      "size": 6178
    },
    "design-source/procurement-review.json": {
      "sha256": "ce1a26cb68840b996fe8284f30fec65345ce993c5a2561591be5956c06c6f48c",
      "size": 2354
    },
    "design-source/project.kct": {
      "sha256": "5083f66d5eaf2034ec5917ab56627ca1a2128bf9f79e723be04da5936a3f9573",
      "size": 7474
    },
    "design-source/route_demo.py": {
      "sha256": "6ce7891b359bdc5f511ca7dc795fcb445d08759b419877e847026853cfa1d0c2",
      "size": 9828
    },
    "design-source/routing-plan.json": {
      "sha256": "b1779f32e41dac3ac0b2d72408785366a77c266e4ab0f5c20a5d339c05a05e59",
      "size": 387118
    },
    "design-source/routing_plan.py": {
      "sha256": "6766175a321112db152f2d947b8b94349b6888f0915e310539e71bf01037b899",
      "size": 10501
    },
    "fill-consistency.json": {
      "sha256": "a9c3c3a8c50811798e187e7843e295f89c36fb978017e2643dbe845375cd0d3e",
      "size": 91
    },
    "firmware/.gitignore": {
      "sha256": "692b1af4436043e2e965c8d563bbf90d648cda3a6afa9bba38e1c38af1d38919",
      "size": 6
    },
    "firmware/README.md": {
      "sha256": "08667b811161162459ab9950164f799e0549aa760c124e1fc4a933a20ce79e40",
      "size": 8319
    },
    "firmware/artifacts/build-report.json": {
      "sha256": "b0a0d5abf82faedfe23b6c787b7d8e8681de5f3b21e2ec525a15bda9169239bf",
      "size": 757
    },
    "firmware/artifacts/firmware.bin": {
      "sha256": "6b815d0720f7a15b32c2c1fecf66e3b3c6cf4f72904ace56dea400124734bfd4",
      "size": 7284
    },
    "firmware/artifacts/firmware.elf": {
      "sha256": "7a536ba67de87b34a4217310de38104db830fc873e29b7643e28c305ab99f011",
      "size": 24156
    },
    "firmware/artifacts/firmware.hex": {
      "sha256": "ac7e071658cc4721a0aeb1023098d423e8f40e48025fe898e1a80f60bc55f21e",
      "size": 20509
    },
    "firmware/boards/kct_joystick.json": {
      "sha256": "a0baeaf5f9d3b93488634f985e0ee1c783cf904bcfb1b5467b7dd14a0c70f5bb",
      "size": 679
    },
    "firmware/build.py": {
      "sha256": "237740f5e2a56af45f799654c54259e91433d6e4bb3667a5b6abd605dfeb2ab6",
      "size": 4167
    },
    "firmware/dependency-sources.zip": {
      "sha256": "f0b78c5202617223d1436629ee825cc09f15a96bc04603ede8ba287cefdb667a",
      "size": 172638
    },
    "firmware/lib/Joystick/KCT-CHANGES.md": {
      "sha256": "fa28097d5a2a3ff4676d7162322d59c30d61ee56b1e79f330a6481369e4bc06e",
      "size": 623
    },
    "firmware/lib/Joystick/LICENSE": {
      "sha256": "da7eabb7bafdf7d3ae5e9f223aa5bdc1eece45ac569dc21b3b037520b4464768",
      "size": 7651
    },
    "firmware/lib/Joystick/README.md": {
      "sha256": "b869cc9335d11704a2b60e2c89ab15e903467d24351f66a674873ed4857b1aa2",
      "size": 11507
    },
    "firmware/lib/Joystick/library.properties": {
      "sha256": "255ff986ddb2ed3046ad65bd24283287091f7d0189a9c4787b56b908261ab2f5",
      "size": 494
    },
    "firmware/lib/Joystick/src/DynamicHID/DynamicHID.cpp": {
      "sha256": "ee2d3b1f4994137c4770047504a1ffe66e43d251b1060a93ff8735968fd30683",
      "size": 4914
    },
    "firmware/lib/Joystick/src/DynamicHID/DynamicHID.h": {
      "sha256": "b0101e589bea8713628f808c14896759c621a413fc18a8d95b7c511ea7515216",
      "size": 4202
    },
    "firmware/lib/Joystick/src/Joystick.cpp": {
      "sha256": "3eb3449a72dc194eed054e7c967238e324f7837813435c830e1f36e8b93f0835",
      "size": 22301
    },
    "firmware/lib/Joystick/src/Joystick.h": {
      "sha256": "070e66d808687f1b7a558032802155c4e32775613c6ec13a76b8c241d8a0d452",
      "size": 7670
    },
    "firmware/patches/apply_usbcore_patch.py": {
      "sha256": "3ec095edc8dbe5f0103d9b796ce93262ac48aaf5ba984e9746fb6d9393f3e8b7",
      "size": 3618
    },
    "firmware/patches/usbcore-suspend-resume.patch": {
      "sha256": "a2e64bec8ccd7f674f3497fa795cc33171091b2259c10f0c68138ea325333269",
      "size": 4838
    },
    "firmware/platformio.ini": {
      "sha256": "f0364755a15cb54900ef01d3c0576a24f5d517c68a16648f1782a1111bd08052",
      "size": 1042
    },
    "firmware/src/main.cpp": {
      "sha256": "8dae81d2e930969d6160d2f98509623bbd77fd46f5334cf5809bb9193dd996cf",
      "size": 2192
    },
    "gerbers/gerbers.zip": {
      "sha256": "af4f2ac7ba2e858c39d45533cef5de7580539d29d011ffb84bad3d8add1cd2c0",
      "size": 210880
    },
    "images/assembly.png": {
      "sha256": "e81ce4ef7f4c0117a3a92464c4062fd63735cbd510c6dd1ef97acd79da016244",
      "size": 449871
    },
    "images/layer_B_Cu.png": {
      "sha256": "270b5858e625a8b2bab24e6e0ac56dfda0f3e49b2b7f9ea04eddc9f60ec3db7c",
      "size": 313442
    },
    "images/layer_F_Cu.png": {
      "sha256": "d8190e24996212bd2c9b83c461bea886d1ceb34e20dccb587eac77414de1e30c",
      "size": 369662
    },
    "images/layer_In1_Cu.png": {
      "sha256": "525d00f6a04736f46c969098fc6afb39fd66f384ae6c385251a84d5147c8fd6c",
      "size": 255155
    },
    "images/layer_In2_Cu.png": {
      "sha256": "dd1a6a7de80ec2d760c2987f656ea364099eab2816de60494be41e9d2d1f68d2",
      "size": 307771
    },
    "images/pcb_back.png": {
      "sha256": "4688ceb3258456eaddfaa5c78b85f19dabc3cab54ec3acea58216040edeb84ef",
      "size": 316336
    },
    "images/pcb_copper.png": {
      "sha256": "c374d64dbbffd43db2279a180312fa4849ad803599a7b092227d2373f5346605",
      "size": 360014
    },
    "images/pcb_front.png": {
      "sha256": "142aa4f974ee21690f5c623e0524092696883e5cbc19d6d686934f84554dc2ec",
      "size": 471567
    },
    "images/schematic_usb_joystick.png": {
      "sha256": "2d6b7e8086fa4e9f0d3b16a697bd10c45b0182f98666c8522a6de4f28b385c14",
      "size": 486477
    },
    "kicad_project.zip": {
      "sha256": "700d3f73d57d29beee85248f9153d102a7d636436f7d79f456d9353e7bdb2067",
      "size": 307241
    },
    "manual-assembly-bom.csv": {
      "sha256": "f51fef1b581623d69c00b1b3604f0a1b193c29e29134a3931e0853ab13030ef7",
      "size": 111
    },
    "manufacturing-requirements.json": {
      "sha256": "48470a554e39b289ba0c079833a439c65dbc3611b505f7dd978552d25d13d37b",
      "size": 196
    },
    "native-drc.json": {
      "sha256": "f9e0764073b0624fdc534f6b7a7b277dd8f7a83a46387325c86e3a8ff57b99ec",
      "size": 1211
    },
    "native-erc.json": {
      "sha256": "7d56da9eb0713ad6b70f4339d30a06680147894a0110b7323f5b6c2194ddcbd2",
      "size": 985
    },
    "procurement-review.json": {
      "sha256": "ce1a26cb68840b996fe8284f30fec65345ce993c5a2561591be5956c06c6f48c",
      "size": 2354
    },
    "report.md": {
      "sha256": "fc09862a99c49a3be590184460358301eb2b77a519c2396ac99b58d3e8deea86",
      "size": 6143
    },
    "report.pdf": {
      "sha256": "602b215babfb3b9df6c9af4cd9083dc5d205a74cd7dffd0be25022082d94a453",
      "size": 3390741
    }
  },
  "board": {
    "name": "usb_joystick_routed",
    "pcb_file": "usb_joystick_routed.kicad_pcb"
  },
  "preflight": [
    {
      "name": "pcb_file",
      "status": "OK",
      "message": "PCB file parsed successfully",
      "details": "Footprints: 38"
    },
    {
      "name": "schematic_file",
      "status": "OK",
      "message": "Schematic file found: usb_joystick.kicad_sch"
    },
    {
      "name": "schematic_footprints",
      "status": "OK",
      "message": "All schematic symbols have a footprint assigned"
    },
    {
      "name": "board_outline",
      "status": "OK",
      "message": "Board outline is closed (5 points)"
    },
    {
      "name": "footprints",
      "status": "OK",
      "message": "All 38 footprints have library footprint names"
    },
    {
      "name": "board_dimensions",
      "status": "OK",
      "message": "Board dimensions within limits (80.00 x 60.00 mm)"
    },
    {
      "name": "drill_holes",
      "status": "OK",
      "message": "Drill holes present (151 vias, 20 TH pads)"
    },
    {
      "name": "tht_in_cpl",
      "status": "OK",
      "message": "1 through-hole component(s) excluded from CPL",
      "details": "THT references: J1"
    },
    {
      "name": "bom_fields",
      "status": "OK",
      "message": "All 38 BOM items have required fields"
    },
    {
      "name": "bom_lcsc_values",
      "status": "OK",
      "message": "No LCSC value/package mismatches detected (38 assigned item(s) checked against local parts cache)"
    },
    {
      "name": "bom_pcb_match",
      "status": "OK",
      "message": "BOM and PCB references match (38 components)"
    },
    {
      "name": "bom_cpl_match",
      "status": "OK",
      "message": "BOM and CPL references match (37 components, 1 THT excluded)"
    },
    {
      "name": "drc",
      "status": "WARN",
      "message": "DRC passed with 20 warning(s)"
    },
    {
      "name": "erc",
      "status": "WARN",
      "message": "ERC passed with 3 warning(s)"
    }
  ]
}
