diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 1c2bf2f..c39651b 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,48 +1,59 @@ - +## Type of Contribution -## Description + - +- [ ] πŸŽ‰ **Adding myself as a new contributor** (following the intro course) +- [ ] πŸ› **Bug fix** +- [ ] ✨ **New feature** +- [ ] πŸ“ **Documentation update** +- [ ] πŸ”§ **Other maintenance/improvement** -## What type of PR is this? (check all applicable) +--- -- [ ] 🀝 Add a contributor -- [ ] πŸ“ Documentation Update +## For New Contributors (Adding Yourself to Guestbook) -## Related Issues + - +### About Me +- **Name:** +- **Location (optional):** +- **What I'm learning:** +- **Fun fact:** -## Contributors Checklist +--- -### I've read through the [Getting Started](https://intro.opensauced.pizza/#/intro-to-oss/how-to-contribute-to-open-source?id=getting-started) section +## For Other Contributions -- [ ] βœ… Yes -- [ ] ❌ Not yet + -### Have you run `npm run contributors:generate` to generate your profile and the badge on the README? +### Description + -- [ ] βœ… Yes -- [ ] ❌ No +### Changes Made + +- +- +- -## Added to documentation? +### Screenshots (if applicable) + -- [ ] πŸ“œ README.md -- [ ] πŸ™… no documentation needed +### Testing +- [ ] I have tested these changes locally +- [ ] I have reviewed my own code +- [ ] I have added/updated documentation if needed -## Screenshot (Required for PR Review) +--- - +## Additional Notes + ## [optional] What GIF best describes this PR or how it makes you feel? diff --git a/.github/workflows/update-contributors.yml b/.github/workflows/update-contributors.yml new file mode 100644 index 0000000..23e3233 --- /dev/null +++ b/.github/workflows/update-contributors.yml @@ -0,0 +1,146 @@ +name: Update Contributors + +on: + push: + branches: [main] + paths: ['contributors/*.json'] + + # Allow manual triggering for maintenance + workflow_dispatch: + +permissions: + contents: write + pull-requests: read + +jobs: + update-contributors: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + token: ${{ secrets.GITHUB_TOKEN }} + fetch-depth: 0 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '18' + + - name: Install dependencies + run: npm install -g all-contributors-cli + + - name: Backup current contributors + run: cp .all-contributorsrc .all-contributorsrc.backup || echo "No existing config found" + + - name: Reset all-contributors config + run: | + node -e "const fs=require('fs'); fs.writeFileSync('.all-contributorsrc', JSON.stringify({projectName:'guestbook',projectOwner:'OpenSource-Community',repoType:'github',repoHost:'https://github.com',files:['README.md'],imageSize:100,commit:false,commitConvention:'angular',contributors:[]},null,2));" + + - name: Write contributor update script + run: | + cat > /tmp/add-contributor.js << 'EOF' + const fs = require('fs'); + const filePath = process.argv[2]; + const rcFile = '.all-contributorsrc'; + const d = JSON.parse(fs.readFileSync(filePath, 'utf8')); + const rc = JSON.parse(fs.readFileSync(rcFile, 'utf8')); + const username = d.github || ''; + const existing = rc.contributors.find(c => c.login === username); + if (!existing && username) { + rc.contributors.push({ + login: username, + name: d.name || '', + avatar_url: 'https://avatars.githubusercontent.com/' + username, + profile: d.profile || ('https://github.com/' + username), + contributions: d.contributions || [] + }); + fs.writeFileSync(rcFile, JSON.stringify(rc, null, 2)); + console.log('Added: ' + username); + } else if (existing) { + console.log('Already exists: ' + username); + } else { + console.error('Error: missing github field in ' + filePath); + process.exit(1); + } + EOF + + - name: Process contributor files + run: | + echo "Processing contributor files..." + + if [ ! -d "contributors" ] || [ -z "$(ls -A contributors/*.json 2>/dev/null)" ]; then + echo "No contributor files found" + exit 0 + fi + + total_files=$(ls -1 contributors/*.json 2>/dev/null | grep -v -E '(example-contributor\.json|\.gitkeep|README\.md)' | wc -l) + echo "Found $total_files contributor files to process" + + processed=0 + for file in contributors/*.json; do + if [ -f "$file" ]; then + filename=$(basename "$file") + + if [[ "$filename" == "example-contributor.json" ]] || [[ "$filename" == ".gitkeep" ]] || [[ "$filename" == "README.md" ]]; then + echo "Skipping template file: $filename" + continue + fi + + echo "Processing $file" + + if ! node -e "JSON.parse(require('fs').readFileSync(process.argv[1],'utf8'))" "$file" 2>/dev/null; then + echo "Error: Invalid JSON in $file" + continue + fi + + name=$(node -e "const d=JSON.parse(require('fs').readFileSync(process.argv[1],'utf8')); process.stdout.write(d.name||'')" "$file") + github_username=$(node -e "const d=JSON.parse(require('fs').readFileSync(process.argv[1],'utf8')); process.stdout.write(d.github||'')" "$file") + contributions=$(node -e "const d=JSON.parse(require('fs').readFileSync(process.argv[1],'utf8')); process.stdout.write((d.contributions||[]).join(','))" "$file") + + if [ -z "$name" ] || [ -z "$github_username" ] || [ -z "$contributions" ]; then + echo "Error: Missing required fields in $file" + continue + fi + + echo "Adding contributor: $name (@$github_username)" + node /tmp/add-contributor.js "$file" + + processed=$((processed + 1)) + fi + done + + echo "Processed $processed contributor files" + + - name: Generate contributors section + run: npx all-contributors generate + + - name: Check for changes + id: changes + run: | + if [ -n "$(git status --porcelain)" ]; then + echo "changes=true" >> $GITHUB_OUTPUT + else + echo "changes=false" >> $GITHUB_OUTPUT + fi + + - name: Commit and push changes + if: steps.changes.outputs.changes == 'true' + run: | + git config --local user.email "action@github.com" + git config --local user.name "Contributors Bot" + git add . + git commit -m "chore: update contributors list + + Auto-generated from contributors/*.json files + + [skip ci]" + git push + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Success notification + if: steps.changes.outputs.changes == 'true' + run: | + echo "Contributors list updated successfully!" + echo "Changes committed and pushed to main branch." \ No newline at end of file diff --git a/.github/workflows/validate-contributor.yml b/.github/workflows/validate-contributor.yml new file mode 100644 index 0000000..898e245 --- /dev/null +++ b/.github/workflows/validate-contributor.yml @@ -0,0 +1,74 @@ +name: Validate Contributor + +on: + pull_request: + paths: + - 'contributors/*.json' + +jobs: + validate: + runs-on: ubuntu-latest + steps: + - name: Checkout PR + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '18' + + - name: Get changed files + id: changed-files + uses: tj-actions/changed-files@v39 + with: + files: | + contributors/*.json + + - name: Validate contributor files + if: steps.changed-files.outputs.any_changed == 'true' + run: | + echo "πŸ” Validating contributor files..." + + # Install dependencies + npm install + + # Run validation + node scripts/validate-contributor.js + + # Check specific changed files + for file in ${{ steps.changed-files.outputs.all_changed_files }}; do + echo "Checking $file" + + if [[ "$file" == contributors/*.json ]]; then + filename=$(basename "$file") + username="${filename%.json}" + + # Run preview for the specific file + echo "Preview for $username:" + node scripts/preview-contribution.js "$username" + fi + done + + - name: Comment on PR + if: failure() + uses: actions/github-script@v7 + with: + script: | + github.rest.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: '❌ Your contributor file has validation errors. Please check the [action logs](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}) for details.\n\nCommon issues:\n- Username in filename must match the `github` field in JSON\n- All required fields must be present: `name`, `github`, `contributions`\n- Use valid contribution types\n\nNeed help? Check the [contributor guide](docs/guides/contributor-guide.md).' + }) + + - name: Success comment + if: success() && steps.changed-files.outputs.any_changed == 'true' + uses: actions/github-script@v7 + with: + script: | + github.rest.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: 'βœ… Your contributor file is valid! Once this PR is merged, you\'ll automatically appear in the contributors section.\n\nThank you for your contribution! πŸŽ‰' + }) \ No newline at end of file diff --git a/.github/workflows/validate-contributors.yml b/.github/workflows/validate-contributors.yml new file mode 100644 index 0000000..2409a1d --- /dev/null +++ b/.github/workflows/validate-contributors.yml @@ -0,0 +1,52 @@ +name: Validate Contributors + +on: + pull_request: + paths: + - 'contributors/*.json' + push: + branches: [main] + paths: + - 'contributors/*.json' + +jobs: + validate: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Setup Python + uses: actions/setup-python@v4 + with: + python-version: '3.x' + + - name: Validate contributor files + run: | + python3 scripts/validate-contributor.py + + - name: Check for duplicate contributors + run: | + # Check for duplicate GitHub usernames + duplicates=$(find contributors/ -name "*.json" -exec basename {} .json \; | sort | uniq -d) + if [ -n "$duplicates" ]; then + echo "❌ Duplicate contributor files found:" + echo "$duplicates" + exit 1 + else + echo "βœ… No duplicate contributors found" + fi + + - name: Validate JSON syntax + run: | + echo "πŸ” Validating JSON syntax..." + for file in contributors/*.json; do + if [ -f "$file" ]; then + echo "Checking $file..." + python3 -c "import json; json.load(open('$file'))" || { + echo "❌ Invalid JSON in $file" + exit 1 + } + fi + done + echo "βœ… All JSON files have valid syntax" \ No newline at end of file diff --git a/.github/workflows/validate-pr.yml b/.github/workflows/validate-pr.yml new file mode 100644 index 0000000..b67345b --- /dev/null +++ b/.github/workflows/validate-pr.yml @@ -0,0 +1,120 @@ +name: Validate Pull Request + +on: + pull_request: + types: [opened, synchronize, reopened] + +jobs: + validate-contributor-pr: + if: contains(github.event.pull_request.title, 'contributor') || contains(github.event.pull_request.title, 'Add') + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Get changed files + id: changed-files + uses: tj-actions/changed-files@v39 + with: + files: contributors/*.json + + - name: Validate contributor submission + if: steps.changed-files.outputs.any_changed == 'true' + run: | + echo "πŸ” Validating contributor submission..." + + # Get the list of changed files + changed_files="${{ steps.changed-files.outputs.all_changed_files }}" + + echo "Changed files: $changed_files" + + # Count number of changed files + file_count=$(echo "$changed_files" | wc -w) + + if [ "$file_count" -gt 1 ]; then + echo "❌ ERROR: Please only add ONE contributor file per PR" + echo " You've changed $file_count files: $changed_files" + echo " Create separate PRs for each contributor." + exit 1 + fi + + # Validate the single file + for file in $changed_files; do + echo "Validating $file..." + + # Check if it's a JSON file in contributors directory + if [[ ! "$file" =~ ^contributors/[^/]+\.json$ ]]; then + echo "❌ ERROR: Invalid file location. Must be contributors/username.json" + exit 1 + fi + + # Extract filename without path and extension + filename=$(basename "$file" .json) + + # Validate JSON structure + python3 -c ' + import json + import sys + + try: + with open("'"$file"'", "r") as f: + data = json.load(f) + + required_fields = ["name", "github", "contributions"] + missing_fields = [field for field in required_fields if field not in data or not data[field]] + + if missing_fields: + print(f"❌ ERROR: Missing required fields: {missing_fields}") + sys.exit(1) + + # Check if filename matches github username + if data["github"] != "'"$filename"'": + print(f"❌ ERROR: Filename must match GitHub username") + print(f" File: {filename}.json") + print(f" GitHub username in file: {data['github']}") + print(f" Should be: {data['github']}.json") + sys.exit(1) + + print("βœ… Contributor file is valid!") + + except json.JSONDecodeError as e: + print(f"❌ ERROR: Invalid JSON format: {e}") + sys.exit(1) + except Exception as e: + print(f"❌ ERROR: {e}") + sys.exit(1) + ' || exit 1 + done + + echo "βœ… All validations passed!" + + - name: Welcome comment for new contributors + if: steps.changed-files.outputs.any_changed == 'true' + uses: actions/github-script@v7 + with: + script: | + const changedFiles = '${{ steps.changed-files.outputs.all_changed_files }}'; + + if (changedFiles.trim()) { + const comment = `πŸŽ‰ **Welcome to the guestbook!** + + Thank you for contributing! Your submission looks good and follows the new conflict-free process. + + Once this PR is merged: + - βœ… You'll be automatically added to the contributors list in the README + - πŸŽ“ Continue your open source journey and keep contributing! + + **What happens next?** + - A maintainer will review your PR + - After merge, a GitHub Action will automatically update the README + - You'll see your profile appear in the contributors section! + + Thanks for being part of the OpenSource-Communities! πŸš€`; + + github.rest.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: comment + }); + } diff --git a/.github/workflows/welcome-new-contributor.yml b/.github/workflows/welcome-new-contributor.yml new file mode 100644 index 0000000..10b7350 --- /dev/null +++ b/.github/workflows/welcome-new-contributor.yml @@ -0,0 +1,52 @@ +name: Welcome New Contributors + +on: + pull_request_target: + types: [closed] + paths: + - 'contributors/*.json' + +permissions: + pull-requests: write + issues: write + +jobs: + welcome: + if: github.event.pull_request.merged == true + runs-on: ubuntu-latest + steps: + - name: Welcome new contributor + uses: actions/github-script@v7 + with: + script: | + // Check if this is a contributor addition PR + const prTitle = context.payload.pull_request.title.toLowerCase(); + const isContributorPR = prTitle.includes('contributor') || prTitle.includes('add') || prTitle.includes('guestbook'); + + if (isContributorPR) { + const welcomeMessage = `πŸŽ‰ **Congratulations @${context.payload.pull_request.user.login}!** + + Your contribution has been successfully merged and you're now part of our contributors list! + + **What just happened:** + βœ… Your contributor JSON file was processed + βœ… The README has been automatically updated with your information + βœ… You're now officially a contributor to this open source project! + + **Next steps from the Intro to Open Source course:** + πŸ• Check out the [pizza-verse](https://github.com/OpenSource-Communities/pizza-verse) repository for more contributions! + + **Share your success:** + - Post about your first open source contribution on socials + - Share in the [GitHub Discussions](https://github.com/OpenSource-Communities/guestbook/discussions) + - Tell your friends about the course! + + Welcome to the open source community! πŸš€`; + + await github.rest.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: welcomeMessage + }); + } diff --git a/.gitignore b/.gitignore index 5370378..47b8fb8 100644 --- a/.gitignore +++ b/.gitignore @@ -245,4 +245,5 @@ sketch .history .ionide -# End of https://www.toptal.com/developers/gitignore/api/node,macos,next,typescript,react,visualstudiocode,nextjs,solidjs,qwik,mitosis + + diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 66790cb..ac84838 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,9 +1,13 @@ # Contributing Guidelines -This repository is part of the [Intro to Open Source course](https://opensauced.pizza/learn/intro-to-oss/). We recommend you to take and complete the course before you contribute to this repository. +This repository is part of the [Intro to Open Source course](https://opensauced.pizza/learn/intro-to-oss/). We recommend you take and complete the course before you contribute to this repository. Contributions are always welcome, no matter how large or small. Before you begin, please read our [Code of Conduct](https://github.com/OpenSource-Communities/.github/blob/main/CODE_OF_CONDUCT.md) and follow the directions below: +## πŸŽ‰ Adding Yourself as a Contributor + +πŸ“– To add yourself as a contributor to the guestbook, please **see [docs/guides/contributor-guide.md](docs/guides/contributor-guide.md) for detailed instructions and examples** + ## Recommended Communication Style 1. Always leave screenshots for visual changes. @@ -16,8 +20,16 @@ Contributions are always welcome, no matter how large or small. Before you begin - Issues with the `needs triage` label are unavailable until they are triaged and the label is removed. Feel free to check on the issue regularly if you want to work on it. - If you wish to work on an open issue, you can comment on it and tag the maintainers. Please refrain from working on an issue before it's assigned to you. -In case you get stuck, feel free to ask for help in the [discussion](https://github.com/Virtual-Coffee/guestbook/discussions/categories/q-a). +In case you get stuck, feel free to ask for help in the [discussion](https://github.com/OpenSource-Communities/guestbook/discussions). ## Getting Started -Please follow the [Let's Get Practical](https://opensauced.pizza/learn/intro-to-oss/how-to-contribute-to-open-source#lets-get-practical) section of the [Intro to Open Source course](https://opensauced.pizza/learn/intro-to-oss/) to add yourself to the guestbook. +Please follow the updated instructions in [docs/guides/contributor-guide.md](docs/guides/contributor-guide.md) to add yourself to the guestbook. + +## Other Types of Contributions + +For contributions other than adding yourself to the guestbook, please follow the standard GitHub workflow: +1. Fork the repository +2. Create a new branch +3. Make your changes +4. Submit a pull request diff --git a/README.md b/README.md index 3ca5a12..b95239a 100644 --- a/README.md +++ b/README.md @@ -6,11 +6,42 @@ This guestbook is a place for people who have taken the [Intro to Open Source co ## Getting Started -For complete instructions on how to add yourself to this guestbook, please head to the "[Let's Get Practical](https://opensauced.pizza/learn/intro-to-oss/how-to-contribute-to-open-source#lets-get-practical)" section in the Intro to Open Source course. +**πŸŽ‰ New simplified process - no more merge conflicts!** -## Resolving Merge Conflicts +Instead of editing this README directly, you now add yourself by creating a single JSON file. This prevents merge conflicts when multiple people contribute simultaneously. -If you encounter merge conflicts while contributing to this repository, read the Intro to Open Source course's "[Merge Conflicts in the Guestbook Repository](https://opensauced.pizza/learn/intro-to-oss/how-to-contribute-to-open-source#merge-conflicts-in-the-guestbook-repository)" section. +### Quick Start +1. Fork and clone this repository +2. Run `npm install` to install dependencies +3. Go to the [`contributors/`](contributors/) directory +4. Create a file named `your-github-username.json` +5. Fill it with your information (see template below) +6. Test your contribution: `npm run contributors:preview your-github-username` +7. Submit your PR with just that one file! + +### Template +```json +{ + "name": "Your Full Name", + "github": "your-github-username", + "profile": "https://your-website.com", + "contributions": ["code", "doc", "ideas"] +} +``` + +**Note:** The `profile` field should be your personal website URL or your GitHub profile URL (https://github.com/your-username) + +πŸ“– **For detailed instructions, see: [docs/guides/contributor-guide.md](docs/guides/contributor-guide.md)** + +> **Note**: The contributors table below is automatically updated when your PR is merged. No need to edit it manually! +> +> πŸ§ͺ **Want to test if it worked?** See: [docs/guides/testing-your-contribution.md](docs/guides/testing-your-contribution.md) + +## No More Merge Conflicts! + +πŸŽ‰ **Good news!** The new contributor system eliminates merge conflicts entirely. Each contributor creates their own unique file, so multiple people can contribute simultaneously without conflicts. + +If you still encounter issues, check out the [Migration Guide](docs/MIGRATION_GUIDE.md) or ask for help in [GitHub Discussions](../../discussions). ## What's Next? diff --git a/contributors/.gitkeep b/contributors/.gitkeep new file mode 100644 index 0000000..181b300 --- /dev/null +++ b/contributors/.gitkeep @@ -0,0 +1,2 @@ +# This file ensures the contributors directory is tracked in git +# Individual contributor JSON files will be added here \ No newline at end of file diff --git a/contributors/02zeda.json b/contributors/02zeda.json new file mode 100644 index 0000000..17cb3e1 --- /dev/null +++ b/contributors/02zeda.json @@ -0,0 +1,11 @@ +{ + "name": "Zeth Danielsson", + "github": "02zeda", + "contributions": [ + "code", + "ideas", + "infra", + "maintenance" + ], + "profile": "https://github.com/02zeda" +} \ No newline at end of file diff --git a/contributors/ATREAY.json b/contributors/ATREAY.json new file mode 100644 index 0000000..83f7dca --- /dev/null +++ b/contributors/ATREAY.json @@ -0,0 +1,17 @@ +{ + "name": "Atreay Kukanur", + "github": "ATREAY", + "contributions": [ + "question", + "code", + "content", + "design", + "doc", + "eventOrganizing", + "ideas", + "promotion", + "research", + "userTesting" + ], + "profile": "https://github.com/ATREAY" +} \ No newline at end of file diff --git a/contributors/Aditya-Kumar-Sahu.json b/contributors/Aditya-Kumar-Sahu.json new file mode 100644 index 0000000..3a65fe3 --- /dev/null +++ b/contributors/Aditya-Kumar-Sahu.json @@ -0,0 +1,40 @@ +{ + "name": "Aditya Kumar Sahu", + "github": "Aditya-Kumar-Sahu", + "contributions": [ + "question", + "code", + "a11y", + "audio", + "blog", + "bug", + "business", + "content", + "data", + "design", + "doc", + "eventOrganizing", + "example", + "financial", + "fundingFinding", + "ideas", + "infra", + "maintenance", + "mentoring", + "platform", + "plugin", + "projectManagement", + "promotion", + "research", + "review", + "security", + "talk", + "test", + "tool", + "translation", + "tutorial", + "userTesting", + "video" + ], + "profile": "https://github.com/Aditya-Kumar-Sahu" +} \ No newline at end of file diff --git a/contributors/Aftar-Ahmad-Sami.json b/contributors/Aftar-Ahmad-Sami.json new file mode 100644 index 0000000..0e76cd8 --- /dev/null +++ b/contributors/Aftar-Ahmad-Sami.json @@ -0,0 +1,13 @@ +{ + "name": "Aftar Ahmad Sami", + "github": "Aftar-Ahmad-Sami", + "contributions": [ + "code", + "data", + "ideas", + "infra", + "research", + "tool" + ], + "profile": "https://github.com/Aftar-Ahmad-Sami" +} \ No newline at end of file diff --git a/contributors/Ajiboso-Adeola.json b/contributors/Ajiboso-Adeola.json new file mode 100644 index 0000000..b68d2a8 --- /dev/null +++ b/contributors/Ajiboso-Adeola.json @@ -0,0 +1,13 @@ +{ + "name": "Ajiboso Adeola", + "github": "Ajiboso-Adeola", + "contributions": [ + "question", + "blog", + "code", + "content", + "doc", + "a11y" + ], + "profile": "https://github.com/Ajiboso-Adeola" +} \ No newline at end of file diff --git a/contributors/Akintademuyiwa24.json b/contributors/Akintademuyiwa24.json new file mode 100644 index 0000000..14f6f5b --- /dev/null +++ b/contributors/Akintademuyiwa24.json @@ -0,0 +1,14 @@ +{ + "name": "AKINTADE OLUMUYIWA", + "github": "Akintademuyiwa24", + "contributions": [ + "a11y", + "question", + "bug", + "code", + "doc", + "research", + "tutorial" + ], + "profile": "https://github.com/Akintademuyiwa24" +} \ No newline at end of file diff --git a/contributors/Alejandro-Saavedra.json b/contributors/Alejandro-Saavedra.json new file mode 100644 index 0000000..c69ea71 --- /dev/null +++ b/contributors/Alejandro-Saavedra.json @@ -0,0 +1,8 @@ +{ + "name": "Alejandro Saavedra", + "github": "Alejandro-Saavedra", + "contributions": [ + "research" + ], + "profile": "https://github.com/Alejandro-Saavedra" +} \ No newline at end of file diff --git a/contributors/Alex87464.json b/contributors/Alex87464.json new file mode 100644 index 0000000..f50e0db --- /dev/null +++ b/contributors/Alex87464.json @@ -0,0 +1,12 @@ +{ + "name": "Alex Oliva", + "github": "Alex87464", + "contributions": [ + "question", + "code", + "example", + "review", + "userTesting" + ], + "profile": "https://github.com/Alex87464" +} \ No newline at end of file diff --git a/contributors/Alfred-Emmanuel.json b/contributors/Alfred-Emmanuel.json new file mode 100644 index 0000000..06f3f1a --- /dev/null +++ b/contributors/Alfred-Emmanuel.json @@ -0,0 +1,11 @@ +{ + "name": "Alfred Emmanuel", + "github": "Alfred-Emmanuel", + "contributions": [ + "bug", + "code", + "doc", + "maintenance" + ], + "profile": "https://github.com/Alfred-Emmanuel" +} \ No newline at end of file diff --git a/contributors/Ali-Ahmed-Mohamed.json b/contributors/Ali-Ahmed-Mohamed.json new file mode 100644 index 0000000..39d6ea2 --- /dev/null +++ b/contributors/Ali-Ahmed-Mohamed.json @@ -0,0 +1,8 @@ +{ + "name": "Ali-Ahmed-Mohamed", + "github": "Ali-Ahmed-Mohamed", + "contributions": [ + "code" + ], + "profile": "https://github.com/Ali-Ahmed-Mohamed" +} \ No newline at end of file diff --git a/contributors/Alok-Jadhao.json b/contributors/Alok-Jadhao.json new file mode 100644 index 0000000..58dc7d8 --- /dev/null +++ b/contributors/Alok-Jadhao.json @@ -0,0 +1,9 @@ +{ + "name": "Alok Jadhao", + "github": "Alok-Jadhao", + "contributions": [ + "question", + "code" + ], + "profile": "https://github.com/Alok-Jadhao" +} \ No newline at end of file diff --git a/contributors/Alz3bi.json b/contributors/Alz3bi.json new file mode 100644 index 0000000..8814782 --- /dev/null +++ b/contributors/Alz3bi.json @@ -0,0 +1,14 @@ +{ + "name": "Mohammed Alzoubi", + "github": "Alz3bi", + "contributions": [ + "question", + "bug", + "code", + "data", + "design", + "ideas", + "research" + ], + "profile": "https://github.com/Alz3bi" +} \ No newline at end of file diff --git a/contributors/AngelMancilla.json b/contributors/AngelMancilla.json new file mode 100644 index 0000000..e8c8cc6 --- /dev/null +++ b/contributors/AngelMancilla.json @@ -0,0 +1,21 @@ +{ + "name": "Angel Mancilla", + "github": "AngelMancilla", + "contributions": [ + "a11y", + "blog", + "bug", + "code", + "content", + "doc", + "fundingFinding", + "ideas", + "maintenance", + "research", + "security", + "test", + "translation", + "tutorial" + ], + "profile": "https://www.linkedin.com/in/angelmancillaca" +} \ No newline at end of file diff --git a/contributors/Ankit8848.json b/contributors/Ankit8848.json new file mode 100644 index 0000000..35cbfce --- /dev/null +++ b/contributors/Ankit8848.json @@ -0,0 +1,9 @@ +{ + "name": "Ankit Kumar Jha", + "github": "Ankit8848", + "contributions": [ + "a11y", + "question" + ], + "profile": "https://ankitjha.live/" +} \ No newline at end of file diff --git a/contributors/Ant-Shell.json b/contributors/Ant-Shell.json new file mode 100644 index 0000000..e412a0d --- /dev/null +++ b/contributors/Ant-Shell.json @@ -0,0 +1,10 @@ +{ + "name": "Anthony Shellman", + "github": "Ant-Shell", + "contributions": [ + "code", + "doc", + "research" + ], + "profile": "https://github.com/Ant-Shell" +} \ No newline at end of file diff --git a/contributors/ArchILLtect.json b/contributors/ArchILLtect.json new file mode 100644 index 0000000..9ae04d9 --- /dev/null +++ b/contributors/ArchILLtect.json @@ -0,0 +1,10 @@ +{ + "name": "Nick Hanson Sr", + "github": "ArchILLtect", + "contributions": [ + "question", + "bug", + "code" + ], + "profile": "https://github.com/ArchILLtect" +} \ No newline at end of file diff --git a/contributors/Aswin-22.json b/contributors/Aswin-22.json new file mode 100644 index 0000000..065f39f --- /dev/null +++ b/contributors/Aswin-22.json @@ -0,0 +1,24 @@ +{ + "name": "Aswin. M", + "github": "Aswin-22", + "contributions": [ + "a11y", + "question", + "bug", + "business", + "code", + "data", + "doc", + "ideas", + "maintenance", + "platform", + "plugin", + "projectManagement", + "review", + "security", + "talk", + "test", + "tool" + ], + "profile": "https://github.com/Aswin-22" +} \ No newline at end of file diff --git a/contributors/Axfez.json b/contributors/Axfez.json new file mode 100644 index 0000000..1b1285b --- /dev/null +++ b/contributors/Axfez.json @@ -0,0 +1,12 @@ +{ + "name": "Santiago Montoya RendΓ³n", + "github": "Axfez", + "contributions": [ + "question", + "code", + "data", + "doc", + "maintenance" + ], + "profile": "https://github.com/Axfez" +} \ No newline at end of file diff --git a/contributors/Ayamigah16.json b/contributors/Ayamigah16.json new file mode 100644 index 0000000..ad07470 --- /dev/null +++ b/contributors/Ayamigah16.json @@ -0,0 +1,23 @@ +{ + "name": "Abraham Ayamigah", + "github": "Ayamigah16", + "contributions": [ + "question", + "audio", + "blog", + "bug", + "business", + "code", + "content", + "data", + "design", + "doc", + "eventOrganizing", + "example", + "financial", + "fundingFinding", + "ideas", + "infra" + ], + "profile": "https://github.com/Ayamigah16" +} \ No newline at end of file diff --git a/contributors/AyushShuklaIIIT.json b/contributors/AyushShuklaIIIT.json new file mode 100644 index 0000000..5822637 --- /dev/null +++ b/contributors/AyushShuklaIIIT.json @@ -0,0 +1,8 @@ +{ + "name": "Ayush Shukla", + "github": "AyushShuklaIIIT", + "contributions": [ + "code" + ], + "profile": "https://github.com/AyushShuklaIIIT" +} \ No newline at end of file diff --git a/contributors/BekahHW.json b/contributors/BekahHW.json new file mode 100644 index 0000000..24924de --- /dev/null +++ b/contributors/BekahHW.json @@ -0,0 +1,25 @@ +{ + "name": "BekahHW", + "github": "BekahHW", + "contributions": [ + "question", + "audio", + "blog", + "code", + "content", + "doc", + "eventOrganizing", + "example", + "ideas", + "mentoring", + "projectManagement", + "promotion", + "research", + "review", + "talk", + "test", + "tutorial", + "video" + ], + "profile": "https://bekahhw.github.io/" +} \ No newline at end of file diff --git a/contributors/Bradondev.json b/contributors/Bradondev.json new file mode 100644 index 0000000..b5d3f43 --- /dev/null +++ b/contributors/Bradondev.json @@ -0,0 +1,9 @@ +{ + "name": "Brandon", + "github": "Bradondev", + "contributions": [ + "question", + "code" + ], + "profile": "https://github.com/Bradondev" +} \ No newline at end of file diff --git a/contributors/BrianMunsey.json b/contributors/BrianMunsey.json new file mode 100644 index 0000000..325cf13 --- /dev/null +++ b/contributors/BrianMunsey.json @@ -0,0 +1,11 @@ +{ + "name": "BrianMunsey", + "github": "BrianMunsey", + "contributions": [ + "code", + "ideas", + "design", + "bug" + ], + "profile": "https://www.linkedin.com/in/brian-munsey/" +} \ No newline at end of file diff --git a/contributors/BrodyWills.json b/contributors/BrodyWills.json new file mode 100644 index 0000000..d7dbd0c --- /dev/null +++ b/contributors/BrodyWills.json @@ -0,0 +1,9 @@ +{ + "name": "Brody", + "github": "BrodyWills", + "contributions": [ + "question", + "bug" + ], + "profile": "https://github.com/BrodyWills" +} \ No newline at end of file diff --git a/contributors/C-o-m-o-n.json b/contributors/C-o-m-o-n.json new file mode 100644 index 0000000..133b9b6 --- /dev/null +++ b/contributors/C-o-m-o-n.json @@ -0,0 +1,12 @@ +{ + "name": "Collins O. Odhiambo", + "github": "C-o-m-o-n", + "contributions": [ + "a11y", + "code", + "doc", + "infra", + "maintenance" + ], + "profile": "https://github.com/C-o-m-o-n" +} \ No newline at end of file diff --git a/contributors/CBID2.json b/contributors/CBID2.json new file mode 100644 index 0000000..0368b7d --- /dev/null +++ b/contributors/CBID2.json @@ -0,0 +1,28 @@ +{ + "name": "Christine Belzie", + "github": "CBID2", + "contributions": [ + "a11y", + "blog", + "bug", + "code", + "content", + "doc", + "review", + "tutorial", + "example", + "ideas", + "infra", + "maintenance", + "mentoring", + "plugin", + "projectManagement", + "review", + "security", + "tool", + "translation", + "tutorial", + "userTesting" + ], + "profile": "https://linkfree.eddiehub.io/CBID2" +} \ No newline at end of file diff --git a/contributors/CODINATA.json b/contributors/CODINATA.json new file mode 100644 index 0000000..5cc1481 --- /dev/null +++ b/contributors/CODINATA.json @@ -0,0 +1,9 @@ +{ + "name": "Mohamed Adam Ata", + "github": "CODINATA", + "contributions": [ + "question", + "tutorial" + ], + "profile": "https://github.com/CODINATA" +} \ No newline at end of file diff --git a/contributors/ChiaBeaCode.json b/contributors/ChiaBeaCode.json new file mode 100644 index 0000000..a565961 --- /dev/null +++ b/contributors/ChiaBeaCode.json @@ -0,0 +1,11 @@ +{ + "name": "Ashley", + "github": "ChiaBeaCode", + "contributions": [ + "code", + "data", + "design", + "maintenance" + ], + "profile": "https://github.com/ChiaBeaCode" +} \ No newline at end of file diff --git a/contributors/ChinmayBagad.json b/contributors/ChinmayBagad.json new file mode 100644 index 0000000..e1cd41f --- /dev/null +++ b/contributors/ChinmayBagad.json @@ -0,0 +1,15 @@ +{ + "name": "Chinmay@234", + "github": "ChinmayBagad", + "contributions": [ + "code", + "financial", + "ideas", + "infra", + "promotion", + "talk", + "tutorial", + "video" + ], + "profile": "https://github.com/ChinmayBagad" +} \ No newline at end of file diff --git a/contributors/CodeLikeAGirl29.json b/contributors/CodeLikeAGirl29.json new file mode 100644 index 0000000..7150697 --- /dev/null +++ b/contributors/CodeLikeAGirl29.json @@ -0,0 +1,18 @@ +{ + "name": "Lindsey Howard", + "github": "CodeLikeAGirl29", + "contributions": [ + "question", + "blog", + "code", + "design", + "doc", + "example", + "ideas", + "maintenance", + "research", + "tool", + "tutorial" + ], + "profile": "https://lindseyk.dev/" +} \ No newline at end of file diff --git a/contributors/CynthiaWahome.json b/contributors/CynthiaWahome.json new file mode 100644 index 0000000..3dab67c --- /dev/null +++ b/contributors/CynthiaWahome.json @@ -0,0 +1,13 @@ +{ + "name": "Cynthia", + "github": "CynthiaWahome", + "contributions": [ + "question", + "bug", + "content", + "eventOrganizing", + "ideas", + "projectManagement" + ], + "profile": "https://github.com/CynthiaWahome" +} \ No newline at end of file diff --git a/contributors/DChitale.json b/contributors/DChitale.json new file mode 100644 index 0000000..0c22046 --- /dev/null +++ b/contributors/DChitale.json @@ -0,0 +1,37 @@ +{ + "name": "Dhananjay Chitale", + "github": "DChitale", + "contributions": [ + "blog", + "bug", + "business", + "code", + "content", + "data", + "design", + "doc", + "eventOrganizing", + "example", + "financial", + "fundingFinding", + "ideas", + "infra", + "maintenance", + "mentoring", + "platform", + "plugin", + "projectManagement", + "promotion", + "research", + "review", + "security", + "talk", + "test", + "tool", + "translation", + "tutorial", + "userTesting", + "video" + ], + "profile": "https://github.com/DChitale" +} \ No newline at end of file diff --git a/contributors/Emmarie-Ahtunan.json b/contributors/Emmarie-Ahtunan.json new file mode 100644 index 0000000..8b37156 --- /dev/null +++ b/contributors/Emmarie-Ahtunan.json @@ -0,0 +1,13 @@ +{ + "name": "Emily Marie AhtΓΊnan", + "github": "Emmarie-Ahtunan", + "contributions": [ + "a11y", + "question", + "blog", + "bug", + "code", + "content" + ], + "profile": "https://github.com/Emmarie-Ahtunan" +} \ No newline at end of file diff --git a/contributors/Esaius2058.json b/contributors/Esaius2058.json new file mode 100644 index 0000000..ee70cfb --- /dev/null +++ b/contributors/Esaius2058.json @@ -0,0 +1,33 @@ +{ + "name": "Isaiah Juma", + "github": "Esaius2058", + "contributions": [ + "a11y", + "question", + "audio", + "blog", + "bug", + "code", + "content", + "data", + "doc", + "example", + "financial", + "fundingFinding", + "ideas", + "infra", + "maintenance", + "mentoring", + "platform", + "plugin", + "projectManagement", + "promotion", + "review", + "security", + "talk", + "tool", + "tutorial", + "userTesting" + ], + "profile": "https://github.com/Esaius2058" +} \ No newline at end of file diff --git a/contributors/EthenThinkful.json b/contributors/EthenThinkful.json new file mode 100644 index 0000000..a9e0ba0 --- /dev/null +++ b/contributors/EthenThinkful.json @@ -0,0 +1,12 @@ +{ + "name": "Ethen Roth", + "github": "EthenThinkful", + "contributions": [ + "bug", + "code", + "doc", + "ideas", + "review" + ], + "profile": "https://ethenportfolio.vercel.app/" +} \ No newline at end of file diff --git a/contributors/Ezzywealth.json b/contributors/Ezzywealth.json new file mode 100644 index 0000000..8983b85 --- /dev/null +++ b/contributors/Ezzywealth.json @@ -0,0 +1,26 @@ +{ + "name": "Ezekiel Udiomuno", + "github": "Ezzywealth", + "contributions": [ + "a11y", + "question", + "blog", + "bug", + "code", + "content", + "data", + "design", + "doc", + "ideas", + "maintenance", + "mentoring", + "plugin", + "research", + "review", + "talk", + "test", + "tool", + "userTesting" + ], + "profile": "https://github.com/Ezzywealth" +} \ No newline at end of file diff --git a/contributors/FahimJadid.json b/contributors/FahimJadid.json new file mode 100644 index 0000000..abb9aff --- /dev/null +++ b/contributors/FahimJadid.json @@ -0,0 +1,17 @@ +{ + "name": "Fahim Al Jadid", + "github": "FahimJadid", + "contributions": [ + "question", + "blog", + "bug", + "code", + "content", + "data", + "design", + "doc", + "example", + "userTesting" + ], + "profile": "https://www.linkedin.com/in/fahimaljadid/" +} \ No newline at end of file diff --git a/contributors/Fatima-Abdirashid.json b/contributors/Fatima-Abdirashid.json new file mode 100644 index 0000000..650f497 --- /dev/null +++ b/contributors/Fatima-Abdirashid.json @@ -0,0 +1,36 @@ +{ + "name": "Fatima-Abdirashid", + "github": "Fatima-Abdirashid", + "contributions": [ + "a11y", + "question", + "audio", + "blog", + "bug", + "business", + "code", + "content", + "data", + "design", + "doc", + "eventOrganizing", + "example", + "financial", + "fundingFinding", + "ideas", + "infra", + "maintenance", + "mentoring", + "research", + "review", + "security", + "talk", + "test", + "tool", + "translation", + "tutorial", + "userTesting", + "video" + ], + "profile": "https://github.com/Fatima-Abdirashid" +} \ No newline at end of file diff --git a/contributors/Firdous2307.json b/contributors/Firdous2307.json new file mode 100644 index 0000000..bc5c791 --- /dev/null +++ b/contributors/Firdous2307.json @@ -0,0 +1,14 @@ +{ + "name": "Firdous2307", + "github": "Firdous2307", + "contributions": [ + "code", + "doc", + "infra", + "maintenance", + "security", + "test", + "tool" + ], + "profile": "https://github.com/Firdous2307" +} \ No newline at end of file diff --git a/contributors/Franklyn883.json b/contributors/Franklyn883.json new file mode 100644 index 0000000..0d761ad --- /dev/null +++ b/contributors/Franklyn883.json @@ -0,0 +1,11 @@ +{ + "name": "Frank Alimimian", + "github": "Franklyn883", + "contributions": [ + "blog", + "code", + "doc", + "research" + ], + "profile": "https://github.com/Franklyn883" +} \ No newline at end of file diff --git a/contributors/Ghaith-Rain.json b/contributors/Ghaith-Rain.json new file mode 100644 index 0000000..eff4398 --- /dev/null +++ b/contributors/Ghaith-Rain.json @@ -0,0 +1,11 @@ +{ + "name": "Ghaith", + "github": "Ghaith-Rain", + "contributions": [ + "design", + "doc", + "code", + "content" + ], + "profile": "https://github.com/Ghaith-Rain" +} \ No newline at end of file diff --git a/contributors/Guruscod.json b/contributors/Guruscod.json new file mode 100644 index 0000000..12f72a6 --- /dev/null +++ b/contributors/Guruscod.json @@ -0,0 +1,9 @@ +{ + "name": "Gideon Fiadowu Norkplim", + "github": "Guruscod", + "contributions": [ + "question", + "bug" + ], + "profile": "https://github.com/Guruscod" +} \ No newline at end of file diff --git a/contributors/Haimantika.json b/contributors/Haimantika.json new file mode 100644 index 0000000..51a3b23 --- /dev/null +++ b/contributors/Haimantika.json @@ -0,0 +1,10 @@ +{ + "name": "haimantika mitra", + "github": "Haimantika", + "contributions": [ + "code", + "content", + "doc" + ], + "profile": "https://github.com/Haimantika" +} \ No newline at end of file diff --git a/contributors/Hardik-S-003.json b/contributors/Hardik-S-003.json new file mode 100644 index 0000000..5b9c81d --- /dev/null +++ b/contributors/Hardik-S-003.json @@ -0,0 +1,10 @@ +{ + "name": "Hardik S", + "github": "Hardik-S-003", + "contributions": [ + "bug", + "code", + "data" + ], + "profile": "https://github.com/Hardik-S-003" +} \ No newline at end of file diff --git a/contributors/Harshdev10.json b/contributors/Harshdev10.json new file mode 100644 index 0000000..dd31355 --- /dev/null +++ b/contributors/Harshdev10.json @@ -0,0 +1,20 @@ +{ + "name": "HarshDev Tripathi", + "github": "Harshdev10", + "contributions": [ + "question", + "bug", + "design", + "code", + "ideas", + "mentoring", + "platform", + "plugin", + "projectManagement", + "research", + "security", + "test", + "tool" + ], + "profile": "https://github.com/Harshdev10" +} \ No newline at end of file diff --git a/contributors/Harshh18.json b/contributors/Harshh18.json new file mode 100644 index 0000000..6f0aa5a --- /dev/null +++ b/contributors/Harshh18.json @@ -0,0 +1,18 @@ +{ + "name": "Harsh Khandelwal", + "github": "Harshh18", + "contributions": [ + "question", + "bug", + "code", + "content", + "data", + "doc", + "maintenance", + "projectManagement", + "review", + "tutorial", + "talk" + ], + "profile": "https://harshh18.github.io/Portfolio-Website/" +} \ No newline at end of file diff --git a/contributors/Hellkryptonium.json b/contributors/Hellkryptonium.json new file mode 100644 index 0000000..0d628ad --- /dev/null +++ b/contributors/Hellkryptonium.json @@ -0,0 +1,11 @@ +{ + "name": "Mohd Harish", + "github": "Hellkryptonium", + "contributions": [ + "code", + "design", + "ideas", + "research" + ], + "profile": "https://github.com/Hellkryptonium" +} \ No newline at end of file diff --git a/contributors/IM-Suryakant-Kumar.json b/contributors/IM-Suryakant-Kumar.json new file mode 100644 index 0000000..077c42e --- /dev/null +++ b/contributors/IM-Suryakant-Kumar.json @@ -0,0 +1,9 @@ +{ + "name": "Suryakant Kumar", + "github": "IM-Suryakant-Kumar", + "contributions": [ + "question", + "bug" + ], + "profile": "https://suryakant-kumar.netlify.app/" +} \ No newline at end of file diff --git a/contributors/IbnuAlii.json b/contributors/IbnuAlii.json new file mode 100644 index 0000000..52ce138 --- /dev/null +++ b/contributors/IbnuAlii.json @@ -0,0 +1,8 @@ +{ + "name": "Mohamed Ali Nor", + "github": "IbnuAlii", + "contributions": [ + "promotion" + ], + "profile": "https://github.com/IbnuAlii" +} \ No newline at end of file diff --git a/contributors/Id8987.json b/contributors/Id8987.json new file mode 100644 index 0000000..a52b95c --- /dev/null +++ b/contributors/Id8987.json @@ -0,0 +1,13 @@ +{ + "name": "Issakha", + "github": "Id8987", + "contributions": [ + "bug", + "code", + "content", + "data", + "doc", + "security" + ], + "profile": "https://github.com/Id8987" +} \ No newline at end of file diff --git a/contributors/Iqra-Issack.json b/contributors/Iqra-Issack.json new file mode 100644 index 0000000..1768575 --- /dev/null +++ b/contributors/Iqra-Issack.json @@ -0,0 +1,9 @@ +{ + "name": "Iqra-Issack", + "github": "Iqra-Issack", + "contributions": [ + "infra", + "maintenance" + ], + "profile": "https://github.com/Iqra-Issack" +} \ No newline at end of file diff --git a/contributors/Izuchii.json b/contributors/Izuchii.json new file mode 100644 index 0000000..8ca97d2 --- /dev/null +++ b/contributors/Izuchii.json @@ -0,0 +1,10 @@ +{ + "name": "Izundu Chinonso Emmanuel", + "github": "Izuchii", + "contributions": [ + "content", + "test", + "tutorial" + ], + "profile": "https://github.com/Izuchii" +} \ No newline at end of file diff --git a/contributors/JaisonBinns.json b/contributors/JaisonBinns.json new file mode 100644 index 0000000..cf42223 --- /dev/null +++ b/contributors/JaisonBinns.json @@ -0,0 +1,40 @@ +{ + "name": "JayBee", + "github": "JaisonBinns", + "contributions": [ + "a11y", + "question", + "audio", + "blog", + "bug", + "business", + "code", + "content", + "data", + "design", + "doc", + "eventOrganizing", + "example", + "financial", + "fundingFinding", + "ideas", + "infra", + "maintenance", + "mentoring", + "platform", + "plugin", + "projectManagement", + "promotion", + "research", + "review", + "security", + "talk", + "test", + "tool", + "translation", + "tutorial", + "userTesting", + "video" + ], + "profile": "https://github.com/JaisonBinns" +} \ No newline at end of file diff --git a/contributors/JayRKyd.json b/contributors/JayRKyd.json new file mode 100644 index 0000000..06e136f --- /dev/null +++ b/contributors/JayRKyd.json @@ -0,0 +1,9 @@ +{ + "name": "Jay Knowles", + "github": "JayRKyd", + "contributions": [ + "blog", + "code" + ], + "profile": "https://github.com/JayRKyd" +} \ No newline at end of file diff --git a/contributors/JesseRWeigel.json b/contributors/JesseRWeigel.json new file mode 100644 index 0000000..e63c8da --- /dev/null +++ b/contributors/JesseRWeigel.json @@ -0,0 +1,13 @@ +{ + "name": "Jesse Weigel", + "github": "JesseRWeigel", + "contributions": [ + "question", + "blog", + "code", + "a11y", + "video", + "review" + ], + "profile": "https://github.com/JesseRWeigel" +} \ No newline at end of file diff --git a/contributors/JingjieGao.json b/contributors/JingjieGao.json new file mode 100644 index 0000000..31d6d1c --- /dev/null +++ b/contributors/JingjieGao.json @@ -0,0 +1,8 @@ +{ + "name": "Jingjie Gao", + "github": "JingjieGao", + "contributions": [ + "question" + ], + "profile": "https://github.com/JingjieGao" +} \ No newline at end of file diff --git a/contributors/JohnMwendwa.json b/contributors/JohnMwendwa.json new file mode 100644 index 0000000..6577ed0 --- /dev/null +++ b/contributors/JohnMwendwa.json @@ -0,0 +1,14 @@ +{ + "name": "John Mwendwa", + "github": "JohnMwendwa", + "contributions": [ + "question", + "bug", + "code", + "content", + "doc", + "example", + "ideas" + ], + "profile": "https://johnmwendwa.vercel.app/" +} \ No newline at end of file diff --git a/contributors/JulesRules65.json b/contributors/JulesRules65.json new file mode 100644 index 0000000..d528946 --- /dev/null +++ b/contributors/JulesRules65.json @@ -0,0 +1,8 @@ +{ + "name": "Julien", + "github": "JulesRules65", + "contributions": [ + "doc" + ], + "profile": "https://julienwuest.de" +} \ No newline at end of file diff --git a/contributors/Justin-WebDev.json b/contributors/Justin-WebDev.json new file mode 100644 index 0000000..907981d --- /dev/null +++ b/contributors/Justin-WebDev.json @@ -0,0 +1,27 @@ +{ + "name": "Turdle", + "github": "Justin-WebDev", + "contributions": [ + "a11y", + "question", + "bug", + "code", + "design", + "doc", + "example", + "ideas", + "infra", + "maintenance", + "mentoring", + "plugin", + "projectManagement", + "promotion", + "research", + "review", + "test", + "tool", + "tutorial", + "userTesting" + ], + "profile": "https://github.com/Justin-WebDev" +} \ No newline at end of file diff --git a/contributors/Kaanan2000.json b/contributors/Kaanan2000.json new file mode 100644 index 0000000..bba2c7e --- /dev/null +++ b/contributors/Kaanan2000.json @@ -0,0 +1,15 @@ +{ + "name": "KAANAN", + "github": "Kaanan2000", + "contributions": [ + "question", + "bug", + "code", + "content", + "doc", + "ideas", + "test", + "tutorial" + ], + "profile": "https://github.com/Kaanan2000" +} \ No newline at end of file diff --git a/contributors/Kamari93.json b/contributors/Kamari93.json new file mode 100644 index 0000000..73bf5dd --- /dev/null +++ b/contributors/Kamari93.json @@ -0,0 +1,11 @@ +{ + "name": "Kamari Moore", + "github": "Kamari93", + "contributions": [ + "question", + "blog", + "code", + "test" + ], + "profile": "https://github.com/Kamari93" +} \ No newline at end of file diff --git a/contributors/Kaz-Smino.json b/contributors/Kaz-Smino.json new file mode 100644 index 0000000..d254012 --- /dev/null +++ b/contributors/Kaz-Smino.json @@ -0,0 +1,40 @@ +{ + "name": "Kaz Smino", + "github": "Kaz-Smino", + "contributions": [ + "a11y", + "question", + "audio", + "blog", + "bug", + "business", + "code", + "content", + "data", + "design", + "doc", + "eventOrganizing", + "example", + "financial", + "fundingFinding", + "ideas", + "infra", + "maintenance", + "mentoring", + "platform", + "plugin", + "projectManagement", + "promotion", + "research", + "review", + "security", + "talk", + "test", + "tool", + "translation", + "tutorial", + "userTesting", + "video" + ], + "profile": "https://github.com/Kaz-Smino" +} \ No newline at end of file diff --git a/contributors/Ken-Musau.json b/contributors/Ken-Musau.json new file mode 100644 index 0000000..d31f100 --- /dev/null +++ b/contributors/Ken-Musau.json @@ -0,0 +1,9 @@ +{ + "name": "Kennedy Musau", + "github": "Ken-Musau", + "contributions": [ + "code", + "ideas" + ], + "profile": "https://github.com/Ken-Musau" +} \ No newline at end of file diff --git a/contributors/Lmdingi.json b/contributors/Lmdingi.json new file mode 100644 index 0000000..95607c1 --- /dev/null +++ b/contributors/Lmdingi.json @@ -0,0 +1,9 @@ +{ + "name": "Luxolo Mdingi", + "github": "Lmdingi", + "contributions": [ + "question", + "bug" + ], + "profile": "https://github.com/Lmdingi" +} \ No newline at end of file diff --git a/contributors/Lor1138.json b/contributors/Lor1138.json new file mode 100644 index 0000000..e860db1 --- /dev/null +++ b/contributors/Lor1138.json @@ -0,0 +1,26 @@ +{ + "name": "Laura OBrien", + "github": "Lor1138", + "contributions": [ + "a11y", + "question", + "audio", + "blog", + "bug", + "code", + "content", + "data", + "design", + "doc", + "example", + "financial", + "infra", + "mentoring", + "plugin", + "security", + "talk", + "tool", + "video" + ], + "profile": "https://github.com/Lor1138" +} \ No newline at end of file diff --git a/contributors/Luca1905.json b/contributors/Luca1905.json new file mode 100644 index 0000000..4790ea2 --- /dev/null +++ b/contributors/Luca1905.json @@ -0,0 +1,10 @@ +{ + "name": "Luca Wang", + "github": "Luca1905", + "contributions": [ + "code", + "infra", + "security" + ], + "profile": "https://github.com/Luca1905" +} \ No newline at end of file diff --git a/contributors/LuisCFunes.json b/contributors/LuisCFunes.json new file mode 100644 index 0000000..9414990 --- /dev/null +++ b/contributors/LuisCFunes.json @@ -0,0 +1,10 @@ +{ + "name": "LuisCFunes", + "github": "LuisCFunes", + "contributions": [ + "bug", + "code", + "translation" + ], + "profile": "https://github.com/LuisCFunes" +} \ No newline at end of file diff --git a/contributors/Lymah123.json b/contributors/Lymah123.json new file mode 100644 index 0000000..6969453 --- /dev/null +++ b/contributors/Lymah123.json @@ -0,0 +1,17 @@ +{ + "name": "Harlimat Odunola", + "github": "Lymah123", + "contributions": [ + "code", + "blog", + "doc", + "content", + "example", + "ideas", + "review", + "test", + "translation", + "tutorial" + ], + "profile": "https://github.com/Lymah123" +} \ No newline at end of file diff --git a/contributors/MadAvidCoder.json b/contributors/MadAvidCoder.json new file mode 100644 index 0000000..5ece9b8 --- /dev/null +++ b/contributors/MadAvidCoder.json @@ -0,0 +1,9 @@ +{ + "name": "David Ma", + "github": "MadAvidCoder", + "contributions": [ + "question", + "userTesting" + ], + "profile": "https://github.com/MadAvidCoder" +} \ No newline at end of file diff --git a/contributors/ManuelaFlores.json b/contributors/ManuelaFlores.json new file mode 100644 index 0000000..04b2945 --- /dev/null +++ b/contributors/ManuelaFlores.json @@ -0,0 +1,17 @@ +{ + "name": "Manuela Flores", + "github": "ManuelaFlores", + "contributions": [ + "a11y", + "question", + "blog", + "bug", + "code", + "doc", + "example", + "maintenance", + "plugin", + "test" + ], + "profile": "https://github.com/ManuelaFlores" +} \ No newline at end of file diff --git a/contributors/MarcellaHarr.json b/contributors/MarcellaHarr.json new file mode 100644 index 0000000..71e3eb8 --- /dev/null +++ b/contributors/MarcellaHarr.json @@ -0,0 +1,13 @@ +{ + "name": "Marcella Harris", + "github": "MarcellaHarr", + "contributions": [ + "content", + "data", + "doc", + "ideas", + "research", + "userTesting" + ], + "profile": "https://github.com/MarcellaHarr" +} \ No newline at end of file diff --git a/contributors/MayankChandratre1.json b/contributors/MayankChandratre1.json new file mode 100644 index 0000000..a65dbe3 --- /dev/null +++ b/contributors/MayankChandratre1.json @@ -0,0 +1,10 @@ +{ + "name": "CHANDRATRE MAYANK MANDAR", + "github": "MayankChandratre1", + "contributions": [ + "bug", + "code", + "talk" + ], + "profile": "https://github.com/MayankChandratre1" +} \ No newline at end of file diff --git a/contributors/MehediMubin.json b/contributors/MehediMubin.json new file mode 100644 index 0000000..bdfb50d --- /dev/null +++ b/contributors/MehediMubin.json @@ -0,0 +1,9 @@ +{ + "name": "Md. Mehedi Hasan", + "github": "MehediMubin", + "contributions": [ + "question", + "bug" + ], + "profile": "https://github.com/MehediMubin" +} \ No newline at end of file diff --git a/contributors/Metratrj.json b/contributors/Metratrj.json new file mode 100644 index 0000000..071a265 --- /dev/null +++ b/contributors/Metratrj.json @@ -0,0 +1,12 @@ +{ + "name": "Johannes Grimm", + "github": "Metratrj", + "contributions": [ + "bug", + "code", + "infra", + "research", + "tool" + ], + "profile": "https://github.com/Metratrj" +} \ No newline at end of file diff --git a/contributors/Mi1king.json b/contributors/Mi1king.json new file mode 100644 index 0000000..3728d0b --- /dev/null +++ b/contributors/Mi1king.json @@ -0,0 +1,15 @@ +{ + "name": "Mi1King", + "github": "Mi1king", + "contributions": [ + "bug", + "blog", + "code", + "data", + "fundingFinding", + "security", + "tutorial", + "translation" + ], + "profile": "https://github.com/Mi1king" +} \ No newline at end of file diff --git a/contributors/MohamedAliJmal.json b/contributors/MohamedAliJmal.json new file mode 100644 index 0000000..83b1e6d --- /dev/null +++ b/contributors/MohamedAliJmal.json @@ -0,0 +1,20 @@ +{ + "name": "Jmal Mohamed Ali", + "github": "MohamedAliJmal", + "contributions": [ + "a11y", + "question", + "bug", + "code", + "doc", + "ideas", + "maintenance", + "review", + "talk", + "test", + "tool", + "translation", + "tutorial" + ], + "profile": "https://github.com/MohamedAliJmal" +} \ No newline at end of file diff --git a/contributors/Msrimpson.json b/contributors/Msrimpson.json new file mode 100644 index 0000000..abcea5a --- /dev/null +++ b/contributors/Msrimpson.json @@ -0,0 +1,8 @@ +{ + "name": "Msrimpson", + "github": "Msrimpson", + "contributions": [ + "code" + ], + "profile": "https://github.com/Msrimpson" +} \ No newline at end of file diff --git a/contributors/Mugabe000.json b/contributors/Mugabe000.json new file mode 100644 index 0000000..5d719d7 --- /dev/null +++ b/contributors/Mugabe000.json @@ -0,0 +1,15 @@ +{ + "name": "Mugabe Nshuti Ignace", + "github": "Mugabe000", + "contributions": [ + "code", + "ideas", + "doc", + "security", + "tutorial", + "bug", + "a11y", + "example" + ], + "profile": "https://github.com/Mugabe000" +} \ No newline at end of file diff --git a/contributors/Muniir1.json b/contributors/Muniir1.json new file mode 100644 index 0000000..9d42269 --- /dev/null +++ b/contributors/Muniir1.json @@ -0,0 +1,8 @@ +{ + "name": "muniir1", + "github": "Muniir1", + "contributions": [ + "a11y" + ], + "profile": "https://github.com/Muniir1" +} \ No newline at end of file diff --git a/contributors/Muskan-Seth03.json b/contributors/Muskan-Seth03.json new file mode 100644 index 0000000..3ea5969 --- /dev/null +++ b/contributors/Muskan-Seth03.json @@ -0,0 +1,12 @@ +{ + "name": "Muskan Seth", + "github": "Muskan-Seth03", + "contributions": [ + "bug", + "doc", + "example", + "code", + "design" + ], + "profile": "https://github.com/Muskan-Seth03" +} \ No newline at end of file diff --git a/contributors/Muyixone.json b/contributors/Muyixone.json new file mode 100644 index 0000000..2f21544 --- /dev/null +++ b/contributors/Muyixone.json @@ -0,0 +1,15 @@ +{ + "name": "Alarezomo Osamuyi", + "github": "Muyixone", + "contributions": [ + "a11y", + "audio", + "mentoring", + "userTesting", + "question", + "test", + "translation", + "talk" + ], + "profile": "https://github.com/Muyixone" +} \ No newline at end of file diff --git a/contributors/Muzammil-cyber.json b/contributors/Muzammil-cyber.json new file mode 100644 index 0000000..faf7e0b --- /dev/null +++ b/contributors/Muzammil-cyber.json @@ -0,0 +1,9 @@ +{ + "name": "Muhammad Muzammil Loya", + "github": "Muzammil-cyber", + "contributions": [ + "question", + "bug" + ], + "profile": "https://muzammilloya-portfolio.vercel.app/" +} \ No newline at end of file diff --git a/contributors/Nabinbista12.json b/contributors/Nabinbista12.json new file mode 100644 index 0000000..2d4e8fd --- /dev/null +++ b/contributors/Nabinbista12.json @@ -0,0 +1,8 @@ +{ + "name": "Nabin Bista", + "github": "Nabinbista12", + "contributions": [ + "question" + ], + "profile": "https://github.com/Nabinbista12" +} \ No newline at end of file diff --git a/contributors/Neerajrawat123.json b/contributors/Neerajrawat123.json new file mode 100644 index 0000000..d821f28 --- /dev/null +++ b/contributors/Neerajrawat123.json @@ -0,0 +1,8 @@ +{ + "name": "neeraj rawat", + "github": "Neerajrawat123", + "contributions": [ + "content" + ], + "profile": "https://github.com/Neerajrawat123" +} \ No newline at end of file diff --git a/contributors/NeverGray.json b/contributors/NeverGray.json new file mode 100644 index 0000000..55786a7 --- /dev/null +++ b/contributors/NeverGray.json @@ -0,0 +1,11 @@ +{ + "name": "Justin M Edenbaum", + "github": "NeverGray", + "contributions": [ + "question", + "blog", + "code", + "video" + ], + "profile": "https://github.com/NeverGray" +} \ No newline at end of file diff --git a/contributors/Obasoro.json b/contributors/Obasoro.json new file mode 100644 index 0000000..fbd6d53 --- /dev/null +++ b/contributors/Obasoro.json @@ -0,0 +1,23 @@ +{ + "name": "Obasoro", + "github": "Obasoro", + "contributions": [ + "a11y", + "bug", + "code", + "content", + "data", + "doc", + "example", + "ideas", + "infra", + "mentoring", + "research", + "review", + "security", + "test", + "tool", + "userTesting" + ], + "profile": "https://github.com/Obasoro" +} \ No newline at end of file diff --git a/contributors/OluwabukolaU.json b/contributors/OluwabukolaU.json new file mode 100644 index 0000000..d9a4b6a --- /dev/null +++ b/contributors/OluwabukolaU.json @@ -0,0 +1,11 @@ +{ + "name": "Sophia Umaru", + "github": "OluwabukolaU", + "contributions": [ + "question", + "a11y", + "tutorial", + "userTesting" + ], + "profile": "https://github.com/OluwabukolaU" +} \ No newline at end of file diff --git a/contributors/Pondy007.json b/contributors/Pondy007.json new file mode 100644 index 0000000..4796149 --- /dev/null +++ b/contributors/Pondy007.json @@ -0,0 +1,11 @@ +{ + "name": "Vivine Assokane", + "github": "Pondy007", + "contributions": [ + "bug", + "doc", + "projectManagement", + "translation" + ], + "profile": "https://github.com/Pondy007" +} \ No newline at end of file diff --git a/contributors/QUICK_TEST.md b/contributors/QUICK_TEST.md new file mode 100644 index 0000000..da16c83 --- /dev/null +++ b/contributors/QUICK_TEST.md @@ -0,0 +1,111 @@ +S# πŸ§ͺ Quick Test: Did My Contribution Work? + +Follow these simple steps to verify your contribution was successful! + +## Step 1: Check Your PR Status βœ… + +After submitting your PR, look for: +- 🟒 **Green checkmarks** next to your PR (means validation passed) +- πŸ’¬ **Welcome comment** from the bot +- 🚫 **No merge conflicts** (there shouldn't be any!) + +## Step 2: After Your PR is Merged πŸŽ‰ + +### Immediate (1-2 minutes) +1. **Look for the GitHub Action**: + - Go to the [Actions tab](../../actions) + - You should see "Update Contributors" running or completed + - Green checkmark = success! βœ… + +### Within 5 minutes +2. **Check if you're in the README**: + - Go back to the [main page](../../) + - Scroll down to "Contributors" section + - **Search for your name**: Press `Ctrl+F` (or `Cmd+F`) and type your GitHub username + - You should see your profile picture! πŸ–ΌοΈ + +3. **Check the badge count**: + - Look for this badge: ![Contributors](https://img.shields.io/badge/all_contributors-310-orange.svg) + - The number should have increased by 1 + - Click the badge to jump directly to contributors section + +## Step 3: Celebrate! πŸŽ‰ + +If you see your profile in the contributors section, congratulations! You've successfully: +- βœ… Made your first open source contribution +- βœ… Used the new conflict-free system +- βœ… Helped test and improve the process +- βœ… Joined the open source community! + +## What Your Profile Looks Like + +Your entry will appear something like this: + +``` +[Your Profile Picture] +Your Name +πŸ’» πŸ“– 🎨 ← Contribution type icons +``` + +The icons represent your contribution types: +- πŸ’» = Code +- πŸ“– = Documentation +- 🎨 = Design +- πŸ› = Bug reports +- βœ… = Tutorials +- πŸ’‘ = Ideas +- And many more! + +## ❌ Troubleshooting: "I Don't See My Profile" + +### Check These First: +1. **Was your PR merged?** (Look for purple "Merged" badge) +2. **Did the GitHub Action run?** (Check [Actions tab](../../actions)) +3. **Any validation errors?** (Look at the Action logs) + +### Common Issues: + +**πŸ”§ JSON Format Error** +```json +❌ Wrong: { name: "John Doe" } // Missing quotes +βœ… Right: { "name": "John Doe" } // Proper JSON +``` + +**πŸ”§ Filename Mismatch** +``` +❌ Wrong: contributors/john.json + "github": "johndoe" +βœ… Right: contributors/johndoe.json + "github": "johndoe" +``` + +**πŸ”§ Missing Required Fields** +```json +❌ Wrong: { "name": "John" } +βœ… Right: { + "name": "John Doe", + "github": "johndoe", + "contributions": ["code"] +} +``` + +### Still Need Help? + +1. **Check the validation**: Run this in your terminal: + ```bash + python3 scripts/validate-contributor.py + ``` + +2. **Ask for help**: + - πŸ’¬ [GitHub Discussions](../../discussions) + - πŸ› [Create an Issue](../../issues/new) + - πŸ“– [Read the detailed guide](README.md) + +## Next Steps from the Course + +After your profile appears: +1. 🌟 **Create a highlight** of your contribution on [OpenSauced](https://app.opensauced.pizza/feed) +2. πŸŽ“ **Continue the course**: [The Secret Sauce](https://opensauced.pizza/learn/intro-to-oss/the-secret-sauce) +3. πŸ• **Make more contributions**: Check out [pizza-verse](https://github.com/OpenSource-Communities/pizza-verse) + +--- + +**πŸŽ‰ Welcome to the open source community!** Your first contribution is a big milestone - celebrate it! πŸš€ \ No newline at end of file diff --git a/contributors/QUxPTA.json b/contributors/QUxPTA.json new file mode 100644 index 0000000..5775fa3 --- /dev/null +++ b/contributors/QUxPTA.json @@ -0,0 +1,12 @@ +{ + "name": "QUxPTA", + "github": "QUxPTA", + "contributions": [ + "question", + "bug", + "code", + "content", + "maintenance" + ], + "profile": "https://github.com/QUxPTA" +} \ No newline at end of file diff --git a/contributors/Quartel.json b/contributors/Quartel.json new file mode 100644 index 0000000..565bd97 --- /dev/null +++ b/contributors/Quartel.json @@ -0,0 +1,9 @@ +{ + "name": "Tobi", + "github": "Quartel", + "contributions": [ + "doc", + "example" + ], + "profile": "https://github.com/Quartel" +} \ No newline at end of file diff --git a/contributors/README.md b/contributors/README.md new file mode 100644 index 0000000..a446747 --- /dev/null +++ b/contributors/README.md @@ -0,0 +1,42 @@ +# Contributors Directory + +This directory contains individual JSON files for each contributor to the guestbook. + +## πŸ“– How to Add Yourself + +**For complete instructions on adding yourself as a contributor, please see:** + +➑️ **[Contributor Guide](../docs/guides/contributor-guide.md)** - Step-by-step instructions + +## πŸ§ͺ How to Test Your Contribution + +**Want to test your contribution locally before submitting?** + +➑️ **[Testing Guide](../docs/guides/testing-your-contribution.md)** - Verify your contribution works + +## πŸ“ What's in This Directory + +- **`username.json`** - Individual contributor files (310 total) +- **`example-contributor.json`** - Template showing the correct format +- **`.gitkeep`** - Ensures this directory is tracked in git + +## πŸš€ Quick Start + +1. Create a file named `your-github-username.json` +2. Fill it with your information: + ```json + { + "name": "Your Full Name", + "github": "your-github-username", + "profile": "https://your-website.com", + "contributions": ["code", "doc", "ideas"] + } + ``` +3. Test locally: `npm run contributors:preview your-github-username` +4. Submit your PR! + +**That's it!** The README will be automatically updated after your PR is merged. + +--- + +πŸ“– **Need more help?** Check the [full contributor guide](../docs/guides/contributor-guide.md)! \ No newline at end of file diff --git a/contributors/RafaelJohn9.json b/contributors/RafaelJohn9.json new file mode 100644 index 0000000..ed66386 --- /dev/null +++ b/contributors/RafaelJohn9.json @@ -0,0 +1,18 @@ +{ + "name": "JohnKagunda", + "github": "RafaelJohn9", + "contributions": [ + "a11y", + "bug", + "business", + "code", + "design", + "doc", + "example", + "ideas", + "test", + "tool", + "userTesting" + ], + "profile": "https://github.com/RafaelJohn9" +} \ No newline at end of file diff --git a/contributors/RayX81194.json b/contributors/RayX81194.json new file mode 100644 index 0000000..446af22 --- /dev/null +++ b/contributors/RayX81194.json @@ -0,0 +1,14 @@ +{ + "name": "ray", + "github": "RayX81194", + "contributions": [ + "question", + "audio", + "code", + "design", + "ideas", + "talk", + "video" + ], + "profile": "https://github.com/RayX81194" +} \ No newline at end of file diff --git a/contributors/Rijan-Joshi.json b/contributors/Rijan-Joshi.json new file mode 100644 index 0000000..30079a7 --- /dev/null +++ b/contributors/Rijan-Joshi.json @@ -0,0 +1,9 @@ +{ + "name": "Rijan Shrestha", + "github": "Rijan-Joshi", + "contributions": [ + "userTesting", + "question" + ], + "profile": "https://github.com/Rijan-Joshi" +} \ No newline at end of file diff --git a/contributors/Sadeedpv.json b/contributors/Sadeedpv.json new file mode 100644 index 0000000..aa38fa4 --- /dev/null +++ b/contributors/Sadeedpv.json @@ -0,0 +1,17 @@ +{ + "name": "Sadeed pv", + "github": "Sadeedpv", + "contributions": [ + "a11y", + "bug", + "code", + "content", + "doc", + "projectManagement", + "review", + "security", + "translation", + "tutorial" + ], + "profile": "https://sadeedpv.github.io/" +} \ No newline at end of file diff --git a/contributors/SamarMst.json b/contributors/SamarMst.json new file mode 100644 index 0000000..08fec56 --- /dev/null +++ b/contributors/SamarMst.json @@ -0,0 +1,12 @@ +{ + "name": "Samar_Mestiri", + "github": "SamarMst", + "contributions": [ + "question", + "code", + "data", + "eventOrganizing", + "ideas" + ], + "profile": "https://github.com/SamarMst" +} \ No newline at end of file diff --git a/contributors/Satoshi-Sh.json b/contributors/Satoshi-Sh.json new file mode 100644 index 0000000..081699e --- /dev/null +++ b/contributors/Satoshi-Sh.json @@ -0,0 +1,10 @@ +{ + "name": "Satoshi Sh.", + "github": "Satoshi-Sh", + "contributions": [ + "code", + "content", + "doc" + ], + "profile": "https://github.com/Satoshi-Sh" +} \ No newline at end of file diff --git a/contributors/Shin1ma.json b/contributors/Shin1ma.json new file mode 100644 index 0000000..5e5bfb1 --- /dev/null +++ b/contributors/Shin1ma.json @@ -0,0 +1,10 @@ +{ + "name": "Ruben amadei", + "github": "Shin1ma", + "contributions": [ + "question", + "doc", + "translation" + ], + "profile": "https://github.com/Shin1ma" +} \ No newline at end of file diff --git a/contributors/SimonGideon.json b/contributors/SimonGideon.json new file mode 100644 index 0000000..4c4702d --- /dev/null +++ b/contributors/SimonGideon.json @@ -0,0 +1,8 @@ +{ + "name": "Simon Gideon", + "github": "SimonGideon", + "contributions": [ + "code" + ], + "profile": "https://simongideon.me/" +} \ No newline at end of file diff --git a/contributors/SkipPharaoh.json b/contributors/SkipPharaoh.json new file mode 100644 index 0000000..7839abe --- /dev/null +++ b/contributors/SkipPharaoh.json @@ -0,0 +1,18 @@ +{ + "name": "Caniggia Thompson", + "github": "SkipPharaoh", + "contributions": [ + "question", + "bug", + "code", + "doc", + "example", + "ideas", + "maintenance", + "mentoring", + "test", + "tutorial", + "userTesting" + ], + "profile": "https://github.com/SkipPharaoh" +} \ No newline at end of file diff --git a/contributors/SnowyCrest.json b/contributors/SnowyCrest.json new file mode 100644 index 0000000..45405de --- /dev/null +++ b/contributors/SnowyCrest.json @@ -0,0 +1,8 @@ +{ + "name": "SnowyCrest", + "github": "SnowyCrest", + "contributions": [ + "code" + ], + "profile": "https://github.com/SnowyCrest" +} \ No newline at end of file diff --git a/contributors/Solenessa.json b/contributors/Solenessa.json new file mode 100644 index 0000000..1cbc741 --- /dev/null +++ b/contributors/Solenessa.json @@ -0,0 +1,19 @@ +{ + "name": "solenessa", + "github": "Solenessa", + "contributions": [ + "question", + "code", + "content", + "data", + "design", + "doc", + "example", + "ideas", + "infra", + "review", + "security", + "userTesting" + ], + "profile": "https://github.com/Solenessa" +} \ No newline at end of file diff --git a/contributors/SoufianeJm.json b/contributors/SoufianeJm.json new file mode 100644 index 0000000..c8a6bfb --- /dev/null +++ b/contributors/SoufianeJm.json @@ -0,0 +1,9 @@ +{ + "name": "Soufiane Joumal", + "github": "SoufianeJm", + "contributions": [ + "code", + "design" + ], + "profile": "https://joumalsoufiane.me/" +} \ No newline at end of file diff --git a/contributors/Spcxx.json b/contributors/Spcxx.json new file mode 100644 index 0000000..1aaed60 --- /dev/null +++ b/contributors/Spcxx.json @@ -0,0 +1,13 @@ +{ + "name": "Spc", + "github": "Spcxx", + "contributions": [ + "question", + "bug", + "code", + "doc", + "ideas", + "translation" + ], + "profile": "https://github.com/Spcxx" +} \ No newline at end of file diff --git a/contributors/Suei43.json b/contributors/Suei43.json new file mode 100644 index 0000000..0e3cf52 --- /dev/null +++ b/contributors/Suei43.json @@ -0,0 +1,21 @@ +{ + "name": "Folarin Raphael ", + "github": "Suei43", + "contributions": [ + "a11y", + "question", + "blog", + "code", + "doc", + "maintenance", + "platform", + "plugin", + "projectManagement", + "promotion", + "review", + "test", + "translation", + "userTesting" + ], + "profile": "https://github.com/Suei43" +} \ No newline at end of file diff --git a/contributors/Suldana.json b/contributors/Suldana.json new file mode 100644 index 0000000..aaba052 --- /dev/null +++ b/contributors/Suldana.json @@ -0,0 +1,8 @@ +{ + "name": "Ms. Suldana", + "github": "Suldana", + "contributions": [ + "a11y" + ], + "profile": "https://leetcode.com/Suldana/" +} \ No newline at end of file diff --git a/contributors/Sunny-unik.json b/contributors/Sunny-unik.json new file mode 100644 index 0000000..dff566e --- /dev/null +++ b/contributors/Sunny-unik.json @@ -0,0 +1,18 @@ +{ + "name": "Sunny Gandhwani ", + "github": "Sunny-unik", + "contributions": [ + "question", + "audio", + "blog", + "bug", + "code", + "example", + "ideas", + "infra", + "maintenance", + "plugin", + "projectManagement" + ], + "profile": "https://github.com/Sunny-unik" +} \ No newline at end of file diff --git a/contributors/SusanGithaigaN.json b/contributors/SusanGithaigaN.json new file mode 100644 index 0000000..7ac3a55 --- /dev/null +++ b/contributors/SusanGithaigaN.json @@ -0,0 +1,12 @@ +{ + "name": "Susan Githaiga", + "github": "SusanGithaigaN", + "contributions": [ + "question", + "blog", + "bug", + "code", + "doc" + ], + "profile": "https://github.com/SusanGithaigaN" +} \ No newline at end of file diff --git a/contributors/SushiJ.json b/contributors/SushiJ.json new file mode 100644 index 0000000..cce7512 --- /dev/null +++ b/contributors/SushiJ.json @@ -0,0 +1,8 @@ +{ + "name": "Sushant Sharma", + "github": "SushiJ", + "contributions": [ + "doc" + ], + "profile": "https://github.com/SushiJ" +} \ No newline at end of file diff --git a/contributors/Tamale1.json b/contributors/Tamale1.json new file mode 100644 index 0000000..564f553 --- /dev/null +++ b/contributors/Tamale1.json @@ -0,0 +1,10 @@ +{ + "name": "Tamale1", + "github": "Tamale1", + "contributions": [ + "code", + "doc", + "maintenance" + ], + "profile": "https://github.com/Tamale1" +} \ No newline at end of file diff --git a/contributors/TanishqV5.json b/contributors/TanishqV5.json new file mode 100644 index 0000000..d060882 --- /dev/null +++ b/contributors/TanishqV5.json @@ -0,0 +1,16 @@ +{ + "name": "Tanishq Vaishnav", + "github": "TanishqV5", + "contributions": [ + "question", + "bug", + "a11y", + "code", + "design", + "doc", + "infra", + "maintenance", + "plugin" + ], + "profile": "https://github.com/TanishqV5" +} \ No newline at end of file diff --git a/contributors/Tawan-B.json b/contributors/Tawan-B.json new file mode 100644 index 0000000..d35329c --- /dev/null +++ b/contributors/Tawan-B.json @@ -0,0 +1,24 @@ +{ + "name": "Tawan Barbosa da Silva", + "github": "Tawan-B", + "contributions": [ + "question", + "blog", + "bug", + "business", + "code", + "content", + "data", + "doc", + "eventOrganizing", + "example", + "ideas", + "infra", + "research", + "security", + "test", + "translation", + "tutorial" + ], + "profile": "https://github.com/Tawan-B" +} \ No newline at end of file diff --git a/contributors/Teemamin.json b/contributors/Teemamin.json new file mode 100644 index 0000000..36973a2 --- /dev/null +++ b/contributors/Teemamin.json @@ -0,0 +1,12 @@ +{ + "name": "Fatima Aminu", + "github": "Teemamin", + "contributions": [ + "question", + "blog", + "code", + "doc", + "tutorial" + ], + "profile": "https://github.com/Teemamin" +} \ No newline at end of file diff --git a/contributors/TejsinghDhaosriya.json b/contributors/TejsinghDhaosriya.json new file mode 100644 index 0000000..5abec8a --- /dev/null +++ b/contributors/TejsinghDhaosriya.json @@ -0,0 +1,13 @@ +{ + "name": "TejsinghDhaosriya", + "github": "TejsinghDhaosriya", + "contributions": [ + "question", + "code", + "content", + "promotion", + "research", + "userTesting" + ], + "profile": "https://github.com/TejsinghDhaosriya" +} \ No newline at end of file diff --git a/contributors/TheOphige.json b/contributors/TheOphige.json new file mode 100644 index 0000000..7d45ead --- /dev/null +++ b/contributors/TheOphige.json @@ -0,0 +1,10 @@ +{ + "name": "Theophilus Ige", + "github": "TheOphige", + "contributions": [ + "a11y", + "question", + "bug" + ], + "profile": "https://github.com/TheOphige" +} \ No newline at end of file diff --git a/contributors/TomasDarquier.json b/contributors/TomasDarquier.json new file mode 100644 index 0000000..69f1b7e --- /dev/null +++ b/contributors/TomasDarquier.json @@ -0,0 +1,12 @@ +{ + "name": "Tomas Darquier", + "github": "TomasDarquier", + "contributions": [ + "code", + "content", + "data", + "doc", + "infra" + ], + "profile": "https://blog.tomasdarquier.com/" +} \ No newline at end of file diff --git a/contributors/ToniBirat7.json b/contributors/ToniBirat7.json new file mode 100644 index 0000000..efbae6e --- /dev/null +++ b/contributors/ToniBirat7.json @@ -0,0 +1,17 @@ +{ + "name": "Birat Gautam", + "github": "ToniBirat7", + "contributions": [ + "a11y", + "bug", + "code", + "doc", + "maintenance", + "mentoring", + "research", + "review", + "tutorial", + "video" + ], + "profile": "https://github.com/ToniBirat7" +} \ No newline at end of file diff --git a/contributors/ToobaJamal.json b/contributors/ToobaJamal.json new file mode 100644 index 0000000..b51d20f --- /dev/null +++ b/contributors/ToobaJamal.json @@ -0,0 +1,29 @@ +{ + "name": "Tooba Jamal", + "github": "ToobaJamal", + "contributions": [ + "a11y", + "question", + "blog", + "bug", + "code", + "content", + "data", + "design", + "doc", + "eventOrganizing", + "example", + "ideas", + "maintenance", + "mentoring", + "projectManagement", + "promotion", + "research", + "review", + "talk", + "tool", + "translation", + "tutorial" + ], + "profile": "https://www.freecodecamp.org/news/author/tooba/" +} \ No newline at end of file diff --git a/contributors/Ufidtech.json b/contributors/Ufidtech.json new file mode 100644 index 0000000..d37f85a --- /dev/null +++ b/contributors/Ufidtech.json @@ -0,0 +1,10 @@ +{ + "name": "Danjuma Ibrahim", + "github": "Ufidtech", + "contributions": [ + "a11y", + "question", + "bug" + ], + "profile": "https://github.com/Ufidtech" +} \ No newline at end of file diff --git a/contributors/ValLee4.json b/contributors/ValLee4.json new file mode 100644 index 0000000..7168353 --- /dev/null +++ b/contributors/ValLee4.json @@ -0,0 +1,8 @@ +{ + "name": "ValLee4", + "github": "ValLee4", + "contributions": [ + "tutorial" + ], + "profile": "https://github.com/ValLee4" +} \ No newline at end of file diff --git a/contributors/ValarieOyieke.json b/contributors/ValarieOyieke.json new file mode 100644 index 0000000..fb64691 --- /dev/null +++ b/contributors/ValarieOyieke.json @@ -0,0 +1,12 @@ +{ + "name": "ValarieOyieke", + "github": "ValarieOyieke", + "contributions": [ + "bug", + "code", + "example", + "review", + "userTesting" + ], + "profile": "https://github.com/ValarieOyieke" +} \ No newline at end of file diff --git a/contributors/Vamsi-344.json b/contributors/Vamsi-344.json new file mode 100644 index 0000000..54d2b83 --- /dev/null +++ b/contributors/Vamsi-344.json @@ -0,0 +1,16 @@ +{ + "name": "Vamsi Krishna Sethu", + "github": "Vamsi-344", + "contributions": [ + "a11y", + "code", + "content", + "doc", + "example", + "ideas", + "platform", + "research", + "tutorial" + ], + "profile": "https://github.com/Vamsi-344" +} \ No newline at end of file diff --git a/contributors/Vikingu-del.json b/contributors/Vikingu-del.json new file mode 100644 index 0000000..4476ced --- /dev/null +++ b/contributors/Vikingu-del.json @@ -0,0 +1,11 @@ +{ + "name": "Erik", + "github": "Vikingu-del", + "contributions": [ + "code", + "ideas", + "maintenance", + "research" + ], + "profile": "https://github.com/Vikingu-del" +} \ No newline at end of file diff --git a/contributors/VirginieLemaire.json b/contributors/VirginieLemaire.json new file mode 100644 index 0000000..c6d4c74 --- /dev/null +++ b/contributors/VirginieLemaire.json @@ -0,0 +1,12 @@ +{ + "name": "Virginie", + "github": "VirginieLemaire", + "contributions": [ + "code", + "data", + "doc", + "ideas", + "translation" + ], + "profile": "https://github.com/VirginieLemaire" +} \ No newline at end of file diff --git a/contributors/WassCodeur.json b/contributors/WassCodeur.json new file mode 100644 index 0000000..3bc6aa1 --- /dev/null +++ b/contributors/WassCodeur.json @@ -0,0 +1,18 @@ +{ + "name": "Wachiou BOURAÏMA", + "github": "WassCodeur", + "contributions": [ + "code", + "question", + "business", + "content", + "doc", + "ideas", + "promotion", + "test", + "translation", + "tutorial", + "userTesting" + ], + "profile": "https://wasscodeur.me/" +} \ No newline at end of file diff --git a/contributors/Woytsekj.json b/contributors/Woytsekj.json new file mode 100644 index 0000000..d0c2d25 --- /dev/null +++ b/contributors/Woytsekj.json @@ -0,0 +1,10 @@ +{ + "name": "Jonathan Woytsek", + "github": "Woytsekj", + "contributions": [ + "code", + "data", + "doc" + ], + "profile": "https://github.com/Woytsekj" +} \ No newline at end of file diff --git a/contributors/WybsonSantana.json b/contributors/WybsonSantana.json new file mode 100644 index 0000000..70437a3 --- /dev/null +++ b/contributors/WybsonSantana.json @@ -0,0 +1,8 @@ +{ + "name": "Wybson Santana", + "github": "WybsonSantana", + "contributions": [ + "tutorial" + ], + "profile": "https://www.linkedin.com/in/WybsonSantana/" +} \ No newline at end of file diff --git a/contributors/YoungGunner14.json b/contributors/YoungGunner14.json new file mode 100644 index 0000000..59d5c45 --- /dev/null +++ b/contributors/YoungGunner14.json @@ -0,0 +1,8 @@ +{ + "name": "YoungGunner14", + "github": "YoungGunner14", + "contributions": [ + "promotion" + ], + "profile": "https://github.com/YoungGunner14" +} \ No newline at end of file diff --git a/contributors/ZeeshanMukhtar1.json b/contributors/ZeeshanMukhtar1.json new file mode 100644 index 0000000..3dd80dc --- /dev/null +++ b/contributors/ZeeshanMukhtar1.json @@ -0,0 +1,16 @@ +{ + "name": "Zeeshan Mukhtar", + "github": "ZeeshanMukhtar1", + "contributions": [ + "code", + "content", + "doc", + "example", + "ideas", + "review", + "test", + "translation", + "tutorial" + ], + "profile": "https://github.com/ZeeshanMukhtar1" +} \ No newline at end of file diff --git a/contributors/Zier0Code.json b/contributors/Zier0Code.json new file mode 100644 index 0000000..d33f1d2 --- /dev/null +++ b/contributors/Zier0Code.json @@ -0,0 +1,9 @@ +{ + "name": "Zier0Code", + "github": "Zier0Code", + "contributions": [ + "question", + "bug" + ], + "profile": "https://github.com/Zier0Code" +} \ No newline at end of file diff --git a/contributors/acskii.json b/contributors/acskii.json new file mode 100644 index 0000000..6c23d3b --- /dev/null +++ b/contributors/acskii.json @@ -0,0 +1,9 @@ +{ + "name": "Andrew Sameh", + "github": "acskii", + "contributions": [ + "doc", + "maintenance" + ], + "profile": "https://github.com/acskii" +} \ No newline at end of file diff --git a/contributors/adaniel105.json b/contributors/adaniel105.json new file mode 100644 index 0000000..c002a8a --- /dev/null +++ b/contributors/adaniel105.json @@ -0,0 +1,12 @@ +{ + "name": "adaniel105", + "github": "adaniel105", + "contributions": [ + "code", + "doc", + "infra", + "plugin", + "research" + ], + "profile": "https://github.com/adaniel105" +} \ No newline at end of file diff --git a/contributors/adiati98.json b/contributors/adiati98.json new file mode 100644 index 0000000..e37381e --- /dev/null +++ b/contributors/adiati98.json @@ -0,0 +1,16 @@ +{ + "name": "Ayu Adiati", + "github": "adiati98", + "contributions": [ + "question", + "blog", + "code", + "content", + "doc", + "example", + "mentoring", + "talk", + "translation" + ], + "profile": "https://adiati.com/" +} \ No newline at end of file diff --git a/contributors/adiazt01.json b/contributors/adiazt01.json new file mode 100644 index 0000000..de9d53c --- /dev/null +++ b/contributors/adiazt01.json @@ -0,0 +1,8 @@ +{ + "name": "Armando Diaz", + "github": "adiazt01", + "contributions": [ + "code" + ], + "profile": "https://github.com/adiazt01" +} \ No newline at end of file diff --git a/contributors/aerg04.json b/contributors/aerg04.json new file mode 100644 index 0000000..618ca5d --- /dev/null +++ b/contributors/aerg04.json @@ -0,0 +1,10 @@ +{ + "name": "Andres Rangel", + "github": "aerg04", + "contributions": [ + "code", + "doc", + "maintenance" + ], + "profile": "https://github.com/aerg04" +} \ No newline at end of file diff --git a/contributors/akrsh47.json b/contributors/akrsh47.json new file mode 100644 index 0000000..426a34a --- /dev/null +++ b/contributors/akrsh47.json @@ -0,0 +1,8 @@ +{ + "name": "Akarsh Balachandran", + "github": "akrsh47", + "contributions": [ + "doc" + ], + "profile": "https://github.com/akrsh47" +} \ No newline at end of file diff --git a/contributors/alanoteles.json b/contributors/alanoteles.json new file mode 100644 index 0000000..5e02315 --- /dev/null +++ b/contributors/alanoteles.json @@ -0,0 +1,15 @@ +{ + "name": "Alano Teles", + "github": "alanoteles", + "contributions": [ + "question", + "blog", + "code", + "content", + "data", + "doc", + "research", + "translation" + ], + "profile": "https://github.com/alanoteles" +} \ No newline at end of file diff --git a/contributors/alberto-rj.json b/contributors/alberto-rj.json new file mode 100644 index 0000000..8909fd9 --- /dev/null +++ b/contributors/alberto-rj.json @@ -0,0 +1,14 @@ +{ + "name": "Alberto JosΓ©", + "github": "alberto-rj", + "contributions": [ + "a11y", + "question", + "bug", + "code", + "example", + "tutorial", + "doc" + ], + "profile": "https://github.com/alberto-rj" +} \ No newline at end of file diff --git a/contributors/alekyluken.json b/contributors/alekyluken.json new file mode 100644 index 0000000..eee24c9 --- /dev/null +++ b/contributors/alekyluken.json @@ -0,0 +1,9 @@ +{ + "name": "alekyluken", + "github": "alekyluken", + "contributions": [ + "code", + "data" + ], + "profile": "https://github.com/alekyluken" +} \ No newline at end of file diff --git a/contributors/algacyr-melo.json b/contributors/algacyr-melo.json new file mode 100644 index 0000000..1142a52 --- /dev/null +++ b/contributors/algacyr-melo.json @@ -0,0 +1,8 @@ +{ + "name": "Algacyr Melo", + "github": "algacyr-melo", + "contributions": [ + "doc" + ], + "profile": "https://github.com/algacyr-melo" +} \ No newline at end of file diff --git a/contributors/alishata128.json b/contributors/alishata128.json new file mode 100644 index 0000000..a9c7f7f --- /dev/null +++ b/contributors/alishata128.json @@ -0,0 +1,21 @@ +{ + "name": "Ali Shata", + "github": "alishata128", + "contributions": [ + "blog", + "code", + "content", + "data", + "design", + "doc", + "eventOrganizing", + "example", + "ideas", + "promotion", + "research", + "review", + "talk", + "tutorial" + ], + "profile": "https://www.linkedin.com/in/alishata/" +} \ No newline at end of file diff --git a/contributors/allanoguis.json b/contributors/allanoguis.json new file mode 100644 index 0000000..71cb671 --- /dev/null +++ b/contributors/allanoguis.json @@ -0,0 +1,11 @@ +{ + "name": "///\\).tkn", + "github": "allanoguis", + "contributions": [ + "question", + "example", + "ideas", + "translation" + ], + "profile": "https://github.com/allanoguis" +} \ No newline at end of file diff --git a/contributors/allwynvarghese.json b/contributors/allwynvarghese.json new file mode 100644 index 0000000..7cb67d0 --- /dev/null +++ b/contributors/allwynvarghese.json @@ -0,0 +1,9 @@ +{ + "name": "allwynvarghese", + "github": "allwynvarghese", + "contributions": [ + "code", + "userTesting" + ], + "profile": "https://github.com/allwynvarghese" +} \ No newline at end of file diff --git a/contributors/amateurManu.json b/contributors/amateurManu.json new file mode 100644 index 0000000..8f34007 --- /dev/null +++ b/contributors/amateurManu.json @@ -0,0 +1,14 @@ +{ + "name": "Emmanuel Odero", + "github": "amateurManu", + "contributions": [ + "bug", + "code", + "data", + "doc", + "infra", + "maintenance", + "test" + ], + "profile": "https://github.com/amateurManu" +} \ No newline at end of file diff --git a/contributors/ananfito.json b/contributors/ananfito.json new file mode 100644 index 0000000..bbeccca --- /dev/null +++ b/contributors/ananfito.json @@ -0,0 +1,8 @@ +{ + "name": "Anthony Nanfito", + "github": "ananfito", + "contributions": [ + "code" + ], + "profile": "http://ananfito.hashnode.dev/" +} \ No newline at end of file diff --git a/contributors/andymartinez1.json b/contributors/andymartinez1.json new file mode 100644 index 0000000..80e9283 --- /dev/null +++ b/contributors/andymartinez1.json @@ -0,0 +1,17 @@ +{ + "name": "Andrew Martinez", + "github": "andymartinez1", + "contributions": [ + "question", + "code", + "data", + "projectManagement", + "promotion", + "research", + "talk", + "test", + "tool", + "userTesting" + ], + "profile": "https://github.com/andymartinez1" +} \ No newline at end of file diff --git a/contributors/anka-afk.json b/contributors/anka-afk.json new file mode 100644 index 0000000..1e8837d --- /dev/null +++ b/contributors/anka-afk.json @@ -0,0 +1,8 @@ +{ + "name": "anka", + "github": "anka-afk", + "contributions": [ + "a11y" + ], + "profile": "https://github.com/anka-afk" +} \ No newline at end of file diff --git a/contributors/ankit.json b/contributors/ankit.json new file mode 100644 index 0000000..3bc5a68 --- /dev/null +++ b/contributors/ankit.json @@ -0,0 +1,9 @@ +{ + "name": "Ankit Ahuja", + "github": "ankit", + "contributions": [ + "question", + "video" + ], + "profile": "http://ankitahuja.com/about" +} \ No newline at end of file diff --git a/contributors/anyanime.json b/contributors/anyanime.json new file mode 100644 index 0000000..ac49aa8 --- /dev/null +++ b/contributors/anyanime.json @@ -0,0 +1,9 @@ +{ + "name": "Anyanime Benson", + "github": "anyanime", + "contributions": [ + "code", + "doc" + ], + "profile": "https://github.com/anyanime" +} \ No newline at end of file diff --git a/contributors/architxkumar.json b/contributors/architxkumar.json new file mode 100644 index 0000000..f4eec9b --- /dev/null +++ b/contributors/architxkumar.json @@ -0,0 +1,39 @@ +{ + "name": "Archit Kumar", + "github": "architxkumar", + "contributions": [ + "a11y", + "audio", + "blog", + "bug", + "business", + "code", + "content", + "data", + "design", + "doc", + "eventOrganizing", + "example", + "financial", + "fundingFinding", + "ideas", + "infra", + "maintenance", + "mentoring", + "platform", + "plugin", + "projectManagement", + "promotion", + "research", + "review", + "security", + "talk", + "test", + "tool", + "translation", + "tutorial", + "userTesting", + "video" + ], + "profile": "https://github.com/architxkumar" +} \ No newline at end of file diff --git a/contributors/arsaylik.json b/contributors/arsaylik.json new file mode 100644 index 0000000..de41fb8 --- /dev/null +++ b/contributors/arsaylik.json @@ -0,0 +1,8 @@ +{ + "name": "Ahmet Raşit SAYLIK", + "github": "arsaylik", + "contributions": [ + "tutorial" + ], + "profile": "https://github.com/arsaylik" +} \ No newline at end of file diff --git a/contributors/asheinT.json b/contributors/asheinT.json new file mode 100644 index 0000000..256f4be --- /dev/null +++ b/contributors/asheinT.json @@ -0,0 +1,9 @@ +{ + "name": "Ashen Thilakarathna", + "github": "asheinT", + "contributions": [ + "question", + "bug" + ], + "profile": "https://github.com/asheinT" +} \ No newline at end of file diff --git a/contributors/asirialwis.json b/contributors/asirialwis.json new file mode 100644 index 0000000..d1b8c08 --- /dev/null +++ b/contributors/asirialwis.json @@ -0,0 +1,20 @@ +{ + "name": "Asiri Alwis", + "github": "asirialwis", + "contributions": [ + "question", + "bug", + "code", + "content", + "design", + "doc", + "example", + "ideas", + "projectManagement", + "research", + "review", + "talk", + "translation" + ], + "profile": "https://github.com/asirialwis" +} \ No newline at end of file diff --git a/contributors/aspects19.json b/contributors/aspects19.json new file mode 100644 index 0000000..73313b9 --- /dev/null +++ b/contributors/aspects19.json @@ -0,0 +1,21 @@ +{ + "name": "Jeffarson Amenya", + "github": "aspects19", + "contributions": [ + "question", + "code", + "doc", + "review", + "blog", + "bug", + "business", + "design", + "ideas", + "maintenance", + "talk", + "translation", + "tutorial", + "video" + ], + "profile": "https://github.com/aspects19" +} \ No newline at end of file diff --git a/contributors/at-the-vr.json b/contributors/at-the-vr.json new file mode 100644 index 0000000..8ee3f33 --- /dev/null +++ b/contributors/at-the-vr.json @@ -0,0 +1,9 @@ +{ + "name": "Atharva", + "github": "at-the-vr", + "contributions": [ + "doc", + "translation" + ], + "profile": "https://github.com/at-the-vr" +} \ No newline at end of file diff --git a/contributors/badxcode.json b/contributors/badxcode.json new file mode 100644 index 0000000..f82f23e --- /dev/null +++ b/contributors/badxcode.json @@ -0,0 +1,15 @@ +{ + "name": "Jahid Imran", + "github": "badxcode", + "contributions": [ + "question", + "bug", + "code", + "data", + "example", + "research", + "security", + "test" + ], + "profile": "https://github.com/badxcode" +} \ No newline at end of file diff --git a/contributors/beckyrich.json b/contributors/beckyrich.json new file mode 100644 index 0000000..9ca3246 --- /dev/null +++ b/contributors/beckyrich.json @@ -0,0 +1,13 @@ +{ + "name": "Becky Richardson", + "github": "beckyrich", + "contributions": [ + "blog", + "bug", + "code", + "content", + "design", + "doc" + ], + "profile": "https://github.com/beckyrich" +} \ No newline at end of file diff --git a/contributors/biroue10.json b/contributors/biroue10.json new file mode 100644 index 0000000..f76494f --- /dev/null +++ b/contributors/biroue10.json @@ -0,0 +1,9 @@ +{ + "name": "BIROUE ISAAC", + "github": "biroue10", + "contributions": [ + "code", + "translation" + ], + "profile": "https://biroue.tech/" +} \ No newline at end of file diff --git a/contributors/blobmister.json b/contributors/blobmister.json new file mode 100644 index 0000000..10cf007 --- /dev/null +++ b/contributors/blobmister.json @@ -0,0 +1,9 @@ +{ + "name": "Krish Gupta", + "github": "blobmister", + "contributions": [ + "code", + "userTesting" + ], + "profile": "https://github.com/blobmister" +} \ No newline at end of file diff --git a/contributors/choji-alexander.json b/contributors/choji-alexander.json new file mode 100644 index 0000000..2802fb9 --- /dev/null +++ b/contributors/choji-alexander.json @@ -0,0 +1,9 @@ +{ + "name": "Alexander Choji", + "github": "choji-alexander", + "contributions": [ + "question", + "bug" + ], + "profile": "https://github.com/choji-alexander" +} \ No newline at end of file diff --git a/contributors/chris-nowicki.json b/contributors/chris-nowicki.json new file mode 100644 index 0000000..cfd1a9a --- /dev/null +++ b/contributors/chris-nowicki.json @@ -0,0 +1,11 @@ +{ + "name": "Chris Nowicki", + "github": "chris-nowicki", + "contributions": [ + "code", + "blog", + "doc", + "tutorial" + ], + "profile": "https://www.chrisnowicki.io/" +} \ No newline at end of file diff --git a/contributors/chrisVCH.json b/contributors/chrisVCH.json new file mode 100644 index 0000000..63b2946 --- /dev/null +++ b/contributors/chrisVCH.json @@ -0,0 +1,8 @@ +{ + "name": "Chris Chen", + "github": "chrisVCH", + "contributions": [ + "doc" + ], + "profile": "https://github.com/chrisVCH" +} \ No newline at end of file diff --git a/contributors/chydeepak7.json b/contributors/chydeepak7.json new file mode 100644 index 0000000..b28b6ca --- /dev/null +++ b/contributors/chydeepak7.json @@ -0,0 +1,9 @@ +{ + "name": "Deepak Kumar Chaudhary", + "github": "chydeepak7", + "contributions": [ + "bug", + "blog" + ], + "profile": "https://github.com/chydeepak7" +} \ No newline at end of file diff --git a/contributors/ciprij.json b/contributors/ciprij.json new file mode 100644 index 0000000..0649b28 --- /dev/null +++ b/contributors/ciprij.json @@ -0,0 +1,11 @@ +{ + "name": "Jake Cipri", + "github": "ciprij", + "contributions": [ + "bug", + "code", + "data", + "doc" + ], + "profile": "https://github.com/ciprij" +} \ No newline at end of file diff --git a/contributors/code99-ash.json b/contributors/code99-ash.json new file mode 100644 index 0000000..0e45a31 --- /dev/null +++ b/contributors/code99-ash.json @@ -0,0 +1,17 @@ +{ + "name": "Ikhlas", + "github": "code99-ash", + "contributions": [ + "audio", + "blog", + "bug", + "code", + "design", + "ideas", + "review", + "security", + "userTesting", + "video" + ], + "profile": "https://github.com/code99-ash" +} \ No newline at end of file diff --git a/contributors/codewithjazzy.json b/contributors/codewithjazzy.json new file mode 100644 index 0000000..8f8a5a5 --- /dev/null +++ b/contributors/codewithjazzy.json @@ -0,0 +1,8 @@ +{ + "name": "Jasmine", + "github": "codewithjazzy", + "contributions": [ + "tutorial" + ], + "profile": "https://github.com/codewithjazzy" +} \ No newline at end of file diff --git a/contributors/crow50.json b/contributors/crow50.json new file mode 100644 index 0000000..fe2072e --- /dev/null +++ b/contributors/crow50.json @@ -0,0 +1,24 @@ +{ + "name": "Ernest Baker", + "github": "crow50", + "contributions": [ + "question", + "blog", + "bug", + "business", + "code", + "data", + "doc", + "ideas", + "infra", + "maintenance", + "platform", + "plugin", + "review", + "security", + "test", + "tool", + "tutorial" + ], + "profile": "https://github.com/crow50" +} \ No newline at end of file diff --git a/contributors/cyril-giri.json b/contributors/cyril-giri.json new file mode 100644 index 0000000..93dc0c9 --- /dev/null +++ b/contributors/cyril-giri.json @@ -0,0 +1,9 @@ +{ + "name": "Cyril Stafford Giri", + "github": "cyril-giri", + "contributions": [ + "code", + "design" + ], + "profile": "https://github.com/cyril-giri" +} \ No newline at end of file diff --git a/contributors/daivydking.json b/contributors/daivydking.json new file mode 100644 index 0000000..7934ceb --- /dev/null +++ b/contributors/daivydking.json @@ -0,0 +1,8 @@ +{ + "name": "David Chuku", + "github": "daivydking", + "contributions": [ + "bug" + ], + "profile": "https://github.com/daivydking" +} \ No newline at end of file diff --git a/contributors/danieltott.json b/contributors/danieltott.json new file mode 100644 index 0000000..77ea490 --- /dev/null +++ b/contributors/danieltott.json @@ -0,0 +1,8 @@ +{ + "name": "Dan Ott", + "github": "danieltott", + "contributions": [ + "code" + ], + "profile": "https://danott.dev/" +} \ No newline at end of file diff --git a/contributors/darlopvil.json b/contributors/darlopvil.json new file mode 100644 index 0000000..512f6b6 --- /dev/null +++ b/contributors/darlopvil.json @@ -0,0 +1,22 @@ +{ + "name": "darlopvil", + "github": "darlopvil", + "contributions": [ + "question", + "blog", + "bug", + "code", + "content", + "data", + "design", + "doc", + "example", + "research", + "security", + "test", + "tool", + "translation", + "tutorial" + ], + "profile": "https://github.com/darlopvil" +} \ No newline at end of file diff --git a/contributors/david-001.json b/contributors/david-001.json new file mode 100644 index 0000000..f3dc6bd --- /dev/null +++ b/contributors/david-001.json @@ -0,0 +1,9 @@ +{ + "name": "David Akim", + "github": "david-001", + "contributions": [ + "code", + "content" + ], + "profile": "https://david-001.github.io/website/" +} \ No newline at end of file diff --git a/contributors/dehanli.json b/contributors/dehanli.json new file mode 100644 index 0000000..9155ee5 --- /dev/null +++ b/contributors/dehanli.json @@ -0,0 +1,8 @@ +{ + "name": "Dehan", + "github": "dehanli", + "contributions": [ + "a11y" + ], + "profile": "https://github.com/dehanli" +} \ No newline at end of file diff --git a/contributors/deisenhut.json b/contributors/deisenhut.json new file mode 100644 index 0000000..5fc5aef --- /dev/null +++ b/contributors/deisenhut.json @@ -0,0 +1,8 @@ +{ + "name": "Dan Eisenhut", + "github": "deisenhut", + "contributions": [ + "code" + ], + "profile": "https://github.com/deisenhut" +} \ No newline at end of file diff --git a/contributors/diegodemiranda.json b/contributors/diegodemiranda.json new file mode 100644 index 0000000..3be04d1 --- /dev/null +++ b/contributors/diegodemiranda.json @@ -0,0 +1,15 @@ +{ + "name": "Diego de Miranda", + "github": "diegodemiranda", + "contributions": [ + "bug", + "code", + "data", + "design", + "doc", + "ideas", + "translation", + "userTesting" + ], + "profile": "https://www.behance.net/diegodemirandadesign" +} \ No newline at end of file diff --git a/contributors/diegorramos84.json b/contributors/diegorramos84.json new file mode 100644 index 0000000..2581529 --- /dev/null +++ b/contributors/diegorramos84.json @@ -0,0 +1,28 @@ +{ + "name": "Diego Ramos", + "github": "diegorramos84", + "contributions": [ + "a11y", + "blog", + "bug", + "code", + "content", + "doc", + "review", + "tutorial", + "example", + "ideas", + "infra", + "maintenance", + "mentoring", + "plugin", + "projectManagement", + "review", + "security", + "tool", + "translation", + "tutorial", + "userTesting" + ], + "profile": "https://github.com/diegorramos84" +} \ No newline at end of file diff --git a/contributors/divin3circle.json b/contributors/divin3circle.json new file mode 100644 index 0000000..d7efea0 --- /dev/null +++ b/contributors/divin3circle.json @@ -0,0 +1,17 @@ +{ + "name": "Sylus Abel", + "github": "divin3circle", + "contributions": [ + "code", + "question", + "bug", + "design", + "maintenance", + "research", + "review", + "test", + "translation", + "tutorial" + ], + "profile": "https://venusgaming.me/" +} \ No newline at end of file diff --git a/contributors/doraemon2200.json b/contributors/doraemon2200.json new file mode 100644 index 0000000..ac638f7 --- /dev/null +++ b/contributors/doraemon2200.json @@ -0,0 +1,9 @@ +{ + "name": "doraemon2200", + "github": "doraemon2200", + "contributions": [ + "code", + "review" + ], + "profile": "https://github.com/doraemon2200" +} \ No newline at end of file diff --git a/contributors/drazerd.json b/contributors/drazerd.json new file mode 100644 index 0000000..ea1e4bf --- /dev/null +++ b/contributors/drazerd.json @@ -0,0 +1,13 @@ +{ + "name": "drazerd", + "github": "drazerd", + "contributions": [ + "question", + "bug", + "design", + "doc", + "maintenance", + "review" + ], + "profile": "https://github.com/drazerd" +} \ No newline at end of file diff --git a/contributors/droffilc1.json b/contributors/droffilc1.json new file mode 100644 index 0000000..4169c3c --- /dev/null +++ b/contributors/droffilc1.json @@ -0,0 +1,9 @@ +{ + "name": "Clifford Mapesa", + "github": "droffilc1", + "contributions": [ + "a11y", + "tutorial" + ], + "profile": "https://github.com/droffilc1" +} \ No newline at end of file diff --git a/contributors/dxeon.json b/contributors/dxeon.json new file mode 100644 index 0000000..ec40e0d --- /dev/null +++ b/contributors/dxeon.json @@ -0,0 +1,8 @@ +{ + "name": "Dmitry", + "github": "dxeon", + "contributions": [ + "code" + ], + "profile": "https://github.com/dxeon" +} \ No newline at end of file diff --git a/contributors/ebubecodes.json b/contributors/ebubecodes.json new file mode 100644 index 0000000..ac09f4f --- /dev/null +++ b/contributors/ebubecodes.json @@ -0,0 +1,8 @@ +{ + "name": "Ebube Ochemba", + "github": "ebubecodes", + "contributions": [ + "bug" + ], + "profile": "https://github.com/ebubecodes" +} \ No newline at end of file diff --git a/contributors/edgarefigueroa.json b/contributors/edgarefigueroa.json new file mode 100644 index 0000000..102379c --- /dev/null +++ b/contributors/edgarefigueroa.json @@ -0,0 +1,14 @@ +{ + "name": "Edgar Figueroa", + "github": "edgarefigueroa", + "contributions": [ + "code", + "data", + "doc", + "research", + "security", + "test", + "translation" + ], + "profile": "https://github.com/edgarefigueroa" +} \ No newline at end of file diff --git a/contributors/edwinhung.json b/contributors/edwinhung.json new file mode 100644 index 0000000..dbec635 --- /dev/null +++ b/contributors/edwinhung.json @@ -0,0 +1,14 @@ +{ + "name": "Edwin Hung", + "github": "edwinhung", + "contributions": [ + "code", + "data", + "doc", + "ideas", + "projectManagement", + "research", + "translation" + ], + "profile": "https://github.com/edwinhung" +} \ No newline at end of file diff --git a/contributors/edwinkuruvila.json b/contributors/edwinkuruvila.json new file mode 100644 index 0000000..daf9552 --- /dev/null +++ b/contributors/edwinkuruvila.json @@ -0,0 +1,9 @@ +{ + "name": "Edwin Kuruvila", + "github": "edwinkuruvila", + "contributions": [ + "question", + "bug" + ], + "profile": "https://github.com/edwinkuruvila" +} \ No newline at end of file diff --git a/contributors/ehsanullahhaidary.json b/contributors/ehsanullahhaidary.json new file mode 100644 index 0000000..bc9161d --- /dev/null +++ b/contributors/ehsanullahhaidary.json @@ -0,0 +1,11 @@ +{ + "name": "Ehsanullah Haidary", + "github": "ehsanullahhaidary", + "contributions": [ + "bug", + "code", + "design", + "doc" + ], + "profile": "https://ehsanullah.vercel.app/" +} \ No newline at end of file diff --git a/contributors/ekastn.json b/contributors/ekastn.json new file mode 100644 index 0000000..e2be8ab --- /dev/null +++ b/contributors/ekastn.json @@ -0,0 +1,9 @@ +{ + "name": "eka", + "github": "ekastn", + "contributions": [ + "question", + "bug" + ], + "profile": "https://github.com/ekastn" +} \ No newline at end of file diff --git a/contributors/enamcse.json b/contributors/enamcse.json new file mode 100644 index 0000000..2246389 --- /dev/null +++ b/contributors/enamcse.json @@ -0,0 +1,27 @@ +{ + "name": "Enamul Hassan", + "github": "enamcse", + "contributions": [ + "question", + "audio", + "blog", + "bug", + "code", + "content", + "data", + "design", + "doc", + "example", + "fundingFinding", + "ideas", + "maintenance", + "mentoring", + "projectManagement", + "research", + "security", + "talk", + "tutorial", + "userTesting" + ], + "profile": "https://github.com/enamcse" +} \ No newline at end of file diff --git a/contributors/errantpianist.json b/contributors/errantpianist.json new file mode 100644 index 0000000..017d354 --- /dev/null +++ b/contributors/errantpianist.json @@ -0,0 +1,21 @@ +{ + "name": "errantpianist", + "github": "errantpianist", + "contributions": [ + "question", + "bug", + "code", + "content", + "data", + "doc", + "example", + "ideas", + "mentoring", + "research", + "review", + "test", + "tutorial", + "userTesting" + ], + "profile": "https://github.com/errantpianist" +} \ No newline at end of file diff --git a/contributors/example-contributor.json b/contributors/example-contributor.json new file mode 100644 index 0000000..63dabaf --- /dev/null +++ b/contributors/example-contributor.json @@ -0,0 +1,6 @@ +{ + "name": "Example Contributor", + "github": "example-contributor", + "profile": "https://example.com", + "contributions": ["code", "doc", "tutorial"] +} \ No newline at end of file diff --git a/contributors/fab33150.json b/contributors/fab33150.json new file mode 100644 index 0000000..1363a36 --- /dev/null +++ b/contributors/fab33150.json @@ -0,0 +1,10 @@ +{ + "name": "Fabrice Innocent", + "github": "fab33150", + "contributions": [ + "blog", + "code", + "review" + ], + "profile": "https://github.com/fab33150" +} \ No newline at end of file diff --git a/contributors/favourachara07.json b/contributors/favourachara07.json new file mode 100644 index 0000000..4c02e91 --- /dev/null +++ b/contributors/favourachara07.json @@ -0,0 +1,9 @@ +{ + "name": "Favour Achara", + "github": "favourachara07", + "contributions": [ + "blog", + "ideas" + ], + "profile": "https://favour-achara.vercel.app/" +} \ No newline at end of file diff --git a/contributors/franklinjpt.json b/contributors/franklinjpt.json new file mode 100644 index 0000000..9006778 --- /dev/null +++ b/contributors/franklinjpt.json @@ -0,0 +1,9 @@ +{ + "name": "Franklin Pineda", + "github": "franklinjpt", + "contributions": [ + "bug", + "translation" + ], + "profile": "https://github.com/franklinjpt" +} \ No newline at end of file diff --git a/contributors/frustateduser.json b/contributors/frustateduser.json new file mode 100644 index 0000000..56a51cc --- /dev/null +++ b/contributors/frustateduser.json @@ -0,0 +1,10 @@ +{ + "name": "KOUSTUBH BADSHAH", + "github": "frustateduser", + "contributions": [ + "question", + "bug", + "a11y" + ], + "profile": "https://frustateduser.github.io/koustubh.github.io/" +} \ No newline at end of file diff --git a/contributors/gaffarabdul.json b/contributors/gaffarabdul.json new file mode 100644 index 0000000..e15aed4 --- /dev/null +++ b/contributors/gaffarabdul.json @@ -0,0 +1,9 @@ +{ + "name": "Gaffar", + "github": "gaffarabdul", + "contributions": [ + "question", + "bug" + ], + "profile": "https://github.com/gaffarabdul" +} \ No newline at end of file diff --git a/contributors/geoffreylgv.json b/contributors/geoffreylgv.json new file mode 100644 index 0000000..2e9afe8 --- /dev/null +++ b/contributors/geoffreylgv.json @@ -0,0 +1,22 @@ +{ + "name": "Geoffrey Logovi", + "github": "geoffreylgv", + "contributions": [ + "design", + "translation", + "doc", + "content", + "tutorial", + "review", + "code", + "blog", + "video", + "bug", + "example", + "promotion", + "projectManagement", + "ideas", + "plugin" + ], + "profile": "https://github.com/geoffreylgv" +} \ No newline at end of file diff --git a/contributors/gitFerdo.json b/contributors/gitFerdo.json new file mode 100644 index 0000000..b9dbfb0 --- /dev/null +++ b/contributors/gitFerdo.json @@ -0,0 +1,9 @@ +{ + "name": "W A T Amasha Fernando", + "github": "gitFerdo", + "contributions": [ + "question", + "bug" + ], + "profile": "https://github.com/gitFerdo" +} \ No newline at end of file diff --git a/contributors/goobric.json b/contributors/goobric.json new file mode 100644 index 0000000..d282145 --- /dev/null +++ b/contributors/goobric.json @@ -0,0 +1,14 @@ +{ + "name": "Mikal", + "github": "goobric", + "contributions": [ + "a11y", + "question", + "code", + "doc", + "ideas", + "mentoring", + "tutorial" + ], + "profile": "https://github.com/goobric" +} \ No newline at end of file diff --git a/contributors/hakeemyusuff.json b/contributors/hakeemyusuff.json new file mode 100644 index 0000000..4a15e2a --- /dev/null +++ b/contributors/hakeemyusuff.json @@ -0,0 +1,10 @@ +{ + "name": "HakeemYusuff", + "github": "hakeemyusuff", + "contributions": [ + "code", + "doc", + "maintenance" + ], + "profile": "https://github.com/hakeemyusuff" +} \ No newline at end of file diff --git a/contributors/hediyetapan.json b/contributors/hediyetapan.json new file mode 100644 index 0000000..1e7f5e7 --- /dev/null +++ b/contributors/hediyetapan.json @@ -0,0 +1,8 @@ +{ + "name": "hediyetapan", + "github": "hediyetapan", + "contributions": [ + "code" + ], + "profile": "https://github.com/hediyetapan" +} \ No newline at end of file diff --git a/contributors/hferguson.json b/contributors/hferguson.json new file mode 100644 index 0000000..13ba2d1 --- /dev/null +++ b/contributors/hferguson.json @@ -0,0 +1,10 @@ +{ + "name": "Hugh Ferguson", + "github": "hferguson", + "contributions": [ + "a11y", + "question", + "tutorial" + ], + "profile": "https://github.com/hferguson" +} \ No newline at end of file diff --git a/contributors/hokagedemehin.json b/contributors/hokagedemehin.json new file mode 100644 index 0000000..f27a47e --- /dev/null +++ b/contributors/hokagedemehin.json @@ -0,0 +1,14 @@ +{ + "name": "Ibukun Demehin", + "github": "hokagedemehin", + "contributions": [ + "code", + "content", + "doc", + "research", + "tutorial", + "ideas", + "userTesting" + ], + "profile": "https://github.com/hokagedemehin" +} \ No newline at end of file diff --git a/contributors/hritikyadav07.json b/contributors/hritikyadav07.json new file mode 100644 index 0000000..afd04b5 --- /dev/null +++ b/contributors/hritikyadav07.json @@ -0,0 +1,9 @@ +{ + "name": "Hritik Yadav", + "github": "hritikyadav07", + "contributions": [ + "question", + "bug" + ], + "profile": "https://github.com/hritikyadav07" +} \ No newline at end of file diff --git a/contributors/ht-l1.json b/contributors/ht-l1.json new file mode 100644 index 0000000..6e1655d --- /dev/null +++ b/contributors/ht-l1.json @@ -0,0 +1,14 @@ +{ + "name": "Hannah Lin", + "github": "ht-l1", + "contributions": [ + "question", + "bug", + "business", + "code", + "ideas", + "infra", + "maintenance" + ], + "profile": "https://github.com/ht-l1" +} \ No newline at end of file diff --git a/contributors/hurshore.json b/contributors/hurshore.json new file mode 100644 index 0000000..22b57f1 --- /dev/null +++ b/contributors/hurshore.json @@ -0,0 +1,11 @@ +{ + "name": "Jahtofunmi Osho", + "github": "hurshore", + "contributions": [ + "bug", + "code", + "doc", + "example" + ], + "profile": "https://tofunmiosho.netlify.app/" +} \ No newline at end of file diff --git a/contributors/hyosung11.json b/contributors/hyosung11.json new file mode 100644 index 0000000..facef8b --- /dev/null +++ b/contributors/hyosung11.json @@ -0,0 +1,8 @@ +{ + "name": "HyoSung \"H\" Bidol-Lee", + "github": "hyosung11", + "contributions": [ + "doc" + ], + "profile": "https://github.com/hyosung11" +} \ No newline at end of file diff --git a/contributors/ijayhub.json b/contributors/ijayhub.json new file mode 100644 index 0000000..33b7615 --- /dev/null +++ b/contributors/ijayhub.json @@ -0,0 +1,19 @@ +{ + "name": "Cent", + "github": "ijayhub", + "contributions": [ + "a11y", + "question", + "blog", + "code", + "content", + "doc", + "ideas", + "maintenance", + "promotion", + "research", + "talk", + "tutorial" + ], + "profile": "https://portfolio-ijayhub.vercel.app/" +} \ No newline at end of file diff --git a/contributors/irisxvii.json b/contributors/irisxvii.json new file mode 100644 index 0000000..79c3edb --- /dev/null +++ b/contributors/irisxvii.json @@ -0,0 +1,8 @@ +{ + "name": "iris mariah kurien", + "github": "irisxvii", + "contributions": [ + "content" + ], + "profile": "https://github.com/irisxvii" +} \ No newline at end of file diff --git a/contributors/ivngzmn.json b/contributors/ivngzmn.json new file mode 100644 index 0000000..9788001 --- /dev/null +++ b/contributors/ivngzmn.json @@ -0,0 +1,19 @@ +{ + "name": "Ivan Guzman", + "github": "ivngzmn", + "contributions": [ + "question", + "blog", + "bug", + "code", + "content", + "design", + "doc", + "ideas", + "maintenance", + "mentoring", + "review", + "translation" + ], + "profile": "https://github.com/ivngzmn" +} \ No newline at end of file diff --git a/contributors/izazw.json b/contributors/izazw.json new file mode 100644 index 0000000..a47f37f --- /dev/null +++ b/contributors/izazw.json @@ -0,0 +1,15 @@ +{ + "name": "Iza Zamorska-Wasielak", + "github": "izazw", + "contributions": [ + "a11y", + "question", + "bug", + "code", + "doc", + "ideas", + "mentoring", + "data" + ], + "profile": "https://izacodes.me/" +} \ No newline at end of file diff --git a/contributors/janzengo.json b/contributors/janzengo.json new file mode 100644 index 0000000..8ab09f5 --- /dev/null +++ b/contributors/janzengo.json @@ -0,0 +1,17 @@ +{ + "name": "Janzen Go", + "github": "janzengo", + "contributions": [ + "a11y", + "question", + "bug", + "code", + "design", + "doc", + "promotion", + "test", + "tool", + "translation" + ], + "profile": "https://github.com/janzengo" +} \ No newline at end of file diff --git a/contributors/jas1005.json b/contributors/jas1005.json new file mode 100644 index 0000000..241ceb5 --- /dev/null +++ b/contributors/jas1005.json @@ -0,0 +1,9 @@ +{ + "name": "Jacob Smith", + "github": "jas1005", + "contributions": [ + "question", + "bug" + ], + "profile": "https://github.com/jas1005" +} \ No newline at end of file diff --git a/contributors/jayasuryard31.json b/contributors/jayasuryard31.json new file mode 100644 index 0000000..1c09206 --- /dev/null +++ b/contributors/jayasuryard31.json @@ -0,0 +1,12 @@ +{ + "name": "Jayasurya R D", + "github": "jayasuryard31", + "contributions": [ + "code", + "data", + "ideas", + "design", + "review" + ], + "profile": "https://github.com/jayasuryard31" +} \ No newline at end of file diff --git a/contributors/jcrosser.json b/contributors/jcrosser.json new file mode 100644 index 0000000..797226a --- /dev/null +++ b/contributors/jcrosser.json @@ -0,0 +1,10 @@ +{ + "name": "Jacob Crosser", + "github": "jcrosser", + "contributions": [ + "code", + "data", + "doc" + ], + "profile": "https://github.com/jcrosser" +} \ No newline at end of file diff --git a/contributors/jdwilkin4.json b/contributors/jdwilkin4.json new file mode 100644 index 0000000..06fa986 --- /dev/null +++ b/contributors/jdwilkin4.json @@ -0,0 +1,21 @@ +{ + "name": "Jessica Wilkins ", + "github": "jdwilkin4", + "contributions": [ + "question", + "blog", + "bug", + "code", + "content", + "doc", + "example", + "ideas", + "maintenance", + "mentoring", + "projectManagement", + "review", + "test", + "userTesting" + ], + "profile": "https://jessicawilkins.dev/" +} \ No newline at end of file diff --git a/contributors/jiuyueshenhua.json b/contributors/jiuyueshenhua.json new file mode 100644 index 0000000..3c5ef00 --- /dev/null +++ b/contributors/jiuyueshenhua.json @@ -0,0 +1,9 @@ +{ + "name": "CatCat Ice", + "github": "jiuyueshenhua", + "contributions": [ + "content", + "tutorial" + ], + "profile": "https://github.com/jiuyueshenhua" +} \ No newline at end of file diff --git a/contributors/jmslynn.json b/contributors/jmslynn.json new file mode 100644 index 0000000..83f42b7 --- /dev/null +++ b/contributors/jmslynn.json @@ -0,0 +1,9 @@ +{ + "name": "jmslynn", + "github": "jmslynn", + "contributions": [ + "a11y", + "code" + ], + "profile": "https://github.com/jmslynn" +} \ No newline at end of file diff --git a/contributors/jurmy24.json b/contributors/jurmy24.json new file mode 100644 index 0000000..228dff2 --- /dev/null +++ b/contributors/jurmy24.json @@ -0,0 +1,12 @@ +{ + "name": "Victor Oldensand", + "github": "jurmy24", + "contributions": [ + "bug", + "data", + "doc", + "ideas", + "projectManagement" + ], + "profile": "https://github.com/jurmy24" +} \ No newline at end of file diff --git a/contributors/k1nho.json b/contributors/k1nho.json new file mode 100644 index 0000000..1d7514d --- /dev/null +++ b/contributors/k1nho.json @@ -0,0 +1,14 @@ +{ + "name": "Kin NG", + "github": "k1nho", + "contributions": [ + "blog", + "bug", + "code", + "design", + "doc", + "infra", + "review" + ], + "profile": "https://kinhong.vercel.app/" +} \ No newline at end of file diff --git a/contributors/karsterr.json b/contributors/karsterr.json new file mode 100644 index 0000000..7fff1d8 --- /dev/null +++ b/contributors/karsterr.json @@ -0,0 +1,12 @@ +{ + "name": "Efe Can Kara", + "github": "karsterr", + "contributions": [ + "code", + "example", + "ideas", + "translation", + "tutorial" + ], + "profile": "https://github.com/karsterr" +} \ No newline at end of file diff --git a/contributors/kelvinyelyen.json b/contributors/kelvinyelyen.json new file mode 100644 index 0000000..150b154 --- /dev/null +++ b/contributors/kelvinyelyen.json @@ -0,0 +1,16 @@ +{ + "name": "Kelvin Yelyen", + "github": "kelvinyelyen", + "contributions": [ + "code", + "content", + "design", + "bug", + "doc", + "ideas", + "projectManagement", + "research", + "test" + ], + "profile": "https://github.com/kelvinyelyen" +} \ No newline at end of file diff --git a/contributors/kilokomuli.json b/contributors/kilokomuli.json new file mode 100644 index 0000000..bbae4a4 --- /dev/null +++ b/contributors/kilokomuli.json @@ -0,0 +1,11 @@ +{ + "name": "emma", + "github": "kilokomuli", + "contributions": [ + "bug", + "code", + "doc", + "maintenance" + ], + "profile": "https://github.com/kilokomuli" +} \ No newline at end of file diff --git a/contributors/koja-amir.json b/contributors/koja-amir.json new file mode 100644 index 0000000..8065a31 --- /dev/null +++ b/contributors/koja-amir.json @@ -0,0 +1,8 @@ +{ + "name": "koja-amir", + "github": "koja-amir", + "contributions": [ + "data" + ], + "profile": "https://github.com/koja-amir" +} \ No newline at end of file diff --git a/contributors/kolapowariz.json b/contributors/kolapowariz.json new file mode 100644 index 0000000..5cb5553 --- /dev/null +++ b/contributors/kolapowariz.json @@ -0,0 +1,10 @@ +{ + "name": "Kolapo Wariz", + "github": "kolapowariz", + "contributions": [ + "example", + "question", + "bug" + ], + "profile": "https://github.com/kolapowariz" +} \ No newline at end of file diff --git a/contributors/kristiingco.json b/contributors/kristiingco.json new file mode 100644 index 0000000..3883e51 --- /dev/null +++ b/contributors/kristiingco.json @@ -0,0 +1,9 @@ +{ + "name": "Kristi Ingco", + "github": "kristiingco", + "contributions": [ + "bug", + "userTesting" + ], + "profile": "https://github.com/kristiingco" +} \ No newline at end of file diff --git a/contributors/liaxoo.json b/contributors/liaxoo.json new file mode 100644 index 0000000..0c9b9d2 --- /dev/null +++ b/contributors/liaxoo.json @@ -0,0 +1,12 @@ +{ + "name": "Liaxo", + "github": "liaxoo", + "contributions": [ + "code", + "design", + "doc", + "infra", + "video" + ], + "profile": "https://github.com/liaxoo" +} \ No newline at end of file diff --git a/contributors/livlaurel.json b/contributors/livlaurel.json new file mode 100644 index 0000000..762d6ab --- /dev/null +++ b/contributors/livlaurel.json @@ -0,0 +1,11 @@ +{ + "name": "Olivia Laurel", + "github": "livlaurel", + "contributions": [ + "question", + "code", + "design", + "userTesting" + ], + "profile": "https://github.com/livlaurel" +} \ No newline at end of file diff --git a/contributors/lorenzjdr.json b/contributors/lorenzjdr.json new file mode 100644 index 0000000..126c26b --- /dev/null +++ b/contributors/lorenzjdr.json @@ -0,0 +1,9 @@ +{ + "name": "Lorenz De Robles", + "github": "lorenzjdr", + "contributions": [ + "code", + "tutorial" + ], + "profile": "https://lorenzjdr.dev/" +} \ No newline at end of file diff --git a/contributors/luciano665.json b/contributors/luciano665.json new file mode 100644 index 0000000..7fa16ee --- /dev/null +++ b/contributors/luciano665.json @@ -0,0 +1,24 @@ +{ + "name": "Luciano M.", + "github": "luciano665", + "contributions": [ + "question", + "bug", + "code", + "data", + "doc", + "example", + "ideas", + "mentoring", + "plugin", + "projectManagement", + "research", + "review", + "security", + "talk", + "test", + "tool", + "tutorial" + ], + "profile": "https://lucianoportofliowebiste.com/" +} \ No newline at end of file diff --git a/contributors/lukepadiachy.json b/contributors/lukepadiachy.json new file mode 100644 index 0000000..df4e9ae --- /dev/null +++ b/contributors/lukepadiachy.json @@ -0,0 +1,8 @@ +{ + "name": "πŸ…ΏοΈadi", + "github": "lukepadiachy", + "contributions": [ + "bug" + ], + "profile": "https://github.com/lukepadiachy" +} \ No newline at end of file diff --git a/contributors/lutfiaomarr.json b/contributors/lutfiaomarr.json new file mode 100644 index 0000000..6bc64a9 --- /dev/null +++ b/contributors/lutfiaomarr.json @@ -0,0 +1,8 @@ +{ + "name": "lutfiaomarr", + "github": "lutfiaomarr", + "contributions": [ + "a11y" + ], + "profile": "https://github.com/lutfiaomarr" +} \ No newline at end of file diff --git a/contributors/macabonilas827.json b/contributors/macabonilas827.json new file mode 100644 index 0000000..47048b7 --- /dev/null +++ b/contributors/macabonilas827.json @@ -0,0 +1,15 @@ +{ + "name": "Mark Anel Cabonilas", + "github": "macabonilas827", + "contributions": [ + "a11y", + "question", + "blog", + "code", + "data", + "doc", + "ideas", + "tool" + ], + "profile": "https://github.com/macabonilas827" +} \ No newline at end of file diff --git a/contributors/madefromjames.json b/contributors/madefromjames.json new file mode 100644 index 0000000..d2b1cd9 --- /dev/null +++ b/contributors/madefromjames.json @@ -0,0 +1,27 @@ +{ + "name": "James Emmanuel", + "github": "madefromjames", + "contributions": [ + "a11y", + "question", + "bug", + "code", + "data", + "doc", + "example", + "ideas", + "infra", + "maintenance", + "mentoring", + "platform", + "plugin", + "projectManagement", + "promotion", + "research", + "review", + "test", + "tool", + "userTesting" + ], + "profile": "https://github.com/madefromjames" +} \ No newline at end of file diff --git a/contributors/madevanni.json b/contributors/madevanni.json new file mode 100644 index 0000000..fb99d74 --- /dev/null +++ b/contributors/madevanni.json @@ -0,0 +1,10 @@ +{ + "name": "Madevanni", + "github": "madevanni", + "contributions": [ + "question", + "bug", + "doc" + ], + "profile": "https://github.com/madevanni" +} \ No newline at end of file diff --git a/contributors/manojtharindu11.json b/contributors/manojtharindu11.json new file mode 100644 index 0000000..9bf7891 --- /dev/null +++ b/contributors/manojtharindu11.json @@ -0,0 +1,12 @@ +{ + "name": "Manoj Thilakarathna", + "github": "manojtharindu11", + "contributions": [ + "question", + "code", + "data", + "doc", + "ideas" + ], + "profile": "https://manojtharindu11.github.io/Personal_portfolio_website/" +} \ No newline at end of file diff --git a/contributors/matheus0214.json b/contributors/matheus0214.json new file mode 100644 index 0000000..96e5854 --- /dev/null +++ b/contributors/matheus0214.json @@ -0,0 +1,13 @@ +{ + "name": "Matheus Gomes Dias", + "github": "matheus0214", + "contributions": [ + "code", + "doc", + "maintenance", + "mentoring", + "test", + "translation" + ], + "profile": "https://github.com/matheus0214" +} \ No newline at end of file diff --git a/contributors/mathncode-sid.json b/contributors/mathncode-sid.json new file mode 100644 index 0000000..f72d0ca --- /dev/null +++ b/contributors/mathncode-sid.json @@ -0,0 +1,13 @@ +{ + "name": "Sidney Baraka Muriuki", + "github": "mathncode-sid", + "contributions": [ + "question", + "blog", + "code", + "data", + "design", + "doc" + ], + "profile": "https://math-n-code-sid.netlify.app/" +} \ No newline at end of file diff --git a/contributors/max-deathray.json b/contributors/max-deathray.json new file mode 100644 index 0000000..b9e62b7 --- /dev/null +++ b/contributors/max-deathray.json @@ -0,0 +1,9 @@ +{ + "name": "McRae Petrey", + "github": "max-deathray", + "contributions": [ + "bug", + "doc" + ], + "profile": "https://github.com/max-deathray" +} \ No newline at end of file diff --git a/contributors/mbadrawy1.json b/contributors/mbadrawy1.json new file mode 100644 index 0000000..027e61b --- /dev/null +++ b/contributors/mbadrawy1.json @@ -0,0 +1,8 @@ +{ + "name": "Mohamad Badrawy", + "github": "mbadrawy1", + "contributions": [ + "question" + ], + "profile": "https://github.com/mbadrawy1" +} \ No newline at end of file diff --git a/contributors/metaltheory.json b/contributors/metaltheory.json new file mode 100644 index 0000000..9579e31 --- /dev/null +++ b/contributors/metaltheory.json @@ -0,0 +1,11 @@ +{ + "name": "Chase Corbitt", + "github": "metaltheory", + "contributions": [ + "code", + "tutorial", + "example", + "ideas" + ], + "profile": "https://github.com/metaltheory" +} \ No newline at end of file diff --git a/contributors/michaelcortese.json b/contributors/michaelcortese.json new file mode 100644 index 0000000..c089050 --- /dev/null +++ b/contributors/michaelcortese.json @@ -0,0 +1,10 @@ +{ + "name": "Michael Cortese", + "github": "michaelcortese", + "contributions": [ + "bug", + "code", + "financial" + ], + "profile": "https://www.crtse.dev/" +} \ No newline at end of file diff --git a/contributors/michaella23.json b/contributors/michaella23.json new file mode 100644 index 0000000..147818c --- /dev/null +++ b/contributors/michaella23.json @@ -0,0 +1,14 @@ +{ + "name": "Michaella Rodriguez", + "github": "michaella23", + "contributions": [ + "a11y", + "bug", + "code", + "content", + "doc", + "mentoring", + "tutorial" + ], + "profile": "https://github.com/michaella23" +} \ No newline at end of file diff --git a/contributors/mohanamisra.json b/contributors/mohanamisra.json new file mode 100644 index 0000000..d82a462 --- /dev/null +++ b/contributors/mohanamisra.json @@ -0,0 +1,23 @@ +{ + "name": "Mohana Misra", + "github": "mohanamisra", + "contributions": [ + "a11y", + "question", + "blog", + "bug", + "code", + "content", + "data", + "design", + "doc", + "eventOrganizing", + "ideas", + "maintenance", + "projectManagement", + "research", + "review", + "tutorial" + ], + "profile": "https://github.com/mohanamisra" +} \ No newline at end of file diff --git a/contributors/mrcentimetre.json b/contributors/mrcentimetre.json new file mode 100644 index 0000000..86f0910 --- /dev/null +++ b/contributors/mrcentimetre.json @@ -0,0 +1,15 @@ +{ + "name": "Udana Nimsara", + "github": "mrcentimetre", + "contributions": [ + "question", + "code", + "eventOrganizing", + "example", + "review", + "bug", + "translation", + "tutorial" + ], + "profile": "https://github.com/mrcentimetre" +} \ No newline at end of file diff --git a/contributors/mrutunjay-kinagi.json b/contributors/mrutunjay-kinagi.json new file mode 100644 index 0000000..26fbf3a --- /dev/null +++ b/contributors/mrutunjay-kinagi.json @@ -0,0 +1,15 @@ +{ + "name": "Mrutunjay Kinagi", + "github": "mrutunjay-kinagi", + "contributions": [ + "blog", + "code", + "data", + "doc", + "mentoring", + "plugin", + "projectManagement", + "review" + ], + "profile": "https://github.com/mrutunjay-kinagi" +} \ No newline at end of file diff --git a/contributors/muou000.json b/contributors/muou000.json new file mode 100644 index 0000000..9057ad5 --- /dev/null +++ b/contributors/muou000.json @@ -0,0 +1,9 @@ +{ + "name": "muou", + "github": "muou000", + "contributions": [ + "question", + "bug" + ], + "profile": "https://github.com/muou000" +} \ No newline at end of file diff --git a/contributors/nhim-uit.json b/contributors/nhim-uit.json new file mode 100644 index 0000000..012e0c0 --- /dev/null +++ b/contributors/nhim-uit.json @@ -0,0 +1,21 @@ +{ + "name": "H. Nhi (Alex)", + "github": "nhim-uit", + "contributions": [ + "question", + "bug", + "code", + "design", + "doc", + "example", + "ideas", + "projectManagement", + "talk", + "test", + "tool", + "translation", + "tutorial", + "userTesting" + ], + "profile": "https://app.opensauced.pizza/u/nhim-uit" +} \ No newline at end of file diff --git a/contributors/nickaldwin.json b/contributors/nickaldwin.json new file mode 100644 index 0000000..101d69f --- /dev/null +++ b/contributors/nickaldwin.json @@ -0,0 +1,10 @@ +{ + "name": "nick", + "github": "nickaldwin", + "contributions": [ + "code", + "doc", + "infra" + ], + "profile": "https://github.com/nickaldwin" +} \ No newline at end of file diff --git a/contributors/notavailable4u.json b/contributors/notavailable4u.json new file mode 100644 index 0000000..0149a95 --- /dev/null +++ b/contributors/notavailable4u.json @@ -0,0 +1,8 @@ +{ + "name": "@notavailable4u", + "github": "notavailable4u", + "contributions": [ + "question" + ], + "profile": "https://patrickwebdev.com/" +} \ No newline at end of file diff --git a/contributors/observer04.json b/contributors/observer04.json new file mode 100644 index 0000000..d5cca59 --- /dev/null +++ b/contributors/observer04.json @@ -0,0 +1,9 @@ +{ + "name": "Omm P", + "github": "observer04", + "contributions": [ + "question", + "bug" + ], + "profile": "https://github.com/observer04" +} \ No newline at end of file diff --git a/contributors/overfero.json b/contributors/overfero.json new file mode 100644 index 0000000..6e00bcb --- /dev/null +++ b/contributors/overfero.json @@ -0,0 +1,13 @@ +{ + "name": "overfero", + "github": "overfero", + "contributions": [ + "tutorial", + "question", + "code", + "content", + "ideas", + "research" + ], + "profile": "https://github.com/overfero" +} \ No newline at end of file diff --git a/contributors/pChitral.json b/contributors/pChitral.json new file mode 100644 index 0000000..6864fa4 --- /dev/null +++ b/contributors/pChitral.json @@ -0,0 +1,21 @@ +{ + "name": "Chitral Patil", + "github": "pChitral", + "contributions": [ + "question", + "business", + "code", + "content", + "data", + "doc", + "eventOrganizing", + "financial", + "fundingFinding", + "ideas", + "projectManagement", + "promotion", + "research", + "tutorial" + ], + "profile": "https://chitralpatil.propael.com/" +} \ No newline at end of file diff --git a/contributors/pal-sandeep.json b/contributors/pal-sandeep.json new file mode 100644 index 0000000..b2ba0b1 --- /dev/null +++ b/contributors/pal-sandeep.json @@ -0,0 +1,14 @@ +{ + "name": "Sandeep Pal", + "github": "pal-sandeep", + "contributions": [ + "code", + "doc", + "ideas", + "example", + "research", + "question", + "translation" + ], + "profile": "https://github.com/pal-sandeep" +} \ No newline at end of file diff --git a/contributors/pat-fish.json b/contributors/pat-fish.json new file mode 100644 index 0000000..a890668 --- /dev/null +++ b/contributors/pat-fish.json @@ -0,0 +1,9 @@ +{ + "name": "Patrick Fish", + "github": "pat-fish", + "contributions": [ + "question", + "example" + ], + "profile": "https://github.com/pat-fish" +} \ No newline at end of file diff --git a/contributors/paulrwade.json b/contributors/paulrwade.json new file mode 100644 index 0000000..bc54341 --- /dev/null +++ b/contributors/paulrwade.json @@ -0,0 +1,10 @@ +{ + "name": "Paul Wade", + "github": "paulrwade", + "contributions": [ + "code", + "content", + "doc" + ], + "profile": "https://github.com/paulrwade" +} \ No newline at end of file diff --git a/contributors/peachjelly13.json b/contributors/peachjelly13.json new file mode 100644 index 0000000..e63a0d2 --- /dev/null +++ b/contributors/peachjelly13.json @@ -0,0 +1,10 @@ +{ + "name": "peachjelly13", + "github": "peachjelly13", + "contributions": [ + "code", + "content", + "ideas" + ], + "profile": "https://github.com/peachjelly13" +} \ No newline at end of file diff --git a/contributors/pedaars.json b/contributors/pedaars.json new file mode 100644 index 0000000..c274848 --- /dev/null +++ b/contributors/pedaars.json @@ -0,0 +1,11 @@ +{ + "name": "Aaron Pedwell", + "github": "pedaars", + "contributions": [ + "doc", + "example", + "maintenance", + "tutorial" + ], + "profile": "https://pedaars.co.uk/" +} \ No newline at end of file diff --git a/contributors/pedropalmav.json b/contributors/pedropalmav.json new file mode 100644 index 0000000..30a8e4e --- /dev/null +++ b/contributors/pedropalmav.json @@ -0,0 +1,19 @@ +{ + "name": "Pedro Palma Villanueva", + "github": "pedropalmav", + "contributions": [ + "bug", + "business", + "code", + "doc", + "example", + "ideas", + "maintenance", + "plugin", + "projectManagement", + "review", + "test", + "translation" + ], + "profile": "https://github.com/pedropalmav" +} \ No newline at end of file diff --git a/contributors/porteristhechampion.json b/contributors/porteristhechampion.json new file mode 100644 index 0000000..ca2836e --- /dev/null +++ b/contributors/porteristhechampion.json @@ -0,0 +1,10 @@ +{ + "name": "Porter Taylor", + "github": "porteristhechampion", + "contributions": [ + "bug", + "code", + "doc" + ], + "profile": "https://github.com/porteristhechampion" +} \ No newline at end of file diff --git a/contributors/prabhatisme.json b/contributors/prabhatisme.json new file mode 100644 index 0000000..8456ff4 --- /dev/null +++ b/contributors/prabhatisme.json @@ -0,0 +1,10 @@ +{ + "name": "Prabhat Bhagel", + "github": "prabhatisme", + "contributions": [ + "audio", + "code", + "design" + ], + "profile": "https://github.com/prabhatisme" +} \ No newline at end of file diff --git a/contributors/project-kieran.json b/contributors/project-kieran.json new file mode 100644 index 0000000..bfa7e57 --- /dev/null +++ b/contributors/project-kieran.json @@ -0,0 +1,10 @@ +{ + "name": "Kieran McDonough", + "github": "project-kieran", + "contributions": [ + "content", + "doc", + "example" + ], + "profile": "https://github.com/project-kieran" +} \ No newline at end of file diff --git a/contributors/pszymaniec.json b/contributors/pszymaniec.json new file mode 100644 index 0000000..13274ab --- /dev/null +++ b/contributors/pszymaniec.json @@ -0,0 +1,16 @@ +{ + "name": "pszymaniec", + "github": "pszymaniec", + "contributions": [ + "blog", + "code", + "content", + "doc", + "example", + "research", + "translation", + "tutorial", + "bug" + ], + "profile": "https://github.com/pszymaniec" +} \ No newline at end of file diff --git a/contributors/puneet-khatri.json b/contributors/puneet-khatri.json new file mode 100644 index 0000000..4090250 --- /dev/null +++ b/contributors/puneet-khatri.json @@ -0,0 +1,9 @@ +{ + "name": "Puneet khatri", + "github": "puneet-khatri", + "contributions": [ + "question", + "bug" + ], + "profile": "https://github.com/puneet-khatri" +} \ No newline at end of file diff --git a/contributors/pyogi27.json b/contributors/pyogi27.json new file mode 100644 index 0000000..a342a75 --- /dev/null +++ b/contributors/pyogi27.json @@ -0,0 +1,8 @@ +{ + "name": "Patel Yogi Chetanbhai", + "github": "pyogi27", + "contributions": [ + "question" + ], + "profile": "https://github.com/pyogi27" +} \ No newline at end of file diff --git a/contributors/rhizvo.json b/contributors/rhizvo.json new file mode 100644 index 0000000..246947e --- /dev/null +++ b/contributors/rhizvo.json @@ -0,0 +1,8 @@ +{ + "name": "Rhizvo", + "github": "rhizvo", + "contributions": [ + "promotion" + ], + "profile": "https://github.com/rhizvo" +} \ No newline at end of file diff --git a/contributors/robert.json b/contributors/robert.json new file mode 100644 index 0000000..7709190 --- /dev/null +++ b/contributors/robert.json @@ -0,0 +1,14 @@ +{ + "name": "Rob Heaton", + "github": "robert", + "contributions": [ + "question", + "bug", + "code", + "doc", + "ideas", + "maintenance", + "test" + ], + "profile": "https://robertheaton.com/" +} \ No newline at end of file diff --git a/contributors/rohitkrsoni.json b/contributors/rohitkrsoni.json new file mode 100644 index 0000000..46f5159 --- /dev/null +++ b/contributors/rohitkrsoni.json @@ -0,0 +1,13 @@ +{ + "name": "rohitkrsoni", + "github": "rohitkrsoni", + "contributions": [ + "question", + "code", + "doc", + "maintenance", + "research", + "test" + ], + "profile": "https://github.com/rohitkrsoni" +} \ No newline at end of file diff --git a/contributors/rubin-r12.json b/contributors/rubin-r12.json new file mode 100644 index 0000000..bd21663 --- /dev/null +++ b/contributors/rubin-r12.json @@ -0,0 +1,14 @@ +{ + "name": "Rubin", + "github": "rubin-r12", + "contributions": [ + "code", + "data", + "doc", + "mentoring", + "promotion", + "research", + "tutorial" + ], + "profile": "https://github.com/rubin-r12" +} \ No newline at end of file diff --git a/contributors/sademban.json b/contributors/sademban.json new file mode 100644 index 0000000..9efeddf --- /dev/null +++ b/contributors/sademban.json @@ -0,0 +1,9 @@ +{ + "name": "0xn0b174", + "github": "sademban", + "contributions": [ + "question", + "bug" + ], + "profile": "https://github.com/sademban" +} \ No newline at end of file diff --git a/contributors/safaanilatasoy.json b/contributors/safaanilatasoy.json new file mode 100644 index 0000000..de2f7ee --- /dev/null +++ b/contributors/safaanilatasoy.json @@ -0,0 +1,10 @@ +{ + "name": "Safa AnΔ±l ATASOY", + "github": "safaanilatasoy", + "contributions": [ + "code", + "doc", + "translation" + ], + "profile": "https://github.com/safaanilatasoy" +} \ No newline at end of file diff --git a/contributors/safacade009.json b/contributors/safacade009.json new file mode 100644 index 0000000..0e79f91 --- /dev/null +++ b/contributors/safacade009.json @@ -0,0 +1,39 @@ +{ + "name": "safacade009", + "github": "safacade009", + "contributions": [ + "a11y", + "question", + "audio", + "blog", + "bug", + "business", + "code", + "content", + "data", + "design", + "doc", + "eventOrganizing", + "example", + "financial", + "fundingFinding", + "ideas", + "infra", + "maintenance", + "mentoring", + "platform", + "plugin", + "projectManagement", + "promotion", + "research", + "review", + "security", + "talk", + "test", + "translation", + "tutorial", + "userTesting", + "video" + ], + "profile": "https://github.com/safacade009" +} \ No newline at end of file diff --git a/contributors/samgkigotho.json b/contributors/samgkigotho.json new file mode 100644 index 0000000..38c661b --- /dev/null +++ b/contributors/samgkigotho.json @@ -0,0 +1,15 @@ +{ + "name": "Samgkigotho", + "github": "samgkigotho", + "contributions": [ + "blog", + "bug", + "content", + "data", + "design", + "doc", + "example", + "ideas" + ], + "profile": "https://github.com/samgkigotho" +} \ No newline at end of file diff --git a/contributors/samuelard7.json b/contributors/samuelard7.json new file mode 100644 index 0000000..72583d6 --- /dev/null +++ b/contributors/samuelard7.json @@ -0,0 +1,12 @@ +{ + "name": "Richard Samuel", + "github": "samuelard7", + "contributions": [ + "question", + "code", + "data", + "doc", + "ideas" + ], + "profile": "https://github.com/samuelard7" +} \ No newline at end of file diff --git a/contributors/sank8-2.json b/contributors/sank8-2.json new file mode 100644 index 0000000..8047c9f --- /dev/null +++ b/contributors/sank8-2.json @@ -0,0 +1,10 @@ +{ + "name": "Sanketh Kumar", + "github": "sank8-2", + "contributions": [ + "question", + "code", + "doc" + ], + "profile": "https://github.com/sank8-2" +} \ No newline at end of file diff --git a/contributors/sasori-morningstar.json b/contributors/sasori-morningstar.json new file mode 100644 index 0000000..87a32cd --- /dev/null +++ b/contributors/sasori-morningstar.json @@ -0,0 +1,9 @@ +{ + "name": "Ilyes Medjedoub", + "github": "sasori-morningstar", + "contributions": [ + "ideas", + "tutorial" + ], + "profile": "https://sasori-morningstar.vercel.app/" +} \ No newline at end of file diff --git a/contributors/satyam0827.json b/contributors/satyam0827.json new file mode 100644 index 0000000..24e22cb --- /dev/null +++ b/contributors/satyam0827.json @@ -0,0 +1,10 @@ +{ + "name": "Satyam Kumar", + "github": "satyam0827", + "contributions": [ + "a11y", + "question", + "code" + ], + "profile": "https://github.com/satyam0827" +} \ No newline at end of file diff --git a/contributors/shafayat666.json b/contributors/shafayat666.json new file mode 100644 index 0000000..cc8efad --- /dev/null +++ b/contributors/shafayat666.json @@ -0,0 +1,18 @@ +{ + "name": "MD. SHAFAYAT MAHIN", + "github": "shafayat666", + "contributions": [ + "bug", + "business", + "code", + "ideas", + "infra", + "maintenance", + "mentoring", + "plugin", + "projectManagement", + "tool", + "tutorial" + ], + "profile": "https://github.com/shafayat666" +} \ No newline at end of file diff --git a/contributors/shampost.json b/contributors/shampost.json new file mode 100644 index 0000000..dd4a06c --- /dev/null +++ b/contributors/shampost.json @@ -0,0 +1,11 @@ +{ + "name": "Cristian Campos", + "github": "shampost", + "contributions": [ + "data", + "design", + "research", + "translation" + ], + "profile": "https://github.com/shampost" +} \ No newline at end of file diff --git a/contributors/shelleymcq.json b/contributors/shelleymcq.json new file mode 100644 index 0000000..8433d56 --- /dev/null +++ b/contributors/shelleymcq.json @@ -0,0 +1,14 @@ +{ + "name": "Shelley McHardy", + "github": "shelleymcq", + "contributions": [ + "question", + "code", + "doc", + "eventOrganizing", + "mentoring", + "review", + "tutorial" + ], + "profile": "https://www.shelleymcq.dev/" +} \ No newline at end of file diff --git a/contributors/shirenekboyd.json b/contributors/shirenekboyd.json new file mode 100644 index 0000000..3222c31 --- /dev/null +++ b/contributors/shirenekboyd.json @@ -0,0 +1,26 @@ +{ + "name": "Shirene Kadkhodai Boyd", + "github": "shirenekboyd", + "contributions": [ + "a11y", + "question", + "blog", + "bug", + "code", + "content", + "data", + "design", + "doc", + "ideas", + "maintenance", + "mentoring", + "plugin", + "research", + "review", + "talk", + "test", + "tool", + "userTesting" + ], + "profile": "https://github.com/shirenekboyd" +} \ No newline at end of file diff --git a/contributors/shristirwt.json b/contributors/shristirwt.json new file mode 100644 index 0000000..e71ab7d --- /dev/null +++ b/contributors/shristirwt.json @@ -0,0 +1,10 @@ +{ + "name": "Shristi Rawat", + "github": "shristirwt", + "contributions": [ + "question", + "bug", + "code" + ], + "profile": "https://github.com/shristirwt" +} \ No newline at end of file diff --git a/contributors/shubham-singh-748.json b/contributors/shubham-singh-748.json new file mode 100644 index 0000000..1b57e61 --- /dev/null +++ b/contributors/shubham-singh-748.json @@ -0,0 +1,9 @@ +{ + "name": "Shubham Kumar", + "github": "shubham-singh-748", + "contributions": [ + "question", + "bug" + ], + "profile": "https://github.com/shubham-singh-748" +} \ No newline at end of file diff --git a/contributors/shubhamchasing.json b/contributors/shubhamchasing.json new file mode 100644 index 0000000..d033df0 --- /dev/null +++ b/contributors/shubhamchasing.json @@ -0,0 +1,8 @@ +{ + "name": "Shubham Sharma", + "github": "shubhamchasing", + "contributions": [ + "doc" + ], + "profile": "https://github.com/shubhamchasing" +} \ No newline at end of file diff --git a/contributors/skottchen.json b/contributors/skottchen.json new file mode 100644 index 0000000..450ba5a --- /dev/null +++ b/contributors/skottchen.json @@ -0,0 +1,8 @@ +{ + "name": "Scott Chen", + "github": "skottchen", + "contributions": [ + "code" + ], + "profile": "https://github.com/skottchen" +} \ No newline at end of file diff --git a/contributors/smoggydesire.json b/contributors/smoggydesire.json new file mode 100644 index 0000000..5ae99be --- /dev/null +++ b/contributors/smoggydesire.json @@ -0,0 +1,9 @@ +{ + "name": "Borcila Vasile", + "github": "smoggydesire", + "contributions": [ + "bug", + "code" + ], + "profile": "https://github.com/smoggydesire" +} \ No newline at end of file diff --git a/contributors/snehalk19.json b/contributors/snehalk19.json new file mode 100644 index 0000000..0f3b95b --- /dev/null +++ b/contributors/snehalk19.json @@ -0,0 +1,14 @@ +{ + "name": "Snehal Khot", + "github": "snehalk19", + "contributions": [ + "question", + "code", + "data", + "doc", + "example", + "maintenance", + "plugin" + ], + "profile": "https://github.com/snehalk19" +} \ No newline at end of file diff --git a/contributors/sridhar-geek.json b/contributors/sridhar-geek.json new file mode 100644 index 0000000..54f84af --- /dev/null +++ b/contributors/sridhar-geek.json @@ -0,0 +1,8 @@ +{ + "name": "Sridhar Moturu", + "github": "sridhar-geek", + "contributions": [ + "code" + ], + "profile": "https://github.com/sridhar-geek" +} \ No newline at end of file diff --git a/contributors/stephmukami.json b/contributors/stephmukami.json new file mode 100644 index 0000000..ec891c0 --- /dev/null +++ b/contributors/stephmukami.json @@ -0,0 +1,9 @@ +{ + "name": "Mukami", + "github": "stephmukami", + "contributions": [ + "code", + "data" + ], + "profile": "https://github.com/stephmukami" +} \ No newline at end of file diff --git a/contributors/stop1204.json b/contributors/stop1204.json new file mode 100644 index 0000000..810759c --- /dev/null +++ b/contributors/stop1204.json @@ -0,0 +1,12 @@ +{ + "name": "Terry.He", + "github": "stop1204", + "contributions": [ + "question", + "bug", + "code", + "content", + "design" + ], + "profile": "https://github.com/stop1204" +} \ No newline at end of file diff --git a/contributors/sultanovich.json b/contributors/sultanovich.json new file mode 100644 index 0000000..7d0bdef --- /dev/null +++ b/contributors/sultanovich.json @@ -0,0 +1,17 @@ +{ + "name": "Pablo", + "github": "sultanovich", + "contributions": [ + "question", + "blog", + "bug", + "code", + "doc", + "infra", + "maintenance", + "mentoring", + "review", + "security" + ], + "profile": "https://github.com/sultanovich" +} \ No newline at end of file diff --git a/contributors/sunggeorge.json b/contributors/sunggeorge.json new file mode 100644 index 0000000..0cda798 --- /dev/null +++ b/contributors/sunggeorge.json @@ -0,0 +1,19 @@ +{ + "name": "sunggeorge", + "github": "sunggeorge", + "contributions": [ + "bug", + "code", + "content", + "data", + "design", + "doc", + "example", + "test", + "tool", + "translation", + "tutorial", + "userTesting" + ], + "profile": "https://github.com/sunggeorge" +} \ No newline at end of file diff --git a/contributors/syke9p3.json b/contributors/syke9p3.json new file mode 100644 index 0000000..cb89b2b --- /dev/null +++ b/contributors/syke9p3.json @@ -0,0 +1,12 @@ +{ + "name": "Kenth", + "github": "syke9p3", + "contributions": [ + "design", + "example", + "ideas", + "mentoring", + "translation" + ], + "profile": "https://github.com/syke9p3" +} \ No newline at end of file diff --git a/contributors/tech-kishore.json b/contributors/tech-kishore.json new file mode 100644 index 0000000..1a00b6e --- /dev/null +++ b/contributors/tech-kishore.json @@ -0,0 +1,9 @@ +{ + "name": "tech-kishore", + "github": "tech-kishore", + "contributions": [ + "a11y", + "code" + ], + "profile": "https://github.com/tech-kishore" +} \ No newline at end of file diff --git a/contributors/tedashikode.json b/contributors/tedashikode.json new file mode 100644 index 0000000..325000f --- /dev/null +++ b/contributors/tedashikode.json @@ -0,0 +1,12 @@ +{ + "name": "koder_", + "github": "tedashikode", + "contributions": [ + "code", + "doc", + "example", + "ideas", + "research" + ], + "profile": "https://github.com/tedashikode" +} \ No newline at end of file diff --git a/contributors/tejasq.json b/contributors/tejasq.json new file mode 100644 index 0000000..23ecac2 --- /dev/null +++ b/contributors/tejasq.json @@ -0,0 +1,6 @@ +{ + "name": "Tejas Kumar", + "github": "tejasq", + "profile": "https://tej.as/", + "contributions": ["code", "doc", "mentoring", "tutorial", "video"] +} \ No newline at end of file diff --git a/contributors/thititongumpun.json b/contributors/thititongumpun.json new file mode 100644 index 0000000..b0267cc --- /dev/null +++ b/contributors/thititongumpun.json @@ -0,0 +1,12 @@ +{ + "name": "thititongumpun", + "github": "thititongumpun", + "contributions": [ + "bug", + "code", + "data", + "design", + "infra" + ], + "profile": "https://github.com/thititongumpun" +} \ No newline at end of file diff --git a/contributors/tkim602.json b/contributors/tkim602.json new file mode 100644 index 0000000..2077c94 --- /dev/null +++ b/contributors/tkim602.json @@ -0,0 +1,12 @@ +{ + "name": "TaeHo Kim", + "github": "tkim602", + "contributions": [ + "question", + "bug", + "test", + "translation", + "userTesting" + ], + "profile": "https://github.com/tkim602" +} \ No newline at end of file diff --git a/contributors/topSimpa.json b/contributors/topSimpa.json new file mode 100644 index 0000000..cb4ebd1 --- /dev/null +++ b/contributors/topSimpa.json @@ -0,0 +1,8 @@ +{ + "name": "Simpa", + "github": "topSimpa", + "contributions": [ + "code" + ], + "profile": "https://github.com/topSimpa" +} \ No newline at end of file diff --git a/contributors/tpham20908.json b/contributors/tpham20908.json new file mode 100644 index 0000000..8fa76e9 --- /dev/null +++ b/contributors/tpham20908.json @@ -0,0 +1,12 @@ +{ + "name": "Tung Pham", + "github": "tpham20908", + "contributions": [ + "code", + "data", + "doc", + "example", + "maintenance" + ], + "profile": "https://github.com/tpham20908" +} \ No newline at end of file diff --git a/contributors/twister904.json b/contributors/twister904.json new file mode 100644 index 0000000..563cc27 --- /dev/null +++ b/contributors/twister904.json @@ -0,0 +1,8 @@ +{ + "name": "Mazhar saifi", + "github": "twister904", + "contributions": [ + "code" + ], + "profile": "https://github.com/twister904" +} \ No newline at end of file diff --git a/contributors/unpervertedkid.json b/contributors/unpervertedkid.json new file mode 100644 index 0000000..bcab07e --- /dev/null +++ b/contributors/unpervertedkid.json @@ -0,0 +1,8 @@ +{ + "name": "Brian Silah", + "github": "unpervertedkid", + "contributions": [ + "example" + ], + "profile": "https://github.com/unpervertedkid" +} \ No newline at end of file diff --git a/contributors/vaibhav3022.json b/contributors/vaibhav3022.json new file mode 100644 index 0000000..b92cfe7 --- /dev/null +++ b/contributors/vaibhav3022.json @@ -0,0 +1,19 @@ +{ + "name": "Vaibhav Dhotre", + "github": "vaibhav3022", + "contributions": [ + "question", + "blog", + "code", + "blog", + "doc", + "content", + "example", + "ideas", + "review", + "test", + "translation", + "tutorial" + ], + "profile": "https://github.com/vaibhav3022" +} \ No newline at end of file diff --git a/contributors/vaibhavharsoda.json b/contributors/vaibhavharsoda.json new file mode 100644 index 0000000..21dacbd --- /dev/null +++ b/contributors/vaibhavharsoda.json @@ -0,0 +1,13 @@ +{ + "name": "Vaibhav Patel", + "github": "vaibhavharsoda", + "contributions": [ + "question", + "bug", + "code", + "design", + "ideas", + "test" + ], + "profile": "https://github.com/vaibhavharsoda" +} \ No newline at end of file diff --git a/contributors/vianneyyovo.json b/contributors/vianneyyovo.json new file mode 100644 index 0000000..3b27a92 --- /dev/null +++ b/contributors/vianneyyovo.json @@ -0,0 +1,10 @@ +{ + "name": "Vianney Yovo", + "github": "vianneyyovo", + "contributions": [ + "business", + "code", + "data" + ], + "profile": "https://g.dev/vianneyyovo" +} \ No newline at end of file diff --git a/contributors/victor-villca.json b/contributors/victor-villca.json new file mode 100644 index 0000000..04e1b49 --- /dev/null +++ b/contributors/victor-villca.json @@ -0,0 +1,14 @@ +{ + "name": "Victor Villca", + "github": "victor-villca", + "contributions": [ + "question", + "blog", + "code", + "ideas", + "doc", + "talk", + "translation" + ], + "profile": "https://github.com/victor-villca" +} \ No newline at end of file diff --git a/contributors/vivienogoun.json b/contributors/vivienogoun.json new file mode 100644 index 0000000..99f5072 --- /dev/null +++ b/contributors/vivienogoun.json @@ -0,0 +1,9 @@ +{ + "name": "vivienogoun", + "github": "vivienogoun", + "contributions": [ + "content", + "data" + ], + "profile": "https://github.com/vivienogoun" +} \ No newline at end of file diff --git a/contributors/voaidesr.json b/contributors/voaidesr.json new file mode 100644 index 0000000..42d3d12 --- /dev/null +++ b/contributors/voaidesr.json @@ -0,0 +1,10 @@ +{ + "name": "Voaides Negustor Robert", + "github": "voaidesr", + "contributions": [ + "question", + "code", + "doc" + ], + "profile": "https://github.com/voaidesr" +} \ No newline at end of file diff --git a/contributors/wisdombe.json b/contributors/wisdombe.json new file mode 100644 index 0000000..c056e85 --- /dev/null +++ b/contributors/wisdombe.json @@ -0,0 +1,9 @@ +{ + "name": "wisdom oladipupo", + "github": "wisdombe", + "contributions": [ + "question", + "bug" + ], + "profile": "https://github.com/wisdombe" +} \ No newline at end of file diff --git a/contributors/wudanyang27.json b/contributors/wudanyang27.json new file mode 100644 index 0000000..cf75060 --- /dev/null +++ b/contributors/wudanyang27.json @@ -0,0 +1,9 @@ +{ + "name": "wdy3827", + "github": "wudanyang27", + "contributions": [ + "question", + "bug" + ], + "profile": "https://grove-trees.netlify.app/" +} \ No newline at end of file diff --git a/contributors/youssoph-mane.json b/contributors/youssoph-mane.json new file mode 100644 index 0000000..e71b9eb --- /dev/null +++ b/contributors/youssoph-mane.json @@ -0,0 +1,6 @@ +{ + "name": "Youssouph ManΓ©", + "github": "youssoph-mane", + "profile": "https://github.com/youssoph-mane", + "contributions": ["bug", "code", "doc", "research", "tool"] +} \ No newline at end of file diff --git a/contributors/zairacodes.json b/contributors/zairacodes.json new file mode 100644 index 0000000..cea853a --- /dev/null +++ b/contributors/zairacodes.json @@ -0,0 +1,15 @@ +{ + "name": "Zaira", + "github": "zairacodes", + "contributions": [ + "a11y", + "bug", + "code", + "design", + "doc", + "review", + "translation", + "userTesting" + ], + "profile": "https://github.com/zairacodes" +} \ No newline at end of file diff --git a/contributors/zh-hadi.json b/contributors/zh-hadi.json new file mode 100644 index 0000000..465bae7 --- /dev/null +++ b/contributors/zh-hadi.json @@ -0,0 +1,38 @@ +{ + "name": "zh-hadi", + "github": "zh-hadi", + "contributions": [ + "a11y", + "question", + "audio", + "blog", + "bug", + "business", + "code", + "content", + "data", + "design", + "doc", + "example", + "financial", + "ideas", + "infra", + "maintenance", + "mentoring", + "platform", + "plugin", + "projectManagement", + "promotion", + "research", + "review", + "security", + "talk", + "test", + "tool", + "translation", + "tutorial", + "userTesting", + "video" + ], + "profile": "https://github.com/zh-hadi" +} \ No newline at end of file diff --git a/docs/ANNOUNCEMENT.md b/docs/ANNOUNCEMENT.md new file mode 100644 index 0000000..42db8c6 --- /dev/null +++ b/docs/ANNOUNCEMENT.md @@ -0,0 +1,77 @@ +# πŸŽ‰ New Conflict-Free Contributor Process! + +**Great news!** We've solved the merge conflict problem that was making it difficult for beginners to contribute to this guestbook. + +## What's Changed? + +### ❌ Old Process (Caused Merge Conflicts) +- Edit the README.md directly +- Run `npm run contributors:add` and `npm run contributors:generate` +- Multiple simultaneous PRs would conflict +- Beginners struggled with conflict resolution + +### βœ… New Process (Zero Conflicts!) +- Create a single JSON file with your info +- GitHub Actions automatically update the README +- No more conflicts, even with 100+ simultaneous contributors +- Much more beginner-friendly! + +## How to Add Yourself Now + +1. **Go to the [`contributors/`](../contributors/) directory** +2. **Create a file named `your-github-username.json`** +3. **Fill it with your information:** + +```json +{ + "name": "Your Full Name", + "github": "your-github-username", + "profile": "https://your-website.com", + "contributions": ["code", "doc", "ideas"] +} +``` + +4. **Test locally (optional):** + ```bash + npm run contributors:preview your-github-username + ``` + +5. **Submit your PR with just that one file!** +6. **That's it!** The README will be automatically updated after your PR is merged. + +## For Course Students + +If you're following the **Intro to Open Source course**: + +- βœ… **New students**: Follow the updated instructions in [`docs/guides/contributor-guide.md`](guides/contributor-guide.md) +- ⚠️ **Existing open PRs**: You can either keep your existing PR (might have conflicts) or close it and create a new one with just your JSON file + +## Benefits of the New System + +- 🚫 **Zero merge conflicts** - Everyone edits their own unique file +- πŸ‘Ά **Beginner friendly** - Simple JSON file creation vs complex git operations +- πŸ€– **Fully automated** - No manual work needed from maintainers +- πŸ“ˆ **Infinitely scalable** - Supports unlimited simultaneous contributors +- πŸ§ͺ **Local testing** - Preview your contribution before submitting +- βœ… **Better validation** - Automated checks for proper file format +- πŸ”§ **Easier maintenance** - Individual contributor data is easier to manage + +## Need Help? + +- πŸ“– **Detailed instructions**: [`docs/guides/contributor-guide.md`](guides/contributor-guide.md) +- πŸ§ͺ **Testing guide**: [`docs/guides/testing-your-contribution.md`](guides/testing-your-contribution.md) +- πŸŽ“ **Course updates**: The [Intro to Open Source course](https://opensauced.pizza/learn/intro-to-oss/) will be updated soon +- πŸ’¬ **Questions**: Ask in [GitHub Discussions](../../discussions) +- πŸ› **Issues**: Report problems in [GitHub Issues](../../issues) + +## Technical Details + +For maintainers and curious contributors: +- Individual JSON files are stored in `contributors/` directory +- GitHub Actions automatically process these files using the all-contributors system +- Validation ensures all files have proper format and required fields +- The process is backwards compatible with the existing contributor data + +--- + +**Happy contributing!** πŸŽ‰ This change makes it much easier for beginners to get started with open source. \ No newline at end of file diff --git a/docs/DEPLOYMENT_PLAN.md b/docs/DEPLOYMENT_PLAN.md new file mode 100644 index 0000000..ffff1db --- /dev/null +++ b/docs/DEPLOYMENT_PLAN.md @@ -0,0 +1,138 @@ +# Deployment Plan for Conflict-Free Contributors + +This document outlines the step-by-step deployment plan for implementing the new contributor system. + +## Pre-Deployment Checklist + +- [x] βœ… Create contributors directory and documentation +- [x] βœ… Implement GitHub Actions workflows +- [x] βœ… Create validation scripts +- [x] βœ… Update PR template and contributing guidelines +- [x] βœ… Migrate existing contributors to JSON files +- [x] βœ… Test validation scripts +- [x] βœ… Create migration documentation + +## Deployment Steps + +### Step 1: Deploy Infrastructure (Ready to merge) +1. **Merge this PR** containing: + - `contributors/` directory with README and example files + - GitHub Actions workflows + - Updated documentation + - Migration scripts + - All existing contributors migrated to JSON files + +### Step 2: Test the System (Immediate) +1. **Test the workflow** by creating a test contributor: + ```bash + # Create a test file + echo '{ + "name": "Test User", + "github": "testuser", + "profile": "https://example.com", + "contributions": ["code"] + }' > contributors/testuser.json + + # Commit and push to trigger the action + git add contributors/testuser.json + git commit -m "test: add test contributor" + git push + ``` + +2. **Verify the GitHub Action runs** and updates the README +3. **Remove the test file** after successful verification + +### Step 3: Update Course Materials (Within 1 week) +1. **Update the course links** to point to new instructions: + - From: "Edit README.md directly" + - To: "Create contributor JSON file" + +2. **Update specific sections:** + - [Let's Get Practical](https://opensauced.pizza/learn/intro-to-oss/how-to-contribute-to-open-source#lets-get-practical) + - Any screenshots or examples showing the old process + +### Step 4: Communicate Changes (Within 1 week) +1. **Pin an announcement issue** using content from [docs/ANNOUNCEMENT.md](ANNOUNCEMENT.md) +2. **Update social media** if the course is promoted there +3. **Notify course instructors** about the changes + +### Step 5: Handle Transition Period (1-2 weeks) +1. **Monitor for confused contributors** who might still try the old method +2. **Be ready to help** with questions about the new process +3. **Update any existing open PRs** that follow the old method + +### Step 6: Cleanup (After 2 weeks) +1. **Remove old npm scripts** that are no longer needed: + ```bash + # Keep for backwards compatibility initially, remove later + npm run contributors:add + npm run contributors:generate + ``` + +2. **Archive old documentation** that references the manual process + +## Success Metrics + +### Technical Metrics +- βœ… Zero merge conflicts on contributor PRs +- βœ… GitHub Actions run successfully +- βœ… All validation passes +- βœ… README updates automatically + +### User Experience Metrics +- πŸ“Š **Time to contribute**: Should be faster (no npm commands needed) +- πŸ“Š **Success rate**: Higher (no conflict resolution needed) +- πŸ“Š **Support requests**: Fewer questions about merge conflicts + +### Expected Outcomes +- **Before**: ~50% of PRs had merge conflicts +- **After**: 0% of contributor PRs should have conflicts +- **Maintainer time**: Reduced by ~75% (no manual conflict resolution) +- **Contributor experience**: Much smoother for beginners + +## Rollback Plan + +If issues arise, rollback is simple: + +1. **Revert the GitHub Actions workflows** (disable them) +2. **Restore old PR template** and contributing guidelines +3. **Keep the JSON files** as they don't interfere with the old system +4. **Contributors can go back** to the old `npm run contributors:add` process + +The system is designed to be backwards compatible during the transition. + +## Support During Deployment + +### For Contributors +- **New process**: Follow [docs/guides/contributor-guide.md](docs/guides/contributor-guide.md) +- **Old PRs**: Can be merged as-is or converted to new format +- **Questions**: Use GitHub Discussions or Issues + +### For Maintainers +- **Validation**: Use `npm run contributors:validate` +- **Manual processing**: GitHub Actions handle everything automatically +- **Troubleshooting**: Check workflow logs for any issues + +## Post-Deployment Tasks + +### Week 1 +- [ ] Monitor GitHub Actions for failures +- [ ] Respond to contributor questions quickly +- [ ] Update course materials with new screenshots + +### Week 2-4 +- [ ] Collect feedback from new contributors +- [ ] Fine-tune validation rules if needed +- [ ] Update any missed documentation references + +### Month 2+ +- [ ] Analyze success metrics +- [ ] Consider additional improvements (e.g., web form for contributions) +- [ ] Share learnings with other similar projects + +## Contact + +For questions about deployment: +- Create an issue with the `deployment` label +- Tag maintainers in discussions +- Check the [Migration Guide](MIGRATION_GUIDE.md) for technical details \ No newline at end of file diff --git a/docs/MIGRATION_GUIDE.md b/docs/MIGRATION_GUIDE.md new file mode 100644 index 0000000..b0c59a8 --- /dev/null +++ b/docs/MIGRATION_GUIDE.md @@ -0,0 +1,179 @@ +# βœ… Migration Complete: Conflict-Free Contributors System + +The migration to the new conflict-free contributor system has been implemented successfully! This document explains what changed and how to use the new system. + +## What Changed? + +### Before (Old System) +- Contributors edited the README.md directly +- Used `npm run contributors:add` and `npm run contributors:generate` +- Multiple simultaneous PRs caused merge conflicts +- Beginners struggled with conflict resolution + +### After (New System) +- Contributors create individual JSON files in `contributors/` directory +- GitHub Actions automatically update the README +- Zero merge conflicts, even with simultaneous contributions +- Much more beginner-friendly + +## Implementation Status + +βœ… **310 contributor files** successfully migrated +βœ… **All validations pass** - proper JSON format +βœ… **GitHub Actions** configured and ready +βœ… **Documentation** updated and comprehensive +βœ… **README complete** with all 310 contributors displaying correctly +βœ… **Local testing** capabilities implemented + +### πŸ“ Files Created +``` +contributors/ +β”œβ”€β”€ example-contributor.json # Template example +β”œβ”€β”€ *.json # 310 migrated contributor files +└── .gitkeep # Ensures directory is tracked + +.github/workflows/ +β”œβ”€β”€ update-contributors.yml # Main automation workflow +β”œβ”€β”€ validate-contributors.yml # Validation for PR/push +β”œβ”€β”€ validate-pr.yml # PR validation and welcome +└── welcome-new-contributor.yml # Post-merge celebration + +scripts/ +β”œβ”€β”€ migrate-contributors.sh # Migration script (completed) +β”œβ”€β”€ validate-contributor.py # Validation utility +β”œβ”€β”€ test-locally.sh # Local testing +└── preview-contribution.py # Local preview + +docs/guides/ +β”œβ”€β”€ contributor-guide.md # Instructions for contributors +└── testing-your-contribution.md # How to test contributions + +docs/ +β”œβ”€β”€ TESTING_GUIDE.md # Comprehensive testing guide +β”œβ”€β”€ DEPLOYMENT_PLAN.md # Implementation timeline +└── ANNOUNCEMENT.md # Communication template +``` + +### πŸ“ Updated Documentation +- **CONTRIBUTING.md**: New process instructions +- **README.md**: Updated getting started section +- **PR Template**: Simplified for contributor additions +- **Package.json**: Added new npm scripts for local testing + +## For Contributors + +### If You're New +Simply follow the new instructions in [docs/guides/contributor-guide.md](guides/contributor-guide.md). It's much easier than the old process! + +### If You Have an Open PR (Old System) +You have two options: + +1. **Keep your existing PR**: It will still work, but might have merge conflicts +2. **Switch to new system**: + - Close your old PR + - Create a new PR with just your JSON file + - Much less likely to have conflicts + +### Converting Your Old PR to New System +1. Look at the files you changed in your old PR +2. Extract your contributor information +3. Create a new JSON file with that information: +```json +{ + "name": "Your Name From Old PR", + "github": "your-github-username", + "profile": "your-profile-url", + "contributions": ["your", "contribution", "types"] +} +``` +4. Submit new PR with just this file + +## Technical Details + +### Local Testing Capabilities + +Contributors can now test their contributions locally before submitting: + +```bash +# Quick preview - shows exactly how profile will appear +npm run contributors:preview your-username + +# Full validation - checks for errors +npm run contributors:validate + +# Complete test - generates temporary preview +npm run contributors:test your-username +``` + +### JSON File Format +```json +{ + "name": "Required: Your display name", + "github": "Required: Your GitHub username", + "profile": "Optional: Your website/profile URL", + "contributions": ["Required: Array of contribution types"] +} +``` + +### GitHub Actions Workflow +1. Detect changes to `contributors/*.json` files +2. Validate JSON format and required fields +3. Reset the all-contributors configuration +4. Process each JSON file and add to all-contributors +5. Generate the updated README +6. Commit and push changes + +### Validation +- JSON syntax validation +- Required field checking +- Contribution type validation +- Duplicate detection +- GitHub username format validation + +## Rollback Plan + +If you need to rollback to the old system: + +1. Restore the old PR template and contributing guidelines +2. Disable the new GitHub Actions workflows +3. Contributors can go back to the old `npm run contributors:add` process +4. Keep the JSON files as backup/reference + +## Benefits of New System + +βœ… **Zero merge conflicts** - Each contributor only touches their own file +βœ… **Beginner friendly** - Simple JSON file creation vs complex git operations +βœ… **Automatic processing** - No manual intervention needed from maintainers +βœ… **Scalable** - Supports unlimited simultaneous contributors +βœ… **Better validation** - Automated checks for proper format +βœ… **Maintainable** - Easier to manage individual contributor data + +## Troubleshooting + +### GitHub Action Fails +- Check the workflow logs for specific errors +- Validate JSON files using `python3 scripts/validate-contributor.py` +- Ensure all required fields are present + +### README Not Updating +- Verify the action has write permissions +- Check that the file paths in the workflow are correct +- Make sure the all-contributors config is properly reset + +### Contributors Confused +- Pin an issue explaining the new process +- Update course materials and documentation +- Direct them to [docs/guides/contributor-guide.md](guides/contributor-guide.md) + +## Support Resources + +- **For Contributors**: [docs/guides/contributor-guide.md](guides/contributor-guide.md) +- **For Testing**: [docs/guides/testing-your-contribution.md](guides/testing-your-contribution.md) +- **For Maintainers**: [docs/TESTING_GUIDE.md](TESTING_GUIDE.md) +- **Technical Details**: [docs/DEPLOYMENT_PLAN.md](DEPLOYMENT_PLAN.md) +- **Communication**: [docs/ANNOUNCEMENT.md](ANNOUNCEMENT.md) + +--- + +**πŸŽ‰ Migration complete!** This system eliminates merge conflicts while making contributions much more beginner-friendly. + diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..d4ee8ee --- /dev/null +++ b/docs/README.md @@ -0,0 +1,51 @@ +# Documentation Index + +This directory contains all documentation for the guestbook project. + +## πŸ“– For Contributors + +### Getting Started +- **[Contributor Guide](guides/contributor-guide.md)** - Complete instructions for adding yourself to the guestbook +- **[Testing Your Contribution](guides/testing-your-contribution.md)** - How to verify your contribution worked + +### Quick Reference +- **[Main Contributing Guidelines](../CONTRIBUTING.md)** - Overall contribution rules and process +- **[Contributors Directory](../contributors/)** - Where you add your JSON file + +## πŸ”§ For Maintainers + +### Implementation +- **[Migration Guide](MIGRATION_GUIDE.md)** - Complete migration documentation and technical details +- **[Testing Guide](TESTING_GUIDE.md)** - Comprehensive testing procedures +- **[Deployment Plan](DEPLOYMENT_PLAN.md)** - Implementation timeline and checklist + +### Communication +- **[Announcement Template](ANNOUNCEMENT.md)** - Ready-to-use announcement for the community + +## 🎯 Quick Navigation + +| I want to... | Go here | +|---------------|---------| +| Add myself to the guestbook | [Contributor Guide](guides/contributor-guide.md) | +| Test my contribution locally | [Testing Your Contribution](guides/testing-your-contribution.md) | +| Understand the new system | [Migration Guide](MIGRATION_GUIDE.md) | +| Report a problem | [GitHub Issues](../../issues) | +| Ask a question | [GitHub Discussions](../../discussions) | + +## πŸ“ Directory Structure + +``` +docs/ +β”œβ”€β”€ README.md # This index file +β”œβ”€β”€ MIGRATION_GUIDE.md # Complete migration documentation +β”œβ”€β”€ TESTING_GUIDE.md # Testing procedures +β”œβ”€β”€ DEPLOYMENT_PLAN.md # Implementation details +β”œβ”€β”€ ANNOUNCEMENT.md # Community communication template +└── guides/ + β”œβ”€β”€ contributor-guide.md # How to add yourself (for contributors) + └── testing-your-contribution.md # How to verify it worked +``` + +--- + +**πŸŽ‰ The new system eliminates merge conflicts while making contributions more beginner-friendly!** \ No newline at end of file diff --git a/docs/TESTING_GUIDE.md b/docs/TESTING_GUIDE.md new file mode 100644 index 0000000..af53aed --- /dev/null +++ b/docs/TESTING_GUIDE.md @@ -0,0 +1,255 @@ +# Testing the New Contributor System + +This guide helps you test and verify that the new conflict-free contributor system is working correctly. + +## For New Contributors: How to Test Your Contribution + +### 0. Test Locally First (Recommended!) + +Before submitting your PR, you can test your contributor file locally: + +```bash +# Quick preview - shows exactly how your profile will look +npm run contributors:preview your-github-username + +# Full validation - checks for any errors +npm run contributors:validate +``` + +**Example:** +```bash +# If your GitHub username is "johndoe" +npm run contributors:preview johndoe +``` + +This will show you: +- βœ… Validation results +- 🎨 Preview of your profile +- πŸ“± Exact HTML that will appear in README +- 🏷️ Your contribution icons + +### 1. After Creating Your PR + +When you submit your PR with your `contributors/username.json` file, you can test several things: + +#### βœ… **Immediate Validation (Before Merge)** +Your PR will automatically trigger validation checks. Look for: + +1. **Green checkmarks** in your PR - this means validation passed +2. **Automated comment** welcoming you to the project +3. **No merge conflicts** reported (this should never happen with the new system!) + +#### βœ… **After Your PR is Merged** +Once a maintainer merges your PR, watch for these automatic actions: + +1. **Within 1-2 minutes**: A GitHub Action will run +2. **Within 5 minutes**: The README should update with your profile +3. **Automated welcome comment** on your merged PR + +### 2. How to Verify You're in the README + +#### Option A: Check the Live README +1. Go to the [main repository page](../../) +2. Scroll down to the "Contributors" section +3. Look for your profile picture and name +4. Your profile should appear in the contributor table + +#### Option B: Check the Badge Count +1. Look at the contributors badge: ![Contributors](https://img.shields.io/badge/all_contributors-310-orange.svg) +2. The number should have increased by 1 after your contribution +3. Click the badge to jump to the contributors section + +#### Option C: Search for Your Username +1. Press `Ctrl+F` (or `Cmd+F` on Mac) on the README page +2. Search for your GitHub username +3. You should find your profile in the contributors table + +### 3. What Your Profile Should Look Like + +Your contributor entry will appear like this: + +```html + + + Your Name +
+ Your Name +
+
+ πŸ’» + πŸ“– + + +``` + +## For Maintainers: How to Test the System + +### 1. Test with a Sample Contributor + +Create a test contributor to verify the automation: + +```bash +# 1. Create a test contributor file +cat > contributors/test-user-$(date +%s).json << 'EOF' +{ + "name": "Test User", + "github": "test-user-123", + "profile": "https://example.com", + "contributions": ["code", "doc"] +} +EOF + +# 2. Commit and push +git add contributors/test-user-*.json +git commit -m "test: add test contributor to verify automation" +git push origin main + +# 3. Watch the GitHub Actions tab for the workflow to run + +# 4. Check that README was updated automatically + +# 5. Clean up the test file +git rm contributors/test-user-*.json +git commit -m "test: remove test contributor" +git push origin main +``` + +### 2. Monitor the GitHub Actions + +1. **Go to the Actions tab** in your repository +2. **Look for "Update Contributors" workflow** runs +3. **Check the logs** for any errors or issues +4. **Verify the README commit** was created automatically + +### 3. Test Validation + +```bash +# Test with invalid JSON +echo '{ invalid json }' > contributors/invalid-test.json +git add contributors/invalid-test.json +git commit -m "test: invalid contributor file" +git push + +# This should fail validation - check the Actions tab +# Then clean up: +git rm contributors/invalid-test.json +git commit -m "test: remove invalid file" +git push +``` + +## Troubleshooting Common Issues + +### ❌ "My profile isn't showing up" + +**Possible causes:** +1. **GitHub Action still running** - check the Actions tab, wait 5-10 minutes +2. **Validation failed** - check your JSON file format +3. **Wrong filename** - must be `your-exact-github-username.json` +4. **Missing required fields** - ensure you have `name`, `github`, and `contributions` + +**How to fix:** +```bash +# Validate your JSON file +python3 scripts/validate-contributor.py + +# Check if your username matches the filename +# File: contributors/johndoe.json +# Content: "github": "johndoe" ← must match! +``` + +### ❌ "GitHub Action failed" + +**Check these:** +1. **Actions tab** for error details +2. **JSON syntax** - use a JSON validator online +3. **Required fields** - name, github, contributions must be present +4. **Username format** - only letters, numbers, and hyphens + +### ❌ "Badge count didn't increase" + +This usually means: +1. **Action is still running** - wait a few more minutes +2. **Validation failed** - check the Actions logs +3. **Duplicate contributor** - username already exists + +## Testing Checklist + +### For Contributors βœ… +- [ ] My PR has green checkmarks (validation passed) +- [ ] I received a welcome comment on my PR +- [ ] My PR was merged without conflicts +- [ ] My profile appears in the README within 10 minutes +- [ ] The contributors badge count increased by 1 +- [ ] I can find my username by searching the README + +### For Maintainers βœ… +- [ ] GitHub Actions run automatically on contributor file changes +- [ ] Validation catches invalid JSON files +- [ ] README updates automatically after merge +- [ ] Welcome comments are posted on successful contributions +- [ ] Multiple simultaneous PRs don't cause conflicts +- [ ] Old contributor data is preserved correctly + +## Performance Testing + +### Stress Test: Multiple Simultaneous Contributors + +To test the conflict-free nature: + +1. **Create 5+ test contributor files** simultaneously +2. **Submit them in separate PRs** at the same time +3. **Merge them quickly** one after another +4. **Verify no conflicts occur** and all are processed correctly + +```bash +# Example: Create multiple test files +for i in {1..5}; do + cat > contributors/stress-test-$i.json << EOF +{ + "name": "Stress Test User $i", + "github": "stress-test-$i", + "contributions": ["code"] +} +EOF +done +``` + +## Expected Behavior + +### βœ… **What Should Happen** +1. **PR validation** runs automatically +2. **Welcome comment** appears on valid PRs +3. **Merge happens** without conflicts +4. **GitHub Action runs** within 2 minutes of merge +5. **README updates** with new contributor +6. **Success comment** posted on merged PR +7. **Badge count increases** by 1 + +### ⏱️ **Timing Expectations** +- **Validation**: Instant (on PR creation/update) +- **Merge**: Manual (when maintainer approves) +- **Action trigger**: 30 seconds after merge +- **README update**: 2-5 minutes after merge +- **Badge update**: Immediate with README update + +## Getting Help + +If testing reveals issues: + +1. **Check GitHub Actions logs** first +2. **Validate your JSON** using the validation script +3. **Ask in Discussions** with specific error details +4. **Create an issue** if you find a bug in the system + +## Success Metrics + +The system is working correctly when: +- βœ… **Zero merge conflicts** on contributor PRs +- βœ… **100% automation** - no manual README editing needed +- βœ… **Fast processing** - updates within 5 minutes +- βœ… **Perfect validation** - catches errors before merge +- βœ… **Beginner friendly** - simple JSON file creation + +--- + +**Ready to test?** Follow the [docs/guides/contributor-guide.md](docs/guides/contributor-guide.md) instructions to add yourself and see the magic happen! ✨ diff --git a/docs/TROUBLESHOOTING.md b/docs/TROUBLESHOOTING.md new file mode 100644 index 0000000..a3605a7 --- /dev/null +++ b/docs/TROUBLESHOOTING.md @@ -0,0 +1,85 @@ +# Troubleshooting Guide + +## Common Issues and Solutions + +### npm command not found +**Problem:** When running `npm install`, you get "command not found" + +**Solution:** You need to install Node.js: +- Download from [nodejs.org](https://nodejs.org/) +- Choose the LTS version +- After installation, restart your terminal + +### Permission denied when running scripts +**Problem:** Getting permission errors when running npm scripts + +**Solution:** The scripts need to be executable: +```bash +chmod +x scripts/*.sh +``` + +### JSON validation errors +**Problem:** Your contributor file shows as invalid + +**Common causes:** +1. **Missing comma:** Each line except the last needs a comma +2. **Wrong quotes:** Use double quotes (") not single quotes (') +3. **Username mismatch:** The filename must match the github field + +**Example of correct format:** +```json +{ + "name": "Jane Doe", + "github": "janedoe", + "profile": "https://github.com/janedoe", + "contributions": ["code", "doc"] +} +``` + +### Preview script shows "File not found" +**Problem:** Running `npm run contributors:preview username` shows file not found + +**Solutions:** +1. Make sure you're in the repository root directory +2. Check that your file is named correctly: `contributors/username.json` +3. Use lowercase for the filename + +### Contributions not showing in README after merge +**Problem:** Your PR was merged but you don't see your profile in the README + +**Explanation:** The GitHub Action needs a few minutes to run and update the README. Check back in 5-10 minutes. + +### Test script errors +**Problem:** The test script fails with various errors + +**Solutions:** +1. Make sure you have all-contributors-cli installed: `npm install` +2. Check that your JSON file is valid +3. Ensure you're running from the repository root directory + +**Note:** All scripts are now JavaScript-based, so you only need Node.js installed (no Python required) + +## Still Having Issues? + +If you're still experiencing problems: + +1. Check [GitHub Discussions](https://github.com/OpenSource-Communities/guestbook/discussions) +2. Search existing issues +3. Create a new issue with: + - The command you ran + - The full error message + - Your operating system + +## Alternative: Manual Validation + +If the scripts aren't working for you: + +1. Create your JSON file manually +2. Validate it at [jsonlint.com](https://jsonlint.com/) +3. Ensure: + - Filename matches your GitHub username + - All required fields are present + - Valid contribution types are used +4. Submit your PR + +The GitHub Actions will validate your contribution when you submit the PR! \ No newline at end of file diff --git a/docs/guides/contributor-guide.md b/docs/guides/contributor-guide.md new file mode 100644 index 0000000..bc3d229 --- /dev/null +++ b/docs/guides/contributor-guide.md @@ -0,0 +1,141 @@ +# Contributors Directory + +Welcome to the guestbook contributors directory! πŸŽ‰ + +## How to Add Yourself as a Contributor + +Instead of editing the main README.md file (which causes merge conflicts), you'll add yourself by creating your own contributor file. + +### Step-by-Step Instructions + +1. **Fork and clone the repository** + - Fork this repository to your GitHub account + - Clone your fork locally: + ```bash + git clone https://github.com/YOUR-USERNAME/guestbook.git + cd guestbook + ``` + +2. **Install dependencies** + Run the following command in your terminal: + ```bash + npm install + ``` + +3. **Create your contributor file** + - In this `contributors/` directory, create a new file named `your-github-username.json` + - Replace `your-github-username` with your actual GitHub username (lowercase) + +4. **Add your information** + Copy this template and fill in your details: + + ```json + { + "name": "Your Full Name", + "github": "your-github-username", + "profile": "https://your-website.com", + "contributions": ["code", "doc", "ideas"] + } + ``` + + **Profile field:** This should be your personal website URL. If you don't have a personal website, use your GitHub profile URL: `https://github.com/your-username` + +5. **Available contribution types** + You can include any of these contribution types in your `contributions` array: + - `"code"` - Code contributions + - `"doc"` - Documentation + - `"ideas"` - Ideas and planning + - `"bug"` - Bug reports + - `"tutorial"` - Tutorials + - `"design"` - Design + - `"review"` - Code reviews + - `"test"` - Testing + - `"blog"` - Blog posts + - `"translation"` - Translations + - `"question"` - Answering questions + - `"maintenance"` - Maintenance + - `"infra"` - Infrastructure + - `"research"` - Research + - `"talk"` - Talks/presentations + - `"video"` - Videos + - `"audio"` - Audio/podcasts + - `"content"` - Content creation + - `"data"` - Data contributions + - `"example"` - Examples + - `"tool"` - Tools + - `"plugin"` - Plugin/utility libraries + - `"platform"` - Packaging/porting + - `"security"` - Security + - `"business"` - Business development + - `"financial"` - Financial support + - `"fundingFinding"` - Funding finding + - `"eventOrganizing"` - Event organizing + - `"projectManagement"` - Project management + - `"promotion"` - Promotion + - `"mentoring"` - Mentoring + - `"userTesting"` - User testing + - `"a11y"` - Accessibility + +6. **Example file** + If your GitHub username is `johndoe`, create `contributors/johndoe.json`: + + ```json + { + "name": "John Doe", + "github": "johndoe", + "profile": "https://johndoe.dev", + "contributions": ["code", "doc", "tutorial"] + } + ``` + +7. **Test locally (recommended)** + It's recommended to preview how your contribution will look before submitting: + + ```bash + # Preview how your profile will appear (safe, no file changes) + npm run contributors:preview your-github-username + ``` + + This will: + - Validate your JSON file + - Show you how your profile will appear + - Display next steps for creating your PR + + **For advanced testing:** + ```bash + # Validate all JSON files + npm run contributors:validate + + # Full test with temporary README generation + npm run contributors:test your-github-username + ``` + +8. **Commit and push your changes** + After creating your contributor file: + ```bash + git add contributors/your-github-username.json + git commit -m "Add [Your Name] as a contributor" + git push origin your-branch-name + ``` + +9. **Submit your pull request** + - Your PR should only add ONE file: your `contributors/your-username.json` file + - Title your PR: "Add [Your Name] as a contributor" + - No need to edit any other files! + +10. **Automatic processing** + Once your PR is merged, a GitHub Action will automatically: + - Add you to the all-contributors system + - Update the main README.md with your information + - You'll appear in the contributors table! + +11. **Verify it worked** + Want to confirm your contribution was successful? See: [testing-your-contribution.md](testing-your-contribution.md) + + +## Need Help? + +- Check the [Troubleshooting Guide](../TROUBLESHOOTING.md) +- Look at existing contributor files for examples +- Ask questions in [GitHub Discussions](../../discussions) +- Review the [Contributing Guidelines](../../CONTRIBUTING.md) diff --git a/docs/guides/migration-to-js.md b/docs/guides/migration-to-js.md new file mode 100644 index 0000000..bdc5413 --- /dev/null +++ b/docs/guides/migration-to-js.md @@ -0,0 +1,41 @@ +# Migration from Python to JavaScript Scripts + +All contributor scripts have been migrated from Python to JavaScript for better consistency and ease of use. + +## What Changed? + +### Before (Python-based) +- Required Python 3 installation +- Scripts used `.py` extensions +- Mixed technology stack (Node.js + Python) + +### After (JavaScript-based) +- Only requires Node.js (which you already have for npm) +- Scripts use `.js` extensions +- Consistent JavaScript/Node.js stack + +## Updated Commands + +The npm scripts remain the same: +- `npm run contributors:preview username` - Preview your contribution +- `npm run contributors:validate` - Validate all contributor files +- `npm run contributors:test username` - Full test with README generation + +## Benefits + +1. **Single dependency**: Only Node.js needed (no Python installation required) +2. **Better Windows support**: Node.js works consistently across all platforms +3. **Faster execution**: No need to spawn Python processes +4. **Easier maintenance**: All scripts in the same language + +## For Script Developers + +If you need to modify the scripts: +- All scripts are in `scripts/` directory +- Use Node.js built-in modules (fs, path, child_process) +- Follow the existing patterns for consistency +- Make scripts executable: `chmod +x scripts/*.js` + +## Backward Compatibility + +The old Python scripts are still in the repository but are no longer used by the npm commands. They may be removed in a future cleanup. \ No newline at end of file diff --git a/docs/guides/testing-your-contribution.md b/docs/guides/testing-your-contribution.md new file mode 100644 index 0000000..44b02fd --- /dev/null +++ b/docs/guides/testing-your-contribution.md @@ -0,0 +1,110 @@ +# πŸ§ͺ Quick Test: Did My Contribution Work? + +Follow these simple steps to verify your contribution was successful! + +## Step 1: Check Your PR Status βœ… + +After submitting your PR, look for: +- 🟒 **Green checkmarks** next to your PR (means validation passed) +- πŸ’¬ **Welcome comment** from the bot +- 🚫 **No merge conflicts** (there shouldn't be any!) + +## Step 2: After Your PR is Merged πŸŽ‰ + +### Immediate (1-2 minutes) +1. **Look for the GitHub Action**: + - Go to the [Actions tab](../../actions) + - You should see "Update Contributors" running or completed + - Green checkmark = success! βœ… + +### Within 5 minutes +2. **Check if you're in the README**: + - Go back to the [main page](../../) + - Scroll down to "Contributors" section + - **Search for your name**: Press `Ctrl+F` (or `Cmd+F`) and type your GitHub username + - You should see your profile picture! πŸ–ΌοΈ + +3. **Check the badge count**: + - Look for this badge: ![Contributors](https://img.shields.io/badge/all_contributors-310-orange.svg) + - The number should have increased by 1 + - Click the badge to jump directly to contributors section + +## Step 3: Celebrate! πŸŽ‰ + +If you see your profile in the contributors section, congratulations! You've successfully: +- βœ… Made your first open source contribution +- βœ… Used the new conflict-free system +- βœ… Helped test and improve the process +- βœ… Joined the open source community! + +## What Your Profile Looks Like + +Your entry will appear something like this: + +``` +[Your Profile Picture] +Your Name +πŸ’» πŸ“– 🎨 ← Contribution type icons +``` + +The icons represent your contribution types: +- πŸ’» = Code +- πŸ“– = Documentation +- 🎨 = Design +- πŸ› = Bug reports +- βœ… = Tutorials +- πŸ’‘ = Ideas +- And many more! + +## ❌ Troubleshooting: "I Don't See My Profile" + +### Check These First: +1. **Was your PR merged?** (Look for purple "Merged" badge) +2. **Did the GitHub Action run?** (Check [Actions tab](../../actions)) +3. **Any validation errors?** (Look at the Action logs) + +### Common Issues: + +**πŸ”§ JSON Format Error** +```json +❌ Wrong: { name: "John Doe" } // Missing quotes +βœ… Right: { "name": "John Doe" } // Proper JSON +``` + +**πŸ”§ Filename Mismatch** +``` +❌ Wrong: contributors/john.json + "github": "johndoe" +βœ… Right: contributors/johndoe.json + "github": "johndoe" +``` + +**πŸ”§ Missing Required Fields** +```json +❌ Wrong: { "name": "John" } +βœ… Right: { + "name": "John Doe", + "github": "johndoe", + "contributions": ["code"] +} +``` + +### Still Need Help? + +1. **Check the validation**: Run this in your terminal: + ```bash + python3 scripts/validate-contributor.py + ``` + +2. **Ask for help**: + - πŸ’¬ [GitHub Discussions](../../discussions) + - πŸ› [Create an Issue](../../issues/new) + - πŸ“– [Read the detailed guide](contributor-guide.md) + +## Next Steps from the Course + +After your profile appears: +1. πŸŽ“ **Continue your journey**: Keep contributing to open source projects! +2. πŸ• **Make more contributions**: Check out [pizza-verse](https://github.com/OpenSource-Communities/pizza-verse) +3. +--- + +**πŸŽ‰ Welcome to the open source community!** Your first contribution is a big milestone - celebrate it! πŸš€ diff --git a/package.json b/package.json index cae2775..040c94b 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,11 @@ "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "contributors:generate": "all-contributors generate", - "contributors:add": "all-contributors add" + "contributors:add": "all-contributors add", + "contributors:validate": "node scripts/validate-contributor.js", + "contributors:migrate": "./scripts/migrate-contributors.sh", + "contributors:test": "node scripts/test-locally.js", + "contributors:preview": "node scripts/preview-contribution.js" }, "keywords": [], "author": "", diff --git a/scripts/migrate-contributors.sh b/scripts/migrate-contributors.sh new file mode 100755 index 0000000..d96ab78 --- /dev/null +++ b/scripts/migrate-contributors.sh @@ -0,0 +1,86 @@ +#!/bin/bash + +# Script to migrate existing contributors to the new JSON file format +# This reads the current .all-contributorsrc and creates individual JSON files + +echo "Migrating existing contributors to individual JSON files..." + +# Create contributors directory if it doesn't exist +mkdir -p contributors + +# Check if .all-contributorsrc exists +if [ ! -f ".all-contributorsrc" ]; then + echo "No existing .all-contributorsrc file found" + exit 1 +fi + +# Check if Python is available for JSON parsing +if ! command -v python3 &> /dev/null; then + echo "Python3 is required for this script" + exit 1 +fi + +# Python script to parse contributors and create JSON files +python3 << 'EOF' +import json +import os + +# Read the .all-contributorsrc file +try: + with open('.all-contributorsrc', 'r') as f: + data = json.load(f) +except FileNotFoundError: + print("No .all-contributorsrc file found") + exit(1) +except json.JSONDecodeError: + print("Error: Invalid JSON in .all-contributorsrc") + exit(1) + +# Create contributors directory +os.makedirs('contributors', exist_ok=True) + +# Process each contributor +contributors = data.get('contributors', []) +if not contributors: + print("No contributors found in .all-contributorsrc") + exit(0) + +for contributor in contributors: + login = contributor.get('login') + name = contributor.get('name') + profile = contributor.get('profile') + contributions = contributor.get('contributions', []) + + if not login or not name: + print(f"Skipping contributor with missing login or name: {contributor}") + continue + + # Create the contributor data + contributor_data = { + "name": name, + "github": login, + "contributions": contributions + } + + # Add profile if it exists + if profile: + contributor_data["profile"] = profile + + # Write to JSON file + filename = f"contributors/{login}.json" + try: + with open(filename, 'w') as f: + json.dump(contributor_data, f, indent=2, ensure_ascii=False) + print(f"Created {filename}") + except Exception as e: + print(f"Error creating {filename}: {e}") + +print(f"Migration complete! Created {len(contributors)} contributor files.") +EOF + +echo "" +echo "Migration summary:" +echo "- Individual JSON files created in contributors/ directory" +echo "- Original .all-contributorsrc preserved as backup" +echo "- Run 'git add contributors/' to stage the new files" +echo "- The GitHub Action will automatically update the README after merge" \ No newline at end of file diff --git a/scripts/preview-contribution.js b/scripts/preview-contribution.js new file mode 100755 index 0000000..f2fa51e --- /dev/null +++ b/scripts/preview-contribution.js @@ -0,0 +1,147 @@ +#!/usr/bin/env node + +/** + * Simple preview script for contributor JSON files + * Shows how the contributor will appear without modifying any files + */ + +const fs = require('fs'); +const path = require('path'); + +function previewContributor(username) { + const contributorFile = path.join('contributors', `${username}.json`); + + if (!fs.existsSync(contributorFile)) { + console.log(`❌ File not found: ${contributorFile}`); + console.log(`πŸ’‘ Create ${contributorFile} first!`); + return false; + } + + let data; + try { + const content = fs.readFileSync(contributorFile, 'utf8'); + data = JSON.parse(content); + } catch (e) { + if (e instanceof SyntaxError) { + console.log(`❌ Invalid JSON in ${contributorFile}: ${e.message}`); + } else { + console.log(`❌ Error reading ${contributorFile}: ${e.message}`); + } + return false; + } + + // Validate required fields + const required = ['name', 'github', 'contributions']; + const missing = required.filter(field => !data[field] || (Array.isArray(data[field]) && data[field].length === 0)); + + if (missing.length > 0) { + console.log(`❌ Missing required fields: ${missing.join(', ')}`); + return false; + } + + // Check username match + if (data.github !== username) { + console.log(`❌ Username mismatch:`); + console.log(` Filename: ${username}.json`); + console.log(` JSON github field: ${data.github}`); + console.log(` These must match!`); + return false; + } + + console.log('βœ… Contributor file validation passed!'); + console.log(); + + // Show preview + const name = data.name; + const github = data.github; + const profile = data.profile || `https://github.com/${github}`; + const contributions = data.contributions; + + console.log('🎨 Preview of your contributor profile:'); + console.log('='.repeat(50)); + console.log(`πŸ‘€ Name: ${name}`); + console.log(`πŸ”— Profile: ${profile}`); + console.log(`πŸ“· Avatar: https://github.com/${github}.png`); + console.log(`🎯 Contributions: ${contributions.join(', ')}`); + console.log(); + + // Show contribution icons + const contributionIcons = { + 'a11y': '♿️', 'audio': 'πŸ”Š', 'blog': 'πŸ“', 'bug': 'πŸ›', + 'business': 'πŸ’Ό', 'code': 'πŸ’»', 'content': 'πŸ–‹', 'data': 'πŸ”£', + 'design': '🎨', 'doc': 'πŸ“–', 'eventOrganizing': 'πŸ“‹', 'example': 'πŸ’‘', + 'financial': 'πŸ’΅', 'fundingFinding': 'πŸ”', 'ideas': 'πŸ€”', 'infra': 'πŸš‡', + 'maintenance': '🚧', 'mentoring': 'πŸ§‘β€πŸ«', 'platform': 'πŸ“¦', 'plugin': 'πŸ”Œ', + 'projectManagement': 'πŸ“†', 'promotion': 'πŸ“£', 'question': 'πŸ’¬', 'research': 'πŸ”¬', + 'review': 'πŸ‘€', 'security': 'πŸ›‘οΈ', 'talk': 'πŸ“’', 'test': '⚠️', + 'tool': 'πŸ”§', 'translation': '🌍', 'tutorial': 'βœ…', 'userTesting': 'πŸ““', + 'video': 'πŸ“Ή' + }; + + console.log('🏷️ Your contribution icons:'); + contributions.forEach(contrib => { + const icon = contributionIcons[contrib] || '❓'; + console.log(` ${icon} ${contrib}`); + }); + + console.log(); + console.log('πŸ“± How it will look in the README:'); + console.log('='.repeat(50)); + + // Generate HTML preview (simplified) + const iconsHtml = contributions + .map(contrib => `${contributionIcons[contrib] || '❓'}`) + .join(' '); + + const htmlPreview = ` + + + ${name} +
+ ${name} +
+
+ ${iconsHtml} +`; + + console.log(htmlPreview); + console.log(); + console.log('='.repeat(50)); + console.log('βœ… Your contribution looks great!'); + console.log(); + console.log('πŸš€ Next steps:'); + console.log(` 1. git add ${contributorFile}`); + console.log(` 2. git commit -m 'Add ${name} as a contributor'`); + console.log(` 3. git push origin your-branch-name`); + console.log(` 4. Create your pull request on GitHub!`); + console.log(); + console.log('πŸ’‘ After your PR is merged, this exact profile will appear in the README automatically!'); + + return true; +} + +function main() { + const args = process.argv.slice(2); + + if (args.length !== 1) { + console.log('Usage: node scripts/preview-contribution.js your-username'); + console.log('Example: node scripts/preview-contribution.js johndoe'); + process.exit(1); + } + + const username = args[0]; + const success = previewContributor(username); + + if (!success) { + console.log(); + console.log('πŸ”§ Need help?'); + console.log(' - Check the template in docs/guides/contributor-guide.md'); + console.log(' - Validate JSON syntax at https://jsonlint.com/'); + console.log(' - Ask questions in GitHub Discussions'); + process.exit(1); + } +} + +if (require.main === module) { + main(); +} \ No newline at end of file diff --git a/scripts/preview-contribution.py b/scripts/preview-contribution.py new file mode 100755 index 0000000..34bdf52 --- /dev/null +++ b/scripts/preview-contribution.py @@ -0,0 +1,135 @@ +#!/usr/bin/env python3 +""" +Simple preview script for contributor JSON files +Shows how the contributor will appear without modifying any files +""" + +import json +import sys +import os +from pathlib import Path + +def preview_contributor(username): + """Preview how a contributor will appear in the README""" + + contributor_file = Path(f"contributors/{username}.json") + + if not contributor_file.exists(): + print(f"❌ File not found: {contributor_file}") + print(f"πŸ’‘ Create {contributor_file} first!") + return False + + try: + with open(contributor_file, 'r') as f: + data = json.load(f) + except json.JSONDecodeError as e: + print(f"❌ Invalid JSON in {contributor_file}: {e}") + return False + except Exception as e: + print(f"❌ Error reading {contributor_file}: {e}") + return False + + # Validate required fields + required = ['name', 'github', 'contributions'] + missing = [field for field in required if field not in data or not data[field]] + + if missing: + print(f"❌ Missing required fields: {missing}") + return False + + # Check username match + if data['github'] != username: + print(f"❌ Username mismatch:") + print(f" Filename: {username}.json") + print(f" JSON github field: {data['github']}") + print(f" These must match!") + return False + + print("βœ… Contributor file validation passed!") + print() + + # Show preview + name = data['name'] + github = data['github'] + profile = data.get('profile', f'https://github.com/{github}') + contributions = data['contributions'] + + print("🎨 Preview of your contributor profile:") + print("=" * 50) + print(f"πŸ‘€ Name: {name}") + print(f"πŸ”— Profile: {profile}") + print(f"πŸ“· Avatar: https://github.com/{github}.png") + print(f"🎯 Contributions: {', '.join(contributions)}") + print() + + # Show contribution icons + contribution_icons = { + 'a11y': '♿️', 'audio': 'πŸ”Š', 'blog': 'πŸ“', 'bug': 'πŸ›', + 'business': 'πŸ’Ό', 'code': 'πŸ’»', 'content': 'πŸ–‹', 'data': 'πŸ”£', + 'design': '🎨', 'doc': 'πŸ“–', 'eventOrganizing': 'πŸ“‹', 'example': 'πŸ’‘', + 'financial': 'πŸ’΅', 'fundingFinding': 'πŸ”', 'ideas': 'πŸ€”', 'infra': 'πŸš‡', + 'maintenance': '🚧', 'mentoring': 'πŸ§‘β€πŸ«', 'platform': 'πŸ“¦', 'plugin': 'πŸ”Œ', + 'projectManagement': 'πŸ“†', 'promotion': 'πŸ“£', 'question': 'πŸ’¬', 'research': 'πŸ”¬', + 'review': 'πŸ‘€', 'security': 'πŸ›‘οΈ', 'talk': 'πŸ“’', 'test': '⚠️', + 'tool': 'πŸ”§', 'translation': '🌍', 'tutorial': 'βœ…', 'userTesting': 'πŸ““', + 'video': 'πŸ“Ή' + } + + print("🏷️ Your contribution icons:") + for contrib in contributions: + icon = contribution_icons.get(contrib, '❓') + print(f" {icon} {contrib}") + + print() + print("πŸ“± How it will look in the README:") + print("=" * 50) + + # Generate HTML preview (simplified) + icons_html = ' '.join([f'{contribution_icons.get(contrib, "❓")}' + for contrib in contributions]) + + html_preview = f''' + + + {name} +
+ {name} +
+
+ {icons_html} +''' + + print(html_preview) + print() + print("=" * 50) + print("βœ… Your contribution looks great!") + print() + print("πŸš€ Next steps:") + print(f" 1. git add {contributor_file}") + print(f" 2. git commit -m 'Add {name} as a contributor'") + print(f" 3. git push origin your-branch-name") + print(f" 4. Create your pull request on GitHub!") + print() + print("πŸ’‘ After your PR is merged, this exact profile will appear in the README automatically!") + + return True + +def main(): + if len(sys.argv) != 2: + print("Usage: python3 scripts/preview-contribution.py your-username") + print("Example: python3 scripts/preview-contribution.py johndoe") + sys.exit(1) + + username = sys.argv[1] + success = preview_contributor(username) + + if not success: + print() + print("πŸ”§ Need help?") + print(" - Check the template in docs/guides/contributor-guide.md") + print(" - Validate JSON syntax at https://jsonlint.com/") + print(" - Ask questions in GitHub Discussions") + sys.exit(1) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/scripts/test-locally.js b/scripts/test-locally.js new file mode 100755 index 0000000..b36dda2 --- /dev/null +++ b/scripts/test-locally.js @@ -0,0 +1,192 @@ +#!/usr/bin/env node + +/** + * Local testing script for contributors + * This allows contributors to test their JSON file and see how it will appear in the README + */ + +const fs = require('fs'); +const path = require('path'); +const { execSync } = require('child_process'); + +function testContributor(username) { + console.log('πŸ§ͺ Testing your contributor file locally...'); + + const contributorFile = path.join('contributors', `${username}.json`); + + // Check if the contributor file exists + if (!fs.existsSync(contributorFile)) { + console.error(`❌ File not found: ${contributorFile}`); + console.error('πŸ’‘ Make sure you\'ve created your contributor file first!'); + process.exit(1); + } + + console.log(`πŸ“ Found contributor file: ${contributorFile}`); + + // Validate the JSON file + console.log('πŸ” Validating JSON format...'); + let data; + try { + const content = fs.readFileSync(contributorFile, 'utf8'); + data = JSON.parse(content); + console.log('βœ… JSON format is valid'); + } catch (e) { + console.error(`❌ Invalid JSON format in ${contributorFile}`); + console.error('πŸ’‘ Check your JSON syntax - use quotes around all strings!'); + process.exit(1); + } + + // Validate required fields + console.log('πŸ” Checking required fields...'); + const errors = []; + const requiredFields = ['name', 'github', 'contributions']; + + requiredFields.forEach(field => { + if (!data[field]) { + errors.push(`Missing field: ${field}`); + } else if (field === 'contributions' && (!Array.isArray(data[field]) || data[field].length === 0)) { + errors.push('contributions must be a non-empty array'); + } + }); + + if (data.github !== username) { + errors.push(`GitHub username '${data.github}' doesn't match filename '${username}.json'`); + } + + if (errors.length > 0) { + console.error('❌ Validation errors:'); + errors.forEach(error => console.error(` - ${error}`)); + process.exit(1); + } + + console.log('βœ… All required fields present and valid'); + console.log(`πŸ“ Name: ${data.name}`); + console.log(`πŸ‘€ GitHub: @${data.github}`); + if (data.profile) { + console.log(`πŸ”— Profile: ${data.profile}`); + } + console.log(`🎯 Contributions: ${data.contributions.join(', ')}`); + + // Create backups + console.log('πŸ’Ύ Creating backup of current README...'); + if (fs.existsSync('README.md')) { + fs.copyFileSync('README.md', 'README.md.backup'); + } + if (fs.existsSync('.all-contributorsrc')) { + fs.copyFileSync('.all-contributorsrc', '.all-contributorsrc.backup'); + } + + // Create test all-contributors config + console.log('βš™οΈ Setting up test environment...'); + const testConfig = { + projectName: "guestbook", + projectOwner: "OpenSource-Community", + repoType: "github", + repoHost: "https://github.com", + files: ["README.md"], + imageSize: 100, + commit: false, + commitConvention: "angular", + contributors: [ + { + login: data.github, + name: data.name, + avatar_url: `https://github.com/${data.github}.png`, + profile: data.profile || `https://github.com/${data.github}`, + contributions: data.contributions + } + ] + }; + + fs.writeFileSync('.all-contributorsrc', JSON.stringify(testConfig, null, 2)); + console.log('βœ… Test configuration created'); + + // Generate test README section + console.log('🎨 Generating test preview...'); + try { + execSync('npx all-contributors generate', { stdio: 'inherit' }); + } catch (e) { + console.error('❌ Error generating preview'); + // Restore files + restoreFiles(); + process.exit(1); + } + + // Show the contributor section + console.log('\nπŸŽ‰ SUCCESS! Here\'s how your contribution will appear:'); + console.log('==================================================\n'); + + // Extract and show the contributor section + try { + const readmeContent = fs.readFileSync('README.md', 'utf8'); + const startMarker = ''; + + const startIndex = readmeContent.indexOf(startMarker); + const endIndex = readmeContent.indexOf(endMarker); + + if (startIndex !== -1 && endIndex !== -1) { + const contributorsSection = readmeContent.substring(startIndex, endIndex + endMarker.length); + console.log(contributorsSection); + } else { + console.log('Could not extract contributors section'); + } + } catch (e) { + console.error('Error reading README:', e.message); + } + + console.log('\n==================================================\n'); + + // Restore original files + restoreFiles(); + + console.log('βœ… Test complete! Your contributor file looks good.\n'); + console.log('πŸš€ Next steps:'); + console.log(` 1. git add ${contributorFile}`); + console.log(` 2. git commit -m 'Add ${username} as a contributor'`); + console.log(` 3. git push origin your-branch-name`); + console.log(' 4. Create your pull request on GitHub!'); + console.log('\nπŸ’‘ Remember: The actual README will be updated automatically after your PR is merged!'); +} + +function restoreFiles() { + console.log('πŸ”„ Restoring original files...'); + + if (fs.existsSync('README.md.backup')) { + fs.renameSync('README.md.backup', 'README.md'); + } + if (fs.existsSync('.all-contributorsrc.backup')) { + fs.renameSync('.all-contributorsrc.backup', '.all-contributorsrc'); + } +} + +function main() { + const args = process.argv.slice(2); + + if (args.length !== 1) { + console.log('Usage: node scripts/test-locally.js your-username'); + console.log('Example: node scripts/test-locally.js johndoe'); + process.exit(1); + } + + const username = args[0]; + + try { + testContributor(username); + } catch (e) { + console.error('Error:', e.message); + restoreFiles(); + process.exit(1); + } +} + +// Handle interruptions +process.on('SIGINT', () => { + console.log('\n\nInterrupted! Restoring files...'); + restoreFiles(); + process.exit(1); +}); + +if (require.main === module) { + main(); +} \ No newline at end of file diff --git a/scripts/test-locally.sh b/scripts/test-locally.sh new file mode 100755 index 0000000..31443fe --- /dev/null +++ b/scripts/test-locally.sh @@ -0,0 +1,178 @@ +#!/bin/bash + +# Local testing script for contributors +# This allows contributors to test their JSON file and see how it will appear in the README + +echo "πŸ§ͺ Testing your contributor file locally..." + +# Check if contributor file is provided +if [ $# -eq 0 ]; then + echo "Usage: ./scripts/test-locally.sh your-username" + echo "Example: ./scripts/test-locally.sh johndoe" + exit 1 +fi + +USERNAME=$1 +CONTRIBUTOR_FILE="contributors/${USERNAME}.json" + +# Check if the contributor file exists +if [ ! -f "$CONTRIBUTOR_FILE" ]; then + echo "❌ File not found: $CONTRIBUTOR_FILE" + echo "πŸ’‘ Make sure you've created your contributor file first!" + exit 1 +fi + +echo "πŸ“ Found contributor file: $CONTRIBUTOR_FILE" + +# Validate the JSON file +echo "πŸ” Validating JSON format..." +if ! python3 -c "import json; json.load(open('$CONTRIBUTOR_FILE'))" 2>/dev/null; then + echo "❌ Invalid JSON format in $CONTRIBUTOR_FILE" + echo "πŸ’‘ Check your JSON syntax - use quotes around all strings!" + exit 1 +fi + +echo "βœ… JSON format is valid" + +# Validate required fields +echo "πŸ” Checking required fields..." +python3 << EOF +import json +import sys + +with open('$CONTRIBUTOR_FILE', 'r') as f: + data = json.load(f) + +errors = [] +required_fields = ['name', 'github', 'contributions'] + +for field in required_fields: + if field not in data: + errors.append(f"Missing field: {field}") + elif not data[field]: + errors.append(f"Empty field: {field}") + +if data.get('github') != '$USERNAME': + errors.append(f"GitHub username '{data.get('github')}' doesn't match filename '$USERNAME.json'") + +if not isinstance(data.get('contributions', []), list): + errors.append("contributions must be an array") +elif len(data.get('contributions', [])) == 0: + errors.append("contributions array is empty") + +if errors: + print("❌ Validation errors:") + for error in errors: + print(f" - {error}") + sys.exit(1) +else: + print("βœ… All required fields present and valid") + print(f"πŸ“ Name: {data['name']}") + print(f"πŸ‘€ GitHub: @{data['github']}") + if 'profile' in data and data['profile']: + print(f"πŸ”— Profile: {data['profile']}") + print(f"🎯 Contributions: {', '.join(data['contributions'])}") +EOF + +if [ $? -ne 0 ]; then + exit 1 +fi + +# Create a backup of current README +echo "πŸ’Ύ Creating backup of current README..." +cp README.md README.md.backup + +# Create a test all-contributors config +echo "βš™οΈ Setting up test environment..." +cp .all-contributorsrc .all-contributorsrc.backup + +# Add just this contributor to test +echo "πŸ”„ Testing contributor addition..." +python3 << EOF +import json + +# Read contributor data +with open('$CONTRIBUTOR_FILE', 'r') as f: + contributor_data = json.load(f) + +# Create minimal all-contributors config for testing +config = { + "projectName": "guestbook", + "projectOwner": "OpenSource-Community", + "repoType": "github", + "repoHost": "https://github.com", + "files": ["README.md"], + "imageSize": 100, + "commit": false, + "commitConvention": "angular", + "contributors": [ + { + "login": contributor_data["github"], + "name": contributor_data["name"], + "avatar_url": f"https://github.com/{contributor_data['github']}.png", + "profile": contributor_data.get("profile", f"https://github.com/{contributor_data['github']}"), + "contributions": contributor_data["contributions"] + } + ] +} + +# Write test config +with open('.all-contributorsrc.test', 'w') as f: + json.dump(config, f, indent=2) + +print("βœ… Test configuration created") +EOF + +# Copy test config over main config temporarily +cp .all-contributorsrc.test .all-contributorsrc + +# Generate test README section +echo "🎨 Generating test preview..." +npx all-contributors generate + +# Show the contributor section +echo "" +echo "πŸŽ‰ SUCCESS! Here's how your contribution will appear:" +echo "==================================================" +echo "" + +# Extract just the contributor table for preview +python3 << EOF +import re + +with open('README.md', 'r') as f: + content = f.read() + +# Find the contributors section +start_marker = "" + +start = content.find(start_marker) +end = content.find(end_marker) + +if start != -1 and end != -1: + contributors_section = content[start:end + len(end_marker)] + print(contributors_section) +else: + print("Could not extract contributors section") +EOF + +echo "" +echo "==================================================" +echo "" + +# Restore original files +echo "πŸ”„ Restoring original files..." +mv README.md.backup README.md +mv .all-contributorsrc.backup .all-contributorsrc +rm -f .all-contributorsrc.test + +echo "βœ… Test complete! Your contributor file looks good." +echo "" +echo "πŸš€ Next steps:" +echo " 1. git add $CONTRIBUTOR_FILE" +echo " 2. git commit -m 'Add $USERNAME as a contributor'" +echo " 3. git push origin your-branch-name" +echo " 4. Create your pull request on GitHub!" +echo "" +echo "πŸ’‘ Remember: The actual README will be updated automatically after your PR is merged!" \ No newline at end of file diff --git a/scripts/validate-contributor.js b/scripts/validate-contributor.js new file mode 100755 index 0000000..55df1a6 --- /dev/null +++ b/scripts/validate-contributor.js @@ -0,0 +1,162 @@ +#!/usr/bin/env node + +/** + * Validates all contributor JSON files + */ + +const fs = require('fs'); +const path = require('path'); + +function validateContributorFile(filepath) { + const filename = path.basename(filepath); + const username = filename.replace('.json', ''); + + // Skip template files + if (filename === 'example-contributor.json' || filename === '.gitkeep' || filename === 'README.md') { + return { valid: true, skipped: true }; + } + + let data; + try { + const content = fs.readFileSync(filepath, 'utf8'); + data = JSON.parse(content); + } catch (e) { + return { + valid: false, + errors: [`Invalid JSON: ${e.message}`] + }; + } + + const errors = []; + const warnings = []; + + // Check required fields + const required = ['name', 'github', 'contributions']; + required.forEach(field => { + if (!data[field]) { + errors.push(`Missing required field: ${field}`); + } + }); + + // Check github username matches filename + if (data.github && data.github !== username) { + errors.push(`GitHub username '${data.github}' doesn't match filename '${filename}'`); + } + + // Check contributions is an array + if (data.contributions && !Array.isArray(data.contributions)) { + errors.push('contributions must be an array'); + } else if (data.contributions && data.contributions.length === 0) { + errors.push('contributions array cannot be empty'); + } + + // Validate contribution types + const validContributions = [ + 'a11y', 'audio', 'blog', 'bug', 'business', 'code', 'content', 'data', + 'design', 'doc', 'eventOrganizing', 'example', 'financial', 'fundingFinding', + 'ideas', 'infra', 'maintenance', 'mentoring', 'platform', 'plugin', + 'projectManagement', 'promotion', 'question', 'research', 'review', + 'security', 'talk', 'test', 'tool', 'translation', 'tutorial', + 'userTesting', 'video' + ]; + + if (data.contributions && Array.isArray(data.contributions)) { + data.contributions.forEach(contrib => { + if (!validContributions.includes(contrib)) { + warnings.push(`Unknown contribution type: ${contrib}`); + } + }); + } + + // Check profile URL format + if (data.profile && !data.profile.startsWith('http')) { + warnings.push('profile should be a full URL starting with http:// or https://'); + } + + return { + valid: errors.length === 0, + errors, + warnings, + data + }; +} + +function main() { + console.log('πŸ” Validating contributor files...\n'); + + const contributorsDir = path.join(process.cwd(), 'contributors'); + + if (!fs.existsSync(contributorsDir)) { + console.log('❌ Contributors directory not found!'); + process.exit(1); + } + + const files = fs.readdirSync(contributorsDir).filter(f => f.endsWith('.json')); + + if (files.length === 0) { + console.log('❌ No contributor JSON files found!'); + process.exit(1); + } + + let totalFiles = 0; + let validFiles = 0; + let skippedFiles = 0; + let errorFiles = 0; + let totalWarnings = 0; + + files.forEach(file => { + const filepath = path.join(contributorsDir, file); + const result = validateContributorFile(filepath); + + if (result.skipped) { + skippedFiles++; + return; + } + + totalFiles++; + + if (result.valid && result.warnings.length === 0) { + console.log(`βœ… ${file}`); + validFiles++; + } else if (result.valid && result.warnings.length > 0) { + console.log(`⚠️ ${file}`); + result.warnings.forEach(warning => { + console.log(` ⚠️ ${warning}`); + }); + validFiles++; + totalWarnings += result.warnings.length; + } else { + console.log(`❌ ${file}`); + result.errors.forEach(error => { + console.log(` ❌ ${error}`); + }); + if (result.warnings) { + result.warnings.forEach(warning => { + console.log(` ⚠️ ${warning}`); + }); + totalWarnings += result.warnings.length; + } + errorFiles++; + } + }); + + console.log('\nπŸ“Š Validation Summary:'); + console.log(` Files checked: ${totalFiles}`); + console.log(` Valid: ${validFiles}`); + console.log(` Errors: ${errorFiles}`); + console.log(` Warnings: ${totalWarnings}`); + if (skippedFiles > 0) { + console.log(` Skipped: ${skippedFiles} (template files)`); + } + + if (errorFiles > 0) { + console.log('\n❌ Validation failed! Fix the errors above.'); + process.exit(1); + } else { + console.log('\nβœ… All contributor files are valid!'); + } +} + +if (require.main === module) { + main(); +} \ No newline at end of file diff --git a/scripts/validate-contributor.py b/scripts/validate-contributor.py new file mode 100755 index 0000000..24fe345 --- /dev/null +++ b/scripts/validate-contributor.py @@ -0,0 +1,147 @@ +#!/usr/bin/env python3 +""" +Validation script for contributor JSON files +This script validates that contributor JSON files follow the expected format +""" + +import json +import os +import sys +import re +from pathlib import Path + +# Valid contribution types based on all-contributors specification +VALID_CONTRIBUTIONS = { + "a11y", "audio", "blog", "bug", "business", "code", "content", "data", + "design", "doc", "eventOrganizing", "example", "financial", "fundingFinding", + "ideas", "infra", "maintenance", "mentoring", "platform", "plugin", + "projectManagement", "promotion", "question", "research", "review", + "security", "talk", "test", "tool", "translation", "tutorial", "userTesting", + "video" +} + +def validate_json_file(filepath): + """Validate a single contributor JSON file""" + errors = [] + warnings = [] + + try: + with open(filepath, 'r', encoding='utf-8') as f: + data = json.load(f) + except json.JSONDecodeError as e: + return [f"Invalid JSON: {e}"], [] + except Exception as e: + return [f"Error reading file: {e}"], [] + + # Check required fields + required_fields = ['name', 'github', 'contributions'] + for field in required_fields: + if field not in data: + errors.append(f"Missing required field: {field}") + elif not data[field]: + errors.append(f"Empty required field: {field}") + + # Validate name + if 'name' in data: + if not isinstance(data['name'], str): + errors.append("Field 'name' must be a string") + elif len(data['name'].strip()) == 0: + errors.append("Field 'name' cannot be empty") + + # Validate github username + if 'github' in data: + github = data['github'] + if not isinstance(github, str): + errors.append("Field 'github' must be a string") + elif not re.match(r'^[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?$', github): + errors.append(f"Invalid GitHub username format: {github}") + else: + # Check if filename matches GitHub username + expected_filename = f"{github}.json" + actual_filename = os.path.basename(filepath) + if actual_filename != expected_filename: + warnings.append(f"Filename '{actual_filename}' doesn't match GitHub username '{github}' (should be '{expected_filename}')") + + # Validate contributions + if 'contributions' in data: + contributions = data['contributions'] + if not isinstance(contributions, list): + errors.append("Field 'contributions' must be an array") + elif len(contributions) == 0: + warnings.append("Field 'contributions' is empty") + else: + for contrib in contributions: + if not isinstance(contrib, str): + errors.append(f"Contribution type must be a string: {contrib}") + elif contrib not in VALID_CONTRIBUTIONS: + warnings.append(f"Unknown contribution type: {contrib}") + + # Validate optional profile field + if 'profile' in data: + profile = data['profile'] + if not isinstance(profile, str): + errors.append("Field 'profile' must be a string") + elif profile and not re.match(r'^https?://', profile): + warnings.append(f"Profile URL should start with http:// or https://: {profile}") + + # Check for unexpected fields + expected_fields = {'name', 'github', 'contributions', 'profile'} + extra_fields = set(data.keys()) - expected_fields + if extra_fields: + warnings.append(f"Unexpected fields: {', '.join(extra_fields)}") + + return errors, warnings + +def main(): + """Main validation function""" + contributors_dir = Path("contributors") + + if not contributors_dir.exists(): + print("❌ Contributors directory not found") + sys.exit(1) + + json_files = list(contributors_dir.glob("*.json")) + if not json_files: + print("❌ No JSON files found in contributors directory") + sys.exit(1) + + total_errors = 0 + total_warnings = 0 + + print(f"πŸ” Validating {len(json_files)} contributor files...\n") + + for filepath in sorted(json_files): + errors, warnings = validate_json_file(filepath) + + if errors or warnings: + print(f"πŸ“ {filepath.name}:") + + for error in errors: + print(f" ❌ {error}") + total_errors += 1 + + for warning in warnings: + print(f" ⚠️ {warning}") + total_warnings += 1 + + print() + else: + print(f"βœ… {filepath.name}") + + print(f"\nπŸ“Š Validation Summary:") + print(f" Files checked: {len(json_files)}") + print(f" Errors: {total_errors}") + print(f" Warnings: {total_warnings}") + + if total_errors > 0: + print("\n❌ Validation failed! Please fix the errors above.") + sys.exit(1) + elif total_warnings > 0: + print("\n⚠️ Validation passed with warnings. Consider fixing the warnings above.") + sys.exit(0) + else: + print("\nβœ… All files are valid!") + sys.exit(0) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/scripts/verify-migration.sh b/scripts/verify-migration.sh new file mode 100755 index 0000000..9689113 --- /dev/null +++ b/scripts/verify-migration.sh @@ -0,0 +1,54 @@ +#!/bin/bash + +echo "πŸ” Verifying migration completion..." + +# Count contributor files +json_files=$(find contributors/ -name "*.json" ! -name "example-contributor.json" | wc -l) +echo "πŸ“ JSON files: $json_files" + +# Count contributors in README +readme_contributors=$(grep -c "align=\"center\"" README.md) +readme_contributors=$((readme_contributors - 1)) # Subtract header row +echo "πŸ“„ README contributors: $readme_contributors" + +# Check badge count +badge_count=$(grep -o "all_contributors-[0-9]*" README.md | head -1 | cut -d'-' -f2) +echo "🏷️ Badge count: $badge_count" + +# Verify README is complete +if grep -q "ALL-CONTRIBUTORS-LIST:END" README.md; then + echo "βœ… README properly closed" +else + echo "❌ README missing closing tags" +fi + +# Check for validation errors +echo "πŸ” Running validation..." +python3 scripts/validate-contributor.py > /tmp/validation.log 2>&1 +if [ $? -eq 0 ]; then + echo "βœ… All contributor files valid" +else + echo "❌ Validation errors found:" + cat /tmp/validation.log +fi + +# Summary +echo "" +echo "πŸ“Š Migration Summary:" +echo " Expected: 310 contributors" +echo " JSON files: $json_files" +echo " README entries: $readme_contributors" +echo " Badge count: $badge_count" + +if [ "$json_files" -eq 310 ] && [ "$readme_contributors" -eq 310 ] && [ "$badge_count" -eq 310 ]; then + echo "βœ… Migration successful! All counts match." +else + echo "⚠️ Count mismatch detected. Review needed." +fi + +echo "" +echo "πŸš€ Next steps:" +echo "1. Commit and push all changes" +echo "2. Test the GitHub Action with a sample contributor" +echo "3. Update course materials to reference new process" +echo "4. Pin announcement issue for contributors" \ No newline at end of file