totally refactor and create composer.json