project setup and interfaces