Epsilon
Columnar split keyboard with 5 columns, 4 rows, and thumb clusters.
Created by
wldd2211
Tier 2
2 views
0 followers
wldd2211
submitted Epsilon for ship review ago
wldd2211
added to the journal ago
Completed assembled CAD
There's not much to say here. It took me a while. It was very annoying to do, all because of KiCad's slow and sometimes buggy 3D export system, Fusion's even slower and even buggier import system, and my stupidity.

Anyways, now it's just some finishing touches and I can resubmit the project.
wldd2211
added to the journal ago
Optimised BOM further
I realised a lot of the cost in the BOM was coming from shipping costs, so I changed some of the sources, and overall reduced the total price from ~$187 to ~$141. I'm pretty confident this is the lowest cost I'll get to since I've searched to some extent for better sources for basically all the high costing items, and I haven't found anything.

I also worked on the full CAD model with the PCB and case top and bottom, but I found it very difficult importing the PCB into Fusion. The current working theory is that the footprint (not the 3D model) for the LEDs has some sketchy problem with its Edge.Cuts layer, and causes issues when exporting as a STEP or STL.
wldd2211
added to the journal ago
Updated BOM and created top case
First, I spent about half an hour to an hour searching for other sites to buy each item in my existing BOM (especially the expensive ones) and found replacements for some. Then I went through each website, added all the components from them to my cart and found the cheapest shipping option to add to my BOM. Despite saving about $20 by changing the source of 4 or 5 components, adding the shipping cost increases the total price up to approximately $187 😥 RIP

Then, I worked on the case. I need to make a top case, So I figured I'll use the same SVG I made previously to make a 2mm thick layer that can slot into the case bottom from the top, above the PCB, below the key caps. I also added the same screw hole in it so that the 8mm long screws can hold everything in place. Since it'll be fixed inside the case bottom, the screw isn't really necessary, but It'll add structural support I suppose.
The case does have a lot of thin segments, but, since they're in a grid placement and the case will be 2mm thick, I don't think it will cause much issue. And anyways, there's not much I can do about it, since the keys are very close to each other, and the key switches are low profile, so there's very little space between the key switch shaft and the key cap itself, as far as I can tell.

The last thing I'll do before resubmitting the project is creating a single assembled CAD file including both halves of both sides of the case (four pieces total), and both PCBs. Then I'll export my source CAD files so I can have them in the repo.
Shadow
requested changes for Epsilon ago
Heya! Cool keyboard but you need to design a top case for it, and you are missing the assembled model for the keyboard! You are also missing the source files for the cad. Other than that this is a tier 3 project, and the bom can be cost optimized highly! And you only should ask for the amount you need and not the tier maximum
wldd2211
submitted Epsilon for ship review ago
wldd2211
added to the journal ago
Created BOM
Here's the Bill of Materials I created for the project. I tried to source parts from as few sites as possible and for as cheap as possible so that the overall costs are lower. Overall, the total cost came to around USD$150 (excluding shipping).

The last thing I'm going to do before submitting my project is make a simple test firmware for the board, to test the switches and LEDs, before implementing the ZMK version involving BLE.
wldd2211
added to the journal ago
Added holes to PCB and case
The mounting holes were positioned relative to the XIAO board:

I measured the distances in KiCad and replicated the position of the hole in Fusion. In the process, I discovered that my case model was scaled down?? I presume something happened during the SVG translation and the scale got messed up. So, I spent some time fixing that, by unlocking the sketch elements and scaling them up by a factor of 1.333 (which I calculated from the ratio of lengths across the two designs)

wldd2211
added to the journal ago
Designed case
After a lot of procrastination, some research, and a bit of CAD, I determined the correct height, and modeled the case bottom. After some considering, I've decided not to have a top half since:
- It's a lot of effort to figure out the exact sizing I'll need for the holes in the top case.
- My previous project's top case had a similar problem and the final build ended up being a little tight. Since I'm making this build without exact information about the parts I should probably make it easier for myself.
- I'm running out of time for the project, and I can't afford to lose time working on it.

