diff --git a/.editorconfig b/.editorconfig
index f8c0554..71bd905 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -12,5 +12,6 @@ max_line_length=80
[*.{md,mdx}]
indent_style = space
indent_size = 2
+max_line_length = 80
trim_trailing_whitespace = false
insert_final_newline = true
diff --git a/.github/ISSUE_TEMPLATE/01-bug.yml b/.github/ISSUE_TEMPLATE/01-bug.yml
new file mode 100644
index 0000000..88a6eec
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/01-bug.yml
@@ -0,0 +1,82 @@
+name: '🐛 Bug Report'
+description: Create a new ticket for a bug.
+labels: ['bug']
+assignees: ['anguspiv']
+title: '🐛 [BUG] -
'
+body:
+ - type: textarea
+ id: description
+ attributes:
+ label: 'Description'
+ description: Please enter an explicit description of your issue
+ placeholder: Short and explicit description of your incident...
+ validations:
+ required: true
+ - type: input
+ id: reprod-url
+ attributes:
+ label: 'Reproduction URL'
+ description: Please enter your GitHub URL to provide a reproduction of the issue
+ placeholder: ex. https://www.angusp.com
+ validations:
+ required: true
+ - type: textarea
+ id: reprod
+ attributes:
+ label: 'Reproduction steps'
+ description: Please enter an explicit description of your issue
+ value: |
+ 1. Go to '...'
+ 2. Click on '....'
+ 3. Scroll down to '....'
+ 4. See error
+ render: bash
+ validations:
+ required: true
+ - type: textarea
+ id: screenshot
+ attributes:
+ label: 'Screenshots'
+ description: If applicable, add screenshots to help explain your problem.
+ value: |
+ ![DESCRIPTION](LINK.png)
+ render: bash
+ validations:
+ required: false
+ - type: textarea
+ id: logs
+ attributes:
+ label: 'Logs'
+ description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks.
+ render: bash
+ validations:
+ required: false
+ - type: dropdown
+ id: browsers
+ attributes:
+ label: 'Browsers'
+ description: What browsers are you seeing the problem on ?
+ multiple: true
+ options:
+ - Firefox
+ - Chrome
+ - Safari
+ - Microsoft Edge
+ - Opera
+ validations:
+ required: false
+ - type: dropdown
+ id: os
+ attributes:
+ label: 'OS'
+ description: What is the impacted environment ?
+ multiple: true
+ options:
+ - iPhone iOS
+ - iPad iOS
+ - Android
+ - Windows
+ - Linux
+ - Mac
+ validations:
+ required: false
diff --git a/.github/ISSUE_TEMPLATE/02-feature.yml b/.github/ISSUE_TEMPLATE/02-feature.yml
new file mode 100644
index 0000000..af829d8
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/02-feature.yml
@@ -0,0 +1,47 @@
+name: '💡 Feature Request'
+description: Create a new ticket for a new feature request
+title: '💡 [REQUEST] - '
+labels: ['question']
+body:
+ - type: textarea
+ id: summary
+ attributes:
+ label: 'Summary'
+ description: Provide a brief explanation of the feature
+ placeholder: Describe in a few lines your feature request
+ validations:
+ required: true
+ - type: textarea
+ id: basic_example
+ attributes:
+ label: 'Basic Example'
+ description: Indicate here some basic examples of your feature.
+ placeholder: A few specific words about your feature request.
+ validations:
+ required: false
+ - type: textarea
+ id: drawbacks
+ attributes:
+ label: 'Drawbacks'
+ description: What are the drawbacks/impacts of your feature request ?
+ placeholder: Identify the drawbacks and impacts while being neutral on your feature request
+ validations:
+ required: false
+ - type: textarea
+ id: unresolved_question
+ attributes:
+ label: 'Unresolved questions'
+ description: What questions still remain unresolved ?
+ placeholder: Identify any unresolved issues.
+ validations:
+ required: false
+ - type: textarea
+ id: screenshot
+ attributes:
+ label: 'Screenshots'
+ description: If applicable, add screenshots or images to help explain your feature.
+ value: |
+ ![DESCRIPTION](LINK.png)
+ render: bash
+ validations:
+ required: false
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
new file mode 100644
index 0000000..df1d971
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -0,0 +1,8 @@
+blank_issues_enabled: true
+contact_links:
+ - name: { % data variables.product.prodname_gcf % }
+ url: https://github.com/orgs/community/discussions
+ about: Please ask and answer questions here.
+ - name: '✉️ Contact'
+ url: mailto:angusp@angusp.com
+ about: Please contact me directly.
diff --git a/.github/PULL_REQUEST_TEMPLATE.yml b/.github/PULL_REQUEST_TEMPLATE.yml
new file mode 100644
index 0000000..f84dd36
--- /dev/null
+++ b/.github/PULL_REQUEST_TEMPLATE.yml
@@ -0,0 +1,51 @@
+name: '🍻 Pull Request'
+description: Create a new pull request.
+assignees: ['anguspiv']
+title: '🍻 [PR] - '
+body:
+ - type: select
+ id: type
+ attributes:
+ label: 'Type'
+ description: What type of change does this PR introduce ?
+ options:
+ - '🐛 Bug fix'
+ - '💡 Feature'
+ - '🔨 Refactor'
+ - '📚 Documentation'
+ - '🔧 Configuration'
+ - '🚀 Performance'
+ - '🔖 Release'
+ - '🚧 WIP'
+ validations:
+ required: true
+ - type: textarea
+ id: description
+ attributes:
+ label: 'Description'
+ description: Please enter an explicit description of your issue
+ placeholder: Short and explicit description of your incident...
+ validations:
+ required: true
+ - type: textarea
+ id: screenshots
+ attributes:
+ label: 'Screenshots'
+ description: If applicable, add screenshots or recordings to help explain your changes.
+ value: |
+ ![DESCRIPTION](LINK.png)
+ render: bash
+ validations:
+ required: false
+ - type: checkboxes
+ id: checklist
+ attributes:
+ label: 'Checklist'
+ description: Have you completed all of the following ?
+ options:
+ - 'Written appropriate tests'
+ - 'Updated the documentation'
+ - 'Followed the coding style'
+ - 'Followed the commit message guidelines'
+ validations:
+ required: true
diff --git a/.prettierrc b/.prettierrc
index c15d580..750b164 100644
--- a/.prettierrc
+++ b/.prettierrc
@@ -1,5 +1,5 @@
{
- "printWidth": 100,
+ "printWidth": 80,
"singleQuote": true,
"trailingComma": "all",
"arrowParens": "always"
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
new file mode 100644
index 0000000..89afbe7
--- /dev/null
+++ b/CODE_OF_CONDUCT.md
@@ -0,0 +1,115 @@
+# Code of Conduct - [www.angusp.com](https://www.angusp.com)
+
+## Our Pledge
+
+In the interest of fostering an open and welcoming environment, we as
+contributors and maintainers pledge to make participation in our project and
+our community a harassment-free experience for everyone, regardless of age, body
+size, disability, ethnicity, sex characteristics, gender identity and expression,
+level of experience, education, socio-economic status, nationality, personal
+appearance, race, religion, or sexual identity and orientation.
+
+## Our Standards
+
+Examples of behaviour that contributes to a positive environment for our
+community include:
+
+- Demonstrating empathy and kindness toward other people
+- Being respectful of differing opinions, viewpoints, and experiences
+- Giving and gracefully accepting constructive feedback
+- Accepting responsibility and apologising to those affected by our mistakes,
+ and learning from the experience
+- Focusing on what is best not just for us as individuals, but for the
+ overall community
+
+Examples of unacceptable behaviour include:
+
+- The use of sexualised language or imagery, and sexual attention or advances
+- Trolling, insulting or derogatory comments, and personal or political attacks
+- Public or private harassment
+- Publishing others' private information, such as a physical or email
+ address, without their explicit permission
+- Other conduct which could reasonably be considered inappropriate in a
+ professional setting
+
+## Our Responsibilities
+
+Project maintainers are responsible for clarifying and enforcing our standards of
+acceptable behaviour and will take appropriate and fair corrective action in
+response to any behaviour that they deem inappropriate,
+threatening, offensive, or harmful.
+
+Project maintainers have the right and responsibility to remove, edit, or reject
+comments, commits, code, wiki edits, issues, and other contributions that are
+not aligned to this Code of Conduct, and will
+communicate reasons for moderation decisions when appropriate.
+
+## Scope
+
+This Code of Conduct applies within all community spaces, and also applies when
+an individual is officially representing the community in public spaces.
+Examples of representing our community include using an official e-mail address,
+posting via an official social media account, or acting as an appointed
+representative at an online or offline event.
+
+## Enforcement
+
+Instances of abusive, harassing, or otherwise unacceptable behaviour may be
+reported to the community leaders responsible for enforcement at .
+All complaints will be reviewed and investigated promptly and fairly.
+
+All community leaders are obligated to respect the privacy and security of the
+reporter of any incident.
+
+## Enforcement Guidelines
+
+Community leaders will follow these Community Impact Guidelines in determining
+the consequences for any action they deem in violation of this Code of Conduct:
+
+### 1. Correction
+
+**Community Impact**: Use of inappropriate language or other behaviour deemed
+unprofessional or unwelcome in the community.
+
+**Consequence**: A private, written warning from community leaders, providing
+clarity around the nature of the violation and an explanation of why the
+behaviour was inappropriate. A public apology may be requested.
+
+### 2. Warning
+
+**Community Impact**: A violation through a single incident or series
+of actions.
+
+**Consequence**: A warning with consequences for continued behaviour. No
+interaction with the people involved, including unsolicited interaction with
+those enforcing the Code of Conduct, for a specified period of time. This
+includes avoiding interactions in community spaces as well as external channels
+like social media. Violating these terms may lead to a temporary or
+permanent ban.
+
+### 3. Temporary Ban
+
+**Community Impact**: A serious violation of community standards, including
+sustained inappropriate behaviour.
+
+**Consequence**: A temporary ban from any sort of interaction or public
+communication with the community for a specified period of time. No public or
+private interaction with the people involved, including unsolicited interaction
+with those enforcing the Code of Conduct, is allowed during this period.
+Violating these terms may lead to a permanent ban.
+
+### 4. Permanent Ban
+
+**Community Impact**: Demonstrating a pattern of violation of community
+standards, including sustained inappropriate behaviour, harassment of an
+individual, or aggression toward or disparagement of classes of individuals.
+
+**Consequence**: A permanent ban from any sort of public interaction within
+the community.
+
+## Attribution
+
+This Code of Conduct is adapted from the [Contributor Covenant](https://contributor-covenant.org/), version
+[1.4](https://www.contributor-covenant.org/version/1/4/code-of-conduct/code_of_conduct.md) and
+[2.0](https://www.contributor-covenant.org/version/2/0/code_of_conduct/code_of_conduct.md),
+and was generated by [contributing.md](https://contributing.md/generator).
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..5035fcb
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,508 @@
+
+
+# Contributing to www.angusp.com
+
+First off, thanks for taking the time to contribute! ❤️ Second, this is mostly a
+generated template, which I guess is not neccesary for a personal website. But
+hey, it's here now. 🤷♂️ Also I like to share how I work and what I value, so
+others can learn from it, so here we go. 🚀
+
+All types of contributions are encouraged and valued. See the
+[Table of Contents](#table-of-contents) for different ways to help and details
+about how this project handles them. Please make sure to read the relevant
+section before making your contribution. It will make it a lot easier for us
+maintainers and smooth out the experience for all involved. The community looks
+forward to your contributions. 🎉
+
+Honestly, considering this repo is just my personal website, I'm not sure why or
+how you'd want to contribute. But if you do, I'm grateful for your interest and
+support. 🙏
+Heck, if you just wanna chat about the project or anything else, feel free to
+start up a [Discussion](https://github.com/anguspiv/www.angusp.com/discussions).
+
+> And if you like the project, but just don't have time to contribute, that's
+> fine. There are other easy ways to support the project and show your
+> appreciation, which we would also be very happy about:
+
+> - Star the project
+> - Tweet about it
+> - Refer this project in your project's readme
+> - Mention the project at local meetups and tell your friends/colleagues
+
+Totally not using this as an oppurtunity to self-promote. :sweat_smile:
+
+
+
+## Table of Contents
+
+- [Code of Conduct](#code-of-conduct)
+- [I Have a Question](#i-have-a-question)
+ - [I Want To Contribute](#i-want-to-contribute)
+ - [Reporting Bugs](#reporting-bugs)
+ - [Suggesting Enhancements](#suggesting-enhancements)
+ - [Your First Code Contribution](#your-first-code-contribution)
+ - [Improving The Documentation](#improving-the-documentation)
+- [Styleguides](#styleguides)
+ - [Commit Messages](#commit-messages)
+- [Join The Project Team](#join-the-project-team)
+
+## Code of Conduct
+
+This project and everyone participating in it is governed by the
+[www.angusp.com Code of Conduct](https://github.com/anguspiv/www.angusp.com/blob//CODE_OF_CONDUCT.md).
+By participating, you are expected to uphold this code. Please report
+unacceptable behavior to .
+
+## I Have a Question
+
+> If you want to ask a question, we assume that you have read the available
+> [Documentation](https://anguspiv.github.io/www.angusp.com/).
+
+Before you ask a question, it is best to search for existing
+[Issues](https://github.com/anguspiv/www.angusp.com/issues) or
+[Discussions](https://github.com/anguspiv/www.angusp.com/discussions) that might
+help you. In case you have found a suitable issue and still need clarification,
+you can write your question in this issue. It is also advisable to search the
+internet for answers first.
+
+If you then still feel the need to ask a question and need clarification, we
+recommend the following:
+
+- Open an [Discussion](https://github.com/anguspiv/www.angusp.com/discussions/new?category=q-a)
+ in the [Q&A](https://github.com/anguspiv/www.angusp.com/discussions/categories/q-a)
+ topic.
+- Provide as much context as you can about what you're running into.
+- Provide project and platform versions (nodejs, npm, etc), depending on what
+ seems relevant.
+
+We will then take care of the issue as soon as possible.
+
+## I Want To Contribute
+
+> ### Legal Notice
+>
+> When contributing to this project, you must agree that you have authored 100%
+> of the content, that you have the necessary rights to the content and that the
+> content you contribute may be provided under the project licence.
+
+### Reporting Bugs
+
+
+
+#### Before Submitting a Bug Report
+
+A good bug report shouldn't leave others needing to chase you up for more
+information. Therefore, we ask you to investigate carefully, collect information
+and describe the issue in detail in your report. Please complete the following
+steps in advance to help us fix any potential bug as fast as possible.
+
+- Make sure that you are using the latest version.
+- Determine if your bug is really a bug and not an error on your side e.g. using
+ incompatible environment components/versions (Make sure that you have read the
+ [documentation](https://anguspiv.github.io/www.angusp.com/). If you are
+ looking for support, you might want to check
+ [this section](#i-have-a-question)).
+- To see if other users have experienced (and potentially already solved) the
+ same issue you are having, check if there is not already a bug report existing
+ for your bug or error in the
+ [bug tracker](https://github.com/anguspiv/www.angusp.com/issues?q=label%3Abug).
+- Also make sure to search the internet (including Stack Overflow) to see if
+ users outside of the GitHub community have discussed the issue.
+- Collect information about the bug:
+ - Stack trace (Traceback)
+ - OS, Platform and Version (Windows, Linux, macOS, x86, ARM)
+ - Version of the interpreter, compiler, SDK, runtime environment,
+ package manager, depending on what seems relevant.
+ - Possibly your input and the output
+ - Can you reliably reproduce the issue? And can you also reproduce it with
+ older versions?
+
+
+
+#### How Do I Submit a Good Bug Report?
+
+> You must never report security related issues, vulnerabilities or bugs
+> including sensitive information to the issue tracker, or elsewhere in public.
+> Instead sensitive bugs must be sent by email to .
+
+
+
+We use GitHub issues to track bugs and errors. If you run into an issue with the
+project:
+
+- Open an [Issue](https://github.com/anguspiv/www.angusp.com/issues/new).
+ (Since we can't be sure at this point whether it is a bug or not, we ask you
+ not to talk about a bug yet and not to label the issue.)
+- Explain the behavior you would expect and the actual behavior.
+- Please provide as much context as possible and describe the
+ _reproduction steps_ that someone else can follow to recreate the issue on
+ their own. This usually includes your code. For good bug reports you should
+ isolate the problem and create a reduced test case.
+- Provide the information you collected in the previous section.
+
+Once it's filed:
+
+- The project team will label the issue accordingly.
+- A team member will try to reproduce the issue with your provided steps. If
+ there are no reproduction steps or no obvious way to reproduce the issue,
+ the team will ask you for those steps and mark the issue as `needs-repro`.
+ Bugs with the `needs-repro` tag will not be addressed until they are
+ reproduced.
+- If the team is able to reproduce the issue, it will be marked `needs-fix`, as
+ well as possibly other tags (such as `critical`), and the issue will be left
+ to be [implemented by someone](#your-first-code-contribution).
+
+### Suggesting Enhancements
+
+This section guides you through submitting an enhancement suggestion for
+www.angusp.com, **including completely new features and minor improvements to
+existing functionality**. Following these guidelines will help maintainers and
+the community to understand your suggestion and find related suggestions.
+
+
+
+#### Before Submitting an Enhancement
+
+- Make sure that you are using the latest version.
+- Read the [documentation](https://anguspiv.github.io/www.angusp.com/) carefully
+ and find out if the functionality is already covered, maybe by an individual
+ configuration.
+- Perform a [search](https://github.com/anguspiv/www.angusp.com/issues) to see
+ if the enhancement has already been suggested. If it has, add a comment to the
+ existing issue instead of opening a new one.
+- Find out whether your idea fits with the scope and aims of the project. It's
+ up to you to make a strong case to convince the project's developers of the
+ merits of this feature. Keep in mind that we want features that will be useful
+ to the majority of our users and not just a small subset. If you're just
+ targeting a minority of users, consider writing an add-on/plugin library.
+
+
+
+#### How Do I Submit a Good Enhancement Suggestion?
+
+Enhancement suggestions are tracked as
+[GitHub issues](https://github.com/anguspiv/www.angusp.com/issues).
+
+- Use a **clear and descriptive title** for the issue to identify the
+ suggestion.
+- Provide a **step-by-step description of the suggested enhancement** in as many
+ details as possible.
+- **Describe the current behavior** and **explain which behavior you expected to
+ see instead** and why. At this point you can also tell which alternatives do
+ not work for you.
+- You may want to **include screenshots or screen recordings** which help you
+ demonstrate the steps or point out the part which the suggestion is related
+ to. You can use [LICEcap](https://www.cockos.com/licecap/) to record GIFs on
+ macOS and Windows, and the built-in
+ [screen recorder in GNOME](https://help.gnome.org/users/gnome-help/stable/screen-shot-record.html.en)
+ or [SimpleScreenRecorder](https://github.com/MaartenBaert/ssr) on Linux.
+
+- **Explain why this enhancement would be useful** to most www.angusp.com users.
+ You may also want to point out the other projects that solved it better and
+ which could serve as inspiration.
+
+### Your First Code Contribution
+
+#### Prerequisites
+
+Before you begin, you should have already:
+
+- Installed [Node.js](https://nodejs.org/en/download/)
+- Installed [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm)
+- Installed [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)
+- Installed [GitHub CLI](https://cli.github.com/manual/installation)
+- Read the [documentation](https://anguspiv.github.io/www.angusp.com/)
+- [Forked](https://docs.github.com/en/get-started/quickstart/fork-a-repo) the
+ www.angusp.com repo
+- [Cloned](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository)
+ your forked repo to your local machine
+
+
+
+#### Local Development
+
+To set up your deve
+lopment environment, you will need to:
+
+
+
+##### 1. Fork the www.angusp.com repo
+
+Fork the www.angusp.com repo by clicking on the fork button on the top of the
+page. This will create a copy of this repository in your account.
+
+
+
+##### 2. Checkout the repository to your local machine
+
+```bash
+git clone {{ your forked repo url }}
+```
+
+
+
+##### 3. Install the dependencies
+
+This project uses [`npm`](https://docs.npmjs.com/) to manage dependencies. Run
+the following command to install the dependencies:
+
+```bash
+npm install
+```
+
+If you are unfamiliar with `npm`, please take a few minutes to familiarize
+yourself with it. It is a powerful tool that you will need to use to contribute
+to this project. Learn more about `npm` by reading the [npm documentation](https://docs.npmjs.com/).
+
+
+
+##### 4a. Start the development server
+
+Once you have installed the dependencies, you can run the project locally using:
+
+```bash
+npm run dev
+```
+
+This will start an [astro](https://astro.build/) development server at
+[`http://localhost:4321`](). You can now make changes to the project and see the
+results in real-time. The server will automatically reload when you make changes
+to the project.
+
+
+
+##### 4b. Run the tests
+
+This project uses [`vitest`](https://vitest.dev/) and
+[`@testing-library`](https://testing-library.com/) for testing. You can run the
+tests using:
+
+```bash
+npm test
+```
+
+This will run the tests in watch mode and output the results in the terminal.
+You can also generate a coverage report using:
+
+```bash
+npm run test:coverage
+```
+
+
+
+##### 4c. Run the linter
+
+This project uses [`eslint`](https://eslint.org/) and
+[`prettier`](https://prettier.io/) for linting. You can run the linter using:
+
+```bash
+npm run lint
+```
+
+This will run the linter and output any errors or warnings in the terminal. You
+can also fix any auto-fixable issues using:
+
+```bash
+npm run lint:fix
+```
+
+
+
+##### 4d. Run Storybook
+
+This project uses [`storybook`](https://storybook.js.org/) for component
+development and documentation. You can run Storybook using:
+
+```bash
+npm run storybook
+```
+
+This will start a Storybook server at [`http://localhost:6006`](). You can now
+view the components in Storybook and make changes to them in real-time. The
+server will automatically reload when you make changes to the components.
+
+
+
+##### 5. Create a new branch
+
+This project uses the `main` branch as the default branch. All development work
+should be done on a separate branch. Additionally we use
+[trunk-based development](https://trunkbaseddevelopment.com/) and feature
+branches. Meaning that we do not use long-lived branches like `develop` or
+`release`.
+
+We recommend naming your branch using the following convention:
+
+- `feature/-your-feature-name` for new features
+- `bugfix/-your-bugfix-name` for bug fixes
+- `chore/-your-chore-name` for chores
+
+For example, if you are working on a new feature to add a dark mode to the
+project and the issue number is `#123`, you would name your branch
+`feature/123-dark-mode`. You can create a new branch using:
+
+```bash
+git switch -c feature/123-dark-mode
+```
+
+
+
+##### 6. Make your changes
+
+Now that you have set up your development environment, you can start making
+changes to the project. You can use your favorite code editor to make changes to
+the project files. You can also use the development server to see the changes in
+real-time.
+
+
+
+##### 7. Commit your changes
+
+We use [Conventional Commits](https://www.conventionalcommits.org/) for commit
+messages. This helps us automatically generate changelogs and version numbers.
+If you are unfamiliar with Conventional Commits, please take a few minutes to
+familiarize yourself with them. You can commit your changes using:
+
+```bash
+git commit -m "feat: add dark mode"
+```
+
+
+
+##### 8. Push your changes
+
+Once you have committed your changes, you can push them to your forked
+repository using:
+
+```bash
+git push origin feature/123-dark-mode
+```
+
+
+
+##### 9. Create a pull request
+
+Once you have pushed your changes to your forked repository, you can create a
+pull request to by clicking on the "New pull request" button on the main
+repository page. Make sure to provide a detailed description of your changes and
+reference the issue number in the pull request description.
+
+We recommend naming your pull request using the following convention:
+
+- `Feature: Add dark mode` for new features
+- `Bugfix: Fix dark mode` for bug fixes
+- `Chore: Update dependencies` for chores
+
+For example, if you are working on a new feature to add a dark mode to the
+project and the issue number is `#123`, you would name your pull request
+`Feature: Add dark mode (#123)`.
+You can create a pull request using:
+
+```bash
+gh pr create --base main --head feature/123-dark-mode
+```
+
+
+
+##### 10. Review and merge
+
+Once you have created a pull request, a project maintainer will review your
+changes and provide feedback. If everything looks good, your changes will be
+merged into the main branch and will be included in the next release.
+
+With much appreciation, you have successfully contributed to the project. 🎉
+
+### Improving The Documentation
+
+Our [Documentation](https://anguspiv.github.io/www.angusp.com/) is important. It helps users understand how to use the project and
+how to contribute to it. If you find an error in the documentation or if you
+think something is missing, you can help improve it by following these steps:
+
+- Open an [Bug Issue](https://github.com/anguspiv/www.angusp.com/issues/new)
+ and describe the issue you found or the improvement you would like to make.
+- If you are able to fix the issue or make the improvement yourself, you can
+ create a pull request with the changes. Make sure to reference the issue number
+ in the pull request description.
+- If you are not able to fix the issue or make the improvement yourself, you can
+ still open an issue and describe the issue or improvement. A project maintainer
+ will review the issue and make the necessary changes.
+
+## Styleguides
+
+### Commit Messages
+
+This project uses [Conventional Commits](https://www.conventionalcommits.org/)
+for commit messages. This helps us automatically generate changelogs and version
+numbers. If you are unfamiliar with Conventional Commits, please take a few
+minutes to familiarize yourself with them.
+
+A conventional commit message should have the following format:
+
+``
+[optional scope]:
+
+[optional body]
+
+[optional footer]
+
+```
+
+The `type` should be one of the following:
+
+- `feat`: A new feature
+- `fix`: A bug fix
+- `docs`: Documentation changes
+- `style`: Changes that do not affect the meaning of the code (white-space,
+ formatting, missing semi-colons, etc)
+- `refactor`: A code change that neither fixes a bug nor adds a feature
+- `perf`: A code change that improves performance
+- `test`: Adding missing tests or correcting existing tests
+- `chore`: Changes to the build process or auxiliary tools and libraries such as
+ documentation generation
+
+The `scope` is optional and should be the name of the module or component that
+the commit affects.
+
+The `description` should be a short, imperative tense description of the change.
+
+The `body` is optional and should provide a more detailed description of the
+
+The `footer` is optional and should contain any breaking changes, issues closed
+by the commit, or other information that is relevant to the commit.
+
+Here are some examples of conventional commit messages:
+
+```
+
+feat: add dark mode
+
+This commit adds a dark mode to the project
+
+BREAKING CHANGE: The light mode has been removed
+
+Closes #123
+
+```
+
+```
+
+fix: fix dark mode
+
+This commit fixes a bug in the dark mode
+
+Closes #123
+
+```
+
+```
+
+docs: update README
+
+```
+
+
+
+## Attribution
+
+This guide is based on the [contributing.md](https://contributing.md/generator)!
+```
diff --git a/package.json b/package.json
index 644e0bc..4be6a3a 100644
--- a/package.json
+++ b/package.json
@@ -9,10 +9,12 @@
"build-storybook": "storybook build",
"dev": "astro dev",
"lint": "eslint .",
+ "lint:fix": "eslint --fix . && prettier --write .",
"prepare": "husky",
"preview": "astro preview",
"storybook": "storybook dev -p 6006",
- "test": "vitest"
+ "test": "vitest",
+ "test:coverage": "vitest --coverage"
},
"dependencies": {
"@astrojs/netlify": "^6.0.1",
diff --git a/src/stories/CONTRIBUTING.mdx b/src/stories/CONTRIBUTING.mdx
new file mode 100644
index 0000000..31f93bd
--- /dev/null
+++ b/src/stories/CONTRIBUTING.mdx
@@ -0,0 +1,9 @@
+import { Meta, Markdown } from '@storybook/blocks';
+
+import Contributing from '~/CONTRIBUTING.md?raw';
+
+
+
+# Contributing
+
+{Contributing}