Personal website. See Google docs for a full explanation and design notes.
You can use either Docker or NPM to run and view the app. Either way works.
The reasons I've added Docker is because machines differ and the versions of Node running on them is not always consistent. Docker solves this issue by creating a VM where languages and packages are all correctly versioned.
Run the following commands:
npm install
npm run dev
If you want to use Docker instead of NPM to view this app, you will of course need it to be installed. You can download it here
Run the following command from the project root:
docker-compose up -d
We'll use Next.JS for our front end framework. It wraps around React and gives us Static Rendering and Server Side Rendering if needed. It also offers us Serverless Functions in the form of API Routes, which we can use to send requests without worrying about CORS.
TypeScript will enable us to avoid some common coding pitfalls. It will help to ensure that the data supplied to our components is of the expected shape and type.
We want our code to be as semantic as possible, so that others can read it easily. Styled Components helps us achieve this in the best possible way. In my opinion <LocalWeatherTemp />
is much more readable than:
<div class="local-weather-temp weather-detail">{data}</div>
Using the Formik library in React applications is considered best practice, and we'll employ it in this app. Formik helps us perform validation, for which we use Yup
, and also assists us in cleanly composing responses to error and loading states.
Personally, I only believe in testing behavior, not UI. As such, we won't be testing that every component mounts and displays properly with Airbnb Enzyme, but rather will only use Jest to unit test pure functions that will return the same output for the same input, no matter how many times you run them.
Small code mistakes are inevitable - we're only human after all. Additionally, difficult to read code leads to even more mistakes. As such, we're going to use ESLint together with Prettier to ensure that our code is easy to read, and contains the least amount of bugs possible. We'll also use Husky to ensure that all code passes a linting test before being committed, and we'll use Lint-Staged to optimize the linting step so that only staged files are checked.
We'll use Google fonts:
- Open Sans light 300
The should be called like so:
font-family: 'Alata', sans-serif;
font-family: 'Roboto', sans-serif;