Later I'll add holes to the PCB and the case piece so they can be screwed together in the final build.
wldd2211
added to the journal ago
Finished designing case sketch
I've been working on designing the base SVG that I will extrude to make the starting point of the 3D model in Fusion. I will design the flat drawing, with outlines in Affinity first, since I'm more comfortable with that than Fusion.
I had two options for the rounded corners of the case. The board already has rounded corners, so my first option is was to make the SVG with rounded corners baked in and extrude them in Fusion to achieve the rounded case. The other option is to design the SVG without any rounded corners and after extruding in Fusion, fillet the edges to have rounded edges on the case. I chose the latter, because then the rounding could be easily changed while making the case in Fusion, instead of having to reexport the SVG and do all the 3D steps again. This was the correct choice, but it ended up causing much more trouble making the SVG.
The first reason for that was that the previous User.1 had just copied the edge cuts and I had to remake it without the mousebites or the rounded corners. Then after exporting, split the SVG in half for one half of the keyboard. It took a while figuring out how to remove the fillets corners in the outline drawing, but eventually I found KiCad's "Extend lines to meet" option, which I assigned to a hotkey so I could do the whole board quickly, after deleting all the arcs at the corners.
Here's what the final User layers looked like before export.

To make the border, I had to make an exactly 1mm gap around the whole board shape (for wiggle room, like in the hackpad), except in front of the micro controller's port, and then make a 5mm thick border which represents the case walls. This took an insane amount of trial and error and restarts because, not only should every single stroke be applied with a miter joint instead of a round joint (to not have rounded corners), but you also need to do the precise sequence of adding strokes, then converting them to shapes, then filling them in, with a final subtraction to remove the excess strokes on the inside of the board. Also, everything I did had to be limited to vector operations, and I had to make sure not to rasterize anything, since that would've likely caused problems later on. That whole process took the most time and annoyances, but eventually I figured it out and made the final case sketch.
Here is the final outcome, with the board outline (without curves) in red.

Now I have to export the SVG and bring it into Fusion to start designing the case. 😓
wldd2211
added to the journal ago
Prepared for designing the case
First, I fixed some problems with the EdgeCuts and the mouse bites (They weren't lined up properly, were causing DRC errors, and some of the things weren't on the correct layers)
Then, I used the User.1, User.2, and User3 layers to place outlines I'll export and import into Fusion. Here's what I used the layers for:
- User.1: Board outline, with only graphics
- User.2: Holes for the key caps
- User.3: Positions of the chips (with ports visible)
I had to line up polygons to match the exact positions of the components I'll need to keep track of, doing the CAD (the board itself, the key cap locations, and the chip position)

The key squares extend out of the board outline because they don't represent the key switches, they represent the key caps on top, which will be larger. I estimated the size of the holes they'll need on the case will be 18mmx18mm, so that's the size of those squares.
wldd2211
added to the journal ago
Added logo to PCB
I found and placed a logo on both sides of the board. The project is called Epsilon, named after the Greek letter, ε. I found a nice looking epsilon glyph and added it to the back silkscreen on both halves of the board, along with a small tag.

