diff --git a/.github/data/contributors-log.json b/.github/data/contributors-log.json
new file mode 100644
index 0000000..74f27b3
--- /dev/null
+++ b/.github/data/contributors-log.json
@@ -0,0 +1,7 @@
+{
+ "{init}": {
+ "contributor-name": ["iamwatchdogs"],
+ "pull-request-number": ["1"],
+ "demo-path": "https://github.com/Grow-with-Open-Source/C-CPP-Projects"
+ }
+}
diff --git a/.github/scripts/convert_to_html_tables.py b/.github/scripts/convert_to_html_tables.py
new file mode 100644
index 0000000..2573a2e
--- /dev/null
+++ b/.github/scripts/convert_to_html_tables.py
@@ -0,0 +1,122 @@
+#!/usr/bin/env python
+
+import os
+import json
+
+'''
+This script requires following environment variables:
+
+- REPO_NAME:
+ > example: 'iamwatchdogs/test'
+ > GitHub action variable: ${{ github.repository }}
+'''
+
+def find_table_points(lines):
+
+ # Setting default return values
+ table_start = None
+ table_end = None
+
+ # Setting the markers
+ table_start_marker = ''
+ table_end_marker = ''
+
+ # Iterating over lines to find the markers
+ for index, line in enumerate(lines):
+ if table_start is None and table_start_marker in line:
+ table_start = index
+ elif table_end is None and table_end_marker in line:
+ table_end = index
+ if table_start is not None and table_end is not None:
+ break
+
+ # Checking for possible errors
+ if table_start is None or table_end is None:
+ print('Table not found in the file.')
+ exit(1)
+ elif table_start >= table_end:
+ print('Invaild use of table markers.')
+ exit(2)
+
+ return (table_start, table_end)
+
+
+def main():
+
+ # Retrieving Environmental variables
+ REPO_NAME = os.environ.get('REPO_NAME')
+
+ # Setting path for the log JSON file
+ TARGET_FILE = 'index.md'
+ CONTRIBUTORS_LOG = '.github/data/contributors-log.json'
+
+ # Retrieving data from log file
+ with open(CONTRIBUTORS_LOG, 'r') as json_file:
+ data = json.load(json_file)
+
+ # Reading lines from the file
+ with open(TARGET_FILE, 'r') as file:
+ lines = file.readlines()
+
+ # Calculating Stating and ending points of the targeted table
+ table_start, table_end = find_table_points(lines)
+
+ # Creating HTML table header to replace md table
+ table_header = list()
+ table_header.append('
\n')
+ table_header.append('\t
\n')
+ table_header.append('\t\t
Project Title
\n')
+ table_header.append('\t\t
Contributor Names
\n')
+ table_header.append('\t\t
Pull Requests
\n')
+ table_header.append('\t\t
Demo
\n')
+ table_header.append('\t
\n')
+
+ # Initializing empty list for lines
+ updated_lines = list()
+
+ # Iterating over log to update target file
+ for title, details in data.items():
+
+ # Processing contributors-names
+ contributors_names = details['contributor-name']
+ contributors_names_list = [f'{name}' for name in contributors_names]
+ contributors_names_output = ', '.join(contributors_names_list)
+
+ # Processing pull-requests
+ pull_requests = details['pull-request-number']
+ pull_requests_list = [f'{pr}' for pr in pull_requests]
+ pull_requests_output = ', '.join(pull_requests_list)
+
+ # Processing demo-path
+ demo_path = details['demo-path']
+ if ' ' in demo_path:
+ demo_path = '%20'.join(demo_path.split())
+ demo_path_output = f'/{REPO_NAME}/{title}/'
+ if title == 'root' or title == '{init}':
+ demo_path_output = f'/{REPO_NAME}/'
+
+
+ # Appending all data together
+ updated_lines.append('\t
\n')
+ updated_lines.append(f'\t\t
{title}
\n')
+ updated_lines.append(f'\t\t
{contributors_names_output}
\n')
+ updated_lines.append(f'\t\t
{pull_requests_output}
\n')
+ updated_lines.append(f'\t\t
{demo_path_output}
\n')
+ updated_lines.append(f'\t
\n')
+
+ # Table footer
+ table_footer = ['
\n']
+
+ # Updating the lines with updated data
+ lines[table_start+1:table_end] = table_header+updated_lines+table_footer
+
+ # Updating the target file
+ with open(TARGET_FILE, 'w') as file:
+ file.writelines(lines)
+
+ # Printing Success Message
+ print(f"Updated '{TARGET_FILE}' Successfully")
+
+
+if __name__ == '__main__':
+ main()
\ No newline at end of file
diff --git a/.github/scripts/update_contributors_log.py b/.github/scripts/update_contributors_log.py
new file mode 100644
index 0000000..f346182
--- /dev/null
+++ b/.github/scripts/update_contributors_log.py
@@ -0,0 +1,129 @@
+#!/usr/bin/env python
+
+import os
+import json
+
+'''
+This script requires following environment variables:
+
+- REPO_NAME:
+ > example: 'iamwatchdogs/test'
+ > GitHub action variable: ${{ github.repository }}
+
+- PR_NUMBER:
+ > example: '5'
+ > GitHub action variable: ${{ github.event.pull_request.number }}
+'''
+
+def get_project_title(pr_data):
+
+ # Setting default value
+ project_title = 'root'
+
+ # Iterating through the "files" list
+ for i in pr_data["files"]:
+ if '/' in i["path"]:
+ project_title = i["path"]
+ break
+
+ # If we find a directory
+ if project_title != 'root':
+ project_title = project_title.split('/')[0]
+
+ return project_title
+
+def get_contributor_name(pr_data):
+ return pr_data["author"]["login"]
+
+def get_demo_path(pr_data):
+
+ # Getting required values
+ REPO_NAME = os.environ.get('REPO_NAME')
+ PROJECT_NAME = get_project_title(pr_data)
+
+ # Handling a base case
+ if PROJECT_NAME == 'root':
+ return f'https://github.com/{REPO_NAME}/'
+
+ # Setting default value
+ demo_path = f'https://github.com/{REPO_NAME}/tree/main/{PROJECT_NAME}'
+ found_required_path = False
+
+ # Iterating through the "files" list
+ for file_data in pr_data["files"]:
+ path = file_data["path"]
+ if "index.html" in path:
+ demo_path = path
+ found_required_path = True
+ break
+ elif path.lower().endswith('index.md') or path.lower().endswith('readme.md'):
+ demo_path = path
+ found_required_path = True
+
+ # Modifying demo path as a route
+ if found_required_path:
+ demo_path = '/'.join(demo_path.split('/')[:-1])
+
+ # Checking out for spaces:
+ if ' ' in demo_path:
+ demo_path = '%20'.join(demo_path.split())
+
+ return demo_path
+
+def main():
+
+ # Setting required file paths
+ CURRENT_PR_DETAILS_PATH = 'pr.json'
+ CONTRIBUTORS_LOG_PATH = '.github/data/contributors-log.json'
+
+ # Reading contents from the current pr
+ with open(CURRENT_PR_DETAILS_PATH, 'r') as json_file:
+ current_pr = json.load(json_file)
+
+ # Getting required value for update
+ PROJECT_TITLE = get_project_title(current_pr)
+ CONTRIBUTOR_NAME = get_contributor_name(current_pr)
+ PR_NUMBER = os.environ.get('PR_NUMBER')
+ DEMO_PATH = get_demo_path(current_pr)
+
+ # Creating a new dict objects for JSON conversion
+ existing_data = None
+ new_data = {
+ PROJECT_TITLE: {
+ "contributor-name": [CONTRIBUTOR_NAME],
+ "pull-request-number": [PR_NUMBER],
+ "demo-path": DEMO_PATH
+ }
+ }
+
+ # Processing the data dumps
+ operation_name = None
+ if os.path.exists(CONTRIBUTORS_LOG_PATH):
+
+ # Reading existing Log file
+ with open(CONTRIBUTORS_LOG_PATH, 'r') as json_file:
+ existing_data = json.load(json_file)
+
+ # performing updation or addition based on `PROJECT_TITLE`
+ if PROJECT_TITLE in existing_data:
+ if CONTRIBUTOR_NAME not in existing_data[PROJECT_TITLE]["contributor-name"]:
+ existing_data[PROJECT_TITLE]["contributor-name"].append(CONTRIBUTOR_NAME)
+ if PR_NUMBER not in existing_data[PROJECT_TITLE]["pull-request-number"]:
+ existing_data[PROJECT_TITLE]["pull-request-number"].append(PR_NUMBER)
+ operation_name = 'Updated'
+ else:
+ existing_data.update(new_data)
+ operation_name = 'Appended data to'
+ else:
+ existing_data = new_data
+ operation_name = 'Created'
+
+ # Dumping the data into log file
+ with open(CONTRIBUTORS_LOG_PATH, 'w') as json_file:
+ json.dump(existing_data, json_file, indent=2)
+
+ # Output message
+ print(f'Successfully {operation_name} the log file')
+
+if __name__ == '__main__':
+ main()
\ No newline at end of file
diff --git a/.github/scripts/update_index_md.py b/.github/scripts/update_index_md.py
new file mode 100644
index 0000000..950fc79
--- /dev/null
+++ b/.github/scripts/update_index_md.py
@@ -0,0 +1,110 @@
+#!/usr/bin/env python
+
+import os
+import json
+
+'''
+This script requires following environment variables:
+
+- REPO_NAME:
+ > example: 'iamwatchdogs/test'
+ > GitHub action variable: ${{ github.repository }}
+'''
+
+def find_table_points(lines):
+
+ # Setting default return values
+ table_start = None
+ table_end = None
+
+ # Setting the markers
+ table_start_marker = ''
+ table_end_marker = ''
+
+ # Iterating over lines to find the markers
+ for index, line in enumerate(lines):
+ if table_start is None and table_start_marker in line:
+ table_start = index
+ elif table_end is None and table_end_marker in line:
+ table_end = index
+ if table_start is not None and table_end is not None:
+ break
+
+ # Checking for possible errors
+ if table_start is None or table_end is None:
+ print('Table not found in the file.')
+ exit(1)
+ elif table_start >= table_end:
+ print('Invaild use of table markers.')
+ exit(2)
+
+ return (table_start, table_end)
+
+
+def main():
+
+ # Retrieving Environmental variables
+ REPO_NAME = os.environ.get('REPO_NAME')
+
+ # Setting path for the log JSON file
+ TARGET_FILE = 'index.md'
+ CONTRIBUTORS_LOG = '.github/data/contributors-log.json'
+
+ # Retrieving data from log file
+ with open(CONTRIBUTORS_LOG, 'r') as json_file:
+ data = json.load(json_file)
+
+ # Reading lines from the file
+ with open(TARGET_FILE, 'r') as file:
+ lines = file.readlines()
+
+ # Calculating Stating and ending points of the targeted table
+ table_start, table_end = find_table_points(lines)
+
+ # Creating table header if doesn't exist
+ if table_end - table_start == 1:
+ table_header = list()
+ table_header.append('| Project Title | Contributor Names | Pull Requests | Demo |\n')
+ table_header.append('| --- | --- | --- | --- |\n')
+ lines[table_start+1:table_end] = table_header
+
+ # Initializing empty list for lines
+ updated_lines = list()
+
+ # Iterating over log to update target file
+ for title, details in data.items():
+
+ # Processing contributors-names
+ contributors_names = details['contributor-name']
+ contributors_names_list = [f'[{name}](https://github.com/{name} "goto {name} profile")' for name in contributors_names]
+ contributors_names_output = ', '.join(contributors_names_list)
+
+ # Processing pull-requests
+ pull_requests = details['pull-request-number']
+ pull_requests_list = [f'[#{pr}](https://github.com/{REPO_NAME}/pull/{pr} "visit pr \#{pr}")' for pr in pull_requests]
+ pull_requests_output = ', '.join(pull_requests_list)
+
+ # Processing demo-path
+ demo_path = details['demo-path']
+ if ' ' in demo_path:
+ demo_path = '%20'.join(demo_path.split())
+ demo_path_output = f'[/{REPO_NAME}/{title}/]({demo_path} "view the result of {title}")'
+ if title == 'root' or title == '{init}':
+ demo_path_output = f'[/{REPO_NAME}/]({demo_path} "view the result of {title}")'
+
+ # Appending all data together
+ updated_lines.append(f'| {title} | {contributors_names_output} | {pull_requests_output} | {demo_path_output} |\n')
+
+ # Updating the lines with updated data
+ lines[table_start+3:table_end] = updated_lines
+
+ # Updating the target file
+ with open(TARGET_FILE, 'w') as file:
+ file.writelines(lines)
+
+ # Printing Success Message
+ print(f"Updated '{TARGET_FILE}' Successfully")
+
+
+if __name__ == '__main__':
+ main()
\ No newline at end of file
diff --git a/.github/workflows/c-cpp-linter.yml b/.github/workflows/c-cpp-linter.yml
new file mode 100644
index 0000000..0ee5058
--- /dev/null
+++ b/.github/workflows/c-cpp-linter.yml
@@ -0,0 +1,72 @@
+name: c-cpp-linter
+
+on:
+ pull_request:
+ branches: [main]
+ paths: ['**.c', '**.cpp', '**.h', '**.hpp', '**.cc', '**.hh', '**.cxx', '**.hxx']
+
+jobs:
+ c-cpp-linter:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Check out the repo
+ uses: actions/checkout@v4.1.0
+
+ - uses: cpp-linter/cpp-linter-action@v2.6.1
+ id: linter
+ continue-on-error: false
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ with:
+ style: file
+ tidy-checks: ''
+ thread-comments: true
+ step-summary: true
+
+ - name: Fail checks
+ if: steps.linter.outputs.checks-failed > 0
+ run: |
+ echo "Some files failed the linting checks!"
+ echo "No. of checks failed: ${{ steps.linter.outputs.checks-failed }}"
+ echo "Use the clang-format diffs to find more help"
+
+ - name: Setup Python
+ if: steps.linter.outputs.checks-failed > 0
+ uses: actions/setup-python@v4.7.1
+ with:
+ python-version: '3.12'
+
+ - name: Getting PR details
+ if: steps.linter.outputs.checks-failed > 0
+ run: |
+ touch pr.json # creating empty file for paths
+ gh pr view $PR_NUMBER --json files > pr.json # storing file paths
+ touch res # creating empty file for final output
+ env:
+ PR_NUMBER: ${{ github.event.pull_request.number }}
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Python script for clang diff
+ if: steps.linter.outputs.checks-failed > 0
+ uses: jannekem/run-python-script-action@v1
+ with:
+ script: |
+ import os
+ import json
+ import sys
+ with open('pr.json','r') as json_file:
+ data = json.load(json_file)
+ for file in data["files"]:
+ path = file["path"]
+ if os.path.exists(path):
+ os.system('echo "" >> res')
+ os.system(f'echo "Filename: {path}" >> res')
+ os.system('echo "" >> res')
+ os.system(f'clang-format-12 -style=Google {path} >> res')
+ os.system('echo ---------------------------------------- >> res')
+
+ - name: Show diffs and exit
+ if: steps.linter.outputs.checks-failed > 0
+ run: |
+ cat res
+ exit 1
\ No newline at end of file
diff --git a/.github/workflows/deploy-gh-pages.yml b/.github/workflows/deploy-gh-pages.yml
new file mode 100644
index 0000000..accd813
--- /dev/null
+++ b/.github/workflows/deploy-gh-pages.yml
@@ -0,0 +1,57 @@
+name: deploy
+
+on:
+ workflow_run:
+ workflows: [update-contributor-details]
+ types: [completed]
+
+ workflow_dispatch:
+
+permissions:
+ contents: read
+ pages: write
+ id-token: write
+
+concurrency:
+ group: "pages"
+ cancel-in-progress: false
+
+jobs:
+ # Build job
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4.1.0
+ - name: Setting up python environment
+ uses: actions/setup-python@v4.7.1
+ - name: Replace md table with HTML table
+ run: |
+ if [ -f ".github/data/contributors-log.json" ]; then
+ python .github/scripts/convert_to_html_tables.py
+ else
+ echo "contributors log is not present, proceeding to deploy anyway..."
+ fi
+ env:
+ REPO_NAME: ${{ github.repository }}
+ - name: Setup Pages
+ uses: actions/configure-pages@v3
+ - name: Build with Jekyll
+ uses: actions/jekyll-build-pages@v1
+ with:
+ source: ./
+ destination: ./_site
+ - name: Upload artifact
+ uses: actions/upload-pages-artifact@v2
+
+ # Deployment job
+ deploy:
+ environment:
+ name: github-pages
+ url: ${{ steps.deployment.outputs.page_url }}
+ runs-on: ubuntu-latest
+ needs: build
+ steps:
+ - name: Deploy to GitHub Pages
+ id: deployment
+ uses: actions/deploy-pages@v2
\ No newline at end of file
diff --git a/.github/workflows/update-contributors-details.yml b/.github/workflows/update-contributors-details.yml
new file mode 100644
index 0000000..aeb9faa
--- /dev/null
+++ b/.github/workflows/update-contributors-details.yml
@@ -0,0 +1,63 @@
+name: update-contributor-details
+
+on:
+ pull_request_target:
+ types: [closed]
+ branches: [main]
+
+env:
+ REPO_NAME: ${{ github.repository }}
+ PR_NUMBER: ${{ github.event.pull_request.number }}
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+jobs:
+ update-by-pr:
+ if: ${{ github.event.pull_request.title != 'init' && github.event.pull_request.merged == true }}
+ runs-on: ubuntu-latest
+
+ permissions:
+ contents: write
+
+ steps:
+ - name: Checking out the repo
+ uses: actions/checkout@v4.1.0
+
+ - name: Setup Python
+ uses: actions/setup-python@v4.7.1
+
+ - name: Getting PR details
+ run: |
+ touch pr.json
+ gh pr view $PR_NUMBER --json author,url,files > pr.json
+
+ - name: Updating log file
+ run: |
+ if [ ! -d ".github/data" ]; then
+ mkdir .github/data
+ echo "Create `.github/data` directory"
+ fi
+ python .github/scripts/update_contributors_log.py
+ cat .github/data/contributors-log.json
+
+ - name: Updating index.md file
+ run: |
+ python .github/scripts/update_index_md.py
+ cat index.md
+
+ - name: Remove unwanted files
+ run: rm pr.json
+
+ - name: Commit and Push
+ run: |
+ if [ "$(git status | grep 'Changes not staged\|Untracked files')" ]; then
+ git diff
+ git config --global user.email "actions@github.com"
+ git config --global user.name "GitHub Actions"
+ git add .
+ git commit -m "Updated Contributors Details"
+ git push origin main
+ echo "Pushed the update successfully"
+ else
+ echo "Nothing to push"
+ exit 1
+ fi
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 259148f..f50cdbb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -30,3 +30,9 @@
*.exe
*.out
*.app
+
+# IDE settings
+.vscode
+
+# MAC files
+.DS_Store
\ No newline at end of file
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
new file mode 100644
index 0000000..b57bffe
--- /dev/null
+++ b/CODE_OF_CONDUCT.md
@@ -0,0 +1,128 @@
+# 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, 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
+.
+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.0, available at
+https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
+
+Community Impact Guidelines were inspired by [Mozilla's code of conduct
+enforcement ladder](https://github.com/mozilla/diversity).
+
+[homepage]: https://www.contributor-covenant.org
+
+For answers to common questions about this code of conduct, see the FAQ at
+https://www.contributor-covenant.org/faq. Translations are available at
+https://www.contributor-covenant.org/translations.
\ No newline at end of file
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..f5b0865
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,171 @@
+# Welcome to CONTRIBUTING.md
+
+Hey there, fellow Developer !!!... I'm happy to see you being hyped about making your *(probably first)* open-source contribution to this repo. We heartily welcome you to an amazing journey of open-source contribution. I hope you have fun learning and teaching at the same time. For the **C-CPP-Projects** repo, you'll be contributing the mini-projects that you’ve built while learning the concepts of c/c++ *(or)* c/cpp.
+
+## Setting up Environment
+
+You don't need any special dependencies to use it locally, Just make sure you have *[**git**](https://git-scm.com/ "visit official website") and required complier. It's recommended that GitHub cli *(or)* [**gh**](https://cli.github.com/ "visit official website") is installed for easier access to your repo, but that's totally optional.
+
+## Getting Started with Contribution
+
+So, before you jump right into your code editor and start working on your project, make sure you understand and follow the file structure and guidelines which are mentioned below.
+
+### Instructions and Guidelines
+
+- Most of the time you'll be working on c/c++ rather than the default files present within the repo. So, Make sure you **do not add/remove/modify any content present with the default files**.
+
+ > [!IMPORTANT]
+ > - If any such changes are to be found within your Pull Request *(PR)*, then it will be **rejected** i.e., until and unless it's mentioned on an [Issue](https://github.com/Grow-with-Open-Source/C-CPP-Projects/issues "goto issues tab").
+ > - If you wish to work on default file *(either to update or fix a bug)*, create an issue first and get assigned to the issue to let others know that the issue has been recorded and you've already begun working on it.
+
+- Also, your c/c++ code will be linted automatically as soon as you make the PR. The PR will be merged if and only if all the checks are completed. If there's any issue with the linting of your work, you can contact the maintainer within the conversation tab of your PR.
+
+- The linter used in the repo is [C/C++ Linter](https://github.com/marketplace/actions/c-c-linter "view in marketplace"), this linter is using [clang-tidy](https://clang.llvm.org/extra/clang-tidy/ "visit official website") and [clang-format](https://clang.llvm.org/docs/ClangFormatStyleOptions.html "visit official website") for stict checking of code-writing standards *(which mean they also check for the way you write your code)*. Even though your code successfully complies and runs as expected, if it's not following the coding standards or clang rules then the checks fails.
+
+- If you facing an issue while fixing your code to follow the coding standards then make sure to check the linting workflow as the step `Show diffs and exit` within the liniting workflow displays output of the command `clang-format-12 -style=Google ` *(which basically shows the formatted version of your code by following the stye guide provided by Google)*.
+
+
+ Thinking why did we use the workflow to format the code for you ?
+
+
+ > These coding style *(or)* standards will help you write more clean and understandable code thus increaing the readablitly and overall quality of the code. If we did the job for you by formating the code into the recommended coding standards, then it might slow you down in long run of writing and maintain your code. Even though it help you right now to contribute to this repo, you'll not be able to learn something new. Thus, we decided to help you by providing result of formatted code, in case your were not able to figure out. Happy learning and contributing
+
+
+
+
+#### File Structure
+
+- The basic file structure of this repo *(excluding any contributions)* as follows:
+
+ > ```
+ > /C-CPP-Projects/
+ > |
+ > ├── .github
+ > | ├── data
+ > | | └── contributors-log.json
+ > | ├── scripts
+ > | | ├── convert_to_html_tables.py
+ > | | ├── update_contributors_log.py
+ > | | └── update_index_md.py
+ > | └── workflows
+ > | ├── c-cpp-linter.yml
+ > | ├── deploy-gh-pages.yml
+ > | └── update-contributors-details.yml
+ > ├── _includes
+ > | └── head-custom.html
+ > ├── assets
+ > | └── img
+ > | ├── page-cover.png
+ > | └── favicon.icon
+ > ├── index.md
+ > ├── _config.yml
+ > ├── .gitignore
+ > ├── LICENSE
+ > ├── CODE_OF_CONDUCT.md
+ > ├── CONTRIBUTING.md
+ > └── README.md
+ > ```
+
+- Before you begin with your project contribution, make sure you create a new directory *(or)* folder within the repo with your project name.
+
+ > [!NOTE]
+ > It's suggested to use any of the following naming conventions for the directory *(or)* folder:
+ >
+ > | Format | Example |
+ > | :---: | :---: |
+ > | Separated with dashes | `/my-project-name/` |
+ > | Separated with underscores | `/my_project_name/` |
+ >
+ > Note that you can also use spaces *(like `/my project name/`)* but it's recommended to use any of the above-mentioned naming conversions.
+
+- You can write simple docs for your project using [markdown](https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax "visit official GitHub Markdown Docs"). You can write descriptions, add screenshots or even upload a video. **Just make sure documentation is done within files named `README.md` *(or)* `index.md`**
+
+- Even if you're project is small, try to keep it organized by keeping related files within their directories/folders
+
+
+ Here's an sample example
+
+
+ ```
+ /C-CPP-Projects/
+ |
+ ├──
+ └──
+ ├── header-files
+ | └──
+ ├── main.c # or `main.cpp`
+ └── README.md
+ ```
+
+ > [!NOTE]
+ > Note that this is an example to give you an idea of organizing files, no need to follow the exact pattern. You can come up with your own hierarchy based on your requirements.
+
+
+
+
+### Contributing
+
+Now that you have a basic understanding of this repo, let's talk a bit about the process of contributing...
+
+- **Step 1:** You start you setting up the environment [*(as discussed above)*](#setting-up-environment).
+
+- **Step 2:** Now start by [forking](https://github.com/Grow-with-Open-Source/C-CPP-Projects/fork "let's fork the repo") the repository.
+
+- **Step 3:** Clone the forked repository to your local machine.
+ ```bash
+ #cloning the repo
+ git clone https://github.com//C-CPP-Projects.git
+
+ #entering the project directory
+ cd C-CPP-Projects
+ ```
+
+- **Step 4:** Create a new branch to work on your contribution. use the following command:
+ ```bash
+ # create and check out to new branch
+ git checkout -b
+
+ # check your branch currently in
+ git branch
+ ```
+
+- **Step 5:** Now go ahead and create your own directory/folder with your project name with a proper naming convention and finish your project while maintaining a [file structure](#file-structure) & following other rules [*(as discussed above)*](#instructions-and-guidelines).
+
+- **Step 6:** Make sure you commit each and every change while working on your project parallelly, *(like one commit for creating `index.js`, another for writing a piece of code, and so on...)*. Using the following command:
+ ```bash
+ # tracking or staging the changes
+ git add .
+
+ # commiting the changes
+ git commit -m "
+ ```
+
+ > [!IMPORTANT]
+ > Make sure to commit your each and every change with proper description
+
+- **Step 7:** After committing all the changes and completion of your work. push your commit to your forked repo, using the following commands:
+ ```bash
+ # check your branch name
+ git branch
+
+ # push your commit to the origin repo
+ git push origin
+ ```
+
+- **Step 8:** Now, create a pull request to the [original repo](https://github.com/Grow-with-Open-Source/C-CPP-Projects). [Learn about Pull requests](https://docs.github.com/articles/using-pull-requests "official GitHub documentation")
+
+- **Step 9:** After creating the pull request wait till the linting checks are done, if there's any issue with your c/c++ code then the checks won't pass. And if the checks won't pass you have to fix the errors, you can check the linting workflow to know where the error occurred. If you need any help, you can contact the maintainer within the PR.
+
+- **Step 10:** If the linting checks are done and your code passes the liniting checks, then wait for the maintainer to review your code and merge the pull request. If there's any issue with your PR, the maintainer will contact you and with the help of the maintainer you can resolve the issue, so that the maintainer merge your PR.
+
+When the maintainer merges your PR, you have successfully made your *(probably first)* open-source contribution to showcase your learning and provide a reference to a complete newbie. Everybody can see your work and make use of it. Good job, mate !!...
+
+## Rules and Regulations
+
+Here are some ground rules that you need to follow:
+
+- It's important for you to commit to each and every change. Don't just finish all of your work with a single commit. If you're a newbie, it will only be tolerated 3 times.
+- Sending several pull requests for a single post is not accepted.
+- Your Pull Request will not be merged, if you have modified, changed or deleted any files or content that doesn't belong to you.
+- Pull Request containing any illegal, NFSW or any other content which doesn't help others in any way possible will be closed immediately.
+- The Pull Request will only be merged if everything seems to be in order. You be notified if you did something wrong, and your pull request will only be merged if the notified changes are made.
\ No newline at end of file
diff --git a/README.md b/README.md
index 51132b4..dcbd96f 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,81 @@
-# C-CPP-Projects
\ No newline at end of file
+# C-CPP-Projects
+
+
+
+Welcome to **C-CPP-Projects**, one of the best ways to introduce the world of open-source contribution! Whether you're a beginner looking to take your first steps or an intermediate developer seeking to refine your skills, this repository is designed to make your journey into open-source development. This repo will provide with best hands-on understanding of open source contributions.
+
+Our mission is to empower newcomers, providing them with a welcoming environment to learn and grow in the open-source community. This repo offers a curated collection of C-CPP-based projects that are both fun to work on and highly educational. Through hands-on experience and guidance from our dedicated team of maintainers, you'll gain the skills and confidence to contribute to larger projects with ease. We can't wait to see what you'll bring to the open-source table – so dive in, explore, and start your open-source adventure today!
+
+[](https://grow-with-open-source.github.io/C-CPP-Projects/)
+
+All your work details, including the path to your work, will be displayed on the Jekyll-based pages that are deployed using GitHub Pages. So, we expect quality work from you so that everyone can view your work with ease. This repo will not only introduce open-source contributions but also be one of the best platforms to showcase your skills and learn new skills from other projects. Thus, you'll be learning and teaching at the same time.
+
+## Contribution
+
+Hey there, fellow developer !!!... I'm happy to see you are interested in contributing to this repo. As this is an open-source repo containing a collection of C-CPP-based projects, you're always welcome to showcase your learning & implementation efforts. As the repo will be hosted using GitHub pages, you can write small documentation explaining about your project. As your work is being hosted live, we expect you to make some quality contributions so that others can learn and appreciate your work.
+
+> [!IMPORTANT]
+> Make sure to check the [CONTRIBUTING.md](https://github.com/Grow-with-Open-Source/C-CPP-Projects/blob/main/CONTRIBUTING.md "goto CONTRIBUTING.md") to understand the rules, file structure and step-by-step guide for contribution.
+
+- **Step 1:** Make sure you have required tools within you local machine *(like *git, vs code, node.js and so on)*.
+- **Step 2:** Now start by [forking](https://github.com/Grow-with-Open-Source/C-CPP-Projects/fork "let's fork the repo") the repository.
+- **Step 3:** Clone the forked repository to your local machine.
+ ```bash
+ #cloning the repo
+ git clone https://github.com//C-CPP-Projects.git
+ ```
+- **Step 4:** Create a new branch to work on your contribution. use the following command:
+ ```bash
+ # create and check out to new branch
+ git checkout -b
+ ```
+- **Step 5:** Now go ahead and create your directory/folder with your project name with a proper naming convention and finish your project while maintaining a file structure & following other rules [*(checkout CONTRIBUTING.md for more details)*](https://github.com/Grow-with-Open-Source/C-CPP-Projects/blob/main/CONTRIBUTING.md#instructions-and-guidelines).
+- **Step 6:** Make sure you commit every change while working on your project parallelly. Using the following command:
+ ```bash
+ # tracking or staging the changes
+ git add .
+
+ # commiting the changes
+ git commit -m ""
+ ```
+
+ > [!IMPORTANT]
+ > Make sure to commit each change with a proper description
+- **Step 7:** After committing all the changes and completion of your work. push your commit to your forked repo, using the following commands:
+ ```bash
+ # push your commit to the origin repo
+ git push origin
+ ```
+
+- **Step 8:** Now, create a pull request to the [original repo](https://github.com/Grow-with-Open-Source/C-CPP-Projects). [*Learn about Pull requests*](https://docs.github.com/articles/using-pull-requests "official GitHub documentation")
+- **Step 9:** After making PR, check for the linting check to pass. If the linting checks fail, find and fix the issue with the help of the eslint result in workflow.
+- **Step 10:** If the liniting checks passed, then wait for the maintainer to check and merge the pull request.
+
+When the maintainer merges your PR, you have successfully made your *(probably first)* open-source contribution to showcase your learning and provide a reference to a complete newbie. Everybody can see your work and make use of it. Good job, mate !!...
+
+# Contributors
+
+Thank you for your valuable contribution to this repo. Your work will not be forgotten...
+
+
\ No newline at end of file
diff --git a/_config.yml b/_config.yml
new file mode 100644
index 0000000..6593d19
--- /dev/null
+++ b/_config.yml
@@ -0,0 +1,22 @@
+theme: jekyll-theme-cayman
+title: 'C-CPP-Projects'
+page_title: 'Jumpstart Open-Source with C/C++'
+description: 'Start Your Open-Source Journey with C/C++ Projects'
+logo: 'assets/img/favicon.ico'
+defaults:
+ - scope:
+ path: ''
+ values:
+ image:
+ path: 'assets/img/page-cover.png'
+ height: 630
+ width: 1200
+exclude:
+ - .gitignore
+ - README.md
+ - CONTRIBUTING.md
+ - CODE_OF_CONDUCT.md
+ - LICENSE
+
+# For reference, Jekyll SEO Tag:
+# https://github.com/jekyll/jekyll-seo-tag/blob/master/lib/template.html
\ No newline at end of file
diff --git a/_includes/head-custom.html b/_includes/head-custom.html
new file mode 100644
index 0000000..26baf9a
--- /dev/null
+++ b/_includes/head-custom.html
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/assets/img/favicon.ico b/assets/img/favicon.ico
new file mode 100644
index 0000000..aea9b4c
Binary files /dev/null and b/assets/img/favicon.ico differ
diff --git a/assets/img/page-cover.png b/assets/img/page-cover.png
new file mode 100644
index 0000000..59783f2
Binary files /dev/null and b/assets/img/page-cover.png differ
diff --git a/index.md b/index.md
new file mode 100644
index 0000000..1804241
--- /dev/null
+++ b/index.md
@@ -0,0 +1,26 @@
+# Welcome to [C-CPP-Projects](https://github.com/Grow-with-Open-Source/C-CPP-Projects/ "visit original repo")
+
+Welcome to **C-CPP-Projects**, your friendly initiation into the world of open-source contributions! Whether you're new to coding or have some experience, this repository is a great place to start your open-source journey. Our goal is to nurture your growth by providing a curated collection of C-CPP projects that are both engaging and educational. With the support of our dedicated maintainers, you'll gain the confidence and expertise to seamlessly contribute to more substantial open-source endeavors. We're excited to have you on board, so dive right in, explore, and begin your open-source adventure today!
+
+# Table of Contribution
+
+