throw early if no app directory