Basic workflow
1) Make a bezier curve

2) Set the handles to vector

3) Model a mesh to extrude along the curve

4) Convert the extrusion to a curve

5) Set the bezier curves' bevel object to the extrusion

6) Check fill caps

7) Set the bezier shape to 2D in the object data tab

8) Extrude corners
