diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 00000000..12c19083
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1,7 @@
+**/node_modules/
+**/dist
+**/.nx
+.git
+.coverage
+.coverage.*
+.env
\ No newline at end of file
diff --git a/.eslintrc.json b/.eslintrc.json
index 06cc47d9..bd4a4553 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -1,16 +1,16 @@
{
"root": true,
"ignorePatterns": ["**/*"],
- "plugins": ["@nrwl/nx"],
+ "plugins": ["@nx"],
"overrides": [
{
"files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
"rules": {
- "@nrwl/nx/enforce-module-boundaries": [
+ "@nx/enforce-module-boundaries": [
"error",
{
"enforceBuildableLibDependency": true,
- "allow": [],
+ "allow": ["@*", "@bright-resume/*", "@@back*"],
"depConstraints": [
{
"sourceTag": "*",
@@ -23,13 +23,14 @@
},
{
"files": ["*.ts", "*.tsx"],
- "extends": ["plugin:@nrwl/nx/typescript"],
+ "extends": ["plugin:@nx/typescript"],
"rules": {}
},
{
"files": ["*.js", "*.jsx"],
- "extends": ["plugin:@nrwl/nx/javascript"],
+ "extends": ["plugin:@nx/javascript"],
"rules": {}
}
- ]
+ ],
+ "extends": ["plugin:storybook/recommended"]
}
diff --git a/.github/workflows/development.yml b/.github/workflows/development.yml
new file mode 100644
index 00000000..92ec0291
--- /dev/null
+++ b/.github/workflows/development.yml
@@ -0,0 +1,83 @@
+name: Development CI
+
+on:
+ push:
+ branches: ["development"]
+ pull_request:
+ branches: [development]
+
+jobs:
+ build-and-push-images:
+ if: github.ref == 'refs/heads/development'
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+
+ - name: Build chatbot
+ run: |
+ echo BACK_URL=https://back-development.bright-resume.com > ./apps/chatbot/.env
+ echo MODE=develop >> ./apps/chatbot/.env
+ docker build -t ghcr.io/bright-co/bright-resume-chatbot:${{ github.sha }} -f infra/Dockerfile.chatbot .
+
+ - name: Build back-auth
+ run: docker build -t ghcr.io/bright-co/bright-resume-back-auth:${{ github.sha }} -f infra/Dockerfile.auth .
+
+ - name: Build back-resume
+ run: docker build -t ghcr.io/bright-co/bright-resume-back-resume:${{ github.sha }} -f infra/Dockerfile.resume .
+
+ - name: Build back-file
+ run: docker build -t ghcr.io/bright-co/bright-resume-back-file:${{ github.sha }} -f infra/Dockerfile.file .
+
+ - name: Build back-gateway
+ run: docker build -t ghcr.io/bright-co/bright-resume-back-gateway:${{ github.sha }} -f infra/Dockerfile.gateway .
+
+ - name: Build back-cms
+ run: docker build -t ghcr.io/bright-co/bright-resume-back-cms:${{ github.sha }} -f infra/Dockerfile.cms .
+
+ - name: Docker Login
+ uses: docker/login-action@v3.0.0
+ with:
+ registry: ghcr.io
+ username: ${{ github.actor }}
+ password: ${{ secrets.G_TOKEN }}
+
+ - name: Push Images
+ run: |
+ docker push ghcr.io/bright-co/bright-resume-back-auth:${{ github.sha }}
+ docker push ghcr.io/bright-co/bright-resume-back-resume:${{ github.sha }}
+ docker push ghcr.io/bright-co/bright-resume-back-file:${{ github.sha }}
+ docker push ghcr.io/bright-co/bright-resume-back-gateway:${{ github.sha }}
+ docker push ghcr.io/bright-co/bright-resume-back-cms:${{ github.sha }}
+ docker push ghcr.io/bright-co/bright-resume-chatbot:${{ github.sha }}
+
+ update-manifest-stage:
+ if: github.ref == 'refs/heads/development'
+ runs-on: ubuntu-latest
+ needs: ["build-and-push-images"]
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v3
+ with:
+ repository: bright-co/bright-resume-gitops
+ ref: main
+ token: ${{ secrets.G_TOKEN }}
+
+ - name: Configure Git
+ run: |
+ git config --global user.email "erfan@bright-resume.com"
+ git config --global user.name "erfan"
+
+ - name: Update Image Tag
+ run: |
+ echo ${{ github.sha }}
+ sed -i "s|image: ghcr.io/bright-co/bright-resume-back-auth:.*|image: ghcr.io/bright-co/bright-resume-back-auth:${{ github.sha }}|" ./development/auth.yaml
+ sed -i "s|image: ghcr.io/bright-co/bright-resume-back-resume:.*|image: ghcr.io/bright-co/bright-resume-back-resume:${{ github.sha }}|" ./development/resume.yaml
+ sed -i "s|image: ghcr.io/bright-co/bright-resume-back-file:.*|image: ghcr.io/bright-co/bright-resume-back-file:${{ github.sha }}|" ./development/file.yaml
+ sed -i "s|image: ghcr.io/bright-co/bright-resume-back-gateway:.*|image: ghcr.io/bright-co/bright-resume-back-gateway:${{ github.sha }}|" ./development/gateway.yaml
+ sed -i "s|image: ghcr.io/bright-co/bright-resume-back-cms:.*|image: ghcr.io/bright-co/bright-resume-back-cms:${{ github.sha }}|" ./development/cms.yaml
+ sed -i "s|image: ghcr.io/bright-co/bright-resume-chatbot:.*|image: ghcr.io/bright-co/bright-resume-chatbot:${{ github.sha }}|" ./development/chatbot.yaml
+ git add -A
+ git commit -m "update image for - ${{ github.sha }}"
+
+ - name: Push Changes
+ run: git push
diff --git a/.github/workflows/production.yml b/.github/workflows/production.yml
new file mode 100644
index 00000000..3341b2c8
--- /dev/null
+++ b/.github/workflows/production.yml
@@ -0,0 +1,80 @@
+name: Production CI
+
+on:
+ push:
+ branches: ["production"]
+ pull_request:
+ branches: [production]
+
+jobs:
+ build-and-push-images:
+ if: github.ref == 'refs/heads/production'
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+
+ - name: Build back-auth
+ run: docker build -t ghcr.io/bright-co/bright-resume-back-auth:${{ github.sha }} -f infra/Dockerfile.auth .
+
+ - name: Build back-resume
+ run: docker build -t ghcr.io/bright-co/bright-resume-back-resume:${{ github.sha }} -f infra/Dockerfile.resume .
+
+ - name: Build back-file
+ run: docker build -t ghcr.io/bright-co/bright-resume-back-file:${{ github.sha }} -f infra/Dockerfile.file .
+
+ - name: Build back-gateway
+ run: docker build -t ghcr.io/bright-co/bright-resume-back-gateway:${{ github.sha }} -f infra/Dockerfile.gateway .
+
+ - name: Build back-cms
+ run: docker build -t ghcr.io/bright-co/bright-resume-back-cms:${{ github.sha }} -f infra/Dockerfile.cms .
+
+ - name: Build web
+ run: docker build -t ghcr.io/bright-co/bright-resume-web:${{ github.sha }} -f infra/Dockerfile.web .
+
+ - name: Docker Login
+ uses: docker/login-action@v3.0.0
+ with:
+ registry: ghcr.io
+ username: ${{ github.actor }}
+ password: ${{ secrets.G_TOKEN }}
+
+ - name: Push Images
+ run: |
+ docker push ghcr.io/bright-co/bright-resume-back-auth:${{ github.sha }}
+ docker push ghcr.io/bright-co/bright-resume-back-resume:${{ github.sha }}
+ docker push ghcr.io/bright-co/bright-resume-back-file:${{ github.sha }}
+ docker push ghcr.io/bright-co/bright-resume-back-gateway:${{ github.sha }}
+ docker push ghcr.io/bright-co/bright-resume-back-cms:${{ github.sha }}
+ docker push ghcr.io/bright-co/bright-resume-web:${{ github.sha }}
+
+ update-manifest-stage:
+ if: github.ref == 'refs/heads/production'
+ runs-on: ubuntu-latest
+ needs: ["build-and-push-images"]
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v3
+ with:
+ repository: bright-co/bright-resume-gitops
+ ref: main
+ token: ${{ secrets.G_TOKEN }}
+
+ - name: Configure Git
+ run: |
+ git config --global user.email "erfan@bright-resume.com"
+ git config --global user.name "erfan"
+
+ - name: Update Image Tag
+ run: |
+ echo ${{ github.sha }}
+ sed -i "s|image: ghcr.io/bright-co/bright-resume-back-auth:.*|image: ghcr.io/bright-co/bright-resume-back-auth:${{ github.sha }}|" ./production/auth.yaml
+ sed -i "s|image: ghcr.io/bright-co/bright-resume-back-resume:.*|image: ghcr.io/bright-co/bright-resume-back-resume:${{ github.sha }}|" ./production/resume.yaml
+ sed -i "s|image: ghcr.io/bright-co/bright-resume-back-file:.*|image: ghcr.io/bright-co/bright-resume-back-file:${{ github.sha }}|" ./production/file.yaml
+ sed -i "s|image: ghcr.io/bright-co/bright-resume-back-gateway:.*|image: ghcr.io/bright-co/bright-resume-back-gateway:${{ github.sha }}|" ./production/gateway.yaml
+ sed -i "s|image: ghcr.io/bright-co/bright-resume-back-cms:.*|image: ghcr.io/bright-co/bright-resume-back-cms:${{ github.sha }}|" ./production/cms.yaml
+ sed -i "s|image: ghcr.io/bright-co/bright-resume-web:.*|image: ghcr.io/bright-co/bright-resume-web:${{ github.sha }}|" ./production/web.yaml
+ git add -A
+ git commit -m "update image for - ${{ github.sha }}"
+
+ - name: Push Changes
+ run: git push
diff --git a/.github/workflows/staging.yml b/.github/workflows/staging.yml
new file mode 100644
index 00000000..aacf9bdf
--- /dev/null
+++ b/.github/workflows/staging.yml
@@ -0,0 +1,80 @@
+name: Staging CI
+
+on:
+ push:
+ branches: ["staging"]
+ pull_request:
+ branches: [staging]
+
+jobs:
+ build-and-push-images:
+ if: github.ref == 'refs/heads/staging'
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+
+ - name: Build back-auth
+ run: docker build -t ghcr.io/bright-co/bright-resume-back-auth:${{ github.sha }} -f infra/Dockerfile.auth .
+
+ - name: Build back-resume
+ run: docker build -t ghcr.io/bright-co/bright-resume-back-resume:${{ github.sha }} -f infra/Dockerfile.resume .
+
+ - name: Build back-file
+ run: docker build -t ghcr.io/bright-co/bright-resume-back-file:${{ github.sha }} -f infra/Dockerfile.file .
+
+ - name: Build back-gateway
+ run: docker build -t ghcr.io/bright-co/bright-resume-back-gateway:${{ github.sha }} -f infra/Dockerfile.gateway .
+
+ - name: Build back-cms
+ run: docker build -t ghcr.io/bright-co/bright-resume-back-cms:${{ github.sha }} -f infra/Dockerfile.cms .
+
+ - name: Build web
+ run: docker build -t ghcr.io/bright-co/bright-resume-web:${{ github.sha }} -f infra/Dockerfile.web .
+
+ - name: Docker Login
+ uses: docker/login-action@v3.0.0
+ with:
+ registry: ghcr.io
+ username: ${{ github.actor }}
+ password: ${{ secrets.G_TOKEN }}
+
+ - name: Push Images
+ run: |
+ docker push ghcr.io/bright-co/bright-resume-back-auth:${{ github.sha }}
+ docker push ghcr.io/bright-co/bright-resume-back-resume:${{ github.sha }}
+ docker push ghcr.io/bright-co/bright-resume-back-file:${{ github.sha }}
+ docker push ghcr.io/bright-co/bright-resume-back-gateway:${{ github.sha }}
+ docker push ghcr.io/bright-co/bright-resume-back-cms:${{ github.sha }}
+ docker push ghcr.io/bright-co/bright-resume-web:${{ github.sha }}
+
+ update-manifest-stage:
+ if: github.ref == 'refs/heads/staging'
+ runs-on: ubuntu-latest
+ needs: ["build-and-push-images"]
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v3
+ with:
+ repository: bright-co/bright-resume-gitops
+ ref: main
+ token: ${{ secrets.G_TOKEN }}
+
+ - name: Configure Git
+ run: |
+ git config --global user.email "erfan@bright-resume.com"
+ git config --global user.name "erfan"
+
+ - name: Update Image Tag
+ run: |
+ echo ${{ github.sha }}
+ sed -i "s|image: ghcr.io/bright-co/bright-resume-back-auth:.*|image: ghcr.io/bright-co/bright-resume-back-auth:${{ github.sha }}|" ./staging/auth.yaml
+ sed -i "s|image: ghcr.io/bright-co/bright-resume-back-resume:.*|image: ghcr.io/bright-co/bright-resume-back-resume:${{ github.sha }}|" ./staging/resume.yaml
+ sed -i "s|image: ghcr.io/bright-co/bright-resume-back-file:.*|image: ghcr.io/bright-co/bright-resume-back-file:${{ github.sha }}|" ./staging/file.yaml
+ sed -i "s|image: ghcr.io/bright-co/bright-resume-back-gateway:.*|image: ghcr.io/bright-co/bright-resume-back-gateway:${{ github.sha }}|" ./staging/gateway.yaml
+ sed -i "s|image: ghcr.io/bright-co/bright-resume-back-cms:.*|image: ghcr.io/bright-co/bright-resume-back-cms:${{ github.sha }}|" ./staging/cms.yaml
+ sed -i "s|image: ghcr.io/bright-co/bright-resume-web:.*|image: ghcr.io/bright-co/bright-resume-web:${{ github.sha }}|" ./staging/web.yaml
+ git add -A
+ git commit -m "update image for - ${{ github.sha }}"
+
+ - name: Push Changes
+ run: git push
diff --git a/.gitignore b/.gitignore
index f2172bd9..d2d2c3f8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,10 +1,14 @@
# See http://help.github.com/ignore-files/ for more about ignoring files.
.env
+.nx
+
# compiled output
dist
tmp
/out-tsc
-
+files/*
+!files/.gitkeep
+apps/resume/src/assets/config.yml
# dependencies
node_modules
@@ -31,12 +35,20 @@ node_modules
/libpeerconnection.log
npm-debug.log
yarn-error.log
+pnpm-lock.yaml
+yarn.lock
testem.log
/typings
+
+# Lockfiles
+yarn.lock
+package-lock.json
+pnpm-lock.json
+
# System Files
.DS_Store
Thumbs.db
# Next.js
-.next
+.next
\ No newline at end of file
diff --git a/.prettierrc b/.prettierrc
index 544138be..1ca87ab7 100644
--- a/.prettierrc
+++ b/.prettierrc
@@ -1,3 +1,3 @@
{
- "singleQuote": true
+ "singleQuote": false
}
diff --git a/.vscode/launch.json b/.vscode/launch.json
new file mode 100644
index 00000000..9a1d93ea
--- /dev/null
+++ b/.vscode/launch.json
@@ -0,0 +1,28 @@
+{
+ "version": "0.2.0",
+ "configurations": [
+ {
+ "name": "Next.js: debug server-side",
+ "type": "node-terminal",
+ "request": "launch",
+ "command": "pnpm nx serve web"
+ },
+ {
+ "name": "Next.js: debug client-side",
+ "type": "chrome",
+ "request": "launch",
+ "url": "http://localhost:3000"
+ },
+ {
+ "name": "Next.js: debug full stack",
+ "type": "node-terminal",
+ "request": "launch",
+ "command": "pnpm nx serve web",
+ "serverReadyAction": {
+ "pattern": "- Local:.+(https?://.+)",
+ "uriFormat": "%s",
+ "action": "debugWithChrome"
+ }
+ }
+ ]
+}
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 44aeb406..3ad98b12 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,3 +1,18 @@
{
- "typescript.tsdk": "node_modules\\typescript\\lib"
+ "editor.defaultFormatter": "esbenp.prettier-vscode",
+ "editor.formatOnSave": true,
+ "cSpell.words": [
+ "clsx",
+ "codegen",
+ "CodegenConfig",
+ "hookform",
+ "lucide",
+ "MINIO",
+ "nunito",
+ "quilljs",
+ "raleway",
+ "roboto",
+ "shadcn",
+ "supergraph"
+ ]
}
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
new file mode 100644
index 00000000..8b4fcfd3
--- /dev/null
+++ b/CODE_OF_CONDUCT.md
@@ -0,0 +1,132 @@
+# Contributor Covenant Code of Conduct
+
+## Our Pledge
+
+We as members, contributors, and leaders pledge to make participation in our
+community a harassment-free experience for everyone, regardless of age, body
+size, visible or invisible disability, ethnicity, sex characteristics, gender
+identity and expression, level of experience, education, socio-economic status,
+nationality, personal appearance, race, caste, color, religion, or sexual
+identity and orientation.
+
+We pledge to act and interact in ways that contribute to an open, welcoming,
+diverse, inclusive, and healthy community.
+
+## Our Standards
+
+Examples of behavior 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 apologizing 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 behavior include:
+
+- The use of sexualized language or imagery, and sexual attention or advances of
+ any kind
+- 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
+
+## Enforcement Responsibilities
+
+Community leaders are responsible for clarifying and enforcing our standards of
+acceptable behavior and will take appropriate and fair corrective action in
+response to any behavior that they deem inappropriate, threatening, offensive,
+or harmful.
+
+Community leaders 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 behavior may be
+reported to the community leaders responsible for enforcement at
+[INSERT CONTACT METHOD].
+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 behavior 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
+behavior 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 behavior. 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 behavior.
+
+**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 behavior, 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][homepage],
+version 2.1, available at
+[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
+
+Community Impact Guidelines were inspired by
+[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
+
+For answers to common questions about this code of conduct, see the FAQ at
+[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at
+[https://www.contributor-covenant.org/translations][translations].
+
+[homepage]: https://www.contributor-covenant.org
+[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
+[Mozilla CoC]: https://github.com/mozilla/diversity
+[FAQ]: https://www.contributor-covenant.org/faq
+[translations]: https://www.contributor-covenant.org/translations
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 00000000..3b464fec
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,336 @@
+# Contributing to Bright-Resume
+
+We would love for you to contribute to BrightResume and help make it even better than it is
+
+today! As a contributor, here are the guidelines we would like you to follow:
+
+
+
+- [Question or Problem?](#question)
+
+- [Issues and Bugs](#issue)
+
+- [Feature Requests](#feature)
+
+- [Submission Guidelines](#submit)
+
+- [Development Setup](#development)
+
+- [Coding Rules](#rules)
+
+
+
+## Got a Question or Problem?
+
+**Do not open issues for general support questions as we want to keep GitHub issues for bug reports and feature requests.**
+
+If you would like to chat about the question in real-time, you can reach out via [our discord channel][discord].
+
+## Found a Bug?
+
+If you find a bug in the source code, you can help us by
+
+[submitting an issue](#submit-issue) to our [GitHub Repository][github]. Even better, you can
+
+[submit a Pull Request](#submit-pr) with a fix.
+
+## Missing a Feature?
+
+You can _request_ a new feature by [submitting an issue](#submit-issue) to our GitHub
+
+Repository. If you would like to _implement_ a new feature, please submit an issue with
+
+a proposal for your work first, to be sure that we can use it.
+
+Please consider what kind of change it is:
+
+- For a **Major Feature**, first open an issue and outline your proposal so that it can be
+
+discussed. This will also allow us to better coordinate our efforts, prevent duplication of work,
+
+and help you to craft the change so that it is successfully accepted into the project. For your issue name, please prefix your proposal with `[discussion]`, for example "[discussion]: your feature idea".
+
+- **Small Features** can be crafted and directly [submitted as a Pull Request](#submit-pr).
+
+## Submission Guidelines
+
+### Submitting an Issue
+
+Before you submit an issue, please search the issue tracker, maybe an issue for your problem already exists and the discussion might inform you of workarounds readily available.
+
+We want to fix all the issues as soon as possible, but before fixing a bug we need to reproduce and confirm it.
+
+Unfortunately, we are not able to investigate / fix bugs without a minimal reproduction, so if we don't hear back from you we are going to close an issue that doesn't have enough info to be reproduced.
+
+You can file new issues by filling out our [new issue form][new_issue].
+
+### Submitting a Pull Request (PR)
+
+Before you submit your Pull Request (PR) consider the following guidelines:
+
+
+
+1. Search [GitHub Pull Requests][gh_prs] for an open or closed PR
+
+that relates to your submission. You don't want to duplicate effort.
+
+1. Fork this repository.
+
+1. Make your changes in a new git branch:
+
+```shell
+
+git checkout -b my-fix-branch master
+
+```
+
+1. Create your patch, **including appropriate test cases**.
+
+1. Follow our [Coding Rules](#rules).
+
+1. Run the full test suite (see [common scripts](#common-scripts)),
+
+and ensure that all tests pass.
+
+1. Commit your changes using a descriptive commit message that follows our
+
+[commit message conventions](#commit). Adherence to these conventions
+
+is necessary because release notes are automatically generated from these messages.
+
+```shell
+
+git commit -a
+
+```
+
+Note: the optional commit `-a` command line option will automatically "add" and "rm" edited files.
+
+1. Push your branch to GitHub:
+
+```shell
+
+git push origin my-fix-branch
+
+```
+
+1. In GitHub, send a pull request to `development`.
+
+- If we suggest changes then:
+
+- Make the required updates.
+
+- Re-run the test suites to ensure tests are still passing.
+
+- Rebase your branch and force push to your GitHub repository (this will update your Pull Request):
+
+```shell
+
+git rebase development -i
+
+git push -f
+
+```
+
+That's it! Thank you for your contribution!
+
+#### After your pull request is merged
+
+After your pull request is merged, you can safely delete your branch and pull the changes
+
+from the main (upstream) repository:
+
+- Delete the remote branch on GitHub either through the GitHub web UI or your local shell as follows:
+
+```shell
+
+git push origin --delete my-fix-branch
+
+```
+
+- Check out the development branch:
+
+```shell
+
+git checkout development -f
+
+```
+
+- Delete the local branch:
+
+```shell
+
+git branch -D my-fix-branch
+
+```
+
+- Update your development with the latest upstream version:
+
+```shell
+
+git pull --ff upstream development
+
+```
+
+## Development Setup
+
+You will need [Node.js](https://nodejs.org) version >= 18.
+
+1. After cloning the repo, run:
+
+```bash
+
+$ npm ci # (or yarn install)
+
+```
+
+1. Install nx cli globally [NX](https://nx.dev):
+
+```bash
+
+$ npm i nx -g
+
+```
+
+### Commonly used NPM scripts
+
+```bash
+
+# build packages or applications
+
+$ nx build
+
+# run the tests suite
+
+$ nx test
+
+# run linter
+
+$ nx lint
+
+# build packages or applications
+
+$ nx build
+
+```
+
+## Coding Rules
+
+To ensure consistency throughout the source code, keep these rules in mind as you are working:
+
+- All features or bug fixes **must be tested** by one or more specs (unit-tests).
+- We follow [Google's JavaScript Style Guide][js-style-guide], [Google's Typescript Style Guide][ts-style-guide], and [Google's HTML and CSS Style Guide][html-css-style-guide]
+- An automated formatter is available (`npm run format`).
+
+## Commit Message Guidelines
+
+We have very precise rules over how our git commit messages can be formatted. This leads to **more
+readable messages** that are easy to follow when looking through the **project history**. But also,
+we use the git commit messages to **generate the Bright Resume change log**.
+
+### Commit Message Format
+
+Each commit message consists of a **header**, a **body** and a **footer**. The header has a special
+format that includes a **type**, a **scope** and a **subject**:
+
+```
+():
+
+
+
+