diff --git a/hackpads/Duccs Fidget Toy/CAD/Case.20250210-205706.FCBak b/hackpads/Duccs Fidget Toy/CAD/Case.20250210-205706.FCBak new file mode 100644 index 0000000000..0d658813fa Binary files /dev/null and b/hackpads/Duccs Fidget Toy/CAD/Case.20250210-205706.FCBak differ diff --git a/hackpads/Duccs Fidget Toy/CAD/Case.FCStd b/hackpads/Duccs Fidget Toy/CAD/Case.FCStd new file mode 100644 index 0000000000..ad8f16bf23 Binary files /dev/null and b/hackpads/Duccs Fidget Toy/CAD/Case.FCStd differ diff --git a/hackpads/Duccs Fidget Toy/CAD/Case.stl b/hackpads/Duccs Fidget Toy/CAD/Case.stl new file mode 100644 index 0000000000..e01f200e47 Binary files /dev/null and b/hackpads/Duccs Fidget Toy/CAD/Case.stl differ diff --git a/hackpads/Duccs Fidget Toy/CAD/Plate.20250210-204049.FCBak b/hackpads/Duccs Fidget Toy/CAD/Plate.20250210-204049.FCBak new file mode 100644 index 0000000000..e919da4689 Binary files /dev/null and b/hackpads/Duccs Fidget Toy/CAD/Plate.20250210-204049.FCBak differ diff --git a/hackpads/Duccs Fidget Toy/CAD/Plate.FCStd b/hackpads/Duccs Fidget Toy/CAD/Plate.FCStd new file mode 100644 index 0000000000..b966f90f09 Binary files /dev/null and b/hackpads/Duccs Fidget Toy/CAD/Plate.FCStd differ diff --git a/hackpads/Duccs Fidget Toy/CAD/Plate.stl b/hackpads/Duccs Fidget Toy/CAD/Plate.stl new file mode 100644 index 0000000000..895c528f3b Binary files /dev/null and b/hackpads/Duccs Fidget Toy/CAD/Plate.stl differ diff --git a/website/public/docs/v2/1sketch2.png b/website/public/docs/v2/1sketch2.png index 42d71fdd04..7e5afbbd23 100644 Binary files a/website/public/docs/v2/1sketch2.png and b/website/public/docs/v2/1sketch2.png differ diff --git a/website/public/docs/v2/3d-view.png b/website/public/docs/v2/3d-view.png new file mode 100644 index 0000000000..39fb0fed60 Binary files /dev/null and b/website/public/docs/v2/3d-view.png differ diff --git a/website/public/docs/v2/3dmodels.png b/website/public/docs/v2/3dmodels.png new file mode 100644 index 0000000000..0c8bbb7e56 Binary files /dev/null and b/website/public/docs/v2/3dmodels.png differ diff --git a/website/public/docs/v2/3dwithcomponents.png b/website/public/docs/v2/3dwithcomponents.png new file mode 100644 index 0000000000..fc1520718a Binary files /dev/null and b/website/public/docs/v2/3dwithcomponents.png differ diff --git a/website/public/docs/v2/addtext.png b/website/public/docs/v2/addtext.png new file mode 100644 index 0000000000..fc2fe50464 Binary files /dev/null and b/website/public/docs/v2/addtext.png differ diff --git a/website/public/docs/v2/align.png b/website/public/docs/v2/align.png new file mode 100644 index 0000000000..a5476b3f1a Binary files /dev/null and b/website/public/docs/v2/align.png differ diff --git a/website/public/docs/v2/body.png b/website/public/docs/v2/body.png new file mode 100644 index 0000000000..19b9b2af5a Binary files /dev/null and b/website/public/docs/v2/body.png differ diff --git a/website/public/docs/v2/circletool.png b/website/public/docs/v2/circletool.png new file mode 100644 index 0000000000..5a75a9528f Binary files /dev/null and b/website/public/docs/v2/circletool.png differ diff --git a/website/public/docs/v2/compfrontback.png b/website/public/docs/v2/compfrontback.png new file mode 100644 index 0000000000..d8cf261e5a Binary files /dev/null and b/website/public/docs/v2/compfrontback.png differ diff --git a/website/public/docs/v2/copyfootprint.png b/website/public/docs/v2/copyfootprint.png new file mode 100644 index 0000000000..8137b89580 Binary files /dev/null and b/website/public/docs/v2/copyfootprint.png differ diff --git a/website/public/docs/v2/correctneopixel3d.png b/website/public/docs/v2/correctneopixel3d.png new file mode 100644 index 0000000000..483e972dbd Binary files /dev/null and b/website/public/docs/v2/correctneopixel3d.png differ diff --git a/website/public/docs/v2/deletelayer.png b/website/public/docs/v2/deletelayer.png new file mode 100644 index 0000000000..5fba9d66d1 Binary files /dev/null and b/website/public/docs/v2/deletelayer.png differ diff --git a/website/public/docs/v2/dimension.png b/website/public/docs/v2/dimension.png new file mode 100644 index 0000000000..e6b349d3d0 Binary files /dev/null and b/website/public/docs/v2/dimension.png differ diff --git a/website/public/docs/v2/doneplatesketch.png b/website/public/docs/v2/doneplatesketch.png new file mode 100644 index 0000000000..9cceeba3f3 Binary files /dev/null and b/website/public/docs/v2/doneplatesketch.png differ diff --git a/website/public/docs/v2/draft.png b/website/public/docs/v2/draft.png new file mode 100644 index 0000000000..2018f07ddf Binary files /dev/null and b/website/public/docs/v2/draft.png differ diff --git a/website/public/docs/v2/drafttosketch.png b/website/public/docs/v2/drafttosketch.png new file mode 100644 index 0000000000..b19fa5756e Binary files /dev/null and b/website/public/docs/v2/drafttosketch.png differ diff --git a/website/public/docs/v2/edgecuts.png b/website/public/docs/v2/edgecuts.png deleted file mode 100644 index 41c95f51d6..0000000000 Binary files a/website/public/docs/v2/edgecuts.png and /dev/null differ diff --git a/website/public/docs/v2/edgecutsselect.png b/website/public/docs/v2/edgecutsselect.png new file mode 100644 index 0000000000..f8efcea828 Binary files /dev/null and b/website/public/docs/v2/edgecutsselect.png differ diff --git a/website/public/docs/v2/edges.png b/website/public/docs/v2/edges.png new file mode 100644 index 0000000000..488c0d6207 Binary files /dev/null and b/website/public/docs/v2/edges.png differ diff --git a/website/public/docs/v2/editfootprint.png b/website/public/docs/v2/editfootprint.png new file mode 100644 index 0000000000..0595a2b1f0 Binary files /dev/null and b/website/public/docs/v2/editfootprint.png differ diff --git a/website/public/docs/v2/editgrid.png b/website/public/docs/v2/editgrid.png new file mode 100644 index 0000000000..00be60aeaf Binary files /dev/null and b/website/public/docs/v2/editgrid.png differ diff --git a/website/public/docs/v2/expandersym.png b/website/public/docs/v2/expandersym.png new file mode 100644 index 0000000000..f1f68b34b9 Binary files /dev/null and b/website/public/docs/v2/expandersym.png differ diff --git a/website/public/docs/v2/expanderwired.png b/website/public/docs/v2/expanderwired.png new file mode 100644 index 0000000000..47ccbd08de Binary files /dev/null and b/website/public/docs/v2/expanderwired.png differ diff --git a/website/public/docs/v2/exportstep.png b/website/public/docs/v2/exportstep.png new file mode 100644 index 0000000000..a68236162d Binary files /dev/null and b/website/public/docs/v2/exportstep.png differ diff --git a/website/public/docs/v2/externalgeometry.png b/website/public/docs/v2/externalgeometry.png new file mode 100644 index 0000000000..a24427dfe1 Binary files /dev/null and b/website/public/docs/v2/externalgeometry.png differ diff --git a/website/public/docs/v2/finalpcb.png b/website/public/docs/v2/finalpcb.png new file mode 100644 index 0000000000..49ea2144e3 Binary files /dev/null and b/website/public/docs/v2/finalpcb.png differ diff --git a/website/public/docs/v2/footprinteditor.png b/website/public/docs/v2/footprinteditor.png new file mode 100644 index 0000000000..e3c87213f7 Binary files /dev/null and b/website/public/docs/v2/footprinteditor.png differ diff --git a/website/public/docs/v2/freecadbase.png b/website/public/docs/v2/freecadbase.png new file mode 100644 index 0000000000..69eece9811 Binary files /dev/null and b/website/public/docs/v2/freecadbase.png differ diff --git a/website/public/docs/v2/freecadbaseextrude.png b/website/public/docs/v2/freecadbaseextrude.png new file mode 100644 index 0000000000..d1d0209651 Binary files /dev/null and b/website/public/docs/v2/freecadbaseextrude.png differ diff --git a/website/public/docs/v2/freecadbasewhole.png b/website/public/docs/v2/freecadbasewhole.png new file mode 100644 index 0000000000..415eed1225 Binary files /dev/null and b/website/public/docs/v2/freecadbasewhole.png differ diff --git a/website/public/docs/v2/freecadbothole.png b/website/public/docs/v2/freecadbothole.png new file mode 100644 index 0000000000..9524ababdf Binary files /dev/null and b/website/public/docs/v2/freecadbothole.png differ diff --git a/website/public/docs/v2/freecadcase.png b/website/public/docs/v2/freecadcase.png new file mode 100644 index 0000000000..138c1124ff Binary files /dev/null and b/website/public/docs/v2/freecadcase.png differ diff --git a/website/public/docs/v2/freecadfinal.png b/website/public/docs/v2/freecadfinal.png new file mode 100644 index 0000000000..3a8b56cce3 Binary files /dev/null and b/website/public/docs/v2/freecadfinal.png differ diff --git a/website/public/docs/v2/freecadholesketch.png b/website/public/docs/v2/freecadholesketch.png new file mode 100644 index 0000000000..f9001c17a7 Binary files /dev/null and b/website/public/docs/v2/freecadholesketch.png differ diff --git a/website/public/docs/v2/freecadkeyhole.png b/website/public/docs/v2/freecadkeyhole.png new file mode 100644 index 0000000000..d72e613c43 Binary files /dev/null and b/website/public/docs/v2/freecadkeyhole.png differ diff --git a/website/public/docs/v2/freecadpad.png b/website/public/docs/v2/freecadpad.png new file mode 100644 index 0000000000..cb631d8ce7 Binary files /dev/null and b/website/public/docs/v2/freecadpad.png differ diff --git a/website/public/docs/v2/freecadplatehole.png b/website/public/docs/v2/freecadplatehole.png new file mode 100644 index 0000000000..90e864b3b6 Binary files /dev/null and b/website/public/docs/v2/freecadplatehole.png differ diff --git a/website/public/docs/v2/freecadpocket.png b/website/public/docs/v2/freecadpocket.png new file mode 100644 index 0000000000..f13b68ec49 Binary files /dev/null and b/website/public/docs/v2/freecadpocket.png differ diff --git a/website/public/docs/v2/freecadpocket2.png b/website/public/docs/v2/freecadpocket2.png new file mode 100644 index 0000000000..32cae19479 Binary files /dev/null and b/website/public/docs/v2/freecadpocket2.png differ diff --git a/website/public/docs/v2/freecadproperty.png b/website/public/docs/v2/freecadproperty.png new file mode 100644 index 0000000000..12da0607db Binary files /dev/null and b/website/public/docs/v2/freecadproperty.png differ diff --git a/website/public/docs/v2/freecadrectangle.png b/website/public/docs/v2/freecadrectangle.png new file mode 100644 index 0000000000..6410208f78 Binary files /dev/null and b/website/public/docs/v2/freecadrectangle.png differ diff --git a/website/public/docs/v2/freecadselect.png b/website/public/docs/v2/freecadselect.png new file mode 100644 index 0000000000..8c4d52d4b6 Binary files /dev/null and b/website/public/docs/v2/freecadselect.png differ diff --git a/website/public/docs/v2/freecadtrimedge.png b/website/public/docs/v2/freecadtrimedge.png new file mode 100644 index 0000000000..aeca2f6b8c Binary files /dev/null and b/website/public/docs/v2/freecadtrimedge.png differ diff --git a/website/public/docs/v2/freecadtrimmed.png b/website/public/docs/v2/freecadtrimmed.png new file mode 100644 index 0000000000..cc592d1503 Binary files /dev/null and b/website/public/docs/v2/freecadtrimmed.png differ diff --git a/website/public/docs/v2/freecadusbsketch.png b/website/public/docs/v2/freecadusbsketch.png new file mode 100644 index 0000000000..e78e60b7e9 Binary files /dev/null and b/website/public/docs/v2/freecadusbsketch.png differ diff --git a/website/public/docs/v2/frontback.png b/website/public/docs/v2/frontback.png new file mode 100644 index 0000000000..f1850fbdd7 Binary files /dev/null and b/website/public/docs/v2/frontback.png differ diff --git a/website/public/docs/v2/fusionalmost.png b/website/public/docs/v2/fusionalmost.png new file mode 100644 index 0000000000..6ebad5684f Binary files /dev/null and b/website/public/docs/v2/fusionalmost.png differ diff --git a/website/public/docs/v2/fusioncase.png b/website/public/docs/v2/fusioncase.png new file mode 100644 index 0000000000..99e36d10fd Binary files /dev/null and b/website/public/docs/v2/fusioncase.png differ diff --git a/website/public/docs/v2/fusioncasehalf.png b/website/public/docs/v2/fusioncasehalf.png new file mode 100644 index 0000000000..8e0e1a1884 Binary files /dev/null and b/website/public/docs/v2/fusioncasehalf.png differ diff --git a/website/public/docs/v2/fusioncircle.png b/website/public/docs/v2/fusioncircle.png new file mode 100644 index 0000000000..b909ef3cb9 Binary files /dev/null and b/website/public/docs/v2/fusioncircle.png differ diff --git a/website/public/docs/v2/fusioncircle2.png b/website/public/docs/v2/fusioncircle2.png new file mode 100644 index 0000000000..905223cd4c Binary files /dev/null and b/website/public/docs/v2/fusioncircle2.png differ diff --git a/website/public/docs/v2/fusioncircledim.png b/website/public/docs/v2/fusioncircledim.png new file mode 100644 index 0000000000..9bf40e9027 Binary files /dev/null and b/website/public/docs/v2/fusioncircledim.png differ diff --git a/website/public/docs/v2/fusioncoincident.png b/website/public/docs/v2/fusioncoincident.png new file mode 100644 index 0000000000..543eb6145e Binary files /dev/null and b/website/public/docs/v2/fusioncoincident.png differ diff --git a/website/public/docs/v2/fusioncomp.png b/website/public/docs/v2/fusioncomp.png new file mode 100644 index 0000000000..737693fa92 Binary files /dev/null and b/website/public/docs/v2/fusioncomp.png differ diff --git a/website/public/docs/v2/fusiondim.png b/website/public/docs/v2/fusiondim.png new file mode 100644 index 0000000000..8bfa3944b2 Binary files /dev/null and b/website/public/docs/v2/fusiondim.png differ diff --git a/website/public/docs/v2/fusionextrude.png b/website/public/docs/v2/fusionextrude.png new file mode 100644 index 0000000000..65d1b29f61 Binary files /dev/null and b/website/public/docs/v2/fusionextrude.png differ diff --git a/website/public/docs/v2/fusionextrude2.png b/website/public/docs/v2/fusionextrude2.png new file mode 100644 index 0000000000..f39a9c7405 Binary files /dev/null and b/website/public/docs/v2/fusionextrude2.png differ diff --git a/website/public/docs/v2/fusionextrudemenu.png b/website/public/docs/v2/fusionextrudemenu.png new file mode 100644 index 0000000000..824c6dbb61 Binary files /dev/null and b/website/public/docs/v2/fusionextrudemenu.png differ diff --git a/website/public/docs/v2/fusionfinalsketch.png b/website/public/docs/v2/fusionfinalsketch.png new file mode 100644 index 0000000000..ae8027cce5 Binary files /dev/null and b/website/public/docs/v2/fusionfinalsketch.png differ diff --git a/website/public/docs/v2/fusionfinishsketch.png b/website/public/docs/v2/fusionfinishsketch.png new file mode 100644 index 0000000000..1d2f08d54a Binary files /dev/null and b/website/public/docs/v2/fusionfinishsketch.png differ diff --git a/website/public/docs/v2/fusiongfinaltop.png b/website/public/docs/v2/fusiongfinaltop.png new file mode 100644 index 0000000000..48c6f49d2b Binary files /dev/null and b/website/public/docs/v2/fusiongfinaltop.png differ diff --git a/website/public/docs/v2/fusionhole.png b/website/public/docs/v2/fusionhole.png new file mode 100644 index 0000000000..ca55029077 Binary files /dev/null and b/website/public/docs/v2/fusionhole.png differ diff --git a/website/public/docs/v2/fusionholes.png b/website/public/docs/v2/fusionholes.png new file mode 100644 index 0000000000..67a1258f11 Binary files /dev/null and b/website/public/docs/v2/fusionholes.png differ diff --git a/website/public/docs/v2/fusionholetool.png b/website/public/docs/v2/fusionholetool.png new file mode 100644 index 0000000000..43d5767095 Binary files /dev/null and b/website/public/docs/v2/fusionholetool.png differ diff --git a/website/public/docs/v2/fusionlock.png b/website/public/docs/v2/fusionlock.png new file mode 100644 index 0000000000..6b43be28b3 Binary files /dev/null and b/website/public/docs/v2/fusionlock.png differ diff --git a/website/public/docs/v2/fusionmidcircle.png b/website/public/docs/v2/fusionmidcircle.png new file mode 100644 index 0000000000..1c85fbafb6 Binary files /dev/null and b/website/public/docs/v2/fusionmidcircle.png differ diff --git a/website/public/docs/v2/fusionnewdesign.png b/website/public/docs/v2/fusionnewdesign.png new file mode 100644 index 0000000000..badbc2b70d Binary files /dev/null and b/website/public/docs/v2/fusionnewdesign.png differ diff --git a/website/public/docs/v2/fusionplate.png b/website/public/docs/v2/fusionplate.png new file mode 100644 index 0000000000..4f17cdc0d8 Binary files /dev/null and b/website/public/docs/v2/fusionplate.png differ diff --git a/website/public/docs/v2/fusionplatefinal.png b/website/public/docs/v2/fusionplatefinal.png new file mode 100644 index 0000000000..c278b57f44 Binary files /dev/null and b/website/public/docs/v2/fusionplatefinal.png differ diff --git a/website/public/docs/v2/fusionrect.png b/website/public/docs/v2/fusionrect.png new file mode 100644 index 0000000000..aed0f9c9ae Binary files /dev/null and b/website/public/docs/v2/fusionrect.png differ diff --git a/website/public/docs/v2/fusionrect2.png b/website/public/docs/v2/fusionrect2.png new file mode 100644 index 0000000000..1de936c082 Binary files /dev/null and b/website/public/docs/v2/fusionrect2.png differ diff --git a/website/public/docs/v2/fusionrect3.png b/website/public/docs/v2/fusionrect3.png new file mode 100644 index 0000000000..43818322b4 Binary files /dev/null and b/website/public/docs/v2/fusionrect3.png differ diff --git a/website/public/docs/v2/fusionselect.png b/website/public/docs/v2/fusionselect.png new file mode 100644 index 0000000000..cd8b1d2f6e Binary files /dev/null and b/website/public/docs/v2/fusionselect.png differ diff --git a/website/public/docs/v2/fusionshow.png b/website/public/docs/v2/fusionshow.png new file mode 100644 index 0000000000..a835869505 Binary files /dev/null and b/website/public/docs/v2/fusionshow.png differ diff --git a/website/public/docs/v2/fusiontop.png b/website/public/docs/v2/fusiontop.png new file mode 100644 index 0000000000..189913228b Binary files /dev/null and b/website/public/docs/v2/fusiontop.png differ diff --git a/website/public/docs/v2/goodsketch.png b/website/public/docs/v2/goodsketch.png new file mode 100644 index 0000000000..e97a4e3586 Binary files /dev/null and b/website/public/docs/v2/goodsketch.png differ diff --git a/website/public/docs/v2/grid.png b/website/public/docs/v2/grid.png new file mode 100644 index 0000000000..cd03480b1e Binary files /dev/null and b/website/public/docs/v2/grid.png differ diff --git a/website/public/docs/v2/halfdonefreecadsketch.png b/website/public/docs/v2/halfdonefreecadsketch.png new file mode 100644 index 0000000000..6ca7148d1a Binary files /dev/null and b/website/public/docs/v2/halfdonefreecadsketch.png differ diff --git a/website/public/docs/v2/holefreecad.png b/website/public/docs/v2/holefreecad.png new file mode 100644 index 0000000000..ea3f4af850 Binary files /dev/null and b/website/public/docs/v2/holefreecad.png differ diff --git a/website/public/docs/v2/keymatrixdiode.png b/website/public/docs/v2/keymatrixdiode.png new file mode 100644 index 0000000000..1e5176b483 Binary files /dev/null and b/website/public/docs/v2/keymatrixdiode.png differ diff --git a/website/public/docs/v2/keymatrixschematic.png b/website/public/docs/v2/keymatrixschematic.png new file mode 100644 index 0000000000..922e22d8cf Binary files /dev/null and b/website/public/docs/v2/keymatrixschematic.png differ diff --git a/website/public/docs/v2/keymatrixschematicassign.png b/website/public/docs/v2/keymatrixschematicassign.png new file mode 100644 index 0000000000..6e6fda9ca5 Binary files /dev/null and b/website/public/docs/v2/keymatrixschematicassign.png differ diff --git a/website/public/docs/v2/keymatrixschematicconnected.png b/website/public/docs/v2/keymatrixschematicconnected.png new file mode 100644 index 0000000000..00f1ffd5c1 Binary files /dev/null and b/website/public/docs/v2/keymatrixschematicconnected.png differ diff --git a/website/public/docs/v2/keymatrixschematicdiode.png b/website/public/docs/v2/keymatrixschematicdiode.png new file mode 100644 index 0000000000..9660103395 Binary files /dev/null and b/website/public/docs/v2/keymatrixschematicdiode.png differ diff --git a/website/public/docs/v2/kicadusbdist.png b/website/public/docs/v2/kicadusbdist.png new file mode 100644 index 0000000000..e5e7ddb0cb Binary files /dev/null and b/website/public/docs/v2/kicadusbdist.png differ diff --git a/website/public/docs/v2/neoassoc.png b/website/public/docs/v2/neoassoc.png new file mode 100644 index 0000000000..1ab6bed62a Binary files /dev/null and b/website/public/docs/v2/neoassoc.png differ diff --git a/website/public/docs/v2/neoedit.png b/website/public/docs/v2/neoedit.png new file mode 100644 index 0000000000..fc8e42b8d9 Binary files /dev/null and b/website/public/docs/v2/neoedit.png differ diff --git a/website/public/docs/v2/neofinal.png b/website/public/docs/v2/neofinal.png new file mode 100644 index 0000000000..353a5ef6cd Binary files /dev/null and b/website/public/docs/v2/neofinal.png differ diff --git a/website/public/docs/v2/neomiddle.png b/website/public/docs/v2/neomiddle.png new file mode 100644 index 0000000000..e89748fef2 Binary files /dev/null and b/website/public/docs/v2/neomiddle.png differ diff --git a/website/public/docs/v2/neopixel3d.png b/website/public/docs/v2/neopixel3d.png new file mode 100644 index 0000000000..15f175b950 Binary files /dev/null and b/website/public/docs/v2/neopixel3d.png differ diff --git a/website/public/docs/v2/newfreecad.png b/website/public/docs/v2/newfreecad.png new file mode 100644 index 0000000000..b4bc8da726 Binary files /dev/null and b/website/public/docs/v2/newfreecad.png differ diff --git a/website/public/docs/v2/newlibrary.png b/website/public/docs/v2/newlibrary.png new file mode 100644 index 0000000000..005b694cc0 Binary files /dev/null and b/website/public/docs/v2/newlibrary.png differ diff --git a/website/public/docs/v2/newsketch.png b/website/public/docs/v2/newsketch.png new file mode 100644 index 0000000000..0bddb9e851 Binary files /dev/null and b/website/public/docs/v2/newsketch.png differ diff --git a/website/public/docs/v2/oledassoc.png b/website/public/docs/v2/oledassoc.png new file mode 100644 index 0000000000..c8c4332be5 Binary files /dev/null and b/website/public/docs/v2/oledassoc.png differ diff --git a/website/public/docs/v2/oledhalfschem.png b/website/public/docs/v2/oledhalfschem.png new file mode 100644 index 0000000000..37702df8cf Binary files /dev/null and b/website/public/docs/v2/oledhalfschem.png differ diff --git a/website/public/docs/v2/oledschem.png b/website/public/docs/v2/oledschem.png new file mode 100644 index 0000000000..df8c4dfa0d Binary files /dev/null and b/website/public/docs/v2/oledschem.png differ diff --git a/website/public/docs/v2/oledsymbol.png b/website/public/docs/v2/oledsymbol.png new file mode 100644 index 0000000000..990aa441c3 Binary files /dev/null and b/website/public/docs/v2/oledsymbol.png differ diff --git a/website/public/docs/v2/pastefootprint.png b/website/public/docs/v2/pastefootprint.png new file mode 100644 index 0000000000..70b7842d7b Binary files /dev/null and b/website/public/docs/v2/pastefootprint.png differ diff --git a/website/public/docs/v2/pcbsize.png b/website/public/docs/v2/pcbsize.png new file mode 100644 index 0000000000..c2d616d27b Binary files /dev/null and b/website/public/docs/v2/pcbsize.png differ diff --git a/website/public/docs/v2/placedfootprints.png b/website/public/docs/v2/placedfootprints.png new file mode 100644 index 0000000000..27cb78de9f Binary files /dev/null and b/website/public/docs/v2/placedfootprints.png differ diff --git a/website/public/docs/v2/pouradd.png b/website/public/docs/v2/pouradd.png new file mode 100644 index 0000000000..29779ad345 Binary files /dev/null and b/website/public/docs/v2/pouradd.png differ diff --git a/website/public/docs/v2/pouraddvias.png b/website/public/docs/v2/pouraddvias.png new file mode 100644 index 0000000000..f3040d7d81 Binary files /dev/null and b/website/public/docs/v2/pouraddvias.png differ diff --git a/website/public/docs/v2/pouraddzone.png b/website/public/docs/v2/pouraddzone.png new file mode 100644 index 0000000000..8c761ee702 Binary files /dev/null and b/website/public/docs/v2/pouraddzone.png differ diff --git a/website/public/docs/v2/pourfilled.png b/website/public/docs/v2/pourfilled.png new file mode 100644 index 0000000000..9dc003b259 Binary files /dev/null and b/website/public/docs/v2/pourfilled.png differ diff --git a/website/public/docs/v2/pourfinish.png b/website/public/docs/v2/pourfinish.png new file mode 100644 index 0000000000..6e35606867 Binary files /dev/null and b/website/public/docs/v2/pourfinish.png differ diff --git a/website/public/docs/v2/pourstart.png b/website/public/docs/v2/pourstart.png new file mode 100644 index 0000000000..5b152867d1 Binary files /dev/null and b/website/public/docs/v2/pourstart.png differ diff --git a/website/public/docs/v2/realfinalpcb.png b/website/public/docs/v2/realfinalpcb.png new file mode 100644 index 0000000000..9f94fd2295 Binary files /dev/null and b/website/public/docs/v2/realfinalpcb.png differ diff --git a/website/public/docs/v2/righttoolbar.png b/website/public/docs/v2/righttoolbar.png new file mode 100644 index 0000000000..1c3d644fda Binary files /dev/null and b/website/public/docs/v2/righttoolbar.png differ diff --git a/website/public/docs/v2/rotarysym.png b/website/public/docs/v2/rotarysym.png new file mode 100644 index 0000000000..1f5c203255 Binary files /dev/null and b/website/public/docs/v2/rotarysym.png differ diff --git a/website/public/docs/v2/rotarywired.png b/website/public/docs/v2/rotarywired.png new file mode 100644 index 0000000000..09ea3c350e Binary files /dev/null and b/website/public/docs/v2/rotarywired.png differ diff --git a/website/public/docs/v2/roundedrect.png b/website/public/docs/v2/roundedrect.png new file mode 100644 index 0000000000..ca02d4b367 Binary files /dev/null and b/website/public/docs/v2/roundedrect.png differ diff --git a/website/public/docs/v2/roundedrect2.png b/website/public/docs/v2/roundedrect2.png new file mode 100644 index 0000000000..7d8479be9d Binary files /dev/null and b/website/public/docs/v2/roundedrect2.png differ diff --git a/website/public/docs/v2/routing.png b/website/public/docs/v2/routing.png new file mode 100644 index 0000000000..ed2ad18132 Binary files /dev/null and b/website/public/docs/v2/routing.png differ diff --git a/website/public/docs/v2/ruler.png b/website/public/docs/v2/ruler.png new file mode 100644 index 0000000000..f2d06f1622 Binary files /dev/null and b/website/public/docs/v2/ruler.png differ diff --git a/website/public/docs/v2/selectsketch.png b/website/public/docs/v2/selectsketch.png new file mode 100644 index 0000000000..9a728e6d47 Binary files /dev/null and b/website/public/docs/v2/selectsketch.png differ diff --git a/website/public/docs/v2/silkbadsilk.png b/website/public/docs/v2/silkbadsilk.png new file mode 100644 index 0000000000..d6f0920294 Binary files /dev/null and b/website/public/docs/v2/silkbadsilk.png differ diff --git a/website/public/docs/v2/silkconverter.png b/website/public/docs/v2/silkconverter.png new file mode 100644 index 0000000000..fae80d7c50 Binary files /dev/null and b/website/public/docs/v2/silkconverter.png differ diff --git a/website/public/docs/v2/silkfinal.png b/website/public/docs/v2/silkfinal.png new file mode 100644 index 0000000000..ddaa6cf762 Binary files /dev/null and b/website/public/docs/v2/silkfinal.png differ diff --git a/website/public/docs/v2/silkfinal3d.png b/website/public/docs/v2/silkfinal3d.png new file mode 100644 index 0000000000..d3f139994a Binary files /dev/null and b/website/public/docs/v2/silkfinal3d.png differ diff --git a/website/public/docs/v2/silkgoodsilk.png b/website/public/docs/v2/silkgoodsilk.png new file mode 100644 index 0000000000..a72de9a4f2 Binary files /dev/null and b/website/public/docs/v2/silkgoodsilk.png differ diff --git a/website/public/docs/v2/silkgura.png b/website/public/docs/v2/silkgura.png new file mode 100644 index 0000000000..420e8479ff Binary files /dev/null and b/website/public/docs/v2/silkgura.png differ diff --git a/website/public/docs/v2/silkoptions.png b/website/public/docs/v2/silkoptions.png new file mode 100644 index 0000000000..e449050c7f Binary files /dev/null and b/website/public/docs/v2/silkoptions.png differ diff --git a/website/public/docs/v2/swoffset.png b/website/public/docs/v2/swoffset.png new file mode 100644 index 0000000000..c8aa4c31fc Binary files /dev/null and b/website/public/docs/v2/swoffset.png differ diff --git a/website/public/docs/v2/toplength.png b/website/public/docs/v2/toplength.png new file mode 100644 index 0000000000..80442439a8 Binary files /dev/null and b/website/public/docs/v2/toplength.png differ diff --git a/website/public/docs/v2/updatefromlib.png b/website/public/docs/v2/updatefromlib.png new file mode 100644 index 0000000000..68844b7a19 Binary files /dev/null and b/website/public/docs/v2/updatefromlib.png differ diff --git a/website/public/docs/v2/validatesketch.png b/website/public/docs/v2/validatesketch.png new file mode 100644 index 0000000000..e54495d3a6 Binary files /dev/null and b/website/public/docs/v2/validatesketch.png differ diff --git a/website/public/docs/v2/via.png b/website/public/docs/v2/via.png new file mode 100644 index 0000000000..de46b069a5 Binary files /dev/null and b/website/public/docs/v2/via.png differ diff --git a/website/public/docs/v2/xiaohead.png b/website/public/docs/v2/xiaohead.png new file mode 100644 index 0000000000..6427ccfe75 Binary files /dev/null and b/website/public/docs/v2/xiaohead.png differ diff --git a/website/src/components/SideBar.tsx b/website/src/components/SideBar.tsx index 70a49edf08..bd67feccff 100644 --- a/website/src/components/SideBar.tsx +++ b/website/src/components/SideBar.tsx @@ -13,6 +13,11 @@ const SideBar = () => { DIY Guide +
+
+You can see 4 neopixels and the OLED missing the ground traces. Thus we would like to add a ground pour. Click on the Add Filled Zone button on the right hand side:
+
+
+
+Click on one corner of your board. You will get a new window, where you select GND in the middle, and check both F.Cu and B.Cu on the left side:
+
+
+
+Click ok, and then draw the outline around your Edge.Cuts (It can be bigger then it, but then it won't be that pretty :P). When you have finished, press B to fill. You should press B each time you make a change so the fill can get updated (well not each time, but you get what I mean). The end result is like this:
+
+
+
+Oh no! Do you see the empty areas on the back of the board? Those are places where the ground pour can't reach. To fix this, you need to add some vias.
+
+
+
+Click on that button, and place a few vias on the parts where the ground pour is missing (and feel free to put some even the in places where it isn't missing). And don't forget to press B again to refill! Your end product should look like this:
+
+
+
+
+## Switch Matrix
+
+[If you want, here is a detailed explenation of how key matrices works.](https://pcbheaven.com/wikipages/How_Key_Matrices_Works/)
+
+Now you aren't satisfied with the number of keys you have? With switch matrices you can have more switches on less pins! (Wow this is a good sales pitch, hire me adafruit :3)
+
+First, open up your schematic and place the switches in a grid shape:
+
+
+
+If you want a non-symetric shape for your keys, it's fine to delete any switch you don't want.
+
+Now add diodes. Their schematic name is `D`. Place them at one end of the switch (any end, but it should be the same for all the switches), **pointing away from the switch**:
+
+
+
+Now, connect each row of diode heads together to form a row, and connect the each row to a GPIO pin. Do the same with the each column of switches (on the side without the diode) to form a column. Connect each column to a GPIO pin too.
+
+
+
+Now you do the same things assigning the footprints, but for diodes you will use D_DO-35_SOD27_P7.62mm_Horizontal as the footprint.
+
+
+
+Congrats! You got a working key matrix. Nothing really changed for the PCB routing part. Just as a side note, don't put the diodes directly on the switches (or they will collide in real life). I recommend putting them on the other side of the board (flip using F) and between the switches:
+
+
+
+NOTE: When making the bom, write 1N4148 instead of diode
+
+
+## Silkscreen Art
+
+Is your board too plain? Add some silkscreen art!
+
+First, you need to find the art. The best resource is google of course. I recommend you find a picture with well defined lines, and a good color contrast. This is needed since we will only have two colors: black and white. (Not even gray).
+
+PS. Find cute anime pics on pixiv.net UwU
+
+I'm taking this image as a example:
+
+
+
+Credit: https://www.pixiv.net/en/artworks/124874618
+
+It has a good color contrast and well defined lines, which is perfect to use as silkscreen art.
+
+Now that you have your art. Open up kicad and launch the image converter.
+
+
+
+Click the "Load Source Image" button on the right hand side and select your image, you should see something like thiis:
+
+
+
+As you can see, the image isn't that good. Now play with the "Black / white threshold" slider on the right, and maybe try ticking the "Negative" checkbox. You should be able to find a point where you are satisfied:
+
+
+
+If you can't find a good point, try finding another image, or open up a paint program, and make the contrast stronger.
+
+Now, at the bottom right, change the "Pcb Layer for Graphics" to "Front silk screen", and change the output format to "Footprint (.kicad_mod file)"
+
+
+
+Click on the "Export to Clipboard button", and go to your PCB editor. Click Control+V (Or Command+V on Macs), and place your silkscreen down. If your image is too small/big, try editing the size in "Output Size", and export to clipboard then paste again.
+
+If there is a "G***" text in your silkscreen, just select it and press del (or right click and delete).
+
+I placed mine on the back side of the PCB, and this is the final result:
+
+
+
+
+Pretty right? UwU
+
+
+## OLED
+[Download this footprint library and unzip it](https://download-directory.github.io/?url=https%3A%2F%2Fgithub.com%2Fcheyao%2Fmacropad%2Ftree%2Fmain%2FPCB%2Fthird_party%2FKiCad-SSD1306-128x64-master), then add it to kicad.
+
+Open up the schematic editor. If you have anything connected on the pins named "GPIO6/SDA" or "GPIO7/SCL", move them to another pin. Then add the symbol named SSD1306. Be sure to not use the built in symbol!
+
+Be sure to not use the built in footprint! The correct footprint should be called 128x64OLED:
+
+
+
+Connect VCC to the +5V symbol, and GND to GND (Search these symbols using the P key). Then connect SDA to the SDA of the Xiao, and SCL to the SCL of the xiao.
+
+
+
+Now to the important part, you must add two pull-up resistors to the SCL and SDA lines. (What pull up means? It isn't really important but you can Google it)
+
+Search for the symbol named `R` and place one on each SDA and SCL lines, and wire the other end of the resistors to a +3.3V symbol (Find it using P). Don't forget to add a +3.3V symbol to the Xiao!
+
+
+
+NOTE: In your BOM, you need to specify that the resistors are 4.7kΩ.
+
+Now you just need to associate the symbols to the footprint. Select R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal for the resistors, and 128x64OLED for the oled. (**NOT** Adafruit_SSD1306!)
+
+
+
+If you want to use a 0.91" display, download this library and add it to the .pretty folder:
+- [0.91" OLED Display](https://github.com/gorbachev/KiCad-SSD1306-0.91-OLED-4pin-128x32.pretty/blob/master/SSD1306-0.91-OLED-4pin-128x32.kicad_mod)
+Then choose this footprint when associating.
+
+Now continue to the PCB editors and route the pins! It isn't that different from routing the switches. I recommend placing the diodes on the back side of the OLED screen.
+
+
+## Jumper Wire Holes
+
+Do you want some jumper wire holes? You can create a split macropad, or have some components away from the PCB with this!
+
+Just add the symbol named "Conn_01xNUM_Pin" to your schematic (Replace NUM by the number of pins you want).
+
+Wire it up and associate the footprint SolderWire-0.1sqmm_1xNUM_P3.6mm_D0.4mm_OD1mm (Replace NUM by the number of pins you want)
+
+
+## Reverse Mount Neopixels
+
+I highly recommend you to look into how to make [a ground pour](#ground) first.
+
+To add reverse mounted neopixels, [download this footprint library and unzip it](https://download-directory.github.io/?url=https%3A%2F%2Fgithub.com%2Fcheyao%2Fmacropad%2Ftree%2Fmain%2FPCB%2Fthird_party%2Fneopixel.petty). You need to use the built-in SK6812MINI symbol with it.
+
+You already know how to wire neopixels from the general tutorial (aka DIN to DOUT, VDD to +5V and VSS to GND).
+
+The only difference is that you need to assign SK6812MINI-E footprint to the neopixel
+
+
+
+You can put them anywhere as usual, but if you want to put them under your switches, follow this:
+
+First, select the **center** of the neopixel, then move it to the **center** of the corresponding switch:
+
+
+
+Now click E, and enter +5.08 at the Y fiels on the bottom left
+
+
+
+Click ok and you should see your neopixel move down. Now click F to flip it onto the other side. (They will be shining towards the top, since they are reverse mounted).
+
+Repeate for all your leds, and you should be done!
+
+
+
+NOTE: You shouldn't route inside the white border of the neopixel, since it will be drilled out. KiCAD should prevent you from doing it, but you will need to move any existing traces.
+
+
+## Rotary Encoder
+
+So you want a rotating knob! Good idea!
+
+First, add the symbol RotaryEncoder_Switch to your schematic.
+
+
+
+The right side of the symbol acts the same as a normal switch, you can just wire it into your key matrix/together with your switches. Connect the middle pin (C) to GND, then the top and bottom pins (A and B) to a GPIO pin:
+
+
+
+Now, you should associate the symbol to the RotaryEncoder_Alps_EC11E-Switch_Vertical_H20mm_CircularMountingHoles footprint.
+
+After that, just route your PCB as normal.
+
+
+## IO Expander
+
+Not enough IO pins? Want to add like a ton of rotatory encoders?? It's time for an IO expander!
+
+We are going to use the MCP23017 io expander chip. For the symbol select MCP23017_SO.
+
+
+
+First, connect VDD to +3.3V and VSS to GND. The reset pin should also be connected to +3.3V. Connect A0, A1 adn A2 to GND.
+
+Connect SDA to the SDA pin of the Xiao, and SCL to the SCL pin. You need to add pull-up resistors on SDA and SCL.
+
+Search for the symbol named `R` and place one on each SDA and SCL lines, and wire the other end of the resistors to a +3.3V symbol (Find it using P). Don't forget to add a +3.3V symbol to the Xiao!
+
+
+
+NOTE: In your BOM, you need to specify that the resistors are 4.7kΩ.
+
+Now you got 16 additional IO pins! (GPA0-7 and GPB0-7) Use them wisely :D
+
+When associating the symbols to the footprint. Select R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal for the resistors. The MCP23017_SO should already be pre-assigned, but it's corresponding footprint is SOIC-28W_7.5x17.9mm_P1.17mm.
+
+
+## Creating your case in FreeCad
+
+As a forenote, FreeCAD comes with a lot of quirks, so when you are blocked, google will be your best friend.
+
+
+### Plate
+
+First, download [FreeCAD](https://www.freecad.org/), and open the application. Click on "New File". You should have something like this:
+
+
+
+Here is the layout of the view you should see:
+
+
+
+Now, select the outer lines that surround the keys, and delete them (Del key or rightclick and Delete). You should have something like this:
+
+
+
+After that, go to the tree view, open up "layers" and then "0", then shift select all the items with the blue square icon:
+
+
+
+Click the draft to sketch button: (You might need to expand the toolbar menu by pressing ">>")
+
+
+
+Now, add "layers" and "0" in the tree view to your selection and click delete. You should be left with something like this:
+
+
+
+Switch to the "Sketcher" workbench in the workbench selector. Click (**NOT** double click) the Sketch in the tree view, and click on validate sketch.
+
+
+
+Click the "Find" button under "Missing coincidences", then click the "Fix" button. After this click "Close". You should see something like this:
+
+
+
+Tip: You can click the "Top" on the cube on the 3d cube present at the top right of your screen to re-orientate your view!
+
+Let's create the outline of the plate! First go back to KiCAD PCB editor and measure the dimensions of your board with the ruler tool. Click on one end of your Edge.Cuts and click again on the other end.
+
+
+
+
+Now we know that the width of the board is the absolute value of x (41mm in my case), and the height is the absolute value of y (62.702mm) in my case. Go back to FreeCAD, select the "Part Design" workbench and click this button to create a new sketch:
+
+
+
+On the left menu bar, select XY-plane and click Ok. Now click the small arrow next to the square at the top menu, and select Rounded rectangle.
+
+
+
+Draw the rounded rectangle around your keys, click to start drawing it and click again to end the rectangle. Click a third time to set the edge radius. The measurement doesn't matter at the moment.
+
+NOTE: **Never** start a drawing by clicking on the axis (The red or green line).
+
+
+
+Now select the dimension tool at the top.
+
+
+
+First, click on the quater circles at the edges and enter 5mm. (You can tweak this!)
+
+
+
+Click ok. Now click on the straight line at the top, click again and enter "width-2\*radius+10\*2" (replace width with your board width, radius with your radius. The 10 at the end is our margin). In my case it is "41-2\*5+10\*2".
+
+
+
+Now do the same with the line at the right, but replace the width with the height.
+
+After all these, click escape multiple times (sometimes the escape just doesn't register TwT). Click and drag the "Sketch" onto the "Body", you should have something like this:
+
+
+
+Double click Sketch001 again, now select the External Geometry tool and click on the bottom left and down lines:
+
+
+
+Now go to KiCAD, measure how far your Edge.Cuts is to the yellow Silkscreen of your bottom-left switch.
+
+
+
+Select the dimension tool again, click on the dotted wire on the left side, and the left edge of the case. Set the distance to the x distance you just measured + 10.5 (for me it's 3.99+10.5). Same for the bottom line and bottom dotted wire, y distance + 10.5.
+
+
+
+Now draw 4 circles on the edges with the circle tool:
+
+
+
+Use the dimension tool to set their diameter to 3.4mm (Click on the circles). And then set their distance to the edge by clicking on the center point, then one edge. It should be 5mm (margin/2) for both sides. You should have something like this:
+
+
+
+Now go to kicad and measure the distance from the edge of the PCB to the USB port.
+
+
+
+Then open back FreeCAD, select the rectangle tool and draw a rectangle at the top:
+
+
+
+Use the dimension tool to define a width of 18.5mm and height of 31mm. Click T and click on the top of the rectangle, then the top of the rounded rectangle. After that use the distance tool to set the distance from the left of the rectangle to the left edge of the rounded rectangle to x_distance_in_kicad+5.75mm
+
+
+
+Select the Trim edge tool:
+
+
+
+Then click two times the top side of the rectangle you just drew:
+
+
+
+Double click escape, and you are done with the sketch!!! (My fingers are going to break tbh)
+
+Now click on the pad button:
+
+
+
+And change the length to 3mm. Then rotate to the other side of the board! You can either use the middle mouse button+left mouse button, or the cube at the top-right. Go to the Model tab, select the sketch and click pocket button now
+
+
+
+
+Enter 10mm, check the Reversed radio button and press Ok
+
+
+
+Congrats! You finished the top plate.
+
+Click File > Save to save the freecad project, and click on the Body in the tree view, then go to File > Export to export, select STL mesh as file format.
+
+
+### Bottom
+
+First, create a new file, then a new sketch (Make sure you are in the Part Design workbench, still on the XY-plane). Add a rounded rectangle, and make it have the same dimensions as the previous one (Use the distance tool to set the size).
+
+
+
+After that, draw the four circles like last time. with the same dimensions. Then click C (This selects constraint coincident), click on any point of the rectangle, then the center of the xy axis:
+
+
+
+Double click escape, and click pad again. Enter 13mm:
+
+
+
+Now click the top side of the case, and click on Create Sketch again. This time create a rectangle with the rectangle tool at the middle:
+
+
+
+After that, use the external geometry tool and click on all 4 sides of our extruded case. Then use the dimension tool to set a distance between the edge of our rectangle and the edges of our extruded case of 9.5 mm.
+
+
+
+Double click escape, click the pocket tool and enter 10mm. You should have something like this:
+
+
+
+Click on one of the smaller sides of the case, and create a new sketch. Now go to kicad and measure the distance from the left edge of the PCB to the USB port.
+
+
+
+Now draw a rectangle (non-rounded) in freecad. Use the external geometry tool to click on the right and top edges of the case. Set the width of the rectangle to 18.5mm and the height to 7.5mm. Click T, then click the top of the rectangle and the top edge of the case. After that use the distance tool to set the distance from the right of the rectangle to the right edge of the case to x_distance_in_kicad+5.75mm
+
+
+
+Double click escape, and click the pocket tool, then enter 11mm.
+
+
+
+Turn to the back case of your case, click on the back surface, then create a new sketch. Draw 4 circles, define their diameter of 6mm. Use the external geometry tool to import the 4 small circles of our case. Then use the coincident tool (click C to activate) to make the circles coincident (click on the center of one circle, then the other one).
+
+
+
+Double click escape, and make a pocket of 3.1mm.
+
+And you finished your case!!! 🎊🎊 (I'm going to die writing all this) The steps to save it are the same.
+
+And finally to test fit the case! Export the 3d model of your PCB. Open a new FreeCAD file, click File > Import, and select all your components (case, plate and 3d PCB).
+
+Use the property editor to modify the position of the objects, so that they align: (The x, y, z fields, and rotate using the angle field)
+
+
+
+After all this, you can assemble a 3d model like this and verify that everything fits:
+
+
+
+PS. Yours should fit better, I make a tiny error to the measurements while creating the models :P. But I've corrected the sizes in the guide UwU
diff --git a/website/src/pages/hackpad/DesignTips.mdx b/website/src/pages/hackpad/DesignTips.mdx
deleted file mode 100644
index 3d17410848..0000000000
--- a/website/src/pages/hackpad/DesignTips.mdx
+++ /dev/null
@@ -1,4 +0,0 @@
-# Design tips
-
-
-## Working away at your hackpad?? awesomejob
\ No newline at end of file
diff --git a/website/src/pages/hackpad/Errors.mdx b/website/src/pages/hackpad/Errors.mdx
new file mode 100644
index 0000000000..2951a57a39
--- /dev/null
+++ b/website/src/pages/hackpad/Errors.mdx
@@ -0,0 +1,60 @@
+# DRC error code compliation
+
+Oh no! You have DRC errors? Don't worry, we got you covered. Here is a compliation of most error codes: (Press Control+F to search)
+
+Try looking into the unconnected items tab too!
+
+- Warning: Silkscreen clipped by solder mask:
+- Warning: Silkscreen clipped by board edge:
+- Warning: Footprint component type doesn't match footprint pads:
+- Warning: Footprint has no courtyard defined:
+
+Ignore, this has no importance
+
+- Warning: Text height out of range:
+
+Ignore, this has no importance (Your text might not get printed properly tho)
+
+- Warning: Trace has unconnected end:
+
+Click on the text and you should see a trace with a yellow arrow on it. Delete that trace since it has no use. (Or maybe did you forget to connect it?)
+
+- Warning: PTH inside courtyard:
+
+It might be a false-alarm, but double check if you accidently put some component on top of another one.
+
+- Warning: Footprint 'xxxxxxxx' does not match copy in library 'xxx'
+
+Open Tools > Update Footprints from Library. Select everything inside "Update Options" and click Update.
+
+- Warning: Footprint 'xxxxxxxx' not found in library 'xxx'
+
+You are probably missing a library! Or try re-assigning the footprints.
+
+- Warning: Board edge clearance violation:
+
+Your traces/pads are too close to the edge of the board. (If you are using my neopixel footprint, ignore it. I might have put the pads a little tooo close to the borders, but it won't break anything. Sowwy~~ UwU)
+
+- Error: Board has malformed outline:
+
+Important! You forgot to add Edge.Cuts outline/ The Edge.Cuts outline isn't closed properly
+
+- Error: Track has unconnected end:
+
+Important! You forgot to join two components! Check if there are thin blue lines present.
+
+- Error: Courtyards overlap:
+
+Important! Some of the components are overlapping (physically), click on the text to check which one.
+
+- Error: Hole clearance violation:
+
+Important! Something is too close to the holes, it will get drilled out
+
+- Error: Items shorting two nets:
+
+Important! You got two wires connected that shouldn't be connected! Click on the text to check out which ones.
+
+- Error: Missing connection between items
+
+Important! You two pads aren't connected together! Click on the error message to find out which ones
diff --git a/website/src/pages/hackpad/Faq.mdx b/website/src/pages/hackpad/Faq.mdx
index 8f917d5d4c..731afa9c4f 100644
--- a/website/src/pages/hackpad/Faq.mdx
+++ b/website/src/pages/hackpad/Faq.mdx
@@ -47,5 +47,8 @@ You can! We'll have V2's at HQ. note: please use 19.05x19.05mm spacing, or else
**I have more questions!!!** \
Join the #hackpad channel in the Hack Club slack!
+**What are the footprint name for diodes/resistors?**
+Diodes are D_DO-35_SOD27_P7.62mm_Horizontal.
+Resistors are R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal
diff --git a/website/src/pages/hackpad/Resources.mdx b/website/src/pages/hackpad/Resources.mdx
index 8eb8f877bb..aef560efb1 100644
--- a/website/src/pages/hackpad/Resources.mdx
+++ b/website/src/pages/hackpad/Resources.mdx
@@ -5,6 +5,8 @@ With that in mind, there are *thousands* of other resources on the internet that
If a guide doesn't seem to work, try it again. If it *really* doesn't work, try another guide! The magic of it is to keep at it, because if so many other teens can do it, you absolutely can too.
+There is also a list of [common DRC errors here](/errors)
+
## KiCad Libraries
- [Keyswitch footprints](https://github.com/ai03-2725/MX_V2)
- [XIAO Footprints](https://github.com/Seeed-Studio/OPL_Kicad_Library)
@@ -29,6 +31,7 @@ It has an OLED, a rotary encoder, 4 switches in a matrix, 2 addressable LEDs, an
- [XIAO RP2040 Docs](https://wiki.seeedstudio.com/XIAO-RP2040/)
- [Anatomy of a keyboard](https://matt3o.com/anatomy-of-a-keyboard/)
- [Keyboard Mounting Styles](https://www.keyboard.university/200-courses/keyboard-mounting-styles-4lpp7)
+- [Holo's PCB Routing Commandments](https://libsharedobject.so/howsmypcb.html)
## Useful measurements
- Making holes for your PCB:
@@ -53,6 +56,16 @@ It has an OLED, a rotary encoder, 4 switches in a matrix, 2 addressable LEDs, an
- Most DIY keyboards are at least partially open source.
You can go to their git repositories and copy their tolerances/footprints/schematics/whatever
- You can export your KiCad PCB to a PDF and print them to check measurements
-- Most Keyboards are wired in a matrix to save pins, but if you have 5 or less switches just avoid the matrix altogether
+- Most Keyboards are wired in a matrix to save pins, but if you have 6 or less switches just avoid the matrix altogether
- For screens, just use a 4-pin header for footprints
- Adding graphics in KiCad is really annoying. Instead, you can design your entire thing in Figma and import it as an overlay instead
+- Google is your best friend, search up anything u don't know.
+- Spam vias everywhere! They are free.
+- Try routing everything on one layers first, if you can't without making a big loop, move to the second layer. This keeps your board clean.
+- Make multiple revisions! I rerouted my first macropad like 10 times while adding stuff.
+- After routing everything, run Tools > Cleanup Tracks & Vias. You gotta press the Build changes button twice for the optimizations to apply.
+- Use a ground fill, they are good!
+- Try adding capacitors, they will increase your board's stability.
+- With kmk, you can control your mouse with buttons! See [Mouse Keys](https://github.com/KMKfw/kmk_firmware/blob/main/docs/en/mouse_keys.md) in the docs.
+- Maybe use some thicker traces! Edit the trace width a at the top left "Track: use netclass width", click edit predefined and add yours. Then select it in the same menu.
+- Use tunnels to keep your schematic organised.
diff --git a/website/src/pages/hackpad/Tutorial.mdx b/website/src/pages/hackpad/Tutorial.mdx
index af6b8bbfbe..3739bf7629 100644
--- a/website/src/pages/hackpad/Tutorial.mdx
+++ b/website/src/pages/hackpad/Tutorial.mdx
@@ -5,31 +5,39 @@ Hey! Want to make your own macropad but have absolutely no clue where to start?
**Read over the [FAQ](/faq) first so that you have an idea of what you're working with!**
This process is going to be broken into 3 parts, each with its own sub-parts:
-- PCB Design
- - Drawing the schematic
- - Routing the PCB
- - Defining the edges
-- Case Design
- - Creating the bottom
- - Creating the top
- - Finishing touches
-- Firmware
- - Code!
+- [PCB Design](#pcb_design)
+ - [Drawing the schematic](#schematic)
+ - [Routing the PCB](#routing)
+ - [Adding 3D models](#3d_models)
+- [Case Design](#case)
+ - [Creating the bottom](#bottom)
+ - [Creating the top](#top)
+ - [Finishing touches](#finishing)
+- [Firmware](#firmware)
+ - [kmk!](#kmk)
-If you're unsure about anything, send a message in #hackpad! We have so many eager people to help.
+If you're unsure about anything, send a message in #hackpad! We have so many eager people to help. (Please try searching your question in the search bar first.)
There's also [this](/resources) giant wall of resources to reference!
+Here is also a guide on [advanced PCB components](/advancedPCB).
+
+Don't forget to find out some [Tips'n Tricks here!](/tipsntricks)
+
+[Look up DRC errors here :D](/tipsntricks)
+
Lets start with:
+
## Designing your PCB
For this guide we're going to be using [KiCad](https://www.kicad.org/), which is an open source PCB designer tool.
-To start, we're going to have to import the necessary footprints. For this guide, download this footprint:
-- [XIAO RP2040 footprint](https://wiki.seeedstudio.com/XIAO-RP2040/)
-There are many tutorials on how to install footprints! Google is your best friend here :)
+To start, we're going to have to install the kicad library! We are going to use the following respository
+- [OPL Kicad Library](https://github.com/Seeed-Studio/OPL_Kicad_Library/)
+
+There are many tutorials on how to install libraries! Google is your best friend here :)
@Cyao in the slack did make an awesome tutorial though! Here it is:
-
-
+
### Drawing the Schematic
Start by opening up KiCad, a window will pop up, create a new project then click on the "Schematic Editor" button:
@@ -52,6 +59,8 @@ This should open up a new window with your schematic editor! Once you're in, pre
Start by placing these symbols down. They don't have to be in any particular order, but place them somewhat close together
+To rotate the symbols, click R. And to mirror them, click X.
+
Afterwards, it should look something like this ^^
@@ -60,7 +69,7 @@ Now it's time to start wiring. Hit the W key on your keyboard to start wiring! T
-(to get the GND symbol, press P and search for it!)
+Don't forget to add the GND and +5V symbols! Press P and search for it.
Once all the components are connected, we can start assigning **footprints** to the symbols we have here. Footprints are what gets physically drawn on the PCB. To do this, click the "run footprint assignment tool" in the top right.
@@ -72,6 +81,7 @@ This should open up a window where you can assign different footprints to your c
Once you're done, you can hit apply & save schematic. We're now officially done with the schematic! Onto making the pcb itself:
+
### Routing the PCB
Great job on finishing the schematic! Hit this button to open the PCB editor:
@@ -86,71 +96,320 @@ Click anywhere on your screen to place your components down, it should look some
-Lay out the components as you wish, and go over the the edge.cuts layer and create a rectangle. This will be your board size!
+First, to be able to better place the components, we would need to change the grid.
+
+Grids are used to allow efficient placement, movement and connection between symbols and wires. It defines what is the spacing of the grid, which components will snap to.
+
+Select the button at the top that says "1.2700 mm (50 mils)" (Replace xx by a arbitrary number). You can use this menu to change what grid you are on. hen click on Edit Grids...
+
+
+
+You should have the following menu open:
+
+
+
+Now click on the + button at the bottom left, and enter "2.38125" in the field named "X". Press Ok then Ok again. Now you have defined a cutom grid!
+
+We now need to place the components!
+
+Select a footprint, drag it around to move it (Or if you prefer, click a component to select it, press M to move it and click again to put it down). To rotate the footprint, press R when selecting it.
+
+When placing the switches, I recommend you to use the newly defined grid of 2.38125 mm (Select it in the menu). **Important**: While moving the switches, select the blue circle at the center. This will make sure all the switches are alighed properly. You should align the outer while lines of the switches as so:
+
+
+
+There is a front side and back side of the board. You can tell them apart by color
+
-Now it's time to route the PCB! Hit X on your keyboard and hit any golden pad with a blue line. It should dim the entire screen and show you where to go. Route the PCB like so:
+If you want to put the footprint on the back side, press F. Here is what the footprints look like on different sides:
-
+
+
+Move, rotate and flip your footprints into a design that you like! It should looks like this:
+
+
+
+You need to define the outline of the board. Select the Edge.Cuts layer on the right toolbar.
+
+
+
+Now, you can use the "Draw Rectangle" button to draw the boarders of the board:
+
+
+
+This shall be the size of your physical board.
+
+**IMPORTANT**! Remember to have the head of the XIAO poking out of the Edge.Cuts rectangle. This is mandatory to be able to plug your USB cable in.
+
+
+
+Now it's time to route the PCB! Hit X on your keyboard and hit any golden pad with a thin blue line poking out. It should dim the entire screen and show you where to go:
+
+
+
+Join the highlighted pads together. If there isn't enough space on the front side, or there is a trace already present that is blocking you, you can route on the back side by clicking B.Cu on the right toolbar. At the same time, if you want to change sides during routing, you can press V, and a via shall be added, and you will be on the other side of the board:
+
+
+
+**Attention**! Wires and pads of different colors (except golden) can't be connected together directly! You must via to the other side.
+
+Continue until there are no thin blue lines on the screen! Your final product should look something like this:
+
+
Also, it is **VERY IMPORTANT** that you brand your hackpad! Put the name of your hackpad on any silkscreen of your PCB. Do this by using the text tool. Also, write "XIAO HERE" on the side you would like your XIAO to be placed on.
-Good stuff! You're almost done the PCB. Let's run the DRC to make sure the PCB works. The silkscreen warnings you see are okay, make sure there are no more errors!
+To do this select F.Silkscreen (If your xiao is on the back side, use B.Silkscreen when placing the "XIAO HERE" text), and click on the add text button:
+
+
+
+Enter your text and place it down!
+
+
+
+Good stuff! You're almost done the PCB. Let's run the DRC to make sure the PCB works. The silkscreen warnings you see are okay, make sure there are no more errors! Here is a [list of all DRC errors you might encounter](/errors)
+PS. You might need to cheange tabs to see all errors. (Click on "Unconnected Items")
+
Thats all for your PCB! Great job.
+If you aren't satisfied and wan't something more advanced, [check out the advanced PCB guide!](/advancedPCB)
+
+
+### Bonus: 3D models!
+
+You currently can view the 3D version of your PCB by pressing Alt+3 (Option+3 on some platforms). It should look something like this:
+
+
+
+Oh no! We are missing some 3D Models. Here we will learn how you add them.
+
+First, you must find 3D Models for your components on the internet, but here if @Cyao's trusty list of common models. (If this opens a new tab and doesn't automatically download, press Control+S)
+
+- [Seeed-Studio Xiao](https://rawcdn.githack.com/cheyao/macropad/642f4e5dbdabb88147ccd878850d199042967667/PCB/third_party/xiao.step)
+- [Cherry MX v2 (Models for the switches)](https://rawcdn.githack.com/cheyao/macropad/3adb7e07d888458e6d1985f4e6be17601a1c2350/PCB/third_party/SW_Cherry_MX_PCB.stp)
+- [Neopixel SK6812_Mini](https://rawcdn.githack.com/StefanHamminga/kicad-packages3D/395108dcab363619c3c82ad00e060acd423aeeb7/LED_SMD.3dshapes/SK6812_Mini.step)
+- [Reverse Mount Neopixel](https://rawcdn.githack.com/cheyao/macropad/642f4e5dbdabb88147ccd878850d199042967667/PCB/third_party/neopixel.petty/SK6812MINI-E.step)
+- [128x64 0.96" SSD1306 OLED Display](https://rawcdn.githack.com/cheyao/macropad/642f4e5dbdabb88147ccd878850d199042967667/PCB/third_party/KiCad-SSD1306-128x64-master/SSD1306_OLED_Display(128x64).step)
+- [128x64 0.91" SSD1306 OLED Display](https://rawcdn.githack.com/cheyao/macropad/3adb7e07d888458e6d1985f4e6be17601a1c2350/PCB/third_party/oled_0.91_128x32.step)
+- [Rotatory encoder Alps EC11E](https://rawcdn.githack.com/horfee/kicad-packages3D/7a1d016fbda6eb6f7ae842b31ead5cd162b98a05/Rotary_Encoder.3dshapes/RotaryEncoder_Alps_EC11E-Switch_Vertical_H20mm.step)
+- [Kailh Choc v2 switched (You probably don't need this one)](https://rawcdn.githack.com/cheyao/macropad/642f4e5dbdabb88147ccd878850d199042967667/PCB/third_party/Kailh-Choc-V2.step)
+
+Note: On some Linux distributions, you need to download the built-in kicad 3d models seperatly, most likely called "kicad-library-3d"
+
+Now open the footprint editor:
+
+
+
+In the editor, search for the component you want to add the model to, and double click it, you should have something like this: (I'm taking SK6812MINI as an example)
+
+
+
+If you don't have your own library yet, click File > New Library... and select Project. Name the library anything you like.
+
+
+
+If you want to add a 3d model to a footprint that was supplied by kicad, you need to create a copy of it.
+
+Right click the footprint in the left menu bar and click Copy Footprint.
+
+
+
+Search for your library, right click on it and click Paste Footprint.
+
+
+
+Now click File > Footprint Proprerities... And you should have a new window, select "3D Models" at the top:
+
+
+
+If you don't have anything in the "3D Model(s)" frame, click on the + icon. After that, click on the file icon on the right and choose the coresponding 3D model that you downloaded. Now you have something like this:
+
+
+
+After all the work, you will have something like this when you press Alt+3 (Or Option+3):
+
+
+
+Now to export the PCB as a 3D Model, select File > Export > STEP...
+
+
+
+And select the directory you want the output to be in, then click Export. You don't need to change any settings. In the end you will get a .STEP file, that is the 3D model of your PCB.
+
+
## Creating your case
This guide uses [Fusion360](https://www.autodesk.com/products/fusion-360/personal) for designing the case. You can use other software, but it may be harder to follow along!
+If you are interested for guides on how to use different software, look into the [advanced DIY guide!](/advancedguide)
+
+First thing first, go to [ai03's plate generator](https://kbplate.ai03.com/).
+
+In the KLE Data fiels, you need to enter some custom json data. For example
+
+["", "", ""],
+["", "", ""],
+
+Is for a macropad that has 3 keys in each column and 2 rows
+
+If your keyboard is more complex, you can use [keyboard-layout-editor.com](https://www.keyboard-layout-editor.com/) to generate the json data. (Modify the layout, open the "Raw data" tab at the middle of the page, then copy & paste)
+
+After that, scroll down, look at the preview to verify if it conforms to your macropad, and then press download DXF.
+
+
+## Creating your case in Fusion360
+
+Fusion360 has a free plan for students, you can create a education account. After you have your account, either download the native Fusion360 application, or [use this magic link](https://fusion.online.autodesk.com/webapp?submit_button=Launch+Autodesk+Fusion) to launch it directly in your browser :D
+
+If you are using the browser version, don't forget to save regularly, since your session will close if you leave it alone for too long.
+
+I **strongly** recommend you use the desktop application if you are on a supported platform, since the web one is buggy and super slow.
+
+
### Creating the bottom
-Start by creating a new project, and a new component, this is better for organization.
+Start by creating a new project, and a new component, this is better for organization.
+
-Next, create a sketch by by pressing the green + button. Create a rectangle that is 0.5mm bigger than your hackpad's PCB. For example, my PCB is 42mm x 61.5mm, I added 0.5mm to each on the sketch.
+Now go back to KiCAD PCB editor and measure the dimensions of your board with the ruler tool. Click on one end of your Edge.Cuts and click again on the other end.
+
+
+
+
+We now know that the width of the board is the absolute value of x (41mm in my case), and the height is the absolute value of y (62.702mm) in my case.
+
+Next, create a sketch by by pressing the green + button on the top left, then clicking the bottom orange retangle at the center of the screen.
+
+Create a rectangle that is 1mm bigger than your hackpad's PCB. For example, my PCB is 41mm x 62.7mm, I added 1mm to each size on the sketch. To set the size of a rectangle, click on the Sketch dimension button (You might need to expand the "Create" menu to see it, or press the D key), then click on the edge you wan't to define the length.
+
+
+
-Create another rectangle with 10mm extra on each dimension! (5mm bigger on each side) Center this rectangle by pressing the dimension button and setting the values to 5mm.
+Create another rectangle with 20mm extra on each dimension! (I will have 61mm x 82.7mm):
-
-
+
-It should look something like this when you're completed!
+Center this rectangle by pressing the dimension button, press one edge of the small rectangle then the corresponding edge of the big rectangle and setting the values to 9.5mm. (You only need to constrain one of the horizontal edges, and one of the vertical edges)
-
+
-Select the outer rectangle and press extrude, extrude the outer by 13mm, and then do the same with the inner rectangle by 3mm.
+Now use the circle tool to draw 4 circles, one on each edge. Use the sketch dimension tool to set their size to 3.4mm. Then, use the dimension tool to set their distance to their corresponding edges to 5mm (by clicking on their centers, then the corresponding edge):
-
+
+
+
-Thats the base of your case done! Next, lets create another sketch, this time creating circles with a diameter of 3.2mm, and 2.75mm from each edge. Extrude it to make it a hole!
+Now add 4 more circles, this time with a diameter of 6mm. Select the coincident tool, and click on the centers of corresponding circles.
-
+
+
-### Creating the top
+Press "Finish sketch" (green checkmark at top right of screen), then select all the middle circles (shift click) and press extrude. In the extrude menu, select Offset in Start, and enter 3.1mm as the Offset, then enter 9.9 mm in the Distance field and click ok:
+
+
+
+
+
+Now, you must re-show the object be opening the Sketches folder on the left, and cliking the eye icon on Sketch1. Then select the outer rectangle and press extrude. This time the Start shall be "Profile Plane" (and will be for all future extrudes), and set the distance to 13mm:
+
+
+
+
+Now, click the center square, and extrude it by 3mm. Now you can move arround and your will see something like this:
+
+
+
+Thats the base of your case done!
+
+Now go to kicad and measure the distance from the edge of the PCB to the USB port.
-Next, we will make the other half to our case. Start by creating yet another sketch, making it the same size as the bottom half of the case. Create the holes like before, and then create 4 14mm x 14mm squares. Follow these dimensions:
+
-
+Now select the top of the case:
-Almost done, create another rectangle 18mm x 21mm, 17mm away from both edges and 5mm from the top, and extrude that plate by 3mm.
+
-
+And create a new sketch (Create Sketch button). Draw a rectangle at the top, and place your starting point on the top edge, and ending point on the inner top edge. Now define it's width to 18.5mm (You can define it by clicking on the left edge, then the right edge with the distance tool). After that, set the distance from the left of the rectangle to the left edge of the case to x_distance_in_kicad+5.75mm:
-Right now our case looks a little ugly, its so blocky! Lets round the corners, press the Fillet button found in the top, and click on each edge and make it 2mm. Select the top edge of the case and make that 1mm. Should look as such:
+
+
+Click finish sketch, select the rectangle we just draw and press extrude. This time set the distance to -7.5mm
+
+
+
+Now we finished the bottom case! Congratulations!
+
+You can now export the model by clicking File > Export... at the top left, and selecting STEP Files as the Type.
+
+To download the resulting STEP file on the web, go to [https://myhub.autodesk360.com/](https://myhub.autodesk360.com/), go to your project and click the download icon.
+
+Right now our case looks a little ugly, its so blocky! Lets round the corners, press the Fillet button found in the top, and click on each edge and make it 5mm. Should look as such:
+
+
+
+### Creating the top
-Make sure to cut out a port hole for your xiao, the best method is to look for a 3d model online, and test fit everything. You can export your PCB as a .STEP file, and test fit everything. After I test fitted everything, I made a few modifications.
+Next, we will make the other half to our case. Start by clicking new design.
-
+
+Now go to the INSERT menu, expand it and click "Insert DXF". Select a dxf file (in the web you need to first click Upload from Fusion Team..., upload it from there, click refresh then select the file), and click ok. Now delete the outer lines surrounding the keyholes. You should have something like this:
+
+
+
+Now select everything and click on the Lock button
+
+
+
+Go back to KiCAD PCB editor and measure the dimensions of your board with the ruler tool. Click on one end of your Edge.Cuts and click again on the other end.
+
+
+
+
+Now lets create a new rectangle, define it's width and height the same as the size of the top plate. Set the distance between the left end of your keyholes and the left edge of the rectangle the x distance you just measured + 10.5 (for me it's 3.99+10.5). Same for the bottom edge of the keyhole and bottom edge of the rectangle, y distance + 10.5.
+
+
+
+Add another rectangle, this time with it's start starting on the top line of our rectangle. Set it's width to 18.5mm and height to 31mm. After that use the distance tool to set the distance from the left of the rectangle to the left edge of the rounded rectangle to x_distance_in_kicad+5.75mm
+
+Add 4 more circles of 3.4mm and 5mm from the edges:
+
+
+
+Click finish sketch, and pad the main part 3mm.
+
+
+
+But currently the plate is kinda ugly. Do the same things with the fillet as the case:
+
+
+
+You finished your plate!! Congrats
+
+
### Finishing Touches
Next, we will brand our case! This part will not be seen and is for us to be able to keep track of who's submission is whos. Go to the bottom of the case, or somewhere that won't be seen, and create a new sketch. Make a text box, and enter the name of your hackpad on it.
@@ -163,20 +422,67 @@ Extrude this sketch 0.2mm INTO the case, don't worry about the overhang! If you
Thats it! Your case is now done.
-
-
I would also recommend importing 3d models of all your components to test fit everything:
-
+
## Firmware
-This tutorial uses the [QMK firmware](https://qmk.fm/) project as firmware! You can find out how to port your keyboard here: \
+You can use the [QMK firmware](https://qmk.fm/) project as firmware! You can find out how to port your keyboard here: \
[QMK Porting Guide](https://docs.qmk.fm/porting_your_keyboard_to_qmk)
-# Next steps
-We just made a pretty cool macropad, but obviously there's a lot of cooler stuff out there - that's up to you to figure out! Again, don't copy this guide 1:1, add your own design into it.
+
+Or if you wish, you can use kmk. It's made in python and can be hot reloaded.
+
+Here is the starter code, with explenations in the comments:
+
+```python
+# You import all the IOs of your board
+import board
+
+# These are imports from the kmk library
+from kmk.kmk_keyboard import KMKKeyboard
+from kmk.scanners.keypad import KeysScanner
+from kmk.keys import KC
+from kmk.modules.macros import Press, Release, Tap, Macros
+
+# This is the main instance of your keyboard
+keyboard = KMKKeyboard()
+
+# Add the macro extension
+macros = Macros()
+keyboard.modules.append(macros)
+
+# Define your pins here!
+PINS = [board.D3, board.D4, board.D2, board.D1]
+# Tell kmk we are not using a key matrix
+keyboard.matrix = KeysScanner(
+ pins=PINS,
+ value_when_pressed=False,
+)
+# Here you define the buttons corresponding to the pins
+# Look here for keycodes: https://github.com/KMKfw/kmk_firmware/blob/main/docs/en/keycodes.md
+# And here for macros: https://github.com/KMKfw/kmk_firmware/blob/main/docs/en/macros.md
+keyboard.keymap = [
+ [KC.A, KC.DELETE, KC.MACRO("Hello world!"), KC.Macro(Press(KC.LCMD), Tap(KC.S), Release(KC.LCMD)),]
+]
+
+# Start kmk!
+if __name__ == '__main__':
+ keyboard.go()
+```
+
+If you have something more advanced on your PCB, [look inside the kmk docs for how to add it!](https://github.com/KMKfw/kmk_firmware/blob/main/docs/en/Getting_Started.md)
+
+Save it in a main.py file in the firmware folder of your repo
+
+Now after you received you macropad, plug it in and hold the bootloader button and press reset. You should see a external drive on your PC, [download circuitpython](https://downloads.circuitpython.org/bin/seeeduino_xiao_rp2040/en_US/adafruit-circuitpython-seeeduino_xiao_rp2040-en_US-9.2.4.uf2) and drag the file onto the drive.
+
+The board should automatically restart and be recognised as a new external drive. Now [download kmk](https://github.com/KMKfw/kmk_firmware/archive/refs/heads/main.zip), unzip it and copy the KMK folder and the boot.py file to the root of the external drive. Then create copy your main.py file over. And voila you got your macropad!
+
+# Next steps
+We just made a pretty cool macropad, but obviously there's a lot of cooler stuff out there - that's up to you to figure out! Again, don't copy this guide 1:1, add your own design into it.