I have a collection of mechanical keyboards.1 Since I’m only using one keyboard at a time, I wanted a way to store and display the rest.
I was inspired by some laser-cut holders which we’ve had for many years.2 After wrapping up my clock project, I got trained up on the library’s laser cutter and some CAD software, and made these:
The Cuttle Generation
I started designing in Cuttle, under the influence of Hannah. Cuttle proved to be a great tool for prototyping and iterating: the JavaScript-based syntax was easy to pick up, and t…
I have a collection of mechanical keyboards.1 Since I’m only using one keyboard at a time, I wanted a way to store and display the rest.
I was inspired by some laser-cut holders which we’ve had for many years.2 After wrapping up my clock project, I got trained up on the library’s laser cutter and some CAD software, and made these:
The Cuttle Generation
I started designing in Cuttle, under the influence of Hannah. Cuttle proved to be a great tool for prototyping and iterating: the JavaScript-based syntax was easy to pick up, and the visual editor for the node tree, transformations, etc. made it easy to understand the composition.
Design parameters
To fit the variety of keyboards I have, I created a parameterized design with 4 or 6 parts:
- A back plate, which mounts to the wall
- A bottom plate, which provides horizontal stability for the fins
- Two outer fins, which hold the keyboard
- Optionally, two inner fins, which hold the inner edges of a split keyboard
The back and bottom plates (center) have two columns of rectangular cutouts to accept the tabs on the inner fins (left). The outer fins (right) have cutouts to accept the tabs from the back and bottom plates. The upper three shapes are the “back”, and lower three are “bottom”. The fins on the lower row are rotated to show how the tabs match.
The hook shape of the inner and outer fins hold the bottom edge of the keyboard.
I opted for “slots”, spaced in from the edge of the edge, rather than finger joints. The weight of the keyboard transfers from the fins to the back plate, and I was worried that this could pull apart finger joinst.
Width, height, and depth are the main parameters for the design. Taller keyboards also require deeper shelves, so the keyboard rests at an appropriate angle.
The fins have another set of parameters:
- fin depth, how far the fin’s top extends from the back plate
- fin height, how high the lowest point of the fin rises above the bottom plate
- trough, how far forward to place the lowest point of the hook
- bump, how high the front edge of the hook rises above the bottom plate
The parameter values are distinct for outer and inner fins, to support e.g. the Voyager:
The thumb cluster of each half of the Voyager extends downwards from the main body. I made the outer fins very high, and the inner fins pretty low, so that the Voyager would sit close-to-level. Since the keyboard is slightly tilted backwards, the trough position of the inner fins is further forward.
The back plate has four holes for screws or nails. These are parameterized by diameter of the hole, offset from the center, and clearance from the inner fins.
Just for fun, I added a name parameter to etch into the bottom plate, in case I forget which keyboard belongs where.
Prototyping
Once I was a little ways into the design,3 I picked up some plywood and headed to my local library’s makerspace. Cuttle will happily export SVGs that the cutter software can use.
My process was something like this:
Come up with a design I’m ready to cut. 1.
In my lab notebook (a Markdown file), give that design a name and date: “P7, 2025-06-23”.
Most of the revisions are explicitly prototypes, “Pn;”. A revision for a specific keyboard is “keyboard Rn”, e.g. “Atreus R2”. 1.
Save a version in Cuttle. Mark it with the design name. This keeps the history in Cuttle, where I can restore / edit further. 1.
Download the SVG, save the file with the design name. 1.
Load it into the cutter software. Move around components to fit on the remaining material. 1.
Cut! 1.
Test how well the parts fit together. Write the design name on the back plate in permanent marker. 1.
Make notes in the lab notebook. Use checkboxes for things that need to change. 1.
Revise design based on notes. Check boxes off. 1.
Repeat!
A paramterized design allowed me to make scale prototypes. Instead of cutting a 5“x4.5“x2.75“ design for the Atreus, I could cut a 2“x2“x2“ prototype box. The smaller design uses less material and cuts faster!
Having previously tried 3d printing, the speed of the laser cutter was delightful. Even the full-scale models only took about five minutes to cut– I mostly spent my lab time revising designs & moving files around, not waiting for the machine.4
Getting many iterations is good, because I got the kerf (definition 2) wrong repeatedly. A couple times, I had the sign wrong, and the tabs wouldn’t fit in the slots; other times, I had a much-too-large value, leaving gaps between tab and slot.
Note to self: Add kerf to tabs, subtract kerf from holes; that way they overlap.
Finishing
All told, I made 15 designs5 to get the three keyboard holders pictured above. But I’ve learned a lot, and built up a parameterized design; the “final” designs Just Worked.
After cutting, I did a little finishing before hanging the holders. The laser-cut edges are quite sooty; a lot of the soot made its way onto my (white plasic) ZSA Voyager. I took some sandpaper to the keyboard-contacting edges to keep the soot from propagating further. I also glued the tab-and-slot connections for extra support.
I haven’t put any stain / lacquer / varnish / etc on the holders. They’re hung with wire nails, not anything stronger. Both of those improvements are projects-for-later…
…as I’m already working on “generation 2”. Stay tuned!
I don’t think I can say it’s “a small collection” any more. ↩︎ 1.
I’d give a link, but the seller has closed their shop. ↩︎ 1.
“Design” and “prototyping” were concurrent– I didn’t start out with a completed design! ↩︎ 1.
The speed is also good because – unlike a 3d printer – a laser cutter is not “set it forget it”. I spent those five minutes watching the cutter to make sure the fire it is making stays where it is supposed to be. Safety first! ↩︎ 1.
Of which I cut 13-and-a-quarter. I specced the P5 design, then realized I woudn’t learn anything from it, and scrapped it before cutting; and the P9 design was fine except for the bottom plate, so I only cut the new bottom plate for P10. ↩︎