design, code, and setup