Modules: Each app route is divided into its own submodule and lazy loaded upon route activation.
Each module have their own routing module which are imported into respective module.
Module is then exported out and imported into main App module to wire up all togather.
Main App module's routing module handles all route paths and lazy load child declaration.
Service: Data-service is imported into submodules that need it.
In order to have singleton shared service, data-service is wrapped inside shared.module.ts and is imported using .forRoot() in app.module.ts rather than provided.
Middleware: Uses static hardcoded .json files on server which data service makes call to.
UI: Uses Angular Material UI and component's own styling in their individual scss files.
Most of the boilerplate code was generated using Angular CLI.