better modularization, gitignore