add core functionalities and .gitignore