add backend framework, refactor building system