reorganized the code into a components directory structure, which scales better over large codebases