App to help with the hiring and onboarding of crew personnel.
We will need recent versions of
- docker and docker-compose
- node and npm
To run the app use
npm run devThe app will run on localhost:8080. Be sure to open a few tabs to check out filter state persistence between tabs.
DDD style documentation can be found in app overview.
This project uses WDS to serve the application assets during development. A production bundle can also be generated using the build script, however, a production server has not been implemented and is considered outside the scope of this assignment.
We're using Webpack's Node API for greater control.
Webpack files use TypeScript, and are transpiled with build-builder. All checks and strict rules are enables to ensure robust code, and the target ES version is set to 2018 which is the highest supported by recent versions of Node.
prebuild: ensures Webpack config has been transpiled to JSbuild: creates a production-ready bundlebuild-builder: transpiles Webpack filesprerun-builder: ensures Webpack config has been transpiled to JSrun-builder: builds the app and runs WDSlint: lints (and fixes) using tslintformat: formats (and fixes) using prettierlintAndFormat: linting and formatting in one commandtest: run unit teststest:integration: run integration tests
Using recommended settings with prettier formatting exclusion rules.
Prettier is configured with
singleQuote=trueto for quicker visual differentiation between JS strings and JSX html attributes.trailingComma=allto avoid lines showing up as modified when new object properties are added.
Using Jest for testing. Tests are written in TS, to we're using the ts-jest preset. Failing unit tests prevent pushing. Integration tests have to be run on demand.
Using husky to lint and format files before commit. Failing tests prevent pushing.
Docker is used to run the app while developing. This allows for a stable environment for all developers. The container's file system is mapped to the host machine for a seamless development experience.
TypeScript is used to ensure robust data handling across the application. Primarily, it is used to ensure the right props are passed to components, and it's especially useful to access candidate data returned from the randomuser.me API.