initial project structure & abstractions