wldd2211
added to the journal ago
Finished the PCB
The original entry for this was lost to a bug (rip), so here's a more concise version. This is a list of things I did since the last entry:
- Used the Replicate Layout plugin to duplicate the components with correct reference designators
- Fixed EdgeCuts manually (some lines were missing, so I got rid of them all and manually copied the original)
- Remade and filled zone fills manually (they were broken/missing)
- Used the Transform It plugin to mirror the duplicate board
- Rotated and aligned the thumb cluster keys manually (the plugin didn't flip them properly)
- Attempted to make the LEDs easier to route by geographically reannotating them (in vain)
- Successfully made the LEDs easier to route by selectively rotating them 180 degrees
- Routed the whole half of the board (it was easier than last time because I'd already done it before, and I had figured out the method already)
- Joined the two parts with 3 mouse bites (using the panelization tutorial from the panelization.pretty github repo)
- Made the DRC happy (this was done again and again after nearly every step)
Here's the (hopefully) finished board:

wldd2211
added to the journal ago
Altered EdgeCuts layer at the bottom.
(This entry was posted many hours after I wrote it out, since I was outside my house and the servers were down)
I experimented a bit with how I'll duplicate the layout and routing for the other half of the board, and I settled on using the Replicate Layout plugin. But first, I got sick of looking at the weirdly shaped thumb cluster section of the board and reworked it a bit. I made the angles closer to 45deg so they fit the rest of the board, and moved the zone fills to match the new EdgeCuts.

wldd2211
added to the journal ago
Routed the PCB
THE ROUTING IS DONE!!! This is my favourite step out of the whole designing process. It took ages but I finally got it done. It took a lot of time, effort, and vias, but I've successfully routed all the components to match the schematic and pass the DRC! Here's a brief non-exhaustive list of notable happenings during the process:
- Rearranged the order of LEDs in the schematic. This was so I could route the LEDs in a snake pattern. I discovered its nearly impossible to connect the DINs and DOUTs of the LEDs between the column and row lines if they aren't in a snake pattern.
- Figured out how zone fills work and added them to supply power and ground to the LEDs. After wiring up the key switches and the DINs and DOUTs of the LEDs, I realised it would be insanely difficult to connect VDD (Voltage-Drain-Drain, Power) and VSS (Voltage-Supply-Supply, Ground) to each LED manually. I looked to other split keyboards with LEDs for inspiration, and I found out about zone fills which basically fill all the excess space on a side of the board to connect one net (to as many components as needed) across the board. So, I added a zone fill on the front for ground (GND) and a zone fill on the back for power (VBAT). The zone fills make seeing the regular wiring more difficult so I waited till the end to add it, and I've included an image without them visible, so the routing is actually seen properly.
Front Copper:

Back Copper:

Zone fills hidden:

Now, what do I have left in KiCad before going to Fusion to design the case? The last thing I need to do is duplicate this whole board (I've been designing just the left hand this whole time, and the right side is its mirror), place it correctly on the other side, and connect the two parts with mouse bites! After that, I'll be done with the PCB and I can move on to the case design!
One more thing, I don't really love the weird slopes of EdgeCuts at the bottom of the layout, so I might change that in the near future before moving on.
One more thing again (what is this? an apple event?), I might eventually melt the wires on the PCB using Mitxela's plugin since it looks really nice and matches the style of the board's organic shape and the (currently theoretical) case.
wldd2211
added to the journal ago
Added EdgeCuts
I finally added the EdgeCuts! They're lined up at the top and bottom to the keys and I tried to make it as symmetrical and neat as possible. I had to move some components a bit to make it fit the edges better. Also, I made all the corners fillet corners, just because they look nicer.

I also removed the extra mounting holes I won't need (down from 11 to 3). Now I'm going to route the PCB!
wldd2211
added to the journal ago
Added battery test points and level sensing
Following the tutorial, I had previously added test points and a potential divider to my schematic to connect a battery to the board and to sense the battery level (so it would show on the connected device), respectively.
I did some research about different types of batteries and how they're connected to the board, and finally, I came to the conclusion that the PCB should in fact, just use test points to connect the battery, even though they are usually used for testing (as the name implies).
I added the test points to around the middle of the board and the potential divider circuit next to the XIAO chip.

Also, I've established that the battery I get will have to be a rechargeable single-cell Li-ion/Li-Po battery, since it has the correct voltage and current supply (3.6V, charge to 4.2V, and ~50mA).
Next, I'll just have to route the PCB (and maybe rearrange some components in the process), and then add the EdgeCuts. My plan for that is to make a more organic looking shape (matching my plan for the case). The previous hackpad I built was very rectangular and boxy, and with this split keyboard, since the key layout is already more irregular, I want to lean into it and make the whole PCB and case shaped around it.
wldd2211
added to the journal ago
Placed LEDs
I've placed all the LEDs in their positions relative to the switches. Next, I'll add the test points. I'm not sure whether this is the battery system I'll use for the final board, because it seems suboptimal. I might change it later.

wldd2211
added to the journal ago
Added LED Matrix and started placing components
As hinted before, I've added an LED matrix to the schematic, with one LED for each key. The LEDs will be assigned to the specific footprint compatible with my key switches.

Also, I've made some progress placing components. I've manually arranged the switches in the columnar layout (with a thumb cluster) I planned in Ergogen. Next, I'll have to add the new LEDs, add the test points for the battery connector, route everything, and create the EdgeCuts layer with the mouse bites for both sides of the keyboard.

wldd2211
added to the journal ago
Created schematic
I spent some time to decide exactly what keyboard layout I wanted with some inspiration and some experimenting with Ergogen. I printed out a few options and compared how they felt to type on.
After finalising the layout, I used the split-keyboard tutorial to make the schematic. At first, I couldn't figure out how the battery would work, but I did some research and understood it. Now I need to do the component placing. Also, the switches I'm using have the capability for LEDs inside, so I might add them.

wldd2211
started Epsilon ago
2/9/2026 7 PM - Created schematic
I spent some time to decide exactly what keyboard layout I wanted with some inspiration and some experimenting with Ergogen. I printed out a few options and compared how they felt to type on.
After finalising the layout, I used the split-keyboard tutorial to make the schematic. At first, I couldn't figure out how the battery would work, but I did some research and understood it. Now I need to do the component placing. Also, the switches I'm using have the capability for LEDs inside, so I might add them.
2/9/2026 9 PM - Added LED Matrix and started placing components
As hinted before, I've added an LED matrix to the schematic, with one LED for each key. The LEDs will be assigned to the specific footprint compatible with my key switches.

Also, I've made some progress placing components. I've manually arranged the switches in the columnar layout (with a thumb cluster) I planned in Ergogen. Next, I'll have to add the new LEDs, add the test points for the battery connector, route everything, and create the EdgeCuts layer with the mouse bites for both sides of the keyboard.

2/10/2026 - Placed LEDs
I've placed all the LEDs in their positions relative to the switches. Next, I'll add the test points. I'm not sure whether this is the battery system I'll use for the final board, because it seems suboptimal. I might change it later.

2/12/2026 10 AM - Added battery test points and level sensing
Following the tutorial, I had previously added test points and a potential divider to my schematic to connect a battery to the board and to sense the battery level (so it would show on the connected device), respectively.
I did some research about different types of batteries and how they're connected to the board, and finally, I came to the conclusion that the PCB should in fact, just use test points to connect the battery, even though they are usually used for testing (as the name implies).
I added the test points to around the middle of the board and the potential divider circuit next to the XIAO chip.

Also, I've established that the battery I get will have to be a rechargeable single-cell Li-ion/Li-Po battery, since it has the correct voltage and current supply (3.6V, charge to 4.2V, and ~50mA).
Next, I'll just have to route the PCB (and maybe rearrange some components in the process), and then add the EdgeCuts. My plan for that is to make a more organic looking shape (matching my plan for the case). The previous hackpad I built was very rectangular and boxy, and with this split keyboard, since the key layout is already more irregular, I want to lean into it and make the whole PCB and case shaped around it.
2/12/2026 3 PM - Added EdgeCuts
I finally added the EdgeCuts! They're lined up at the top and bottom to the keys and I tried to make it as symmetrical and neat as possible. I had to move some components a bit to make it fit the edges better. Also, I made all the corners fillet corners, just because they look nicer.

I also removed the extra mounting holes I won't need (down from 11 to 3). Now I'm going to route the PCB!
2/14/2026 12 AM - Routed the PCB
THE ROUTING IS DONE!!! This is my favourite step out of the whole designing process. It took ages but I finally got it done. It took a lot of time, effort, and vias, but I've successfully routed all the components to match the schematic and pass the DRC! Here's a brief non-exhaustive list of notable happenings during the process:
- Rearranged the order of LEDs in the schematic. This was so I could route the LEDs in a snake pattern. I discovered its nearly impossible to connect the DINs and DOUTs of the LEDs between the column and row lines if they aren't in a snake pattern.
- Figured out how zone fills work and added them to supply power and ground to the LEDs. After wiring up the key switches and the DINs and DOUTs of the LEDs, I realised it would be insanely difficult to connect VDD (Voltage-Drain-Drain, Power) and VSS (Voltage-Supply-Supply, Ground) to each LED manually. I looked to other split keyboards with LEDs for inspiration, and I found out about zone fills which basically fill all the excess space on a side of the board to connect one net (to as many components as needed) across the board. So, I added a zone fill on the front for ground (GND) and a zone fill on the back for power (VBAT). The zone fills make seeing the regular wiring more difficult so I waited till the end to add it, and I've included an image without them visible, so the routing is actually seen properly.
Front Copper:

Back Copper:

Zone fills hidden:

Now, what do I have left in KiCad before going to Fusion to design the case? The last thing I need to do is duplicate this whole board (I've been designing just the left hand this whole time, and the right side is its mirror), place it correctly on the other side, and connect the two parts with mouse bites! After that, I'll be done with the PCB and I can move on to the case design!
One more thing, I don't really love the weird slopes of EdgeCuts at the bottom of the layout, so I might change that in the near future before moving on.
One more thing again (what is this? an apple event?), I might eventually melt the wires on the PCB using Mitxela's plugin since it looks really nice and matches the style of the board's organic shape and the (currently theoretical) case.
2/14/2026 6 PM - Altered EdgeCuts layer at the bottom.
(This entry was posted many hours after I wrote it out, since I was outside my house and the servers were down)
I experimented a bit with how I'll duplicate the layout and routing for the other half of the board, and I settled on using the Replicate Layout plugin. But first, I got sick of looking at the weirdly shaped thumb cluster section of the board and reworked it a bit. I made the angles closer to 45deg so they fit the rest of the board, and moved the zone fills to match the new EdgeCuts.

2/15/2026 12 AM - Finished the PCB
The original entry for this was lost to a bug (rip), so here's a more concise version. This is a list of things I did since the last entry:
- Used the Replicate Layout plugin to duplicate the components with correct reference designators
- Fixed EdgeCuts manually (some lines were missing, so I got rid of them all and manually copied the original)
- Remade and filled zone fills manually (they were broken/missing)
- Used the Transform It plugin to mirror the duplicate board
- Rotated and aligned the thumb cluster keys manually (the plugin didn't flip them properly)
- Attempted to make the LEDs easier to route by geographically reannotating them (in vain)
- Successfully made the LEDs easier to route by selectively rotating them 180 degrees
- Routed the whole half of the board (it was easier than last time because I'd already done it before, and I had figured out the method already)
- Joined the two parts with 3 mouse bites (using the panelization tutorial from the panelization.pretty github repo)
- Made the DRC happy (this was done again and again after nearly every step)
Here's the (hopefully) finished board:

2/15/2026 1 AM - Added logo to PCB
I found and placed a logo on both sides of the board. The project is called Epsilon, named after the Greek letter, ε. I found a nice looking epsilon glyph and added it to the back silkscreen on both halves of the board, along with a small tag.

2/15/2026 5 PM - Prepared for designing the case
First, I fixed some problems with the EdgeCuts and the mouse bites (They weren't lined up properly, were causing DRC errors, and some of the things weren't on the correct layers)
Then, I used the User.1, User.2, and User3 layers to place outlines I'll export and import into Fusion. Here's what I used the layers for:
- User.1: Board outline, with only graphics
- User.2: Holes for the key caps
- User.3: Positions of the chips (with ports visible)
I had to line up polygons to match the exact positions of the components I'll need to keep track of, doing the CAD (the board itself, the key cap locations, and the chip position)

The key squares extend out of the board outline because they don't represent the key switches, they represent the key caps on top, which will be larger. I estimated the size of the holes they'll need on the case will be 18mmx18mm, so that's the size of those squares.
2/28/2026 - Finished designing case sketch
I've been working on designing the base SVG that I will extrude to make the starting point of the 3D model in Fusion. I will design the flat drawing, with outlines in Affinity first, since I'm more comfortable with that than Fusion.
I had two options for the rounded corners of the case. The board already has rounded corners, so my first option is was to make the SVG with rounded corners baked in and extrude them in Fusion to achieve the rounded case. The other option is to design the SVG without any rounded corners and after extruding in Fusion, fillet the edges to have rounded edges on the case. I chose the latter, because then the rounding could be easily changed while making the case in Fusion, instead of having to reexport the SVG and do all the 3D steps again. This was the correct choice, but it ended up causing much more trouble making the SVG.
The first reason for that was that the previous User.1 had just copied the edge cuts and I had to remake it without the mousebites or the rounded corners. Then after exporting, split the SVG in half for one half of the keyboard. It took a while figuring out how to remove the fillets corners in the outline drawing, but eventually I found KiCad's "Extend lines to meet" option, which I assigned to a hotkey so I could do the whole board quickly, after deleting all the arcs at the corners.
Here's what the final User layers looked like before export.

To make the border, I had to make an exactly 1mm gap around the whole board shape (for wiggle room, like in the hackpad), except in front of the micro controller's port, and then make a 5mm thick border which represents the case walls. This took an insane amount of trial and error and restarts because, not only should every single stroke be applied with a miter joint instead of a round joint (to not have rounded corners), but you also need to do the precise sequence of adding strokes, then converting them to shapes, then filling them in, with a final subtraction to remove the excess strokes on the inside of the board. Also, everything I did had to be limited to vector operations, and I had to make sure not to rasterize anything, since that would've likely caused problems later on. That whole process took the most time and annoyances, but eventually I figured it out and made the final case sketch.
Here is the final outcome, with the board outline (without curves) in red.

Now I have to export the SVG and bring it into Fusion to start designing the case. 😓
3/22/2026 - Designed case
After a lot of procrastination, some research, and a bit of CAD, I determined the correct height, and modeled the case bottom. After some considering, I've decided not to have a top half since:
- It's a lot of effort to figure out the exact sizing I'll need for the holes in the top case.
- My previous project's top case had a similar problem and the final build ended up being a little tight. Since I'm making this build without exact information about the parts I should probably make it easier for myself.
- I'm running out of time for the project, and I can't afford to lose time working on it.

Later I'll add holes to the PCB and the case piece so they can be screwed together in the final build.
3/29/2026 - Added holes to PCB and case
The mounting holes were positioned relative to the XIAO board:

I measured the distances in KiCad and replicated the position of the hole in Fusion. In the process, I discovered that my case model was scaled down?? I presume something happened during the SVG translation and the scale got messed up. So, I spent some time fixing that, by unlocking the sketch elements and scaling them up by a factor of 1.333 (which I calculated from the ratio of lengths across the two designs)

3/31/2026 - Created BOM
Here's the Bill of Materials I created for the project. I tried to source parts from as few sites as possible and for as cheap as possible so that the overall costs are lower. Overall, the total cost came to around USD$150 (excluding shipping).

The last thing I'm going to do before submitting my project is make a simple test firmware for the board, to test the switches and LEDs, before implementing the ZMK version involving BLE.
4/2/2026 - Updated BOM and created top case
First, I spent about half an hour to an hour searching for other sites to buy each item in my existing BOM (especially the expensive ones) and found replacements for some. Then I went through each website, added all the components from them to my cart and found the cheapest shipping option to add to my BOM. Despite saving about $20 by changing the source of 4 or 5 components, adding the shipping cost increases the total price up to approximately $187 😥 RIP

Then, I worked on the case. I need to make a top case, So I figured I'll use the same SVG I made previously to make a 2mm thick layer that can slot into the case bottom from the top, above the PCB, below the key caps. I also added the same screw hole in it so that the 8mm long screws can hold everything in place. Since it'll be fixed inside the case bottom, the screw isn't really necessary, but It'll add structural support I suppose.
The case does have a lot of thin segments, but, since they're in a grid placement and the case will be 2mm thick, I don't think it will cause much issue. And anyways, there's not much I can do about it, since the keys are very close to each other, and the key switches are low profile, so there's very little space between the key switch shaft and the key cap itself, as far as I can tell.

The last thing I'll do before resubmitting the project is creating a single assembled CAD file including both halves of both sides of the case (four pieces total), and both PCBs. Then I'll export my source CAD files so I can have them in the repo.
4/3/2026 12 AM - Optimised BOM further
I realised a lot of the cost in the BOM was coming from shipping costs, so I changed some of the sources, and overall reduced the total price from ~$187 to ~$141. I'm pretty confident this is the lowest cost I'll get to since I've searched to some extent for better sources for basically all the high costing items, and I haven't found anything.

I also worked on the full CAD model with the PCB and case top and bottom, but I found it very difficult importing the PCB into Fusion. The current working theory is that the footprint (not the 3D model) for the LEDs has some sketchy problem with its Edge.Cuts layer, and causes issues when exporting as a STEP or STL.
4/3/2026 1 AM - Completed assembled CAD
There's not much to say here. It took me a while. It was very annoying to do, all because of KiCad's slow and sometimes buggy 3D export system, Fusion's even slower and even buggier import system, and my stupidity.

Anyways, now it's just some finishing touches and I can resubmit the project.