Soap butler

Project stats

  • Difficulty: easy 2/5
  • Cost: ~5€
  • Time: 1h


Lately, I switched from liquid shampoo to a solid soap shampoo when showering. As I didn’t have a place where the soap won’t become wet while showering, some of it just washes away and the soap wouldn’t become dry for days.

I also didn’t want to buy a standard soap holder that would require drilling holes into the tiled walls. So I decided to design a clamp-on soap holder for the shower rail. I would position that thing above the shower head so it won’t be exposed to more water than necessary.

Initial design

So I designed my own one. I wanted a simple, round design with one clamp hole to mount to the shower rail and one lowered area where the soap would reside. Some slots in the bottom would allow water to drop off and allow air to dry the soap when not in use. I wanted a fastener to be mounted within the part and a nut on the inner side so the fastener could reduce diameter of the hole for the rail, clamping the soap butler to the latter.

Image: soapbutler V1's clamping mechanism explained

To enable that, it made sense to fabricate two components - an upper one to keep the soap in place and to provide space for accomodating half the fastener shaft plus nut, and a lower one that features drain slots for the soap and to take the other half of the fastener plus nut.

FreeCad: Scetches

Image: FreeCad Part, Body, Scetch

FreeCad artifacts should be organized in a certain way to simplify handling different views or prepare two-sided machining with the use of clones later on. Thus, I first create a sets of parts using the Parts Design workbench. Scetches can be grouped in body items which themselves are arranged in part items.

So I create a Part (yellow item) containing scetches - all master drawings (red items) of all bodies (blue items) of the part(s) to produce. These drawings should be fully constrained. Thus, they do not need to carry positioning information relative to other components. This means that the scetches live all at the same place, so that all non-active scetches should be hidden to avoid confusion. Image: FreeCad Scetch

Freecad: Parts

Then, I create part(s) that will later contain the components to cut, e.g. clampingHoles, soapButler, wallHolder. They will each contain a subset of the scetches but do not feature final positioning information. Last, I’ll create a part for each job that my production will have to carry out, e.g. job00_clamping, job01_upperMill, job02_3dCut, job03_lowerFinish. These will clone body components but add placement information, contained mirrored parts for 2-sided milling, or feature an outline to help getting the XY-0 right. Image: FreeCad Part

The advantage of a project setup like this is that if you have to modify a master scetch for any reason, any cloned part will also change automatically.


For my first prototype, I selected HPL as material as it is both very tough, can handle becoming wet from time to time, and looks pretty good. I designed the machining part to use shallow but long taps to keep vibrations under control while cutting the tough HPL material. I went for 1-flute coated carbide bits (designed to cut aluminium) I bought a while ago. I used excenter clamps to keep the part in place and just took two down-forcing clamps in addition to make the part stay on the machine bed.

I had one error in the CAM that took me a couple of minutes to fix: I had set the tool paths for the spiral inwards, not outwards. The problem here is that the spiral gets more and more flingy and instable as the endmill progresses. I could only keep vibrations at bay by adding adhesive tape to where the cut was already complete.


Image: Machining V2 of soapbutler

Manufacturing the first prototype actually went pretty well. The machine hummed confidently, and apart from some minor mistakes (fastener holes in lower part too tight, clamp fastener length misinterpreted) I was pretty happy with the result.

It took me some 20minutes to de-tap the part from the original workpiece, so I wanted to improve on that end as well.

A step back - Cheap HPL

Image: Chamfer issue on narrow slots I never used the chamfer function in my CAM and thought this would be a good opportunity for a test as the part corners were pretty sharp on my first prototype. As I am using a 4mm endmill only, the 90° 10mm chamfer bit looked too large, especially as I had to offset to the outside to avoid wearing down the tip of the chamfer tool. That’s why I selected a 30° angle which quickly proved to be a mistake as the corners didn’t really improve much.

I also forgot that only the outside of the parts would benefit from a chamfered edge. I, on the contrary, applied the chamfer to the inside which actually decreased build quality. In addition, I learned that the new HPL board off which I made the prototypes was not perfectly even so that some parts of the outline were not fully cut through. This again resulted in lower quality and considerable manual rework. :/

Improved design 2 - HPL

Image: soapbutler V2's clamping mechanism explained I did not like the free-arm clamp with exposed fastener because it is not symmetrical and might be hard to clean due to its tight gaps. After some thinking, I came up with a “center clamp” solution: The fastener would press against a piece of rubber that would directly touch the shower rail to hold the soapbutler assembly in place.


After updating the drawings accordingly, I created another, mirrored part in FreeCAD using the Draft workbench. This part clones the original part with outline and is designed for two-sided milling, turning the part around its top-left edge (XY-zero). This way, I could apply chamfered edges correctly if I am able to make sure that XY-zero does not move. This worked very well, I was also able to automate application of counter-sunk holes for the lower fasteners which increases build quality. The result is shown on the top banner image.

Image: Use clones in Freecad to mirror parts

Evaluation 2

Unfortunately, after this fourth part was machined I found the melanine coating to be damaged at the cutting edge. Also, during fabrication I noticed a slight smell of burned material. A quick look at the endmill revealed the cause: It was getting dull after only one hour in service. This makes working with HPL quite expensive and frustrating. Plus, the cycle time was on the long side: 15minutes for one part. This would never become economical. I’m discussing the processing of HPL in-depth on this blog post.

That’s why I tried to think of alternative materials for SoapButler. But first, let’s try the prototypes in the shower for a couple of months to get some long-term experience. Is HPL suitable? Does water creep between the two layers? Is it easy to clean?

Changing fabrication material and design again - PMMA (Acrylic)

TODO: report when complete

Updated design (One Block approach) - PMMA

Finally, I wanted to again simplify the design for shorter machining time, less parts to assemble, and better looks. So I modified it to work for 12mm thick acrylic (PMMA). The downside of this one-block-milling approach will be that the fastener to attach to the shower bar cannot be manufactured easily as it is orthogonal to my CNC’s Z-axis.

I moved the fastener to the side of the holder to simplify mounting on the rail. The rest of the design has been left untouched.

Image: Updated CAD for PMMA

I created a tight package of five parts which saves 10% area over the “side by side” layout. Let’s see whether I’ll ever need it.

TODO: report when complete

Customer feedback

TODO: get long-term feedback and publish