feat(conf): add auto configuration
feat(factories): define factory abstraction