Project Description
This is a personal project I did for the addition I built on my house in Boise in 2025. The addition has an in-law apartment and I conceived of this shelf as a space divider between living room and bedroom. The shelf attaches to one wall and a central column for stability.
The shelving is made from 3/4" Baltic Birch plywood (see my blog post about feeds and speeds when working with high end veneer plywood). I designed a slot and tab system that was automatically calculated from the parametric model. I cut the shelf parts with my CNC machine and assembled them on-site.
Approach
I designed the project in "flat pack" style with tabs and slots intended to assemble easily on site. The design features a place for a flatscreen TV and console below it. I used a variety of shelf heights to accommodate many sizes of media from large and small books to DVDs and decorative items. Since installation I have gotten some feedback which may cause me to add a curtain or more wood paneling on the back of the shelf for increased privacy between living "room" and bed "room" in the studio apartment.
Parametric Design
I created the design for the shelving system in Grasshopper using several inputs:
- The number and distance of shelves (height from each other)
- The location of vertical components (side to side position)
- The size and offset from the edges for connecting tabs.
Finally, I used 3D curves in the Rhino modeling space to describe the front and back profiles of the shelves. The video below shows how the inputs are used to tweak the design.
The shelf heights are controlled by a list of dimensions (ie: 18" for the bottom shelves). The horizontal shelf spacing is controlled by sliders.
I used control curves to modify the face profiles on the shelves. Three curves formed a loft surface (hidden), which trimmed the shelf faces. When I dragged the points of these curves back and forth to change their shape, the profiles of the shelf fronts would follow along. I set up the definitions of the vertical supports and connection tabs automatically adjusted themselves to fit based on an offset distance from the shelf edge.
I experimented with several iterations of profile design, starting with 3 degree control curves (bezier) and finally settling on 1 degree curves (straight sections).
Construction
Once I was happy with the overall shape and the rhythm of shelves and uprights, I manually modeled a TV enclosure and console shelf in Rhino. The enclosure design was extrapolated from the shelves and uprights that were output from grasshopper. Beforehand, I used the Grasshopper inputs to position the edges of the TV enclosure to fit the flatscreen I had on hand. Then I used Rhino to extend the fins out and describe an enclosed box shape. The new fins used the same tab and slot attachment method as the shelves and uprights.
Fabrication Planning:
I used Grasshopper to generate 2D profile curves from the 3D design, with locations for all the slot and tab cut outs and a numbering system.
The resulting shapes were laid out on 4'x8' sheets of Baltic Birch plywood and cut on my CNC machine. Then I sanded them with increasing grits of sandpaper up to 220. I treated the shelves and upright pieces with polyurethane sealer and they were ready to install.
For installation I slotted them together in-place around the central column of the space. I used a dab of wood glue at each connection to prevent creaking but the design was intended to be attached without mechanical fasteners. The friction fit was good and the geometry of the uprights prevented the shelving from tipping over front-to-back. However, for extra measure, I used a cleat at the very top shelf to secure it to the column. This will prevent overturning in Boise ID, which is in the Western Idaho seismic zone and does in fact get the occasional small earthquake (fun fact!). The slot around the column also prevented the shelving from "racking" or tipping over to the side.