First commit: add initial software architecture