follow gen-idea for project structure