I built a keyboard from a kit at the weekend, and the lesson is the one everyone who has done it already knows: the soldering is the easy part. Sixty-odd switches, two pins each, in through the plate and onto the PCB. An hour and a bit, a bit of flux, and a steady hand. The firmware is where the weekend actually went.
The board takes QMK, which is the open firmware that runs on a huge swathe of custom keyboards now. You describe your layout in C, compile it, and flash it over USB. That sounds tidy. It mostly is. The trouble is that QMK gives you so much rope that you immediately want layers, and then tap-dance, and then a leader key, and suddenly you have spent three hours on a keymap for a keyboard you cannot yet touch-type on.
the keymap is the real build
A 65% board has no function row and no dedicated arrow cluster, so everything you lost has to come back on a layer. The pattern that works is a "lower" layer held with a thumb key, with the numbers and symbols and arrows mapped underneath the home row. Mine puts the arrows on IJKL because I refuse to learn HJKL outside vim.
The bit of QMK that finally made it feel like mine was the tap-hold behaviour. A key can send one keycode when tapped and act as a modifier when held:
#define LOWER LT(1, KC_SPC)
That makes the spacebar a space when you tap it and a layer-shift when you hold it. Get the tapping term right and it is invisible. Get it wrong and you produce spaces every time you reach for a symbol, which is maddening for the first afternoon.
flashing it without bricking it
Compiling and flashing is two commands once the toolchain is in:
qmk compile -kb mykeeb -km johnm
qmk flash -kb mykeeb -km johnm
The board drops into a bootloader when you tap the reset, QMK pushes the new firmware, and it reboots into the layout. There is no way to permanently brick it that I found, because the bootloader is separate from the firmware, so a bad keymap just means flashing a good one. That safety net is the only reason I was brave enough to keep tinkering.
Two days in, I am typing this on it, and I am still fixing the keymap. I suspect I always will be. That is rather the point of building the thing rather than buying one off the shelf: it is never quite finished, and I do not actually want it to be.