From bd59d563542b3d7df6985dbc0afcc5c39aafef18 Mon Sep 17 00:00:00 2001 From: Anshuman Singh <148977651+DataBoySu@users.noreply.github.com> Date: Tue, 13 Jan 2026 12:47:27 +0530 Subject: [PATCH 01/46] Workflows changed, CI partitioned --- .github/workflows/ci.yml | 58 +++++++++++++++++++++++--- .github/workflows/codestyle.yml | 1 + .github/workflows/translate_readme.yml | 2 - 3 files changed, 53 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d401b115..db0e78ca 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,10 +2,6 @@ name: CI on: pull_request_target: - paths-ignore: - - 'README.md' - - 'sources/translation.json' - - 'locales/**' workflow_dispatch: concurrency: @@ -13,9 +9,49 @@ concurrency: cancel-in-progress: true jobs: + required-check: + name: PR Required Check + runs-on: ubuntu-latest + outputs: + needs_ci: ${{ steps.filter.outputs.code }} + steps: + - name: Checkout PR head + uses: actions/checkout@v6 + with: + fetch-depth: 0 + ref: ${{ github.event.pull_request.head.ref }} + repository: ${{ github.event.pull_request.head.repo.full_name }} + + - name: Detect changed paths + id: filter + uses: dorny/paths-filter@v3 + with: + filters: | + # changes that should trigger the heavy CI + code: + - 'sources/**' + - '!sources/translation.json' + - '.github/workflows/**' + + # does NOT require heavy CI + docs: + - 'locales/**' + - 'README.md' + - 'LICENSE' + - 'CONTRIBUTING.md' + - 'CODE_OF_CONDUCT.md' + - 'sources/translation.json' + + - name: Report decision + run: | + echo "code=${{ steps.filter.outputs.code }}" + echo "docs=${{ steps.filter.outputs.docs }}" + ci: name: Run Test and Review PR runs-on: ubuntu-latest + needs: required-check + if: ${{ needs.required-check.outputs.needs_ci == 'true' }} steps: - name: Checkout πŸ›ŽοΈ @@ -59,8 +95,7 @@ jobs: INPUT_SHOW_LANGUAGE_PER_REPO: True INPUT_SHOW_UPDATED_DATE: True INPUT_COMMIT_BY_ME: True - INPUT_DEBUG_LOGGING: True # Not for prod - DEBUG_RUN: True # Not for prod + run: python3 sources/main.py - name: Save Branch Name Without Slashes πŸ“› @@ -87,3 +122,14 @@ jobs: body: ${{ steps.make-stats.outputs.README_CONTENT }} issue_number: ${{ github.event.number }} token: ${{ secrets.GITHUB_TOKEN }} + + noop-status: + name: PR Required Check (status) + runs-on: ubuntu-latest + needs: required-check + if: ${{ needs.required-check.outputs.needs_ci != 'true' }} + steps: + - name: Checkout (noop) + uses: actions/checkout@v6 + - name: No-op + run: echo "No CI needed for this PR; marking required check as passed." diff --git a/.github/workflows/codestyle.yml b/.github/workflows/codestyle.yml index 2dbdfea5..61955db4 100644 --- a/.github/workflows/codestyle.yml +++ b/.github/workflows/codestyle.yml @@ -1,6 +1,7 @@ name: CODESTYLE on: + pull_request: push: paths-ignore: - 'README.md' diff --git a/.github/workflows/translate_readme.yml b/.github/workflows/translate_readme.yml index e2a155ef..42779f09 100644 --- a/.github/workflows/translate_readme.yml +++ b/.github/workflows/translate_readme.yml @@ -82,6 +82,4 @@ jobs: uses: stefanzweifel/git-auto-commit-action@v7 with: commit_message: "βœ¨πŸ’– docs: updated translations & navbar! 🌸✨" - # To use your own avatar, uncomment and set your name/email: - # commit_author: "Your Name " file_pattern: 'README.md locales/*.md' From 171757c2622688c7391d08af1a8316b3b20e2fe9 Mon Sep 17 00:00:00 2001 From: Anshuman Singh <148977651+DataBoySu@users.noreply.github.com> Date: Tue, 13 Jan 2026 12:54:33 +0530 Subject: [PATCH 02/46] Changing CI run manner; brnach protection rules are always fulfilled to prevent CI stalling --- .github/workflows/ci.yml | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index db0e78ca..9ae0024a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -51,30 +51,38 @@ jobs: name: Run Test and Review PR runs-on: ubuntu-latest needs: required-check - if: ${{ needs.required-check.outputs.needs_ci == 'true' }} steps: + - name: Check requirement + run: echo "needs_ci=${{ needs.required-check.outputs.needs_ci }}" + - name: Checkout πŸ›ŽοΈ + if: ${{ needs.required-check.outputs.needs_ci == 'true' }} uses: actions/checkout@v6 - name: Setup Python 3.13 🐍 + if: ${{ needs.required-check.outputs.needs_ci == 'true' }} uses: actions/setup-python@v6 with: python-version: 3.13 cache: 'pip' - name: Install Dependencies πŸ“₯ + if: ${{ needs.required-check.outputs.needs_ci == 'true' }} run: pip install -r requirements.txt - name: Create Assets Folder πŸ“₯ + if: ${{ needs.required-check.outputs.needs_ci == 'true' }} run: mkdir assets - name: Create Previous Comments 🫣 + if: ${{ needs.required-check.outputs.needs_ci == 'true' }} uses: int128/hide-comment-action@v1 with: starts-with: "README stats current output:" - name: Run Action Preview on Current Code πŸ§ͺ + if: ${{ needs.required-check.outputs.needs_ci == 'true' }} id: make-stats env: INPUT_GH_TOKEN: ${{ secrets.INPUT_GITHUB_TOKEN }} @@ -99,7 +107,7 @@ jobs: run: python3 sources/main.py - name: Save Branch Name Without Slashes πŸ“› - if: ${{ github.ref != 'refs/heads/master' }} + if: ${{ needs.required-check.outputs.needs_ci == 'true' && github.ref != 'refs/heads/master' }} env: BRANCH_NAME: ${{ github.head_ref || github.ref_name }} run: | @@ -108,14 +116,14 @@ jobs: echo BRANCH_NAME=${BRANCH_NAME} >> $GITHUB_ENV - name: Upload Artifact πŸ“¦ + if: ${{ needs.required-check.outputs.needs_ci == 'true' && github.ref != 'refs/heads/master' }} uses: actions/upload-artifact@v6 - if: ${{ github.ref != 'refs/heads/master' }} with: name: ${{ format('github-pages-for-branch-{0}', env.BRANCH_NAME) }} path: assets - name: Create Comment πŸ’¬ - if: github.event_name == 'pull_request_target' + if: ${{ needs.required-check.outputs.needs_ci == 'true' && github.event_name == 'pull_request_target' }} uses: jungwinter/comment@v1 with: type: create @@ -123,6 +131,10 @@ jobs: issue_number: ${{ github.event.number }} token: ${{ secrets.GITHUB_TOKEN }} + - name: Skip heavy CI + if: ${{ needs.required-check.outputs.needs_ci != 'true' }} + run: echo "Skipping heavy CI because changes appear docs/translation-only." + noop-status: name: PR Required Check (status) runs-on: ubuntu-latest From 44ae3cbe2f809112102e44f0bc2ce05c264f863b Mon Sep 17 00:00:00 2001 From: Anshuman Singh <148977651+DataBoySu@users.noreply.github.com> Date: Tue, 13 Jan 2026 13:01:30 +0530 Subject: [PATCH 03/46] Starting dual ci construction --- .github/workflows/ci.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9ae0024a..693dcd67 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,8 +1,9 @@ name: CI on: - pull_request_target: workflow_dispatch: + push: + branches: master concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number }} From 86a1d74e38d6bc30c7471532b587852c0b838b6c Mon Sep 17 00:00:00 2001 From: Anshuman Singh <148977651+DataBoySu@users.noreply.github.com> Date: Tue, 13 Jan 2026 14:19:45 +0530 Subject: [PATCH 04/46] breaking files down --- .github/workflows/ci.yml | 99 +- .github/workflows/ci_pr.yml | 97 + mock_data/mock_github_contributed.json | 336 + mock_data/mock_github_repos.json | 152 + mock_data/mock_github_stats.json | 8804 ++++++++++++++++++++++++ mock_data/mock_github_user_meta.json | 8 + mock_data/mock_wakatime_stats.json | 630 ++ sources/manager_download.py | 25 + sources/manager_environment.py | 9 +- sources/manager_github.py | 10 +- 10 files changed, 10101 insertions(+), 69 deletions(-) create mode 100644 .github/workflows/ci_pr.yml create mode 100644 mock_data/mock_github_contributed.json create mode 100644 mock_data/mock_github_repos.json create mode 100644 mock_data/mock_github_stats.json create mode 100644 mock_data/mock_github_user_meta.json create mode 100644 mock_data/mock_wakatime_stats.json diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 693dcd67..2d5251ad 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,89 +1,80 @@ name: CI on: - workflow_dispatch: push: - branches: master + branches: + - master + - main + workflow_dispatch: concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number }} + group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true +permissions: + contents: read + jobs: - required-check: - name: PR Required Check + ci: + name: Run Test and Review (main) runs-on: ubuntu-latest - outputs: - needs_ci: ${{ steps.filter.outputs.code }} + steps: - - name: Checkout PR head + - name: Checkout πŸ›ŽοΈ uses: actions/checkout@v6 - with: - fetch-depth: 0 - ref: ${{ github.event.pull_request.head.ref }} - repository: ${{ github.event.pull_request.head.repo.full_name }} - name: Detect changed paths id: filter uses: dorny/paths-filter@v3 with: + base: ${{ github.event.before }} + ref: ${{ github.sha }} filters: | - # changes that should trigger the heavy CI - code: - - 'sources/**' - - '!sources/translation.json' - - '.github/workflows/**' - - # does NOT require heavy CI docs: - 'locales/**' - 'README.md' + - 'README*.md' - 'LICENSE' - 'CONTRIBUTING.md' - 'CODE_OF_CONDUCT.md' - 'sources/translation.json' + - 'scripts/zh.txt' + code: + - 'sources/**' + - '!sources/translation.json' + - 'scripts/**' + - '!scripts/zh.txt' + - 'waka-readme-stats/**' + - '.github/workflows/**' - - name: Report decision + - name: Docs-only change (skip) + if: ${{ steps.filter.outputs.code != 'true' }} run: | - echo "code=${{ steps.filter.outputs.code }}" - echo "docs=${{ steps.filter.outputs.docs }}" - - ci: - name: Run Test and Review PR - runs-on: ubuntu-latest - needs: required-check - - steps: - - name: Check requirement - run: echo "needs_ci=${{ needs.required-check.outputs.needs_ci }}" - - - name: Checkout πŸ›ŽοΈ - if: ${{ needs.required-check.outputs.needs_ci == 'true' }} - uses: actions/checkout@v6 + echo "Docs-only push detected; skipping comprehensive CI." - name: Setup Python 3.13 🐍 - if: ${{ needs.required-check.outputs.needs_ci == 'true' }} + if: ${{ steps.filter.outputs.code == 'true' }} uses: actions/setup-python@v6 with: python-version: 3.13 cache: 'pip' - name: Install Dependencies πŸ“₯ - if: ${{ needs.required-check.outputs.needs_ci == 'true' }} + if: ${{ steps.filter.outputs.code == 'true' }} run: pip install -r requirements.txt - name: Create Assets Folder πŸ“₯ - if: ${{ needs.required-check.outputs.needs_ci == 'true' }} + if: ${{ steps.filter.outputs.code == 'true' }} run: mkdir assets - name: Create Previous Comments 🫣 - if: ${{ needs.required-check.outputs.needs_ci == 'true' }} + if: ${{ steps.filter.outputs.code == 'true' }} uses: int128/hide-comment-action@v1 with: starts-with: "README stats current output:" - name: Run Action Preview on Current Code πŸ§ͺ - if: ${{ needs.required-check.outputs.needs_ci == 'true' }} + if: ${{ steps.filter.outputs.code == 'true' }} id: make-stats env: INPUT_GH_TOKEN: ${{ secrets.INPUT_GITHUB_TOKEN }} @@ -108,7 +99,7 @@ jobs: run: python3 sources/main.py - name: Save Branch Name Without Slashes πŸ“› - if: ${{ needs.required-check.outputs.needs_ci == 'true' && github.ref != 'refs/heads/master' }} + if: ${{ github.ref != 'refs/heads/master' && github.ref != 'refs/heads/main' }} env: BRANCH_NAME: ${{ github.head_ref || github.ref_name }} run: | @@ -117,32 +108,8 @@ jobs: echo BRANCH_NAME=${BRANCH_NAME} >> $GITHUB_ENV - name: Upload Artifact πŸ“¦ - if: ${{ needs.required-check.outputs.needs_ci == 'true' && github.ref != 'refs/heads/master' }} + if: ${{ github.ref != 'refs/heads/master' && github.ref != 'refs/heads/main' }} uses: actions/upload-artifact@v6 with: name: ${{ format('github-pages-for-branch-{0}', env.BRANCH_NAME) }} path: assets - - - name: Create Comment πŸ’¬ - if: ${{ needs.required-check.outputs.needs_ci == 'true' && github.event_name == 'pull_request_target' }} - uses: jungwinter/comment@v1 - with: - type: create - body: ${{ steps.make-stats.outputs.README_CONTENT }} - issue_number: ${{ github.event.number }} - token: ${{ secrets.GITHUB_TOKEN }} - - - name: Skip heavy CI - if: ${{ needs.required-check.outputs.needs_ci != 'true' }} - run: echo "Skipping heavy CI because changes appear docs/translation-only." - - noop-status: - name: PR Required Check (status) - runs-on: ubuntu-latest - needs: required-check - if: ${{ needs.required-check.outputs.needs_ci != 'true' }} - steps: - - name: Checkout (noop) - uses: actions/checkout@v6 - - name: No-op - run: echo "No CI needed for this PR; marking required check as passed." diff --git a/.github/workflows/ci_pr.yml b/.github/workflows/ci_pr.yml new file mode 100644 index 00000000..ef58a111 --- /dev/null +++ b/.github/workflows/ci_pr.yml @@ -0,0 +1,97 @@ +name: CI + +on: + pull_request: + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + +permissions: + contents: read + pull-requests: read + +jobs: + ci: + name: Run Test and Review PR + runs-on: ubuntu-latest + + steps: + - name: Checkout πŸ›ŽοΈ + uses: actions/checkout@v4 + + - name: Detect whether code changed + id: changed + uses: actions/github-script@v7 + with: + script: | + const pr = context.payload.pull_request + if (!pr) { + core.setOutput('code', 'true') + return + } + const owner = pr.base.repo.owner.login + const repo = pr.base.repo.name + const files = await github.paginate(github.rest.pulls.listFiles, { owner, repo, pull_number: pr.number }) + const paths = files.map(f => f.filename) + + const isDoc = (p) => ( + p.startsWith('locales/') || + p === 'README.md' || + p.startsWith('README.') || + p === 'LICENSE' || + p === 'CONTRIBUTING.md' || + p === 'CODE_OF_CONDUCT.md' || + p === 'sources/translation.json' + ) + + const codeChanged = paths.some(p => !isDoc(p)) + core.setOutput('code', codeChanged ? 'true' : 'false') + core.setOutput('files', paths.join('\n')) + + - name: Docs-only PR (skip) + if: ${{ steps.changed.outputs.code != 'true' }} + run: | + echo "Docs-only PR detected; skipping comprehensive CI." + + - name: Setup Python 3.13 🐍 + if: ${{ steps.changed.outputs.code == 'true' }} + uses: actions/setup-python@v5 + with: + python-version: 3.13 + cache: 'pip' + + - name: Install Dependencies πŸ“₯ + if: ${{ steps.changed.outputs.code == 'true' }} + run: pip install -r requirements.txt + + - name: Run comprehensive CI (real GitHub, mock WakaTime) πŸ§ͺ + if: ${{ steps.changed.outputs.code == 'true' }} + env: + MOCK_WAKATIME: True + MOCK_DATA_DIR: mock_data + DEBUG_RUN: True + INPUT_DEBUG_LOGGING: True + + # Real GitHub token. For forks, contributors must run this in their fork. + INPUT_GH_TOKEN: ${{ secrets.INPUT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} + + # Comprehensive feature flags + INPUT_SYMBOL_VERSION: 1 + INPUT_SHOW_TIMEZONE: True + INPUT_SHOW_PROJECTS: True + INPUT_SHOW_EDITORS: True + INPUT_SHOW_OS: True + INPUT_SHOW_LANGUAGE: True + INPUT_SHOW_LINES_OF_CODE: True + INPUT_SHOW_LOC_CHART: True + INPUT_SHOW_PROFILE_VIEWS: True + INPUT_SHOW_TOTAL_CODE_TIME: True + INPUT_SHOW_SHORT_INFO: True + INPUT_SHOW_COMMIT: True + INPUT_SHOW_DAYS_OF_WEEK: True + INPUT_SHOW_LANGUAGE_PER_REPO: True + INPUT_SHOW_UPDATED_DATE: True + + run: python3 sources/main.py diff --git a/mock_data/mock_github_contributed.json b/mock_data/mock_github_contributed.json new file mode 100644 index 00000000..e1aa7ec3 --- /dev/null +++ b/mock_data/mock_github_contributed.json @@ -0,0 +1,336 @@ +[ + { + "primaryLanguage": { + "name": "TypeScript" + }, + "name": "freeCodeCamp", + "owner": { + "login": "freeCodeCamp" + }, + "isPrivate": false, + "isFork": false + }, + { + "primaryLanguage": { + "name": "Python" + }, + "name": "starred", + "owner": { + "login": "maguowei" + }, + "isPrivate": false, + "isFork": false + }, + { + "primaryLanguage": null, + "name": "Bookmarks-Dook", + "owner": { + "login": "Dook1" + }, + "isPrivate": false, + "isFork": false + }, + { + "primaryLanguage": { + "name": "JavaScript" + }, + "name": "github-readme-stats", + "owner": { + "login": "anuraghazra" + }, + "isPrivate": false, + "isFork": false + }, + { + "primaryLanguage": { + "name": "Python" + }, + "name": "waka-readme-stats", + "owner": { + "login": "anmol098" + }, + "isPrivate": false, + "isFork": false + }, + { + "primaryLanguage": { + "name": "C++" + }, + "name": "elan-spi-fingerprint", + "owner": { + "login": "mincrmatt12" + }, + "isPrivate": false, + "isFork": false + }, + { + "primaryLanguage": { + "name": "PHP" + }, + "name": "readme-typing-svg", + "owner": { + "login": "DenverCoder1" + }, + "isPrivate": false, + "isFork": false + }, + { + "primaryLanguage": { + "name": "TypeScript" + }, + "name": "my-badges", + "owner": { + "login": "my-badges" + }, + "isPrivate": false, + "isFork": false + }, + { + "primaryLanguage": null, + "name": "DataBoySu", + "owner": { + "login": "DataBoySu" + }, + "isPrivate": false, + "isFork": false + }, + { + "primaryLanguage": { + "name": "JavaScript" + }, + "name": "github-readme-stats-fast", + "owner": { + "login": "Pranesh-2005" + }, + "isPrivate": false, + "isFork": false + }, + { + "primaryLanguage": { + "name": "Python" + }, + "name": "ToyCompiler", + "owner": { + "login": "DataBoySu" + }, + "isPrivate": false, + "isFork": false + }, + { + "primaryLanguage": null, + "name": "Resume", + "owner": { + "login": "DataBoySu" + }, + "isPrivate": false, + "isFork": false + }, + { + "primaryLanguage": null, + "name": "Agro_Project", + "owner": { + "login": "DataBoySu" + }, + "isPrivate": true, + "isFork": false + }, + { + "primaryLanguage": { + "name": "Python" + }, + "name": "MyGPU", + "owner": { + "login": "DataBoySu" + }, + "isPrivate": false, + "isFork": false + }, + { + "primaryLanguage": { + "name": "Python" + }, + "name": "visualization-playground", + "owner": { + "login": "DataBoySu" + }, + "isPrivate": false, + "isFork": false + }, + { + "primaryLanguage": null, + "name": "LocalSphere", + "owner": { + "login": "DataBoySu" + }, + "isPrivate": false, + "isFork": false + }, + { + "primaryLanguage": { + "name": "Jupyter Notebook" + }, + "name": "Data-Science-Projects", + "owner": { + "login": "DataBoySu" + }, + "isPrivate": false, + "isFork": false + }, + { + "primaryLanguage": { + "name": "PHP" + }, + "name": "readme-typing-svg", + "owner": { + "login": "DataBoySu" + }, + "isPrivate": false, + "isFork": true + }, + { + "primaryLanguage": { + "name": "Jupyter Notebook" + }, + "name": "DeepCool-AK620-Replacement-Software", + "owner": { + "login": "DataBoySu" + }, + "isPrivate": false, + "isFork": false + }, + { + "primaryLanguage": null, + "name": "AIO-github-profile-readme", + "owner": { + "login": "DataBoySu" + }, + "isPrivate": false, + "isFork": true + }, + { + "primaryLanguage": null, + "name": "Path-to-SWE", + "owner": { + "login": "DataBoySu" + }, + "isPrivate": false, + "isFork": true + }, + { + "primaryLanguage": null, + "name": "ai-log-analyzer", + "owner": { + "login": "DataBoySu" + }, + "isPrivate": false, + "isFork": true + }, + { + "primaryLanguage": { + "name": "Python" + }, + "name": "waka-readme-stats", + "owner": { + "login": "DataBoySu" + }, + "isPrivate": false, + "isFork": true + }, + { + "primaryLanguage": { + "name": "Python" + }, + "name": "databoysu-readme-translator", + "owner": { + "login": "DataBoySu" + }, + "isPrivate": false, + "isFork": false + }, + { + "primaryLanguage": { + "name": "JavaScript" + }, + "name": "readme-stats", + "owner": { + "login": "DataBoySu" + }, + "isPrivate": true, + "isFork": false + }, + { + "primaryLanguage": { + "name": "Shell" + }, + "name": "ohmyzsh", + "owner": { + "login": "DataBoySu" + }, + "isPrivate": false, + "isFork": true + }, + { + "primaryLanguage": { + "name": "Python" + }, + "name": "system-design-primer", + "owner": { + "login": "DataBoySu" + }, + "isPrivate": false, + "isFork": true + }, + { + "primaryLanguage": null, + "name": "start-machine-learning", + "owner": { + "login": "DataBoySu" + }, + "isPrivate": false, + "isFork": true + }, + { + "primaryLanguage": { + "name": "Python" + }, + "name": "professional-programming", + "owner": { + "login": "DataBoySu" + }, + "isPrivate": false, + "isFork": true + }, + { + "primaryLanguage": { + "name": "JavaScript" + }, + "name": "hackclub", + "owner": { + "login": "DataBoySu" + }, + "isPrivate": false, + "isFork": true + }, + { + "primaryLanguage": { + "name": "C++" + }, + "name": "llama.cpp", + "owner": { + "login": "DataBoySu" + }, + "isPrivate": false, + "isFork": true + }, + { + "primaryLanguage": { + "name": "TypeScript" + }, + "name": "device-activity-tracker", + "owner": { + "login": "DataBoySu" + }, + "isPrivate": false, + "isFork": true + } +] \ No newline at end of file diff --git a/mock_data/mock_github_repos.json b/mock_data/mock_github_repos.json new file mode 100644 index 00000000..58549d0d --- /dev/null +++ b/mock_data/mock_github_repos.json @@ -0,0 +1,152 @@ +[ + { + "primaryLanguage": { + "name": "JavaScript" + }, + "name": "readme-stats", + "owner": { + "login": "DataBoySu" + }, + "isPrivate": true + }, + { + "primaryLanguage": { + "name": "Python" + }, + "name": "databoysu-readme-translator", + "owner": { + "login": "DataBoySu" + }, + "isPrivate": false + }, + { + "primaryLanguage": { + "name": "Jupyter Notebook" + }, + "name": "DeepCool-AK620-Replacement-Software", + "owner": { + "login": "DataBoySu" + }, + "isPrivate": false + }, + { + "primaryLanguage": { + "name": "Jupyter Notebook" + }, + "name": "Data-Science-Projects", + "owner": { + "login": "DataBoySu" + }, + "isPrivate": false + }, + { + "primaryLanguage": null, + "name": "LocalSphere", + "owner": { + "login": "DataBoySu" + }, + "isPrivate": false + }, + { + "primaryLanguage": { + "name": "Python" + }, + "name": "visualization-playground", + "owner": { + "login": "DataBoySu" + }, + "isPrivate": false + }, + { + "primaryLanguage": { + "name": "Python" + }, + "name": "MyGPU", + "owner": { + "login": "DataBoySu" + }, + "isPrivate": false + }, + { + "primaryLanguage": null, + "name": "Agro_Project", + "owner": { + "login": "DataBoySu" + }, + "isPrivate": true + }, + { + "primaryLanguage": null, + "name": "Resume", + "owner": { + "login": "DataBoySu" + }, + "isPrivate": false + }, + { + "primaryLanguage": { + "name": "Python" + }, + "name": "ToyCompiler", + "owner": { + "login": "DataBoySu" + }, + "isPrivate": false + }, + { + "primaryLanguage": { + "name": "HTML" + }, + "name": "HTML-Practice", + "owner": { + "login": "DataBoySu" + }, + "isPrivate": false + }, + { + "primaryLanguage": { + "name": "Jupyter Notebook" + }, + "name": "AIFusion-24", + "owner": { + "login": "DataBoySu" + }, + "isPrivate": true + }, + { + "primaryLanguage": null, + "name": "desktop-tutorial", + "owner": { + "login": "DataBoySu" + }, + "isPrivate": true + }, + { + "primaryLanguage": { + "name": "Jupyter Notebook" + }, + "name": "Technohacks-24_Projects", + "owner": { + "login": "DataBoySu" + }, + "isPrivate": true + }, + { + "primaryLanguage": null, + "name": "DataBoySu", + "owner": { + "login": "DataBoySu" + }, + "isPrivate": false + }, + { + "primaryLanguage": { + "name": "Python" + }, + "name": "waka-readme-stats", + "owner": { + "login": "anmol098" + }, + "isPrivate": false + } +] \ No newline at end of file diff --git a/mock_data/mock_github_stats.json b/mock_data/mock_github_stats.json new file mode 100644 index 00000000..94e25026 --- /dev/null +++ b/mock_data/mock_github_stats.json @@ -0,0 +1,8804 @@ +{ + "years": [ + { + "year": "2026", + "total": 11, + "range": { + "start": "2026-01-04", + "end": "2026-12-26" + } + }, + { + "year": "2025", + "total": 574, + "range": { + "start": "2025-01-05", + "end": "2025-12-27" + } + }, + { + "year": "2024", + "total": 42, + "range": { + "start": "2024-01-07", + "end": "2024-12-28" + } + }, + { + "year": "2023", + "total": 1, + "range": { + "start": "2023-01-01", + "end": "2023-12-30" + } + } + ], + "contributions": [ + { + "date": "2026-12-31", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-12-30", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-12-29", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-12-28", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-12-27", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-12-26", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-12-25", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-12-24", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-12-23", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-12-22", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-12-21", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-12-20", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-12-19", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-12-18", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-12-17", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-12-16", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-12-15", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-12-14", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-12-13", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-12-12", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-12-11", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-12-10", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-12-09", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-12-08", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-12-07", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-12-06", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-12-05", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-12-04", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-12-03", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-12-02", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-12-01", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-11-30", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-11-29", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-11-28", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-11-27", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-11-26", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-11-25", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-11-24", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-11-23", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-11-22", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-11-21", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-11-20", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-11-19", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-11-18", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-11-17", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-11-16", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-11-15", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-11-14", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-11-13", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-11-12", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-11-11", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-11-10", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-11-09", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-11-08", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-11-07", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-11-06", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-11-05", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-11-04", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-11-03", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-11-02", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-11-01", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-10-31", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-10-30", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-10-29", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-10-28", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-10-27", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-10-26", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-10-25", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-10-24", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-10-23", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-10-22", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-10-21", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-10-20", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-10-19", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-10-18", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-10-17", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-10-16", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-10-15", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-10-14", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-10-13", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-10-12", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-10-11", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-10-10", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-10-09", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-10-08", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-10-07", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-10-06", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-10-05", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-10-04", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-10-03", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-10-02", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-10-01", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-09-30", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-09-29", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-09-28", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-09-27", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-09-26", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-09-25", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-09-24", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-09-23", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-09-22", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-09-21", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-09-20", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-09-19", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-09-18", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-09-17", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-09-16", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-09-15", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-09-14", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-09-13", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-09-12", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-09-11", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-09-10", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-09-09", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-09-08", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-09-07", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-09-06", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-09-05", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-09-04", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-09-03", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-09-02", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-09-01", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-08-31", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-08-30", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-08-29", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-08-28", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-08-27", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-08-26", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-08-25", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-08-24", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-08-23", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-08-22", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-08-21", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-08-20", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-08-19", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-08-18", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-08-17", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-08-16", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-08-15", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-08-14", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-08-13", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-08-12", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-08-11", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-08-10", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-08-09", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-08-08", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-08-07", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-08-06", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-08-05", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-08-04", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-08-03", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-08-02", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-08-01", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-07-31", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-07-30", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-07-29", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-07-28", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-07-27", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-07-26", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-07-25", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-07-24", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-07-23", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-07-22", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-07-21", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-07-20", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-07-19", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-07-18", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-07-17", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-07-16", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-07-15", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-07-14", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-07-13", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-07-12", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-07-11", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-07-10", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-07-09", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-07-08", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-07-07", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-07-06", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-07-05", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-07-04", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-07-03", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-07-02", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-07-01", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-06-30", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-06-29", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-06-28", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-06-27", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-06-26", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-06-25", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-06-24", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-06-23", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-06-22", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-06-21", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-06-20", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-06-19", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-06-18", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-06-17", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-06-16", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-06-15", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-06-14", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-06-13", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-06-12", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-06-11", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-06-10", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-06-09", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-06-08", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-06-07", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-06-06", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-06-05", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-06-04", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-06-03", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-06-02", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-06-01", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-05-31", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-05-30", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-05-29", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-05-28", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-05-27", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-05-26", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-05-25", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-05-24", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-05-23", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-05-22", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-05-21", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-05-20", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-05-19", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-05-18", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-05-17", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-05-16", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-05-15", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-05-14", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-05-13", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-05-12", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-05-11", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-05-10", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-05-09", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-05-08", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-05-07", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-05-06", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-05-05", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-05-04", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-05-03", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-05-02", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-05-01", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-04-30", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-04-29", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-04-28", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-04-27", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-04-26", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-04-25", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-04-24", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-04-23", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-04-22", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-04-21", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-04-20", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-04-19", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-04-18", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-04-17", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-04-16", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-04-15", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-04-14", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-04-13", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-04-12", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-04-11", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-04-10", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-04-09", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-04-08", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-04-07", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-04-06", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-04-05", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-04-04", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-04-03", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-04-02", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-04-01", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-03-31", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-03-30", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-03-29", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-03-28", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-03-27", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-03-26", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-03-25", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-03-24", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-03-23", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-03-22", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-03-21", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-03-20", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-03-19", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-03-18", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-03-17", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-03-16", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-03-15", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-03-14", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-03-13", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-03-12", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-03-11", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-03-10", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-03-09", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-03-08", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-03-07", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-03-06", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-03-05", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-03-04", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-03-03", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-03-02", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-03-01", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-02-28", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-02-27", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-02-26", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-02-25", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-02-24", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-02-23", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-02-22", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-02-21", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-02-20", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-02-19", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-02-18", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-02-17", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-02-16", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-02-15", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-02-14", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-02-13", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-02-12", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-02-11", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-02-10", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-02-09", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-02-08", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-02-07", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-02-06", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-02-05", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-02-04", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-02-03", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-02-02", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-02-01", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-01-31", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-01-30", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-01-29", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-01-28", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-01-27", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-01-26", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-01-25", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-01-24", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-01-23", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-01-22", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-01-21", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-01-20", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-01-19", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-01-18", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-01-17", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-01-16", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-01-15", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-01-14", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-01-13", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-01-12", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-01-11", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-01-10", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-01-09", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-01-08", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-01-07", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-01-06", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-01-05", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-01-04", + "count": 11, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-01-03", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-01-02", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2026-01-01", + "count": 0, + "color": "#216e39", + "intensity": "4" + }, + { + "date": "2025-12-31", + "count": 0, + "color": "#216e39", + "intensity": "4" + }, + { + "date": "2025-12-30", + "count": 0, + "color": "#30a14e", + "intensity": "3" + }, + { + "date": "2025-12-29", + "count": 0, + "color": "#40c463", + "intensity": "2" + }, + { + "date": "2025-12-28", + "count": 0, + "color": "#216e39", + "intensity": "4" + }, + { + "date": "2025-12-27", + "count": 0, + "color": "#9be9a8", + "intensity": "1" + }, + { + "date": "2025-12-26", + "count": 0, + "color": "#216e39", + "intensity": "4" + }, + { + "date": "2025-12-25", + "count": 0, + "color": "#9be9a8", + "intensity": "1" + }, + { + "date": "2025-12-24", + "count": 0, + "color": "#216e39", + "intensity": "4" + }, + { + "date": "2025-12-23", + "count": 0, + "color": "#40c463", + "intensity": "2" + }, + { + "date": "2025-12-22", + "count": 0, + "color": "#216e39", + "intensity": "4" + }, + { + "date": "2025-12-21", + "count": 0, + "color": "#216e39", + "intensity": "4" + }, + { + "date": "2025-12-20", + "count": 0, + "color": "#216e39", + "intensity": "4" + }, + { + "date": "2025-12-19", + "count": 0, + "color": "#9be9a8", + "intensity": "1" + }, + { + "date": "2025-12-18", + "count": 0, + "color": "#30a14e", + "intensity": "3" + }, + { + "date": "2025-12-17", + "count": 0, + "color": "#40c463", + "intensity": "2" + }, + { + "date": "2025-12-16", + "count": 0, + "color": "#9be9a8", + "intensity": "1" + }, + { + "date": "2025-12-15", + "count": 0, + "color": "#40c463", + "intensity": "2" + }, + { + "date": "2025-12-14", + "count": 0, + "color": "#9be9a8", + "intensity": "1" + }, + { + "date": "2025-12-13", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-12-12", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-12-11", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-12-10", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-12-09", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-12-08", + "count": 0, + "color": "#9be9a8", + "intensity": "1" + }, + { + "date": "2025-12-07", + "count": 0, + "color": "#40c463", + "intensity": "2" + }, + { + "date": "2025-12-06", + "count": 0, + "color": "#9be9a8", + "intensity": "1" + }, + { + "date": "2025-12-05", + "count": 0, + "color": "#9be9a8", + "intensity": "1" + }, + { + "date": "2025-12-04", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-12-03", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-12-02", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-12-01", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-11-30", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-11-29", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-11-28", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-11-27", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-11-26", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-11-25", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-11-24", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-11-23", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-11-22", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-11-21", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-11-20", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-11-19", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-11-18", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-11-17", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-11-16", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-11-15", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-11-14", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-11-13", + "count": 0, + "color": "#9be9a8", + "intensity": "1" + }, + { + "date": "2025-11-12", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-11-11", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-11-10", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-11-09", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-11-08", + "count": 0, + "color": "#9be9a8", + "intensity": "1" + }, + { + "date": "2025-11-07", + "count": 0, + "color": "#9be9a8", + "intensity": "1" + }, + { + "date": "2025-11-06", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-11-05", + "count": 0, + "color": "#9be9a8", + "intensity": "1" + }, + { + "date": "2025-11-04", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-11-03", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-11-02", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-11-01", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-10-31", + "count": 0, + "color": "#9be9a8", + "intensity": "1" + }, + { + "date": "2025-10-30", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-10-29", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-10-28", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-10-27", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-10-26", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-10-25", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-10-24", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-10-23", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-10-22", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-10-21", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-10-20", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-10-19", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-10-18", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-10-17", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-10-16", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-10-15", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-10-14", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-10-13", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-10-12", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-10-11", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-10-10", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-10-09", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-10-08", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-10-07", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-10-06", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-10-05", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-10-04", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-10-03", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-10-02", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-10-01", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-09-30", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-09-29", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-09-28", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-09-27", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-09-26", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-09-25", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-09-24", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-09-23", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-09-22", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-09-21", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-09-20", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-09-19", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-09-18", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-09-17", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-09-16", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-09-15", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-09-14", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-09-13", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-09-12", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-09-11", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-09-10", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-09-09", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-09-08", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-09-07", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-09-06", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-09-05", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-09-04", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-09-03", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-09-02", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-09-01", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-08-31", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-08-30", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-08-29", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-08-28", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-08-27", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-08-26", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-08-25", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-08-24", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-08-23", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-08-22", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-08-21", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-08-20", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-08-19", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-08-18", + "count": 0, + "color": "#9be9a8", + "intensity": "1" + }, + { + "date": "2025-08-17", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-08-16", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-08-15", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-08-14", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-08-13", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-08-12", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-08-11", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-08-10", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-08-09", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-08-08", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-08-07", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-08-06", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-08-05", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-08-04", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-08-03", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-08-02", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-08-01", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-07-31", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-07-30", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-07-29", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-07-28", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-07-27", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-07-26", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-07-25", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-07-24", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-07-23", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-07-22", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-07-21", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-07-20", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-07-19", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-07-18", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-07-17", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-07-16", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-07-15", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-07-14", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-07-13", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-07-12", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-07-11", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-07-10", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-07-09", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-07-08", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-07-07", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-07-06", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-07-05", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-07-04", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-07-03", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-07-02", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-07-01", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-06-30", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-06-29", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-06-28", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-06-27", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-06-26", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-06-25", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-06-24", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-06-23", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-06-22", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-06-21", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-06-20", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-06-19", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-06-18", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-06-17", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-06-16", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-06-15", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-06-14", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-06-13", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-06-12", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-06-11", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-06-10", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-06-09", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-06-08", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-06-07", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-06-06", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-06-05", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-06-04", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-06-03", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-06-02", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-06-01", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-05-31", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-05-30", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-05-29", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-05-28", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-05-27", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-05-26", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-05-25", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-05-24", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-05-23", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-05-22", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-05-21", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-05-20", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-05-19", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-05-18", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-05-17", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-05-16", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-05-15", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-05-14", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-05-13", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-05-12", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-05-11", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-05-10", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-05-09", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-05-08", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-05-07", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-05-06", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-05-05", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-05-04", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-05-03", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-05-02", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-05-01", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-04-30", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-04-29", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-04-28", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-04-27", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-04-26", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-04-25", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-04-24", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-04-23", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-04-22", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-04-21", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-04-20", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-04-19", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-04-18", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-04-17", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-04-16", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-04-15", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-04-14", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-04-13", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-04-12", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-04-11", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-04-10", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-04-09", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-04-08", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-04-07", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-04-06", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-04-05", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-04-04", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-04-03", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-04-02", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-04-01", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-03-31", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-03-30", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-03-29", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-03-28", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-03-27", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-03-26", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-03-25", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-03-24", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-03-23", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-03-22", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-03-21", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-03-20", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-03-19", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-03-18", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-03-17", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-03-16", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-03-15", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-03-14", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-03-13", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-03-12", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-03-11", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-03-10", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-03-09", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-03-08", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-03-07", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-03-06", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-03-05", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-03-04", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-03-03", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-03-02", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-03-01", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-02-28", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-02-27", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-02-26", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-02-25", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-02-24", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-02-23", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-02-22", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-02-21", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-02-20", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-02-19", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-02-18", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-02-17", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-02-16", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-02-15", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-02-14", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-02-13", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-02-12", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-02-11", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-02-10", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-02-09", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-02-08", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-02-07", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-02-06", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-02-05", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-02-04", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-02-03", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-02-02", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-02-01", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-01-31", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-01-30", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-01-29", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-01-28", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-01-27", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-01-26", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-01-25", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-01-24", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-01-23", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-01-22", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-01-21", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-01-20", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-01-19", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-01-18", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-01-17", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-01-16", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-01-15", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-01-14", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-01-13", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-01-12", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-01-11", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-01-10", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-01-09", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-01-08", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-01-07", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-01-06", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-01-05", + "count": 574, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-01-04", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-01-03", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-01-02", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2025-01-01", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-12-31", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-12-30", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-12-29", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-12-28", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-12-27", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-12-26", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-12-25", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-12-24", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-12-23", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-12-22", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-12-21", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-12-20", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-12-19", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-12-18", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-12-17", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-12-16", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-12-15", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-12-14", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-12-13", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-12-12", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-12-11", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-12-10", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-12-09", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-12-08", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-12-07", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-12-06", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-12-05", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-12-04", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-12-03", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-12-02", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-12-01", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-11-30", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-11-29", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-11-28", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-11-27", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-11-26", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-11-25", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-11-24", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-11-23", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-11-22", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-11-21", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-11-20", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-11-19", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-11-18", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-11-17", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-11-16", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-11-15", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-11-14", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-11-13", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-11-12", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-11-11", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-11-10", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-11-09", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-11-08", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-11-07", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-11-06", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-11-05", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-11-04", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-11-03", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-11-02", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-11-01", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-10-31", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-10-30", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-10-29", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-10-28", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-10-27", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-10-26", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-10-25", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-10-24", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-10-23", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-10-22", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-10-21", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-10-20", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-10-19", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-10-18", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-10-17", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-10-16", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-10-15", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-10-14", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-10-13", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-10-12", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-10-11", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-10-10", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-10-09", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-10-08", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-10-07", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-10-06", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-10-05", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-10-04", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-10-03", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-10-02", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-10-01", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-09-30", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-09-29", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-09-28", + "count": 0, + "color": "#9be9a8", + "intensity": "1" + }, + { + "date": "2024-09-27", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-09-26", + "count": 0, + "color": "#216e39", + "intensity": "4" + }, + { + "date": "2024-09-25", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-09-24", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-09-23", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-09-22", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-09-21", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-09-20", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-09-19", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-09-18", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-09-17", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-09-16", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-09-15", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-09-14", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-09-13", + "count": 0, + "color": "#9be9a8", + "intensity": "1" + }, + { + "date": "2024-09-12", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-09-11", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-09-10", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-09-09", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-09-08", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-09-07", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-09-06", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-09-05", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-09-04", + "count": 0, + "color": "#9be9a8", + "intensity": "1" + }, + { + "date": "2024-09-03", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-09-02", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-09-01", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-08-31", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-08-30", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-08-29", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-08-28", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-08-27", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-08-26", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-08-25", + "count": 0, + "color": "#216e39", + "intensity": "4" + }, + { + "date": "2024-08-24", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-08-23", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-08-22", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-08-21", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-08-20", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-08-19", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-08-18", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-08-17", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-08-16", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-08-15", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-08-14", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-08-13", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-08-12", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-08-11", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-08-10", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-08-09", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-08-08", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-08-07", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-08-06", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-08-05", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-08-04", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-08-03", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-08-02", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-08-01", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-07-31", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-07-30", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-07-29", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-07-28", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-07-27", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-07-26", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-07-25", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-07-24", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-07-23", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-07-22", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-07-21", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-07-20", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-07-19", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-07-18", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-07-17", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-07-16", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-07-15", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-07-14", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-07-13", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-07-12", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-07-11", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-07-10", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-07-09", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-07-08", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-07-07", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-07-06", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-07-05", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-07-04", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-07-03", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-07-02", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-07-01", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-06-30", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-06-29", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-06-28", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-06-27", + "count": 0, + "color": "#216e39", + "intensity": "4" + }, + { + "date": "2024-06-26", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-06-25", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-06-24", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-06-23", + "count": 0, + "color": "#216e39", + "intensity": "4" + }, + { + "date": "2024-06-22", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-06-21", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-06-20", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-06-19", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-06-18", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-06-17", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-06-16", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-06-15", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-06-14", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-06-13", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-06-12", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-06-11", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-06-10", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-06-09", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-06-08", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-06-07", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-06-06", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-06-05", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-06-04", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-06-03", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-06-02", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-06-01", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-05-31", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-05-30", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-05-29", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-05-28", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-05-27", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-05-26", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-05-25", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-05-24", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-05-23", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-05-22", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-05-21", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-05-20", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-05-19", + "count": 0, + "color": "#40c463", + "intensity": "2" + }, + { + "date": "2024-05-18", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-05-17", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-05-16", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-05-15", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-05-14", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-05-13", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-05-12", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-05-11", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-05-10", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-05-09", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-05-08", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-05-07", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-05-06", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-05-05", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-05-04", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-05-03", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-05-02", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-05-01", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-04-30", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-04-29", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-04-28", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-04-27", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-04-26", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-04-25", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-04-24", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-04-23", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-04-22", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-04-21", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-04-20", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-04-19", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-04-18", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-04-17", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-04-16", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-04-15", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-04-14", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-04-13", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-04-12", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-04-11", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-04-10", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-04-09", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-04-08", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-04-07", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-04-06", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-04-05", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-04-04", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-04-03", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-04-02", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-04-01", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-03-31", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-03-30", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-03-29", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-03-28", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-03-27", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-03-26", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-03-25", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-03-24", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-03-23", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-03-22", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-03-21", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-03-20", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-03-19", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-03-18", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-03-17", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-03-16", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-03-15", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-03-14", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-03-13", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-03-12", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-03-11", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-03-10", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-03-09", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-03-08", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-03-07", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-03-06", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-03-05", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-03-04", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-03-03", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-03-02", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-03-01", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-02-29", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-02-28", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-02-27", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-02-26", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-02-25", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-02-24", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-02-23", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-02-22", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-02-21", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-02-20", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-02-19", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-02-18", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-02-17", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-02-16", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-02-15", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-02-14", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-02-13", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-02-12", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-02-11", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-02-10", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-02-09", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-02-08", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-02-07", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-02-06", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-02-05", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-02-04", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-02-03", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-02-02", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-02-01", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-01-31", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-01-30", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-01-29", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-01-28", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-01-27", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-01-26", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-01-25", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-01-24", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-01-23", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-01-22", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-01-21", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-01-20", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-01-19", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-01-18", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-01-17", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-01-16", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-01-15", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-01-14", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-01-13", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-01-12", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-01-11", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-01-10", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-01-09", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-01-08", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-01-07", + "count": 42, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-01-06", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-01-05", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-01-04", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-01-03", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-01-02", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2024-01-01", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-12-31", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-12-30", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-12-29", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-12-28", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-12-27", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-12-26", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-12-25", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-12-24", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-12-23", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-12-22", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-12-21", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-12-20", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-12-19", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-12-18", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-12-17", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-12-16", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-12-15", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-12-14", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-12-13", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-12-12", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-12-11", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-12-10", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-12-09", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-12-08", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-12-07", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-12-06", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-12-05", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-12-04", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-12-03", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-12-02", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-12-01", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-11-30", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-11-29", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-11-28", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-11-27", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-11-26", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-11-25", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-11-24", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-11-23", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-11-22", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-11-21", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-11-20", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-11-19", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-11-18", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-11-17", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-11-16", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-11-15", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-11-14", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-11-13", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-11-12", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-11-11", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-11-10", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-11-09", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-11-08", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-11-07", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-11-06", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-11-05", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-11-04", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-11-03", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-11-02", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-11-01", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-10-31", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-10-30", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-10-29", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-10-28", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-10-27", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-10-26", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-10-25", + "count": 0, + "color": "#216e39", + "intensity": "4" + }, + { + "date": "2023-10-24", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-10-23", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-10-22", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-10-21", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-10-20", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-10-19", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-10-18", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-10-17", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-10-16", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-10-15", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-10-14", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-10-13", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-10-12", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-10-11", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-10-10", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-10-09", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-10-08", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-10-07", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-10-06", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-10-05", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-10-04", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-10-03", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-10-02", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-10-01", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-09-30", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-09-29", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-09-28", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-09-27", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-09-26", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-09-25", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-09-24", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-09-23", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-09-22", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-09-21", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-09-20", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-09-19", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-09-18", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-09-17", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-09-16", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-09-15", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-09-14", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-09-13", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-09-12", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-09-11", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-09-10", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-09-09", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-09-08", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-09-07", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-09-06", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-09-05", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-09-04", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-09-03", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-09-02", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-09-01", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-08-31", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-08-30", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-08-29", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-08-28", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-08-27", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-08-26", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-08-25", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-08-24", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-08-23", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-08-22", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-08-21", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-08-20", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-08-19", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-08-18", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-08-17", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-08-16", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-08-15", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-08-14", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-08-13", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-08-12", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-08-11", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-08-10", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-08-09", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-08-08", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-08-07", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-08-06", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-08-05", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-08-04", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-08-03", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-08-02", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-08-01", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-07-31", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-07-30", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-07-29", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-07-28", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-07-27", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-07-26", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-07-25", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-07-24", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-07-23", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-07-22", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-07-21", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-07-20", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-07-19", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-07-18", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-07-17", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-07-16", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-07-15", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-07-14", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-07-13", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-07-12", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-07-11", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-07-10", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-07-09", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-07-08", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-07-07", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-07-06", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-07-05", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-07-04", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-07-03", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-07-02", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-07-01", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-06-30", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-06-29", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-06-28", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-06-27", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-06-26", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-06-25", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-06-24", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-06-23", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-06-22", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-06-21", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-06-20", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-06-19", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-06-18", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-06-17", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-06-16", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-06-15", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-06-14", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-06-13", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-06-12", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-06-11", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-06-10", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-06-09", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-06-08", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-06-07", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-06-06", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-06-05", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-06-04", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-06-03", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-06-02", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-06-01", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-05-31", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-05-30", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-05-29", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-05-28", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-05-27", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-05-26", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-05-25", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-05-24", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-05-23", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-05-22", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-05-21", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-05-20", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-05-19", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-05-18", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-05-17", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-05-16", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-05-15", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-05-14", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-05-13", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-05-12", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-05-11", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-05-10", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-05-09", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-05-08", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-05-07", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-05-06", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-05-05", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-05-04", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-05-03", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-05-02", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-05-01", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-04-30", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-04-29", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-04-28", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-04-27", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-04-26", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-04-25", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-04-24", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-04-23", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-04-22", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-04-21", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-04-20", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-04-19", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-04-18", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-04-17", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-04-16", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-04-15", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-04-14", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-04-13", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-04-12", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-04-11", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-04-10", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-04-09", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-04-08", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-04-07", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-04-06", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-04-05", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-04-04", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-04-03", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-04-02", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-04-01", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-03-31", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-03-30", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-03-29", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-03-28", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-03-27", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-03-26", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-03-25", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-03-24", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-03-23", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-03-22", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-03-21", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-03-20", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-03-19", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-03-18", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-03-17", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-03-16", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-03-15", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-03-14", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-03-13", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-03-12", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-03-11", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-03-10", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-03-09", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-03-08", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-03-07", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-03-06", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-03-05", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-03-04", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-03-03", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-03-02", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-03-01", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-02-28", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-02-27", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-02-26", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-02-25", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-02-24", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-02-23", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-02-22", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-02-21", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-02-20", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-02-19", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-02-18", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-02-17", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-02-16", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-02-15", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-02-14", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-02-13", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-02-12", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-02-11", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-02-10", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-02-09", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-02-08", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-02-07", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-02-06", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-02-05", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-02-04", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-02-03", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-02-02", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-02-01", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-01-31", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-01-30", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-01-29", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-01-28", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-01-27", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-01-26", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-01-25", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-01-24", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-01-23", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-01-22", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-01-21", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-01-20", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-01-19", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-01-18", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-01-17", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-01-16", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-01-15", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-01-14", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-01-13", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-01-12", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-01-11", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-01-10", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-01-09", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-01-08", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-01-07", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-01-06", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-01-05", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-01-04", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-01-03", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-01-02", + "count": 0, + "color": "#ebedf0", + "intensity": "0" + }, + { + "date": "2023-01-01", + "count": 1, + "color": "#ebedf0", + "intensity": "0" + } + ] +} \ No newline at end of file diff --git a/mock_data/mock_github_user_meta.json b/mock_data/mock_github_user_meta.json new file mode 100644 index 00000000..f7956429 --- /dev/null +++ b/mock_data/mock_github_user_meta.json @@ -0,0 +1,8 @@ +{ + "disk_usage": null, + "hireable": true, + "public_repos": 22, + "owned_private_repos": null, + "login": "DataBoySu", + "node_id": "U_kgDOCOE38w" +} \ No newline at end of file diff --git a/mock_data/mock_wakatime_stats.json b/mock_data/mock_wakatime_stats.json new file mode 100644 index 00000000..1e691655 --- /dev/null +++ b/mock_data/mock_wakatime_stats.json @@ -0,0 +1,630 @@ +{ + "data": { + "id": "523b03d1-9891-4c36-bc4c-51d144400349", + "user_id": "597563fa-f79e-4061-9fdd-b6b1dcdd05f1", + "range": "last_7_days", + "start": "2025-12-24T18:30:00Z", + "end": "2025-12-31T18:29:59Z", + "timeout": 15, + "writes_only": false, + "timezone": "Asia/Kolkata", + "holidays": 0, + "status": "ok", + "created_at": "2025-12-31T23:02:40Z", + "modified_at": "2025-12-31T23:02:49Z", + "total_seconds": 188721.547, + "categories": [ + { + "name": "Coding", + "total_seconds": 127216.56, + "percent": 66.93, + "digital": "35:20", + "decimal": "35.33", + "text": "35 hrs 20 mins", + "hours": 35, + "minutes": 20 + }, + { + "name": "Writing Docs", + "total_seconds": 55625.421, + "percent": 29.27, + "digital": "15:27", + "decimal": "15.45", + "text": "15 hrs 27 mins", + "hours": 15, + "minutes": 27 + }, + { + "name": "AI Coding", + "total_seconds": 6824.613, + "percent": 3.59, + "digital": "1:53", + "decimal": "1.88", + "text": "1 hr 53 mins", + "hours": 1, + "minutes": 53 + }, + { + "name": "Writing Tests", + "total_seconds": 406.135, + "percent": 0.21, + "digital": "0:06", + "decimal": "0.10", + "text": "6 mins", + "hours": 0, + "minutes": 6 + } + ], + "is_up_to_date": true, + "is_already_updating": false, + "percent_calculated": 100, + "total_seconds_including_other_language": 190072.729, + "editors": [ + { + "total_seconds": 190072.729, + "name": "VS Code", + "percent": 100.0, + "digital": "52:47", + "decimal": "52.78", + "text": "52 hrs 47 mins", + "hours": 52, + "minutes": 47 + } + ], + "daily_average_including_other_language": 27153.0, + "human_readable_daily_average": "7 hrs 29 mins", + "daily_average": 26960.0, + "human_readable_daily_average_including_other_language": "7 hrs 32 mins", + "is_stuck": false, + "days_including_holidays": 7, + "machines": [ + { + "total_seconds": 190072.729, + "name": "WinWorkstation", + "machine_name_id": "6c19f20a-bec4-442a-8bab-b9e3f8beed9b", + "percent": 100.0, + "digital": "52:47", + "decimal": "52.78", + "text": "52 hrs 47 mins", + "hours": 52, + "minutes": 47 + } + ], + "projects": [ + { + "total_seconds": 78956.482, + "name": "cluster-health-monitor", + "percent": 41.54, + "digital": "21:55", + "decimal": "21.92", + "text": "21 hrs 55 mins", + "hours": 21, + "minutes": 55 + }, + { + "total_seconds": 48383.625, + "name": "waka-readme-stats", + "percent": 25.46, + "digital": "13:26", + "decimal": "13.43", + "text": "13 hrs 26 mins", + "hours": 13, + "minutes": 26 + }, + { + "total_seconds": 39838.069, + "name": "readme-translator-action", + "percent": 20.96, + "digital": "11:03", + "decimal": "11.05", + "text": "11 hrs 3 mins", + "hours": 11, + "minutes": 3 + }, + { + "total_seconds": 13548.075, + "name": "databoysu-readme-translator", + "percent": 7.13, + "digital": "3:45", + "decimal": "3.75", + "text": "3 hrs 45 mins", + "hours": 3, + "minutes": 45 + }, + { + "total_seconds": 5754.991, + "name": "GitHub_readme", + "percent": 3.03, + "digital": "1:35", + "decimal": "1.58", + "text": "1 hr 35 mins", + "hours": 1, + "minutes": 35 + }, + { + "total_seconds": 1883.624, + "name": "myGPU", + "percent": 0.99, + "digital": "0:31", + "decimal": "0.52", + "text": "31 mins", + "hours": 0, + "minutes": 31 + }, + { + "total_seconds": 654.452, + "name": "contrib", + "percent": 0.34, + "digital": "0:10", + "decimal": "0.17", + "text": "10 mins", + "hours": 0, + "minutes": 10 + }, + { + "total_seconds": 591.807, + "name": "Vibe_Programming", + "percent": 0.31, + "digital": "0:09", + "decimal": "0.15", + "text": "9 mins", + "hours": 0, + "minutes": 9 + }, + { + "total_seconds": 461.604, + "name": "DeepCool Replacement", + "percent": 0.24, + "digital": "0:07", + "decimal": "0.12", + "text": "7 mins", + "hours": 0, + "minutes": 7 + } + ], + "operating_systems": [ + { + "total_seconds": 190072.729, + "name": "Windows", + "percent": 100.0, + "digital": "52:47", + "decimal": "52.78", + "text": "52 hrs 47 mins", + "hours": 52, + "minutes": 47 + } + ], + "languages": [ + { + "name": "Python", + "total_seconds": 92447.19, + "percent": 48.64, + "digital": "25:40", + "decimal": "25.67", + "text": "25 hrs 40 mins", + "hours": 25, + "minutes": 40 + }, + { + "name": "Markdown", + "total_seconds": 56814.189, + "percent": 29.89, + "digital": "15:46", + "decimal": "15.77", + "text": "15 hrs 46 mins", + "hours": 15, + "minutes": 46 + }, + { + "name": "YAML", + "total_seconds": 28976.914, + "percent": 15.25, + "digital": "8:02", + "decimal": "8.03", + "text": "8 hrs 2 mins", + "hours": 8, + "minutes": 2 + }, + { + "name": "Text", + "total_seconds": 9070.157, + "percent": 4.77, + "digital": "2:31", + "decimal": "2.52", + "text": "2 hrs 31 mins", + "hours": 2, + "minutes": 31 + }, + { + "name": "Other", + "total_seconds": 1351.182, + "percent": 0.71, + "digital": "0:22", + "decimal": "0.37", + "text": "22 mins", + "hours": 0, + "minutes": 22 + }, + { + "name": "Bash", + "total_seconds": 1102.277, + "percent": 0.58, + "digital": "0:18", + "decimal": "0.30", + "text": "18 mins", + "hours": 0, + "minutes": 18 + }, + { + "name": "Git Config", + "total_seconds": 147.788, + "percent": 0.08, + "digital": "0:02", + "decimal": "0.03", + "text": "2 mins", + "hours": 0, + "minutes": 2 + }, + { + "name": "PowerShell", + "total_seconds": 131.278, + "percent": 0.07, + "digital": "0:02", + "decimal": "0.03", + "text": "2 mins", + "hours": 0, + "minutes": 2 + }, + { + "name": "JSON", + "total_seconds": 25.122, + "percent": 0.01, + "digital": "0:00", + "decimal": "0.00", + "text": "0 secs", + "hours": 0, + "minutes": 0 + }, + { + "name": "Git", + "total_seconds": 6.632, + "percent": 0.0, + "digital": "0:00", + "decimal": "0.00", + "text": "0 secs", + "hours": 0, + "minutes": 0 + } + ], + "best_day": { + "date": "2025-12-27", + "total_seconds": 49302.027, + "text": "13 hrs 41 mins" + }, + "human_readable_total": "52 hrs 25 mins", + "human_readable_total_including_other_language": "52 hrs 47 mins", + "days_minus_holidays": 7, + "is_up_to_date_pending_future": false, + "dependencies": [ + { + "total_seconds": 87245.763, + "name": "re", + "percent": 31.11, + "digital": "24:14", + "decimal": "24.23", + "text": "24 hrs 14 mins", + "hours": 24, + "minutes": 14 + }, + { + "total_seconds": 86291.8, + "name": "argparse", + "percent": 30.77, + "digital": "23:58", + "decimal": "23.97", + "text": "23 hrs 58 mins", + "hours": 23, + "minutes": 58 + }, + { + "total_seconds": 50795.203, + "name": "openai", + "percent": 18.11, + "digital": "14:06", + "decimal": "14.10", + "text": "14 hrs 6 mins", + "hours": 14, + "minutes": 6 + }, + { + "total_seconds": 35732.381, + "name": "llama_cpp", + "percent": 12.74, + "digital": "9:55", + "decimal": "9.92", + "text": "9 hrs 55 mins", + "hours": 9, + "minutes": 55 + }, + { + "total_seconds": 4050.469, + "name": "time", + "percent": 1.44, + "digital": "1:07", + "decimal": "1.12", + "text": "1 hr 7 mins", + "hours": 1, + "minutes": 7 + }, + { + "total_seconds": 1916.668, + "name": "typing", + "percent": 0.68, + "digital": "0:31", + "decimal": "0.52", + "text": "31 mins", + "hours": 0, + "minutes": 31 + }, + { + "total_seconds": 1728.177, + "name": "hashlib", + "percent": 0.62, + "digital": "0:28", + "decimal": "0.47", + "text": "28 mins", + "hours": 0, + "minutes": 28 + }, + { + "total_seconds": 1604.299, + "name": "mistune", + "percent": 0.57, + "digital": "0:26", + "decimal": "0.43", + "text": "26 mins", + "hours": 0, + "minutes": 26 + }, + { + "total_seconds": 1167.105, + "name": "logging", + "percent": 0.42, + "digital": "0:19", + "decimal": "0.32", + "text": "19 mins", + "hours": 0, + "minutes": 19 + }, + { + "total_seconds": 1167.105, + "name": "pathlib", + "percent": 0.42, + "digital": "0:19", + "decimal": "0.32", + "text": "19 mins", + "hours": 0, + "minutes": 19 + }, + { + "total_seconds": 1167.105, + "name": "e", + "percent": 0.42, + "digital": "0:19", + "decimal": "0.32", + "text": "19 mins", + "hours": 0, + "minutes": 19 + }, + { + "total_seconds": 982.102, + "name": "uuid", + "percent": 0.35, + "digital": "0:16", + "decimal": "0.27", + "text": "16 mins", + "hours": 0, + "minutes": 16 + }, + { + "total_seconds": 896.49, + "name": "json", + "percent": 0.32, + "digital": "0:14", + "decimal": "0.23", + "text": "14 mins", + "hours": 0, + "minutes": 14 + }, + { + "total_seconds": 732.191, + "name": "urllib", + "percent": 0.26, + "digital": "0:12", + "decimal": "0.20", + "text": "12 mins", + "hours": 0, + "minutes": 12 + }, + { + "total_seconds": 646.006, + "name": "traceback", + "percent": 0.23, + "digital": "0:10", + "decimal": "0.17", + "text": "10 mins", + "hours": 0, + "minutes": 10 + }, + { + "total_seconds": 568.377, + "name": "yaml", + "percent": 0.2, + "digital": "0:09", + "decimal": "0.15", + "text": "9 mins", + "hours": 0, + "minutes": 9 + }, + { + "total_seconds": 568.377, + "name": "manager_debug", + "percent": 0.2, + "digital": "0:09", + "decimal": "0.15", + "text": "9 mins", + "hours": 0, + "minutes": 9 + }, + { + "total_seconds": 568.377, + "name": "asyncio", + "percent": 0.2, + "digital": "0:09", + "decimal": "0.15", + "text": "9 mins", + "hours": 0, + "minutes": 9 + }, + { + "total_seconds": 568.377, + "name": "httpx", + "percent": 0.2, + "digital": "0:09", + "decimal": "0.15", + "text": "9 mins", + "hours": 0, + "minutes": 9 + }, + { + "total_seconds": 568.377, + "name": "manager_environment", + "percent": 0.2, + "digital": "0:09", + "decimal": "0.15", + "text": "9 mins", + "hours": 0, + "minutes": 9 + }, + { + "total_seconds": 568.377, + "name": "string", + "percent": 0.2, + "digital": "0:09", + "decimal": "0.15", + "text": "9 mins", + "hours": 0, + "minutes": 9 + }, + { + "total_seconds": 548.551, + "name": "collections", + "percent": 0.2, + "digital": "0:09", + "decimal": "0.15", + "text": "9 mins", + "hours": 0, + "minutes": 9 + }, + { + "total_seconds": 217.378, + "name": "readme_translator_action", + "percent": 0.08, + "digital": "0:03", + "decimal": "0.05", + "text": "3 mins", + "hours": 0, + "minutes": 3 + }, + { + "total_seconds": 150.415, + "name": "translate_seg", + "percent": 0.05, + "digital": "0:02", + "decimal": "0.03", + "text": "2 mins", + "hours": 0, + "minutes": 2 + }, + { + "total_seconds": 3.488, + "name": "_sitebuiltins", + "percent": 0.0, + "digital": "0:00", + "decimal": "0.00", + "text": "0 secs", + "hours": 0, + "minutes": 0 + }, + { + "total_seconds": 3.488, + "name": "_ast", + "percent": 0.0, + "digital": "0:00", + "decimal": "0.00", + "text": "0 secs", + "hours": 0, + "minutes": 0 + }, + { + "total_seconds": 3.488, + "name": "io", + "percent": 0.0, + "digital": "0:00", + "decimal": "0.00", + "text": "0 secs", + "hours": 0, + "minutes": 0 + }, + { + "total_seconds": 3.488, + "name": "types", + "percent": 0.0, + "digital": "0:00", + "decimal": "0.00", + "text": "0 secs", + "hours": 0, + "minutes": 0 + }, + { + "total_seconds": 3.488, + "name": "_collections_abc", + "percent": 0.0, + "digital": "0:00", + "decimal": "0.00", + "text": "0 secs", + "hours": 0, + "minutes": 0 + }, + { + "total_seconds": 3.488, + "name": "typing_extensions", + "percent": 0.0, + "digital": "0:00", + "decimal": "0.00", + "text": "0 secs", + "hours": 0, + "minutes": 0 + }, + { + "total_seconds": 3.488, + "name": "_typeshed", + "percent": 0.0, + "digital": "0:00", + "decimal": "0.00", + "text": "0 secs", + "hours": 0, + "minutes": 0 + } + ], + "is_cached": true, + "username": null, + "is_including_today": false, + "human_readable_range": "last week", + "is_coding_activity_visible": false, + "is_language_usage_visible": false, + "is_editor_usage_visible": false, + "is_category_usage_visible": false, + "is_os_usage_visible": false + } +} \ No newline at end of file diff --git a/sources/manager_download.py b/sources/manager_download.py index fcce79f6..8e2fdef5 100644 --- a/sources/manager_download.py +++ b/sources/manager_download.py @@ -1,6 +1,8 @@ import asyncio from hashlib import md5 from json import dumps +from json import load as json_load +from os.path import join from string import Template from typing import Awaitable, Dict, Callable, Optional, List, Tuple @@ -121,6 +123,14 @@ async def init_download_manager(user_login: str): :param user_login: GitHub user login. """ + if EM.MOCK_WAKATIME: + DownloadManager._REMOTE_RESOURCES_CACHE["waka_latest"] = DownloadManager._load_mock_json("mock_wakatime_stats.json") + # `waka_all` is optional; if present, also load it so SHOW_TOTAL_CODE_TIME can be enabled. + try: + DownloadManager._REMOTE_RESOURCES_CACHE["waka_all"] = DownloadManager._load_mock_json("mock_wakatime_all_time.json") + except FileNotFoundError: + pass + await DownloadManager.load_remote_resources( linguist="https://cdn.jsdelivr.net/gh/github/linguist@master/lib/linguist/languages.yml", waka_latest=f"{EM.WAKATIME_API_URL}users/current/stats/last_7_days?api_key={EM.WAKATIME_API_KEY}", @@ -144,6 +154,12 @@ class DownloadManager: _client = AsyncClient(timeout=60.0) _REMOTE_RESOURCES_CACHE = dict() + @staticmethod + def _load_mock_json(filename: str) -> Dict: + path = join(EM.MOCK_DATA_DIR, filename) + with open(path, "r", encoding="utf-8") as f: + return json_load(f) + @staticmethod async def load_remote_resources(**resources: str): """ @@ -151,6 +167,11 @@ async def load_remote_resources(**resources: str): :param resources: Static queries, formatted like "IDENTIFIER"="URL". """ for resource, url in resources.items(): + # If a resource is already cached as a parsed Dict (e.g. mocked WakaTime JSON), + # do not overwrite it with a scheduled HTTP request. + existing = DownloadManager._REMOTE_RESOURCES_CACHE.get(resource) + if isinstance(existing, Dict): + continue # Schedule the coroutine as a Task so it can be cancelled/inspected later DownloadManager._REMOTE_RESOURCES_CACHE[resource] = asyncio.create_task(DownloadManager._client.get(url)) @@ -189,6 +210,10 @@ async def _get_remote_resource(resource: str, convertor: Optional[Callable[[byte By default `response.json()` is used. :return: Response dictionary or None. """ + cached = DownloadManager._REMOTE_RESOURCES_CACHE.get(resource) + if isinstance(cached, Dict): + return cached + DBM.i(f"\tMaking a remote API query named '{resource}'...") if isinstance(DownloadManager._REMOTE_RESOURCES_CACHE[resource], Awaitable): res = await DownloadManager._REMOTE_RESOURCES_CACHE[resource] diff --git a/sources/manager_environment.py b/sources/manager_environment.py index 4119d98a..c992287a 100644 --- a/sources/manager_environment.py +++ b/sources/manager_environment.py @@ -13,12 +13,19 @@ class EnvironmentManager: _TRUTHY = ["true", "1", "t", "y", "yes"] + # Mocking is supported only for WakaTime (to avoid requiring a WakaTime key in PR CI). + MOCK_WAKATIME = getenv("MOCK_WAKATIME", "False").lower() in _TRUTHY + MOCK_DATA_DIR = getenv("MOCK_DATA_DIR", "mock_data") + GH_TOKEN = environ["INPUT_GH_TOKEN"] - WAKATIME_API_KEY = environ["INPUT_WAKATIME_API_KEY"] + WAKATIME_API_KEY = getenv("INPUT_WAKATIME_API_KEY", "") WAKATIME_API_URL = getenv("INPUT_WAKATIME_API_URL", "https://wakatime.com/api/v1/") if not WAKATIME_API_URL.endswith("/"): WAKATIME_API_URL += "/" + if not MOCK_WAKATIME and WAKATIME_API_KEY == "": + raise KeyError("Missing required secret: INPUT_WAKATIME_API_KEY") + SECTION_NAME = getenv("INPUT_SECTION_NAME", "waka") PULL_BRANCH_NAME = getenv("INPUT_PULL_BRANCH_NAME", "") PUSH_BRANCH_NAME = getenv("INPUT_PUSH_BRANCH_NAME", "") diff --git a/sources/manager_github.py b/sources/manager_github.py index 57cc80d0..b05ea254 100644 --- a/sources/manager_github.py +++ b/sources/manager_github.py @@ -47,12 +47,18 @@ def prepare_github_env(): github = Github(EM.GH_TOKEN) clone_path = "repo" GitHubManager.USER = github.get_user() - rmtree(clone_path, ignore_errors=True) GitHubManager._REMOTE_NAME = f"{GitHubManager.USER.login}/{GitHubManager.USER.login}" GitHubManager._REPO_PATH = f"https://{EM.GH_TOKEN}@github.com/{GitHubManager._REMOTE_NAME}.git" - GitHubManager.REMOTE = github.get_repo(GitHubManager._REMOTE_NAME) + + # In DEBUG_RUN mode (used by PR CI), do not clone/push anything. + # We only need API access for reading metadata and producing output. + if EM.DEBUG_RUN: + GitHubManager.REPO = None + return + + rmtree(clone_path, ignore_errors=True) GitHubManager.REPO = Repo.clone_from(GitHubManager._REPO_PATH, to_path=clone_path) if EM.COMMIT_SINGLE: From 6da363eb71cc7262d8f12057e198484b07e78bd1 Mon Sep 17 00:00:00 2001 From: Anshuman Singh <148977651+DataBoySu@users.noreply.github.com> Date: Tue, 13 Jan 2026 15:08:31 +0530 Subject: [PATCH 05/46] dirty feature added --- .github/workflows/ci.yml | 27 +++------------------------ .github/workflows/ci_pr.yml | 8 ++++---- sources/main.py | 9 ++++++--- sources/manager_download.py | 5 ++--- sources/manager_environment.py | 4 +++- sources/manager_github.py | 14 ++++++++++---- 6 files changed, 28 insertions(+), 39 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2d5251ad..40433920 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,7 +21,7 @@ jobs: steps: - name: Checkout πŸ›ŽοΈ - uses: actions/checkout@v6 + uses: actions/checkout@v4 - name: Detect changed paths id: filter @@ -54,7 +54,7 @@ jobs: - name: Setup Python 3.13 🐍 if: ${{ steps.filter.outputs.code == 'true' }} - uses: actions/setup-python@v6 + uses: actions/setup-python@v5 with: python-version: 3.13 cache: 'pip' @@ -67,18 +67,13 @@ jobs: if: ${{ steps.filter.outputs.code == 'true' }} run: mkdir assets - - name: Create Previous Comments 🫣 - if: ${{ steps.filter.outputs.code == 'true' }} - uses: int128/hide-comment-action@v1 - with: - starts-with: "README stats current output:" - - name: Run Action Preview on Current Code πŸ§ͺ if: ${{ steps.filter.outputs.code == 'true' }} id: make-stats env: INPUT_GH_TOKEN: ${{ secrets.INPUT_GITHUB_TOKEN }} INPUT_WAKATIME_API_KEY: ${{ secrets.WAKATIME_API_KEY }} + DEBUG_RUN: True INPUT_SHOW_TIMEZONE: True INPUT_SHOW_PROJECTS: True INPUT_SHOW_EDITORS: True @@ -97,19 +92,3 @@ jobs: INPUT_COMMIT_BY_ME: True run: python3 sources/main.py - - - name: Save Branch Name Without Slashes πŸ“› - if: ${{ github.ref != 'refs/heads/master' && github.ref != 'refs/heads/main' }} - env: - BRANCH_NAME: ${{ github.head_ref || github.ref_name }} - run: | - BRANCH_NAME=${{ env.BRANCH_NAME }} - BRANCH_NAME=${BRANCH_NAME////_} - echo BRANCH_NAME=${BRANCH_NAME} >> $GITHUB_ENV - - - name: Upload Artifact πŸ“¦ - if: ${{ github.ref != 'refs/heads/master' && github.ref != 'refs/heads/main' }} - uses: actions/upload-artifact@v6 - with: - name: ${{ format('github-pages-for-branch-{0}', env.BRANCH_NAME) }} - path: assets diff --git a/.github/workflows/ci_pr.yml b/.github/workflows/ci_pr.yml index ef58a111..3624f1e8 100644 --- a/.github/workflows/ci_pr.yml +++ b/.github/workflows/ci_pr.yml @@ -74,10 +74,10 @@ jobs: DEBUG_RUN: True INPUT_DEBUG_LOGGING: True - # Real GitHub token. For forks, contributors must run this in their fork. - INPUT_GH_TOKEN: ${{ secrets.INPUT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} + INPUT_GH_TOKEN: ${{ github.token }} + # Stats of the PR Author are generated, not owner's + INPUT_GH_USER: ${{ github.event.pull_request.user.login }} - # Comprehensive feature flags INPUT_SYMBOL_VERSION: 1 INPUT_SHOW_TIMEZONE: True INPUT_SHOW_PROJECTS: True @@ -86,7 +86,7 @@ jobs: INPUT_SHOW_LANGUAGE: True INPUT_SHOW_LINES_OF_CODE: True INPUT_SHOW_LOC_CHART: True - INPUT_SHOW_PROFILE_VIEWS: True + INPUT_SHOW_PROFILE_VIEWS: False INPUT_SHOW_TOTAL_CODE_TIME: True INPUT_SHOW_SHORT_INFO: True INPUT_SHOW_COMMIT: True diff --git a/sources/main.py b/sources/main.py index 2abe4916..c9d8f761 100644 --- a/sources/main.py +++ b/sources/main.py @@ -175,9 +175,12 @@ async def get_stats() -> str: stats += f"![Code Time](http://img.shields.io/badge/{quote('Code Time')}-{quote(str(data['data']['text']))}-blue?style={quote(EM.BADGE_STYLE)})\n\n" if EM.SHOW_PROFILE_VIEWS: - DBM.i("Adding profile views info...") - data = GHM.REMOTE.get_views_traffic(per="week") - stats += f"![Profile Views](http://img.shields.io/badge/{quote(FM.t('Profile Views'))}-{data['count']}-blue?style={quote(EM.BADGE_STYLE)})\n\n" + if EM.DEBUG_RUN or GHM.REMOTE is None: + DBM.w("Profile views skipped in DEBUG_RUN mode.") + else: + DBM.i("Adding profile views info...") + data = GHM.REMOTE.get_views_traffic(per="week") + stats += f"![Profile Views](http://img.shields.io/badge/{quote(FM.t('Profile Views'))}-{data['count']}-blue?style={quote(EM.BADGE_STYLE)})\n\n" if EM.SHOW_LINES_OF_CODE: DBM.i("Adding lines of code info...") diff --git a/sources/manager_download.py b/sources/manager_download.py index 8e2fdef5..eec9c85f 100644 --- a/sources/manager_download.py +++ b/sources/manager_download.py @@ -125,7 +125,7 @@ async def init_download_manager(user_login: str): """ if EM.MOCK_WAKATIME: DownloadManager._REMOTE_RESOURCES_CACHE["waka_latest"] = DownloadManager._load_mock_json("mock_wakatime_stats.json") - # `waka_all` is optional; if present, also load it so SHOW_TOTAL_CODE_TIME can be enabled. + try: DownloadManager._REMOTE_RESOURCES_CACHE["waka_all"] = DownloadManager._load_mock_json("mock_wakatime_all_time.json") except FileNotFoundError: @@ -167,8 +167,7 @@ async def load_remote_resources(**resources: str): :param resources: Static queries, formatted like "IDENTIFIER"="URL". """ for resource, url in resources.items(): - # If a resource is already cached as a parsed Dict (e.g. mocked WakaTime JSON), - # do not overwrite it with a scheduled HTTP request. + # Use mock instead of live existing = DownloadManager._REMOTE_RESOURCES_CACHE.get(resource) if isinstance(existing, Dict): continue diff --git a/sources/manager_environment.py b/sources/manager_environment.py index c992287a..74ab48f2 100644 --- a/sources/manager_environment.py +++ b/sources/manager_environment.py @@ -13,11 +13,13 @@ class EnvironmentManager: _TRUTHY = ["true", "1", "t", "y", "yes"] - # Mocking is supported only for WakaTime (to avoid requiring a WakaTime key in PR CI). + # Mocking with my stats for waka MOCK_WAKATIME = getenv("MOCK_WAKATIME", "False").lower() in _TRUTHY MOCK_DATA_DIR = getenv("MOCK_DATA_DIR", "mock_data") GH_TOKEN = environ["INPUT_GH_TOKEN"] + # stats for the author or the one with the token + GH_USER = getenv("INPUT_GH_USER", "").strip() WAKATIME_API_KEY = getenv("INPUT_WAKATIME_API_KEY", "") WAKATIME_API_URL = getenv("INPUT_WAKATIME_API_URL", "https://wakatime.com/api/v1/") if not WAKATIME_API_URL.endswith("/"): diff --git a/sources/manager_github.py b/sources/manager_github.py index b05ea254..5fab4b4e 100644 --- a/sources/manager_github.py +++ b/sources/manager_github.py @@ -46,18 +46,24 @@ def prepare_github_env(): """ github = Github(EM.GH_TOKEN) clone_path = "repo" - GitHubManager.USER = github.get_user() + + # In PR CI we generate author's stats from impicit github token; remove cred need + if EM.GH_USER: + GitHubManager.USER = github.get_user(EM.GH_USER) + else: + GitHubManager.USER = github.get_user() GitHubManager._REMOTE_NAME = f"{GitHubManager.USER.login}/{GitHubManager.USER.login}" GitHubManager._REPO_PATH = f"https://{EM.GH_TOKEN}@github.com/{GitHubManager._REMOTE_NAME}.git" - GitHubManager.REMOTE = github.get_repo(GitHubManager._REMOTE_NAME) - # In DEBUG_RUN mode (used by PR CI), do not clone/push anything. - # We only need API access for reading metadata and producing output. + # In DEBUG_RUN mode, nothing is pushed nor run if EM.DEBUG_RUN: + GitHubManager.REMOTE = None GitHubManager.REPO = None return + GitHubManager.REMOTE = github.get_repo(GitHubManager._REMOTE_NAME) + rmtree(clone_path, ignore_errors=True) GitHubManager.REPO = Repo.clone_from(GitHubManager._REPO_PATH, to_path=clone_path) From 7845aa4e6c764ed8ceeb9f781e42827bdae8be5f Mon Sep 17 00:00:00 2001 From: Anshuman Singh <148977651+DataBoySu@users.noreply.github.com> Date: Tue, 13 Jan 2026 15:25:28 +0530 Subject: [PATCH 06/46] fix pr exclusions --- .github/workflows/ci.yml | 6 +----- .github/workflows/ci_pr.yml | 3 ++- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 40433920..32186bb5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -33,18 +33,14 @@ jobs: docs: - 'locales/**' - 'README.md' - - 'README*.md' - 'LICENSE' - 'CONTRIBUTING.md' - 'CODE_OF_CONDUCT.md' - 'sources/translation.json' - - 'scripts/zh.txt' + - 'mock_data/**' code: - 'sources/**' - '!sources/translation.json' - - 'scripts/**' - - '!scripts/zh.txt' - - 'waka-readme-stats/**' - '.github/workflows/**' - name: Docs-only change (skip) diff --git a/.github/workflows/ci_pr.yml b/.github/workflows/ci_pr.yml index 3624f1e8..fec14eea 100644 --- a/.github/workflows/ci_pr.yml +++ b/.github/workflows/ci_pr.yml @@ -43,7 +43,8 @@ jobs: p === 'LICENSE' || p === 'CONTRIBUTING.md' || p === 'CODE_OF_CONDUCT.md' || - p === 'sources/translation.json' + p === 'sources/translation.json' || + p.startsWith('mock_data/') ) const codeChanged = paths.some(p => !isDoc(p)) From 5d61e92a951a34de17a8617c20c8edb53b9bd776 Mon Sep 17 00:00:00 2001 From: Anshuman Singh <148977651+DataBoySu@users.noreply.github.com> Date: Tue, 13 Jan 2026 15:27:34 +0530 Subject: [PATCH 07/46] fix ci naming --- .github/workflows/ci.yml | 2 +- .github/workflows/ci_pr.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 32186bb5..1899bee6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,4 +1,4 @@ -name: CI +name: CI_MASTER on: push: diff --git a/.github/workflows/ci_pr.yml b/.github/workflows/ci_pr.yml index fec14eea..aaf4c8a8 100644 --- a/.github/workflows/ci_pr.yml +++ b/.github/workflows/ci_pr.yml @@ -1,4 +1,4 @@ -name: CI +name: CI_PR on: pull_request: From 7c4ed283816192385c89990a8a1918f469558120 Mon Sep 17 00:00:00 2001 From: Anshuman Singh <148977651+DataBoySu@users.noreply.github.com> Date: Tue, 13 Jan 2026 16:14:07 +0530 Subject: [PATCH 08/46] finalize dual ci --- .github/workflows/ci.yml | 22 +- .github/workflows/ci_pr.yml | 33 +- mock_data/mock_github_contributed.json | 336 - mock_data/mock_github_repos.json | 152 - mock_data/mock_github_stats.json | 8804 ----------------- mock_data/mock_github_user_meta.json | 8 - sources/main.py | 5 +- sources/manager_environment.py | 18 +- .../mock_data}/mock_wakatime_stats.json | 0 9 files changed, 70 insertions(+), 9308 deletions(-) delete mode 100644 mock_data/mock_github_contributed.json delete mode 100644 mock_data/mock_github_repos.json delete mode 100644 mock_data/mock_github_stats.json delete mode 100644 mock_data/mock_github_user_meta.json rename {mock_data => sources/mock_data}/mock_wakatime_stats.json (100%) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1899bee6..f6d4e790 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -37,10 +37,11 @@ jobs: - 'CONTRIBUTING.md' - 'CODE_OF_CONDUCT.md' - 'sources/translation.json' - - 'mock_data/**' + - 'sources/mock_data/**' code: - 'sources/**' - '!sources/translation.json' + - '!sources/mock_data/**' - '.github/workflows/**' - name: Docs-only change (skip) @@ -67,9 +68,10 @@ jobs: if: ${{ steps.filter.outputs.code == 'true' }} id: make-stats env: - INPUT_GH_TOKEN: ${{ secrets.INPUT_GITHUB_TOKEN }} + INPUT_GH_TOKEN: ${{ secrets.INPUT_GITHUB_TOKEN || secrets.GITHUB_TOKEN || github.token }} INPUT_WAKATIME_API_KEY: ${{ secrets.WAKATIME_API_KEY }} DEBUG_RUN: True + INPUT_STRICT_GITHUB: True INPUT_SHOW_TIMEZONE: True INPUT_SHOW_PROJECTS: True INPUT_SHOW_EDITORS: True @@ -88,3 +90,19 @@ jobs: INPUT_COMMIT_BY_ME: True run: python3 sources/main.py + + - name: Save Branch Name Without Slashes πŸ“› + if: ${{ steps.filter.outputs.code == 'true' }} + env: + BRANCH_NAME: ${{ github.ref_name }} + run: | + BRANCH_NAME=${{ env.BRANCH_NAME }} + BRANCH_NAME=${BRANCH_NAME////_} + echo BRANCH_NAME=${BRANCH_NAME} >> $GITHUB_ENV + + - name: Upload Artifact πŸ“¦ + if: ${{ steps.filter.outputs.code == 'true' }} + uses: actions/upload-artifact@v4 + with: + name: ${{ format('assets-{0}', github.ref_name) }} + path: assets diff --git a/.github/workflows/ci_pr.yml b/.github/workflows/ci_pr.yml index aaf4c8a8..2fc9035e 100644 --- a/.github/workflows/ci_pr.yml +++ b/.github/workflows/ci_pr.yml @@ -10,7 +10,8 @@ concurrency: permissions: contents: read - pull-requests: read + issues: write + pull-requests: write jobs: ci: @@ -44,7 +45,7 @@ jobs: p === 'CONTRIBUTING.md' || p === 'CODE_OF_CONDUCT.md' || p === 'sources/translation.json' || - p.startsWith('mock_data/') + p.startsWith('sources/mock_data/') ) const codeChanged = paths.some(p => !isDoc(p)) @@ -67,11 +68,18 @@ jobs: if: ${{ steps.changed.outputs.code == 'true' }} run: pip install -r requirements.txt + - name: Hide previous preview comments 🫣 + if: ${{ steps.changed.outputs.code == 'true' && github.event.pull_request.head.repo.full_name == github.repository }} + uses: int128/hide-comment-action@v1 + with: + starts-with: "README stats current output:" + - name: Run comprehensive CI (real GitHub, mock WakaTime) πŸ§ͺ if: ${{ steps.changed.outputs.code == 'true' }} + id: make-stats env: MOCK_WAKATIME: True - MOCK_DATA_DIR: mock_data + MOCK_DATA_DIR: sources/mock_data DEBUG_RUN: True INPUT_DEBUG_LOGGING: True @@ -96,3 +104,22 @@ jobs: INPUT_SHOW_UPDATED_DATE: True run: python3 sources/main.py + + - name: Comment preview output πŸ’¬ + if: ${{ steps.changed.outputs.code == 'true' && github.event.pull_request.head.repo.full_name == github.repository }} + uses: actions/github-script@v7 + env: + README_CONTENT: ${{ steps.make-stats.outputs.README_CONTENT }} + with: + script: | + const body = process.env.README_CONTENT + if (!body || body.trim().length === 0) { + core.warning('No README_CONTENT output found; skipping comment.') + return + } + await github.rest.issues.createComment({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.payload.pull_request.number, + body, + }) diff --git a/mock_data/mock_github_contributed.json b/mock_data/mock_github_contributed.json deleted file mode 100644 index e1aa7ec3..00000000 --- a/mock_data/mock_github_contributed.json +++ /dev/null @@ -1,336 +0,0 @@ -[ - { - "primaryLanguage": { - "name": "TypeScript" - }, - "name": "freeCodeCamp", - "owner": { - "login": "freeCodeCamp" - }, - "isPrivate": false, - "isFork": false - }, - { - "primaryLanguage": { - "name": "Python" - }, - "name": "starred", - "owner": { - "login": "maguowei" - }, - "isPrivate": false, - "isFork": false - }, - { - "primaryLanguage": null, - "name": "Bookmarks-Dook", - "owner": { - "login": "Dook1" - }, - "isPrivate": false, - "isFork": false - }, - { - "primaryLanguage": { - "name": "JavaScript" - }, - "name": "github-readme-stats", - "owner": { - "login": "anuraghazra" - }, - "isPrivate": false, - "isFork": false - }, - { - "primaryLanguage": { - "name": "Python" - }, - "name": "waka-readme-stats", - "owner": { - "login": "anmol098" - }, - "isPrivate": false, - "isFork": false - }, - { - "primaryLanguage": { - "name": "C++" - }, - "name": "elan-spi-fingerprint", - "owner": { - "login": "mincrmatt12" - }, - "isPrivate": false, - "isFork": false - }, - { - "primaryLanguage": { - "name": "PHP" - }, - "name": "readme-typing-svg", - "owner": { - "login": "DenverCoder1" - }, - "isPrivate": false, - "isFork": false - }, - { - "primaryLanguage": { - "name": "TypeScript" - }, - "name": "my-badges", - "owner": { - "login": "my-badges" - }, - "isPrivate": false, - "isFork": false - }, - { - "primaryLanguage": null, - "name": "DataBoySu", - "owner": { - "login": "DataBoySu" - }, - "isPrivate": false, - "isFork": false - }, - { - "primaryLanguage": { - "name": "JavaScript" - }, - "name": "github-readme-stats-fast", - "owner": { - "login": "Pranesh-2005" - }, - "isPrivate": false, - "isFork": false - }, - { - "primaryLanguage": { - "name": "Python" - }, - "name": "ToyCompiler", - "owner": { - "login": "DataBoySu" - }, - "isPrivate": false, - "isFork": false - }, - { - "primaryLanguage": null, - "name": "Resume", - "owner": { - "login": "DataBoySu" - }, - "isPrivate": false, - "isFork": false - }, - { - "primaryLanguage": null, - "name": "Agro_Project", - "owner": { - "login": "DataBoySu" - }, - "isPrivate": true, - "isFork": false - }, - { - "primaryLanguage": { - "name": "Python" - }, - "name": "MyGPU", - "owner": { - "login": "DataBoySu" - }, - "isPrivate": false, - "isFork": false - }, - { - "primaryLanguage": { - "name": "Python" - }, - "name": "visualization-playground", - "owner": { - "login": "DataBoySu" - }, - "isPrivate": false, - "isFork": false - }, - { - "primaryLanguage": null, - "name": "LocalSphere", - "owner": { - "login": "DataBoySu" - }, - "isPrivate": false, - "isFork": false - }, - { - "primaryLanguage": { - "name": "Jupyter Notebook" - }, - "name": "Data-Science-Projects", - "owner": { - "login": "DataBoySu" - }, - "isPrivate": false, - "isFork": false - }, - { - "primaryLanguage": { - "name": "PHP" - }, - "name": "readme-typing-svg", - "owner": { - "login": "DataBoySu" - }, - "isPrivate": false, - "isFork": true - }, - { - "primaryLanguage": { - "name": "Jupyter Notebook" - }, - "name": "DeepCool-AK620-Replacement-Software", - "owner": { - "login": "DataBoySu" - }, - "isPrivate": false, - "isFork": false - }, - { - "primaryLanguage": null, - "name": "AIO-github-profile-readme", - "owner": { - "login": "DataBoySu" - }, - "isPrivate": false, - "isFork": true - }, - { - "primaryLanguage": null, - "name": "Path-to-SWE", - "owner": { - "login": "DataBoySu" - }, - "isPrivate": false, - "isFork": true - }, - { - "primaryLanguage": null, - "name": "ai-log-analyzer", - "owner": { - "login": "DataBoySu" - }, - "isPrivate": false, - "isFork": true - }, - { - "primaryLanguage": { - "name": "Python" - }, - "name": "waka-readme-stats", - "owner": { - "login": "DataBoySu" - }, - "isPrivate": false, - "isFork": true - }, - { - "primaryLanguage": { - "name": "Python" - }, - "name": "databoysu-readme-translator", - "owner": { - "login": "DataBoySu" - }, - "isPrivate": false, - "isFork": false - }, - { - "primaryLanguage": { - "name": "JavaScript" - }, - "name": "readme-stats", - "owner": { - "login": "DataBoySu" - }, - "isPrivate": true, - "isFork": false - }, - { - "primaryLanguage": { - "name": "Shell" - }, - "name": "ohmyzsh", - "owner": { - "login": "DataBoySu" - }, - "isPrivate": false, - "isFork": true - }, - { - "primaryLanguage": { - "name": "Python" - }, - "name": "system-design-primer", - "owner": { - "login": "DataBoySu" - }, - "isPrivate": false, - "isFork": true - }, - { - "primaryLanguage": null, - "name": "start-machine-learning", - "owner": { - "login": "DataBoySu" - }, - "isPrivate": false, - "isFork": true - }, - { - "primaryLanguage": { - "name": "Python" - }, - "name": "professional-programming", - "owner": { - "login": "DataBoySu" - }, - "isPrivate": false, - "isFork": true - }, - { - "primaryLanguage": { - "name": "JavaScript" - }, - "name": "hackclub", - "owner": { - "login": "DataBoySu" - }, - "isPrivate": false, - "isFork": true - }, - { - "primaryLanguage": { - "name": "C++" - }, - "name": "llama.cpp", - "owner": { - "login": "DataBoySu" - }, - "isPrivate": false, - "isFork": true - }, - { - "primaryLanguage": { - "name": "TypeScript" - }, - "name": "device-activity-tracker", - "owner": { - "login": "DataBoySu" - }, - "isPrivate": false, - "isFork": true - } -] \ No newline at end of file diff --git a/mock_data/mock_github_repos.json b/mock_data/mock_github_repos.json deleted file mode 100644 index 58549d0d..00000000 --- a/mock_data/mock_github_repos.json +++ /dev/null @@ -1,152 +0,0 @@ -[ - { - "primaryLanguage": { - "name": "JavaScript" - }, - "name": "readme-stats", - "owner": { - "login": "DataBoySu" - }, - "isPrivate": true - }, - { - "primaryLanguage": { - "name": "Python" - }, - "name": "databoysu-readme-translator", - "owner": { - "login": "DataBoySu" - }, - "isPrivate": false - }, - { - "primaryLanguage": { - "name": "Jupyter Notebook" - }, - "name": "DeepCool-AK620-Replacement-Software", - "owner": { - "login": "DataBoySu" - }, - "isPrivate": false - }, - { - "primaryLanguage": { - "name": "Jupyter Notebook" - }, - "name": "Data-Science-Projects", - "owner": { - "login": "DataBoySu" - }, - "isPrivate": false - }, - { - "primaryLanguage": null, - "name": "LocalSphere", - "owner": { - "login": "DataBoySu" - }, - "isPrivate": false - }, - { - "primaryLanguage": { - "name": "Python" - }, - "name": "visualization-playground", - "owner": { - "login": "DataBoySu" - }, - "isPrivate": false - }, - { - "primaryLanguage": { - "name": "Python" - }, - "name": "MyGPU", - "owner": { - "login": "DataBoySu" - }, - "isPrivate": false - }, - { - "primaryLanguage": null, - "name": "Agro_Project", - "owner": { - "login": "DataBoySu" - }, - "isPrivate": true - }, - { - "primaryLanguage": null, - "name": "Resume", - "owner": { - "login": "DataBoySu" - }, - "isPrivate": false - }, - { - "primaryLanguage": { - "name": "Python" - }, - "name": "ToyCompiler", - "owner": { - "login": "DataBoySu" - }, - "isPrivate": false - }, - { - "primaryLanguage": { - "name": "HTML" - }, - "name": "HTML-Practice", - "owner": { - "login": "DataBoySu" - }, - "isPrivate": false - }, - { - "primaryLanguage": { - "name": "Jupyter Notebook" - }, - "name": "AIFusion-24", - "owner": { - "login": "DataBoySu" - }, - "isPrivate": true - }, - { - "primaryLanguage": null, - "name": "desktop-tutorial", - "owner": { - "login": "DataBoySu" - }, - "isPrivate": true - }, - { - "primaryLanguage": { - "name": "Jupyter Notebook" - }, - "name": "Technohacks-24_Projects", - "owner": { - "login": "DataBoySu" - }, - "isPrivate": true - }, - { - "primaryLanguage": null, - "name": "DataBoySu", - "owner": { - "login": "DataBoySu" - }, - "isPrivate": false - }, - { - "primaryLanguage": { - "name": "Python" - }, - "name": "waka-readme-stats", - "owner": { - "login": "anmol098" - }, - "isPrivate": false - } -] \ No newline at end of file diff --git a/mock_data/mock_github_stats.json b/mock_data/mock_github_stats.json deleted file mode 100644 index 94e25026..00000000 --- a/mock_data/mock_github_stats.json +++ /dev/null @@ -1,8804 +0,0 @@ -{ - "years": [ - { - "year": "2026", - "total": 11, - "range": { - "start": "2026-01-04", - "end": "2026-12-26" - } - }, - { - "year": "2025", - "total": 574, - "range": { - "start": "2025-01-05", - "end": "2025-12-27" - } - }, - { - "year": "2024", - "total": 42, - "range": { - "start": "2024-01-07", - "end": "2024-12-28" - } - }, - { - "year": "2023", - "total": 1, - "range": { - "start": "2023-01-01", - "end": "2023-12-30" - } - } - ], - "contributions": [ - { - "date": "2026-12-31", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-12-30", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-12-29", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-12-28", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-12-27", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-12-26", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-12-25", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-12-24", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-12-23", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-12-22", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-12-21", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-12-20", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-12-19", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-12-18", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-12-17", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-12-16", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-12-15", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-12-14", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-12-13", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-12-12", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-12-11", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-12-10", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-12-09", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-12-08", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-12-07", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-12-06", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-12-05", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-12-04", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-12-03", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-12-02", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-12-01", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-11-30", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-11-29", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-11-28", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-11-27", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-11-26", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-11-25", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-11-24", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-11-23", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-11-22", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-11-21", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-11-20", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-11-19", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-11-18", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-11-17", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-11-16", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-11-15", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-11-14", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-11-13", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-11-12", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-11-11", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-11-10", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-11-09", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-11-08", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-11-07", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-11-06", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-11-05", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-11-04", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-11-03", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-11-02", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-11-01", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-10-31", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-10-30", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-10-29", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-10-28", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-10-27", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-10-26", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-10-25", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-10-24", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-10-23", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-10-22", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-10-21", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-10-20", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-10-19", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-10-18", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-10-17", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-10-16", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-10-15", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-10-14", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-10-13", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-10-12", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-10-11", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-10-10", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-10-09", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-10-08", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-10-07", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-10-06", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-10-05", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-10-04", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-10-03", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-10-02", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-10-01", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-09-30", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-09-29", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-09-28", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-09-27", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-09-26", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-09-25", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-09-24", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-09-23", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-09-22", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-09-21", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-09-20", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-09-19", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-09-18", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-09-17", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-09-16", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-09-15", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-09-14", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-09-13", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-09-12", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-09-11", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-09-10", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-09-09", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-09-08", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-09-07", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-09-06", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-09-05", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-09-04", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-09-03", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-09-02", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-09-01", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-08-31", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-08-30", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-08-29", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-08-28", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-08-27", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-08-26", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-08-25", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-08-24", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-08-23", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-08-22", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-08-21", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-08-20", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-08-19", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-08-18", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-08-17", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-08-16", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-08-15", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-08-14", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-08-13", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-08-12", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-08-11", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-08-10", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-08-09", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-08-08", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-08-07", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-08-06", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-08-05", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-08-04", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-08-03", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-08-02", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-08-01", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-07-31", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-07-30", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-07-29", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-07-28", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-07-27", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-07-26", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-07-25", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-07-24", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-07-23", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-07-22", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-07-21", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-07-20", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-07-19", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-07-18", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-07-17", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-07-16", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-07-15", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-07-14", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-07-13", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-07-12", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-07-11", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-07-10", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-07-09", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-07-08", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-07-07", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-07-06", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-07-05", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-07-04", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-07-03", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-07-02", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-07-01", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-06-30", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-06-29", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-06-28", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-06-27", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-06-26", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-06-25", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-06-24", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-06-23", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-06-22", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-06-21", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-06-20", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-06-19", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-06-18", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-06-17", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-06-16", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-06-15", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-06-14", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-06-13", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-06-12", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-06-11", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-06-10", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-06-09", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-06-08", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-06-07", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-06-06", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-06-05", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-06-04", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-06-03", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-06-02", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-06-01", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-05-31", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-05-30", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-05-29", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-05-28", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-05-27", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-05-26", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-05-25", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-05-24", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-05-23", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-05-22", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-05-21", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-05-20", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-05-19", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-05-18", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-05-17", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-05-16", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-05-15", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-05-14", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-05-13", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-05-12", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-05-11", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-05-10", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-05-09", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-05-08", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-05-07", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-05-06", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-05-05", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-05-04", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-05-03", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-05-02", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-05-01", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-04-30", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-04-29", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-04-28", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-04-27", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-04-26", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-04-25", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-04-24", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-04-23", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-04-22", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-04-21", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-04-20", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-04-19", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-04-18", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-04-17", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-04-16", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-04-15", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-04-14", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-04-13", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-04-12", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-04-11", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-04-10", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-04-09", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-04-08", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-04-07", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-04-06", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-04-05", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-04-04", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-04-03", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-04-02", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-04-01", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-03-31", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-03-30", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-03-29", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-03-28", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-03-27", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-03-26", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-03-25", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-03-24", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-03-23", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-03-22", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-03-21", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-03-20", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-03-19", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-03-18", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-03-17", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-03-16", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-03-15", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-03-14", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-03-13", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-03-12", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-03-11", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-03-10", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-03-09", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-03-08", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-03-07", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-03-06", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-03-05", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-03-04", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-03-03", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-03-02", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-03-01", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-02-28", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-02-27", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-02-26", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-02-25", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-02-24", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-02-23", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-02-22", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-02-21", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-02-20", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-02-19", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-02-18", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-02-17", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-02-16", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-02-15", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-02-14", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-02-13", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-02-12", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-02-11", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-02-10", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-02-09", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-02-08", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-02-07", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-02-06", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-02-05", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-02-04", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-02-03", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-02-02", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-02-01", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-01-31", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-01-30", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-01-29", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-01-28", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-01-27", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-01-26", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-01-25", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-01-24", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-01-23", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-01-22", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-01-21", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-01-20", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-01-19", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-01-18", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-01-17", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-01-16", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-01-15", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-01-14", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-01-13", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-01-12", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-01-11", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-01-10", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-01-09", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-01-08", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-01-07", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-01-06", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-01-05", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-01-04", - "count": 11, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-01-03", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-01-02", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2026-01-01", - "count": 0, - "color": "#216e39", - "intensity": "4" - }, - { - "date": "2025-12-31", - "count": 0, - "color": "#216e39", - "intensity": "4" - }, - { - "date": "2025-12-30", - "count": 0, - "color": "#30a14e", - "intensity": "3" - }, - { - "date": "2025-12-29", - "count": 0, - "color": "#40c463", - "intensity": "2" - }, - { - "date": "2025-12-28", - "count": 0, - "color": "#216e39", - "intensity": "4" - }, - { - "date": "2025-12-27", - "count": 0, - "color": "#9be9a8", - "intensity": "1" - }, - { - "date": "2025-12-26", - "count": 0, - "color": "#216e39", - "intensity": "4" - }, - { - "date": "2025-12-25", - "count": 0, - "color": "#9be9a8", - "intensity": "1" - }, - { - "date": "2025-12-24", - "count": 0, - "color": "#216e39", - "intensity": "4" - }, - { - "date": "2025-12-23", - "count": 0, - "color": "#40c463", - "intensity": "2" - }, - { - "date": "2025-12-22", - "count": 0, - "color": "#216e39", - "intensity": "4" - }, - { - "date": "2025-12-21", - "count": 0, - "color": "#216e39", - "intensity": "4" - }, - { - "date": "2025-12-20", - "count": 0, - "color": "#216e39", - "intensity": "4" - }, - { - "date": "2025-12-19", - "count": 0, - "color": "#9be9a8", - "intensity": "1" - }, - { - "date": "2025-12-18", - "count": 0, - "color": "#30a14e", - "intensity": "3" - }, - { - "date": "2025-12-17", - "count": 0, - "color": "#40c463", - "intensity": "2" - }, - { - "date": "2025-12-16", - "count": 0, - "color": "#9be9a8", - "intensity": "1" - }, - { - "date": "2025-12-15", - "count": 0, - "color": "#40c463", - "intensity": "2" - }, - { - "date": "2025-12-14", - "count": 0, - "color": "#9be9a8", - "intensity": "1" - }, - { - "date": "2025-12-13", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-12-12", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-12-11", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-12-10", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-12-09", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-12-08", - "count": 0, - "color": "#9be9a8", - "intensity": "1" - }, - { - "date": "2025-12-07", - "count": 0, - "color": "#40c463", - "intensity": "2" - }, - { - "date": "2025-12-06", - "count": 0, - "color": "#9be9a8", - "intensity": "1" - }, - { - "date": "2025-12-05", - "count": 0, - "color": "#9be9a8", - "intensity": "1" - }, - { - "date": "2025-12-04", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-12-03", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-12-02", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-12-01", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-11-30", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-11-29", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-11-28", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-11-27", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-11-26", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-11-25", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-11-24", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-11-23", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-11-22", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-11-21", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-11-20", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-11-19", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-11-18", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-11-17", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-11-16", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-11-15", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-11-14", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-11-13", - "count": 0, - "color": "#9be9a8", - "intensity": "1" - }, - { - "date": "2025-11-12", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-11-11", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-11-10", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-11-09", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-11-08", - "count": 0, - "color": "#9be9a8", - "intensity": "1" - }, - { - "date": "2025-11-07", - "count": 0, - "color": "#9be9a8", - "intensity": "1" - }, - { - "date": "2025-11-06", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-11-05", - "count": 0, - "color": "#9be9a8", - "intensity": "1" - }, - { - "date": "2025-11-04", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-11-03", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-11-02", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-11-01", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-10-31", - "count": 0, - "color": "#9be9a8", - "intensity": "1" - }, - { - "date": "2025-10-30", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-10-29", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-10-28", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-10-27", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-10-26", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-10-25", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-10-24", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-10-23", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-10-22", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-10-21", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-10-20", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-10-19", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-10-18", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-10-17", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-10-16", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-10-15", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-10-14", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-10-13", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-10-12", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-10-11", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-10-10", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-10-09", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-10-08", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-10-07", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-10-06", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-10-05", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-10-04", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-10-03", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-10-02", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-10-01", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-09-30", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-09-29", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-09-28", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-09-27", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-09-26", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-09-25", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-09-24", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-09-23", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-09-22", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-09-21", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-09-20", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-09-19", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-09-18", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-09-17", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-09-16", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-09-15", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-09-14", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-09-13", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-09-12", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-09-11", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-09-10", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-09-09", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-09-08", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-09-07", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-09-06", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-09-05", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-09-04", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-09-03", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-09-02", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-09-01", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-08-31", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-08-30", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-08-29", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-08-28", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-08-27", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-08-26", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-08-25", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-08-24", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-08-23", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-08-22", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-08-21", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-08-20", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-08-19", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-08-18", - "count": 0, - "color": "#9be9a8", - "intensity": "1" - }, - { - "date": "2025-08-17", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-08-16", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-08-15", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-08-14", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-08-13", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-08-12", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-08-11", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-08-10", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-08-09", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-08-08", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-08-07", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-08-06", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-08-05", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-08-04", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-08-03", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-08-02", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-08-01", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-07-31", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-07-30", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-07-29", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-07-28", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-07-27", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-07-26", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-07-25", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-07-24", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-07-23", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-07-22", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-07-21", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-07-20", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-07-19", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-07-18", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-07-17", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-07-16", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-07-15", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-07-14", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-07-13", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-07-12", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-07-11", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-07-10", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-07-09", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-07-08", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-07-07", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-07-06", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-07-05", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-07-04", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-07-03", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-07-02", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-07-01", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-06-30", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-06-29", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-06-28", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-06-27", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-06-26", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-06-25", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-06-24", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-06-23", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-06-22", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-06-21", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-06-20", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-06-19", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-06-18", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-06-17", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-06-16", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-06-15", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-06-14", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-06-13", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-06-12", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-06-11", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-06-10", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-06-09", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-06-08", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-06-07", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-06-06", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-06-05", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-06-04", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-06-03", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-06-02", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-06-01", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-05-31", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-05-30", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-05-29", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-05-28", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-05-27", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-05-26", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-05-25", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-05-24", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-05-23", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-05-22", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-05-21", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-05-20", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-05-19", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-05-18", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-05-17", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-05-16", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-05-15", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-05-14", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-05-13", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-05-12", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-05-11", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-05-10", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-05-09", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-05-08", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-05-07", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-05-06", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-05-05", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-05-04", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-05-03", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-05-02", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-05-01", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-04-30", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-04-29", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-04-28", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-04-27", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-04-26", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-04-25", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-04-24", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-04-23", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-04-22", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-04-21", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-04-20", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-04-19", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-04-18", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-04-17", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-04-16", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-04-15", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-04-14", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-04-13", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-04-12", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-04-11", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-04-10", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-04-09", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-04-08", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-04-07", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-04-06", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-04-05", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-04-04", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-04-03", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-04-02", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-04-01", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-03-31", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-03-30", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-03-29", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-03-28", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-03-27", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-03-26", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-03-25", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-03-24", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-03-23", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-03-22", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-03-21", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-03-20", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-03-19", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-03-18", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-03-17", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-03-16", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-03-15", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-03-14", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-03-13", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-03-12", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-03-11", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-03-10", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-03-09", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-03-08", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-03-07", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-03-06", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-03-05", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-03-04", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-03-03", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-03-02", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-03-01", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-02-28", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-02-27", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-02-26", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-02-25", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-02-24", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-02-23", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-02-22", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-02-21", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-02-20", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-02-19", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-02-18", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-02-17", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-02-16", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-02-15", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-02-14", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-02-13", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-02-12", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-02-11", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-02-10", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-02-09", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-02-08", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-02-07", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-02-06", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-02-05", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-02-04", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-02-03", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-02-02", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-02-01", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-01-31", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-01-30", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-01-29", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-01-28", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-01-27", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-01-26", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-01-25", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-01-24", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-01-23", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-01-22", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-01-21", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-01-20", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-01-19", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-01-18", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-01-17", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-01-16", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-01-15", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-01-14", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-01-13", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-01-12", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-01-11", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-01-10", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-01-09", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-01-08", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-01-07", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-01-06", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-01-05", - "count": 574, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-01-04", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-01-03", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-01-02", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2025-01-01", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-12-31", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-12-30", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-12-29", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-12-28", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-12-27", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-12-26", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-12-25", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-12-24", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-12-23", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-12-22", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-12-21", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-12-20", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-12-19", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-12-18", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-12-17", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-12-16", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-12-15", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-12-14", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-12-13", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-12-12", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-12-11", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-12-10", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-12-09", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-12-08", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-12-07", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-12-06", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-12-05", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-12-04", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-12-03", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-12-02", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-12-01", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-11-30", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-11-29", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-11-28", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-11-27", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-11-26", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-11-25", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-11-24", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-11-23", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-11-22", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-11-21", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-11-20", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-11-19", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-11-18", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-11-17", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-11-16", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-11-15", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-11-14", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-11-13", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-11-12", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-11-11", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-11-10", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-11-09", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-11-08", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-11-07", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-11-06", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-11-05", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-11-04", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-11-03", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-11-02", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-11-01", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-10-31", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-10-30", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-10-29", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-10-28", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-10-27", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-10-26", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-10-25", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-10-24", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-10-23", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-10-22", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-10-21", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-10-20", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-10-19", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-10-18", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-10-17", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-10-16", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-10-15", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-10-14", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-10-13", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-10-12", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-10-11", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-10-10", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-10-09", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-10-08", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-10-07", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-10-06", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-10-05", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-10-04", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-10-03", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-10-02", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-10-01", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-09-30", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-09-29", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-09-28", - "count": 0, - "color": "#9be9a8", - "intensity": "1" - }, - { - "date": "2024-09-27", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-09-26", - "count": 0, - "color": "#216e39", - "intensity": "4" - }, - { - "date": "2024-09-25", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-09-24", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-09-23", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-09-22", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-09-21", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-09-20", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-09-19", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-09-18", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-09-17", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-09-16", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-09-15", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-09-14", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-09-13", - "count": 0, - "color": "#9be9a8", - "intensity": "1" - }, - { - "date": "2024-09-12", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-09-11", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-09-10", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-09-09", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-09-08", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-09-07", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-09-06", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-09-05", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-09-04", - "count": 0, - "color": "#9be9a8", - "intensity": "1" - }, - { - "date": "2024-09-03", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-09-02", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-09-01", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-08-31", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-08-30", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-08-29", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-08-28", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-08-27", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-08-26", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-08-25", - "count": 0, - "color": "#216e39", - "intensity": "4" - }, - { - "date": "2024-08-24", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-08-23", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-08-22", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-08-21", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-08-20", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-08-19", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-08-18", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-08-17", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-08-16", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-08-15", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-08-14", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-08-13", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-08-12", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-08-11", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-08-10", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-08-09", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-08-08", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-08-07", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-08-06", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-08-05", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-08-04", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-08-03", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-08-02", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-08-01", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-07-31", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-07-30", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-07-29", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-07-28", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-07-27", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-07-26", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-07-25", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-07-24", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-07-23", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-07-22", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-07-21", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-07-20", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-07-19", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-07-18", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-07-17", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-07-16", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-07-15", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-07-14", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-07-13", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-07-12", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-07-11", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-07-10", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-07-09", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-07-08", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-07-07", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-07-06", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-07-05", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-07-04", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-07-03", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-07-02", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-07-01", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-06-30", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-06-29", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-06-28", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-06-27", - "count": 0, - "color": "#216e39", - "intensity": "4" - }, - { - "date": "2024-06-26", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-06-25", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-06-24", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-06-23", - "count": 0, - "color": "#216e39", - "intensity": "4" - }, - { - "date": "2024-06-22", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-06-21", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-06-20", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-06-19", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-06-18", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-06-17", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-06-16", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-06-15", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-06-14", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-06-13", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-06-12", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-06-11", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-06-10", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-06-09", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-06-08", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-06-07", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-06-06", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-06-05", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-06-04", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-06-03", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-06-02", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-06-01", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-05-31", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-05-30", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-05-29", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-05-28", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-05-27", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-05-26", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-05-25", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-05-24", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-05-23", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-05-22", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-05-21", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-05-20", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-05-19", - "count": 0, - "color": "#40c463", - "intensity": "2" - }, - { - "date": "2024-05-18", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-05-17", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-05-16", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-05-15", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-05-14", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-05-13", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-05-12", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-05-11", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-05-10", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-05-09", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-05-08", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-05-07", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-05-06", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-05-05", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-05-04", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-05-03", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-05-02", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-05-01", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-04-30", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-04-29", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-04-28", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-04-27", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-04-26", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-04-25", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-04-24", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-04-23", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-04-22", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-04-21", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-04-20", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-04-19", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-04-18", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-04-17", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-04-16", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-04-15", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-04-14", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-04-13", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-04-12", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-04-11", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-04-10", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-04-09", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-04-08", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-04-07", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-04-06", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-04-05", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-04-04", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-04-03", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-04-02", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-04-01", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-03-31", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-03-30", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-03-29", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-03-28", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-03-27", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-03-26", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-03-25", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-03-24", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-03-23", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-03-22", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-03-21", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-03-20", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-03-19", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-03-18", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-03-17", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-03-16", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-03-15", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-03-14", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-03-13", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-03-12", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-03-11", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-03-10", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-03-09", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-03-08", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-03-07", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-03-06", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-03-05", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-03-04", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-03-03", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-03-02", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-03-01", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-02-29", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-02-28", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-02-27", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-02-26", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-02-25", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-02-24", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-02-23", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-02-22", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-02-21", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-02-20", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-02-19", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-02-18", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-02-17", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-02-16", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-02-15", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-02-14", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-02-13", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-02-12", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-02-11", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-02-10", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-02-09", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-02-08", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-02-07", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-02-06", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-02-05", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-02-04", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-02-03", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-02-02", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-02-01", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-01-31", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-01-30", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-01-29", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-01-28", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-01-27", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-01-26", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-01-25", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-01-24", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-01-23", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-01-22", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-01-21", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-01-20", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-01-19", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-01-18", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-01-17", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-01-16", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-01-15", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-01-14", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-01-13", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-01-12", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-01-11", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-01-10", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-01-09", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-01-08", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-01-07", - "count": 42, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-01-06", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-01-05", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-01-04", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-01-03", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-01-02", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2024-01-01", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-12-31", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-12-30", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-12-29", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-12-28", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-12-27", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-12-26", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-12-25", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-12-24", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-12-23", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-12-22", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-12-21", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-12-20", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-12-19", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-12-18", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-12-17", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-12-16", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-12-15", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-12-14", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-12-13", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-12-12", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-12-11", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-12-10", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-12-09", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-12-08", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-12-07", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-12-06", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-12-05", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-12-04", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-12-03", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-12-02", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-12-01", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-11-30", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-11-29", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-11-28", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-11-27", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-11-26", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-11-25", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-11-24", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-11-23", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-11-22", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-11-21", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-11-20", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-11-19", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-11-18", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-11-17", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-11-16", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-11-15", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-11-14", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-11-13", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-11-12", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-11-11", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-11-10", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-11-09", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-11-08", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-11-07", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-11-06", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-11-05", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-11-04", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-11-03", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-11-02", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-11-01", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-10-31", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-10-30", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-10-29", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-10-28", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-10-27", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-10-26", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-10-25", - "count": 0, - "color": "#216e39", - "intensity": "4" - }, - { - "date": "2023-10-24", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-10-23", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-10-22", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-10-21", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-10-20", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-10-19", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-10-18", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-10-17", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-10-16", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-10-15", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-10-14", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-10-13", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-10-12", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-10-11", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-10-10", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-10-09", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-10-08", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-10-07", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-10-06", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-10-05", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-10-04", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-10-03", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-10-02", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-10-01", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-09-30", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-09-29", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-09-28", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-09-27", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-09-26", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-09-25", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-09-24", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-09-23", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-09-22", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-09-21", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-09-20", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-09-19", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-09-18", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-09-17", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-09-16", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-09-15", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-09-14", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-09-13", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-09-12", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-09-11", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-09-10", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-09-09", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-09-08", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-09-07", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-09-06", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-09-05", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-09-04", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-09-03", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-09-02", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-09-01", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-08-31", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-08-30", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-08-29", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-08-28", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-08-27", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-08-26", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-08-25", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-08-24", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-08-23", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-08-22", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-08-21", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-08-20", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-08-19", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-08-18", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-08-17", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-08-16", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-08-15", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-08-14", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-08-13", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-08-12", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-08-11", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-08-10", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-08-09", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-08-08", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-08-07", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-08-06", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-08-05", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-08-04", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-08-03", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-08-02", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-08-01", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-07-31", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-07-30", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-07-29", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-07-28", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-07-27", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-07-26", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-07-25", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-07-24", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-07-23", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-07-22", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-07-21", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-07-20", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-07-19", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-07-18", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-07-17", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-07-16", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-07-15", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-07-14", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-07-13", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-07-12", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-07-11", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-07-10", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-07-09", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-07-08", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-07-07", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-07-06", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-07-05", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-07-04", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-07-03", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-07-02", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-07-01", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-06-30", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-06-29", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-06-28", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-06-27", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-06-26", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-06-25", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-06-24", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-06-23", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-06-22", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-06-21", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-06-20", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-06-19", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-06-18", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-06-17", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-06-16", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-06-15", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-06-14", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-06-13", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-06-12", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-06-11", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-06-10", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-06-09", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-06-08", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-06-07", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-06-06", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-06-05", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-06-04", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-06-03", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-06-02", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-06-01", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-05-31", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-05-30", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-05-29", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-05-28", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-05-27", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-05-26", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-05-25", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-05-24", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-05-23", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-05-22", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-05-21", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-05-20", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-05-19", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-05-18", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-05-17", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-05-16", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-05-15", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-05-14", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-05-13", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-05-12", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-05-11", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-05-10", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-05-09", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-05-08", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-05-07", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-05-06", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-05-05", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-05-04", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-05-03", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-05-02", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-05-01", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-04-30", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-04-29", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-04-28", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-04-27", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-04-26", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-04-25", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-04-24", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-04-23", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-04-22", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-04-21", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-04-20", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-04-19", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-04-18", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-04-17", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-04-16", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-04-15", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-04-14", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-04-13", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-04-12", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-04-11", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-04-10", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-04-09", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-04-08", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-04-07", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-04-06", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-04-05", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-04-04", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-04-03", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-04-02", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-04-01", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-03-31", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-03-30", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-03-29", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-03-28", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-03-27", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-03-26", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-03-25", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-03-24", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-03-23", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-03-22", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-03-21", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-03-20", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-03-19", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-03-18", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-03-17", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-03-16", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-03-15", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-03-14", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-03-13", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-03-12", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-03-11", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-03-10", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-03-09", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-03-08", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-03-07", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-03-06", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-03-05", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-03-04", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-03-03", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-03-02", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-03-01", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-02-28", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-02-27", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-02-26", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-02-25", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-02-24", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-02-23", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-02-22", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-02-21", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-02-20", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-02-19", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-02-18", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-02-17", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-02-16", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-02-15", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-02-14", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-02-13", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-02-12", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-02-11", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-02-10", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-02-09", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-02-08", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-02-07", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-02-06", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-02-05", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-02-04", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-02-03", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-02-02", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-02-01", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-01-31", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-01-30", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-01-29", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-01-28", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-01-27", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-01-26", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-01-25", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-01-24", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-01-23", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-01-22", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-01-21", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-01-20", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-01-19", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-01-18", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-01-17", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-01-16", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-01-15", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-01-14", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-01-13", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-01-12", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-01-11", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-01-10", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-01-09", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-01-08", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-01-07", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-01-06", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-01-05", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-01-04", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-01-03", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-01-02", - "count": 0, - "color": "#ebedf0", - "intensity": "0" - }, - { - "date": "2023-01-01", - "count": 1, - "color": "#ebedf0", - "intensity": "0" - } - ] -} \ No newline at end of file diff --git a/mock_data/mock_github_user_meta.json b/mock_data/mock_github_user_meta.json deleted file mode 100644 index f7956429..00000000 --- a/mock_data/mock_github_user_meta.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "disk_usage": null, - "hireable": true, - "public_repos": 22, - "owned_private_repos": null, - "login": "DataBoySu", - "node_id": "U_kgDOCOE38w" -} \ No newline at end of file diff --git a/sources/main.py b/sources/main.py index c9d8f761..1539d44d 100644 --- a/sources/main.py +++ b/sources/main.py @@ -87,7 +87,10 @@ async def get_short_github_info() -> str: DBM.i("Adding user disk usage info...") if GHM.USER.disk_usage is None: disk_usage = FM.t("Used in GitHub's Storage") % "?" - DBM.p("Please add new github personal access token with user permission!") + msg = "Please add new github personal access token with user permission!" + if EM.STRICT_GITHUB: + raise RuntimeError(msg) + DBM.p(msg) else: disk_usage = FM.t("Used in GitHub's Storage") % naturalsize(GHM.USER.disk_usage) stats += f"> πŸ“¦ {disk_usage} \n > \n" diff --git a/sources/manager_environment.py b/sources/manager_environment.py index 74ab48f2..ffb6bf06 100644 --- a/sources/manager_environment.py +++ b/sources/manager_environment.py @@ -1,4 +1,4 @@ -from os import getenv, environ +from os import getenv class EnvironmentManager: @@ -17,9 +17,23 @@ class EnvironmentManager: MOCK_WAKATIME = getenv("MOCK_WAKATIME", "False").lower() in _TRUTHY MOCK_DATA_DIR = getenv("MOCK_DATA_DIR", "mock_data") - GH_TOKEN = environ["INPUT_GH_TOKEN"] + # GitHub token can come from multiple env var names depending on how the script is invoked. + # Priority: explicit action-style inputs first, then generic runner env vars. + GH_TOKEN = ( + getenv("INPUT_GH_TOKEN") + or getenv("INPUT_GITHUB_TOKEN") + or getenv("GH_TOKEN") + or getenv("GITHUB_TOKEN") + ) + if not GH_TOKEN: + raise KeyError("Missing required token: set INPUT_GH_TOKEN (or INPUT_GITHUB_TOKEN/GH_TOKEN/GITHUB_TOKEN)") + # stats for the author or the one with the token GH_USER = getenv("INPUT_GH_USER", "").strip() + + # When enabled, treat missing GitHub user-scope data as a hard failure. + # Intended for CI on protected branches. + STRICT_GITHUB = getenv("INPUT_STRICT_GITHUB", "False").lower() in _TRUTHY WAKATIME_API_KEY = getenv("INPUT_WAKATIME_API_KEY", "") WAKATIME_API_URL = getenv("INPUT_WAKATIME_API_URL", "https://wakatime.com/api/v1/") if not WAKATIME_API_URL.endswith("/"): diff --git a/mock_data/mock_wakatime_stats.json b/sources/mock_data/mock_wakatime_stats.json similarity index 100% rename from mock_data/mock_wakatime_stats.json rename to sources/mock_data/mock_wakatime_stats.json From 8f184568fe17a55cd363d4c163bb32203c7df961 Mon Sep 17 00:00:00 2001 From: Anshuman Singh <148977651+DataBoySu@users.noreply.github.com> Date: Tue, 13 Jan 2026 16:32:39 +0530 Subject: [PATCH 09/46] finalize dual ci --- .github/workflows/ci.yml | 11 ++++++++++- sources/main.py | 6 +++++- sources/manager_file.py | 9 +++++++-- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f6d4e790..77f09497 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -64,11 +64,20 @@ jobs: if: ${{ steps.filter.outputs.code == 'true' }} run: mkdir assets + - name: Verify GitHub token secret is configured πŸ” + if: ${{ steps.filter.outputs.code == 'true' }} + run: | + if [ -z "${{ secrets.INPUT_GITHUB_TOKEN }}" ]; then + echo "::error::Missing required secret INPUT_GITHUB_TOKEN (CI_MASTER does not use fallbacks)." + exit 1 + fi + echo "Using secret: INPUT_GITHUB_TOKEN" + - name: Run Action Preview on Current Code πŸ§ͺ if: ${{ steps.filter.outputs.code == 'true' }} id: make-stats env: - INPUT_GH_TOKEN: ${{ secrets.INPUT_GITHUB_TOKEN || secrets.GITHUB_TOKEN || github.token }} + INPUT_GH_TOKEN: ${{ secrets.INPUT_GITHUB_TOKEN }} INPUT_WAKATIME_API_KEY: ${{ secrets.WAKATIME_API_KEY }} DEBUG_RUN: True INPUT_STRICT_GITHUB: True diff --git a/sources/main.py b/sources/main.py index 1539d44d..00db8b3e 100644 --- a/sources/main.py +++ b/sources/main.py @@ -87,7 +87,11 @@ async def get_short_github_info() -> str: DBM.i("Adding user disk usage info...") if GHM.USER.disk_usage is None: disk_usage = FM.t("Used in GitHub's Storage") % "?" - msg = "Please add new github personal access token with user permission!" + msg = ( + "GitHub token does not have enough user/account permissions to read profile fields (disk_usage is null). " + "Provide a PAT with user/account read permissions (classic PAT: add 'user' scope; fine-grained PAT: enable Account/profile read), " + "or disable strict mode (INPUT_STRICT_GITHUB=False)." + ) if EM.STRICT_GITHUB: raise RuntimeError(msg) DBM.p(msg) diff --git a/sources/manager_file.py b/sources/manager_file.py index a207d466..986acba1 100644 --- a/sources/manager_file.py +++ b/sources/manager_file.py @@ -1,3 +1,4 @@ +from os import makedirs from os.path import join, isfile, dirname from pickle import load as load_pickle, dump as dump_pickle from json import load as load_json @@ -54,7 +55,9 @@ def write_file(name: str, content: str, append: bool = False, assets: bool = Fal :param append: True for appending to file, false for rewriting. :param assets: True for saving to 'assets' directory, false otherwise. """ - name = join(FileManager.ASSETS_DIR, name) if assets else name + if assets: + makedirs(FileManager.ASSETS_DIR, exist_ok=True) + name = join(FileManager.ASSETS_DIR, name) with open(name, "a" if append else "w", encoding="utf-8") as file: file.write(content) @@ -68,7 +71,9 @@ def cache_binary(name: str, content: Optional[Any] = None, assets: bool = False) :param assets: True for saving to 'assets' directory, false otherwise. :returns: File cache contents if content is None, None otherwise. """ - name = join(FileManager.ASSETS_DIR, name) if assets else name + if assets: + makedirs(FileManager.ASSETS_DIR, exist_ok=True) + name = join(FileManager.ASSETS_DIR, name) if content is None and not isfile(name): return None From 9a9790f3bff1999f8b47e63f8a898457ed218b3f Mon Sep 17 00:00:00 2001 From: Void_The_Null Date: Tue, 13 Jan 2026 16:35:47 +0530 Subject: [PATCH 10/46] Update Dockerfile --- Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index b777e3cb..83954f91 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,6 +11,7 @@ RUN apk add --no-cache g++ jpeg-dev zlib-dev libjpeg make git && pip3 install -r RUN git config --global user.name "readme-bot" RUN git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com" -ADD sources/* /waka-readme-stats/ +ADD sources/* /waka-readme-stats/ locales/* ENTRYPOINT cd /waka-readme-stats/ && python3 main.py + From a30ce97934948651c296c30207222828c00ad4bd Mon Sep 17 00:00:00 2001 From: Anshuman Singh <148977651+DataBoySu@users.noreply.github.com> Date: Tue, 13 Jan 2026 17:56:21 +0530 Subject: [PATCH 11/46] finalize dual ci --- .github/workflows/ci.yml | 1 - .github/workflows/ci_pr.yml | 9 +++++++-- sources/main.py | 8 -------- sources/manager_download.py | 11 ++++++----- sources/manager_environment.py | 18 +++++------------- 5 files changed, 18 insertions(+), 29 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 77f09497..de5f833a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -80,7 +80,6 @@ jobs: INPUT_GH_TOKEN: ${{ secrets.INPUT_GITHUB_TOKEN }} INPUT_WAKATIME_API_KEY: ${{ secrets.WAKATIME_API_KEY }} DEBUG_RUN: True - INPUT_STRICT_GITHUB: True INPUT_SHOW_TIMEZONE: True INPUT_SHOW_PROJECTS: True INPUT_SHOW_EDITORS: True diff --git a/.github/workflows/ci_pr.yml b/.github/workflows/ci_pr.yml index 2fc9035e..4e00dabe 100644 --- a/.github/workflows/ci_pr.yml +++ b/.github/workflows/ci_pr.yml @@ -68,23 +68,28 @@ jobs: if: ${{ steps.changed.outputs.code == 'true' }} run: pip install -r requirements.txt + - name: Create Assets Folder πŸ“₯ + if: ${{ steps.changed.outputs.code == 'true' }} + run: mkdir assets + - name: Hide previous preview comments 🫣 if: ${{ steps.changed.outputs.code == 'true' && github.event.pull_request.head.repo.full_name == github.repository }} uses: int128/hide-comment-action@v1 with: starts-with: "README stats current output:" - - name: Run comprehensive CI (real GitHub, mock WakaTime) πŸ§ͺ + - name: Run CI_PR (real GitHub, mock WakaTime) πŸ§ͺ if: ${{ steps.changed.outputs.code == 'true' }} id: make-stats env: MOCK_WAKATIME: True MOCK_DATA_DIR: sources/mock_data + DEBUG_RUN: True INPUT_DEBUG_LOGGING: True INPUT_GH_TOKEN: ${{ github.token }} - # Stats of the PR Author are generated, not owner's + # Generate stats for the PR author INPUT_GH_USER: ${{ github.event.pull_request.user.login }} INPUT_SYMBOL_VERSION: 1 diff --git a/sources/main.py b/sources/main.py index 00db8b3e..e199bac9 100644 --- a/sources/main.py +++ b/sources/main.py @@ -87,14 +87,6 @@ async def get_short_github_info() -> str: DBM.i("Adding user disk usage info...") if GHM.USER.disk_usage is None: disk_usage = FM.t("Used in GitHub's Storage") % "?" - msg = ( - "GitHub token does not have enough user/account permissions to read profile fields (disk_usage is null). " - "Provide a PAT with user/account read permissions (classic PAT: add 'user' scope; fine-grained PAT: enable Account/profile read), " - "or disable strict mode (INPUT_STRICT_GITHUB=False)." - ) - if EM.STRICT_GITHUB: - raise RuntimeError(msg) - DBM.p(msg) else: disk_usage = FM.t("Used in GitHub's Storage") % naturalsize(GHM.USER.disk_usage) stats += f"> πŸ“¦ {disk_usage} \n > \n" diff --git a/sources/manager_download.py b/sources/manager_download.py index eec9c85f..5efc3a38 100644 --- a/sources/manager_download.py +++ b/sources/manager_download.py @@ -125,11 +125,12 @@ async def init_download_manager(user_login: str): """ if EM.MOCK_WAKATIME: DownloadManager._REMOTE_RESOURCES_CACHE["waka_latest"] = DownloadManager._load_mock_json("mock_wakatime_stats.json") - + try: DownloadManager._REMOTE_RESOURCES_CACHE["waka_all"] = DownloadManager._load_mock_json("mock_wakatime_all_time.json") except FileNotFoundError: - pass + DBM.w("MOCK_WAKATIME enabled but mock_wakatime_all_time.json is missing; using stub waka_all.") + DownloadManager._REMOTE_RESOURCES_CACHE["waka_all"] = {"data": {"text": "test"}} await DownloadManager.load_remote_resources( linguist="https://cdn.jsdelivr.net/gh/github/linguist@master/lib/linguist/languages.yml", @@ -199,7 +200,7 @@ async def close_remote_resources(): DBM.w(f"Error while awaiting resource: {e}") @staticmethod - async def _get_remote_resource(resource: str, convertor: Optional[Callable[[bytes], Dict]]) -> Dict or None: + async def _get_remote_resource(resource: str, convertor: Optional[Callable[[bytes], Dict]]) -> Optional[Dict]: """ Receive execution result of static query, wait for it if necessary. If the query wasn't cached previously, cache it. @@ -236,7 +237,7 @@ async def _get_remote_resource(resource: str, convertor: Optional[Callable[[byte raise Exception(f"Query '{res.url}' failed to run by returning code of {res.status_code}: {res.json()}") @staticmethod - async def get_remote_json(resource: str) -> Dict or None: + async def get_remote_json(resource: str) -> Optional[Dict]: """ Shortcut for `_get_remote_resource` to return JSON response data. :param resource: Static query identifier. @@ -245,7 +246,7 @@ async def get_remote_json(resource: str) -> Dict or None: return await DownloadManager._get_remote_resource(resource, None) @staticmethod - async def get_remote_yaml(resource: str) -> Dict or None: + async def get_remote_yaml(resource: str) -> Optional[Dict]: """ Shortcut for `_get_remote_resource` to return YAML response data. :param resource: Static query identifier. diff --git a/sources/manager_environment.py b/sources/manager_environment.py index ffb6bf06..4fd03e18 100644 --- a/sources/manager_environment.py +++ b/sources/manager_environment.py @@ -17,23 +17,15 @@ class EnvironmentManager: MOCK_WAKATIME = getenv("MOCK_WAKATIME", "False").lower() in _TRUTHY MOCK_DATA_DIR = getenv("MOCK_DATA_DIR", "mock_data") - # GitHub token can come from multiple env var names depending on how the script is invoked. - # Priority: explicit action-style inputs first, then generic runner env vars. - GH_TOKEN = ( - getenv("INPUT_GH_TOKEN") - or getenv("INPUT_GITHUB_TOKEN") - or getenv("GH_TOKEN") - or getenv("GITHUB_TOKEN") - ) + # Hard requirement: do not accept fallback env var names. + # This keeps CI_PR (github.token) and non-PR runs (repo secret mapped into INPUT_GH_TOKEN) + # from accidentally diverging based on runner environment. + GH_TOKEN = getenv("INPUT_GH_TOKEN") if not GH_TOKEN: - raise KeyError("Missing required token: set INPUT_GH_TOKEN (or INPUT_GITHUB_TOKEN/GH_TOKEN/GITHUB_TOKEN)") + raise KeyError("Missing required token: set INPUT_GH_TOKEN") # stats for the author or the one with the token GH_USER = getenv("INPUT_GH_USER", "").strip() - - # When enabled, treat missing GitHub user-scope data as a hard failure. - # Intended for CI on protected branches. - STRICT_GITHUB = getenv("INPUT_STRICT_GITHUB", "False").lower() in _TRUTHY WAKATIME_API_KEY = getenv("INPUT_WAKATIME_API_KEY", "") WAKATIME_API_URL = getenv("INPUT_WAKATIME_API_URL", "https://wakatime.com/api/v1/") if not WAKATIME_API_URL.endswith("/"): From 272e59c84843e7eea75d051f53c6f9affa064bbc Mon Sep 17 00:00:00 2001 From: Anshuman Singh <148977651+DataBoySu@users.noreply.github.com> Date: Tue, 13 Jan 2026 17:56:59 +0530 Subject: [PATCH 12/46] finalize dual ci --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 83954f91..4b565a2c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,7 +11,7 @@ RUN apk add --no-cache g++ jpeg-dev zlib-dev libjpeg make git && pip3 install -r RUN git config --global user.name "readme-bot" RUN git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com" -ADD sources/* /waka-readme-stats/ locales/* +ADD sources/* /waka-readme-stats/ ENTRYPOINT cd /waka-readme-stats/ && python3 main.py From c26270e8a0e9f211537c1521e9c61d7b4a7729e7 Mon Sep 17 00:00:00 2001 From: Anshuman Singh <148977651+DataBoySu@users.noreply.github.com> Date: Tue, 13 Jan 2026 18:30:49 +0530 Subject: [PATCH 13/46] finalizing workflows --- .github/workflows/ci.yml | 35 ++++++++++--------- .github/workflows/ci_pr.yml | 4 +-- sources/manager_environment.py | 3 -- sources/mock_data/mock_wakatime_all_time.json | 5 +++ 4 files changed, 24 insertions(+), 23 deletions(-) create mode 100644 sources/mock_data/mock_wakatime_all_time.json diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index de5f833a..8b20cf63 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -23,7 +23,8 @@ jobs: - name: Checkout πŸ›ŽοΈ uses: actions/checkout@v4 - - name: Detect changed paths + - name: Detect changed paths (push) + if: ${{ github.event_name == 'push' }} id: filter uses: dorny/paths-filter@v3 with: @@ -44,37 +45,37 @@ jobs: - '!sources/mock_data/**' - '.github/workflows/**' + - name: Compute run gate + id: gate + run: | + if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then + echo "code=true" >> $GITHUB_OUTPUT + else + echo "code=${{ steps.filter.outputs.code }}" >> $GITHUB_OUTPUT + fi + - name: Docs-only change (skip) - if: ${{ steps.filter.outputs.code != 'true' }} + if: ${{ github.event_name == 'push' && steps.gate.outputs.code != 'true' }} run: | echo "Docs-only push detected; skipping comprehensive CI." - name: Setup Python 3.13 🐍 - if: ${{ steps.filter.outputs.code == 'true' }} + if: ${{ steps.gate.outputs.code == 'true' }} uses: actions/setup-python@v5 with: python-version: 3.13 cache: 'pip' - name: Install Dependencies πŸ“₯ - if: ${{ steps.filter.outputs.code == 'true' }} + if: ${{ steps.gate.outputs.code == 'true' }} run: pip install -r requirements.txt - name: Create Assets Folder πŸ“₯ - if: ${{ steps.filter.outputs.code == 'true' }} + if: ${{ steps.gate.outputs.code == 'true' }} run: mkdir assets - - name: Verify GitHub token secret is configured πŸ” - if: ${{ steps.filter.outputs.code == 'true' }} - run: | - if [ -z "${{ secrets.INPUT_GITHUB_TOKEN }}" ]; then - echo "::error::Missing required secret INPUT_GITHUB_TOKEN (CI_MASTER does not use fallbacks)." - exit 1 - fi - echo "Using secret: INPUT_GITHUB_TOKEN" - - name: Run Action Preview on Current Code πŸ§ͺ - if: ${{ steps.filter.outputs.code == 'true' }} + if: ${{ steps.gate.outputs.code == 'true' }} id: make-stats env: INPUT_GH_TOKEN: ${{ secrets.INPUT_GITHUB_TOKEN }} @@ -100,7 +101,7 @@ jobs: run: python3 sources/main.py - name: Save Branch Name Without Slashes πŸ“› - if: ${{ steps.filter.outputs.code == 'true' }} + if: ${{ steps.gate.outputs.code == 'true' }} env: BRANCH_NAME: ${{ github.ref_name }} run: | @@ -109,7 +110,7 @@ jobs: echo BRANCH_NAME=${BRANCH_NAME} >> $GITHUB_ENV - name: Upload Artifact πŸ“¦ - if: ${{ steps.filter.outputs.code == 'true' }} + if: ${{ steps.gate.outputs.code == 'true' }} uses: actions/upload-artifact@v4 with: name: ${{ format('assets-{0}', github.ref_name) }} diff --git a/.github/workflows/ci_pr.yml b/.github/workflows/ci_pr.yml index 4e00dabe..54555b5e 100644 --- a/.github/workflows/ci_pr.yml +++ b/.github/workflows/ci_pr.yml @@ -2,7 +2,6 @@ name: CI_PR on: pull_request: - workflow_dispatch: concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} @@ -11,7 +10,6 @@ concurrency: permissions: contents: read issues: write - pull-requests: write jobs: ci: @@ -78,7 +76,7 @@ jobs: with: starts-with: "README stats current output:" - - name: Run CI_PR (real GitHub, mock WakaTime) πŸ§ͺ + - name: Run Action Preview on PR Code(Mock Waka stats/Implicit Github token) πŸ§ͺ if: ${{ steps.changed.outputs.code == 'true' }} id: make-stats env: diff --git a/sources/manager_environment.py b/sources/manager_environment.py index 4fd03e18..f42539c7 100644 --- a/sources/manager_environment.py +++ b/sources/manager_environment.py @@ -17,9 +17,6 @@ class EnvironmentManager: MOCK_WAKATIME = getenv("MOCK_WAKATIME", "False").lower() in _TRUTHY MOCK_DATA_DIR = getenv("MOCK_DATA_DIR", "mock_data") - # Hard requirement: do not accept fallback env var names. - # This keeps CI_PR (github.token) and non-PR runs (repo secret mapped into INPUT_GH_TOKEN) - # from accidentally diverging based on runner environment. GH_TOKEN = getenv("INPUT_GH_TOKEN") if not GH_TOKEN: raise KeyError("Missing required token: set INPUT_GH_TOKEN") diff --git a/sources/mock_data/mock_wakatime_all_time.json b/sources/mock_data/mock_wakatime_all_time.json new file mode 100644 index 00000000..0ace1f7e --- /dev/null +++ b/sources/mock_data/mock_wakatime_all_time.json @@ -0,0 +1,5 @@ +{ + "data": { + "text": "test" + } +} From 04d6e4541bf0f3914374180cf75bfd52d61cbf56 Mon Sep 17 00:00:00 2001 From: Anshuman Singh <148977651+DataBoySu@users.noreply.github.com> Date: Tue, 13 Jan 2026 18:54:26 +0530 Subject: [PATCH 14/46] finalizing scripts --- sources/manager_download.py | 7 +------ sources/manager_environment.py | 2 +- sources/manager_github.py | 2 +- 3 files changed, 3 insertions(+), 8 deletions(-) diff --git a/sources/manager_download.py b/sources/manager_download.py index 5efc3a38..ef43ca15 100644 --- a/sources/manager_download.py +++ b/sources/manager_download.py @@ -125,12 +125,7 @@ async def init_download_manager(user_login: str): """ if EM.MOCK_WAKATIME: DownloadManager._REMOTE_RESOURCES_CACHE["waka_latest"] = DownloadManager._load_mock_json("mock_wakatime_stats.json") - - try: - DownloadManager._REMOTE_RESOURCES_CACHE["waka_all"] = DownloadManager._load_mock_json("mock_wakatime_all_time.json") - except FileNotFoundError: - DBM.w("MOCK_WAKATIME enabled but mock_wakatime_all_time.json is missing; using stub waka_all.") - DownloadManager._REMOTE_RESOURCES_CACHE["waka_all"] = {"data": {"text": "test"}} + DownloadManager._REMOTE_RESOURCES_CACHE["waka_all"] = DownloadManager._load_mock_json("mock_wakatime_all_time.json") await DownloadManager.load_remote_resources( linguist="https://cdn.jsdelivr.net/gh/github/linguist@master/lib/linguist/languages.yml", diff --git a/sources/manager_environment.py b/sources/manager_environment.py index f42539c7..e879a661 100644 --- a/sources/manager_environment.py +++ b/sources/manager_environment.py @@ -59,7 +59,7 @@ class EnvironmentManager: LOCALE = getenv("INPUT_LOCALE", "en") UPDATED_DATE_FORMAT = getenv("INPUT_UPDATED_DATE_FORMAT", "%d/%m/%Y %H:%M:%S") IGNORED_REPOS = getenv("INPUT_IGNORED_REPOS", "").replace(" ", "").split(",") - SYMBOL_VERSION = int(getenv("INPUT_SYMBOL_VERSION")) + SYMBOL_VERSION = int(getenv("INPUT_SYMBOL_VERSION", "1")) BADGE_STYLE = getenv("BADGE_STYLE", "flat") DEBUG_LOGGING = getenv("INPUT_DEBUG_LOGGING", "0").lower() in _TRUTHY diff --git a/sources/manager_github.py b/sources/manager_github.py index 5fab4b4e..d228ea0f 100644 --- a/sources/manager_github.py +++ b/sources/manager_github.py @@ -47,7 +47,7 @@ def prepare_github_env(): github = Github(EM.GH_TOKEN) clone_path = "repo" - # In PR CI we generate author's stats from impicit github token; remove cred need + # we take the pr author's creds or the creds of token owner if EM.GH_USER: GitHubManager.USER = github.get_user(EM.GH_USER) else: From 71e7044e686f59c4b929b4bbb0719933e732db91 Mon Sep 17 00:00:00 2001 From: Anshuman Singh <148977651+DataBoySu@users.noreply.github.com> Date: Tue, 13 Jan 2026 19:11:22 +0530 Subject: [PATCH 15/46] Dual CI finished --- sources/manager_download.py | 12 ++++++---- sources/mock_data/mock_wakatime_stats.json | 28 +++++++++++----------- 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/sources/manager_download.py b/sources/manager_download.py index ef43ca15..75972621 100644 --- a/sources/manager_download.py +++ b/sources/manager_download.py @@ -1,10 +1,11 @@ import asyncio +import collections.abc from hashlib import md5 from json import dumps from json import load as json_load from os.path import join from string import Template -from typing import Awaitable, Dict, Callable, Optional, List, Tuple +from typing import Dict, Callable, Optional, List, Tuple from httpx import AsyncClient from yaml import safe_load @@ -165,7 +166,7 @@ async def load_remote_resources(**resources: str): for resource, url in resources.items(): # Use mock instead of live existing = DownloadManager._REMOTE_RESOURCES_CACHE.get(resource) - if isinstance(existing, Dict): + if isinstance(existing, dict): continue # Schedule the coroutine as a Task so it can be cancelled/inspected later DownloadManager._REMOTE_RESOURCES_CACHE[resource] = asyncio.create_task(DownloadManager._client.get(url)) @@ -187,7 +188,7 @@ async def close_remote_resources(): pass except Exception as e: DBM.w(f"Error while awaiting cancelled resource: {e}") - elif isinstance(resource, Awaitable): + elif isinstance(resource, collections.abc.Awaitable): # Fallback for plain awaitables: await and log exceptions try: await resource @@ -205,12 +206,13 @@ async def _get_remote_resource(resource: str, convertor: Optional[Callable[[byte By default `response.json()` is used. :return: Response dictionary or None. """ + # use mock and prevent network data from being requested cached = DownloadManager._REMOTE_RESOURCES_CACHE.get(resource) - if isinstance(cached, Dict): + if isinstance(cached, dict): return cached DBM.i(f"\tMaking a remote API query named '{resource}'...") - if isinstance(DownloadManager._REMOTE_RESOURCES_CACHE[resource], Awaitable): + if isinstance(DownloadManager._REMOTE_RESOURCES_CACHE[resource], collections.abc.Awaitable): res = await DownloadManager._REMOTE_RESOURCES_CACHE[resource] DownloadManager._REMOTE_RESOURCES_CACHE[resource] = res DBM.g(f"\tQuery '{resource}' finished, result saved!") diff --git a/sources/mock_data/mock_wakatime_stats.json b/sources/mock_data/mock_wakatime_stats.json index 1e691655..2401dad6 100644 --- a/sources/mock_data/mock_wakatime_stats.json +++ b/sources/mock_data/mock_wakatime_stats.json @@ -1,13 +1,13 @@ { "data": { - "id": "523b03d1-9891-4c36-bc4c-51d144400349", - "user_id": "597563fa-f79e-4061-9fdd-b6b1dcdd05f1", + "id": "00000000-0000-0000-0000-000000000000", + "user_id": "11111111-1111-1111-1111-111111111111", "range": "last_7_days", "start": "2025-12-24T18:30:00Z", "end": "2025-12-31T18:29:59Z", "timeout": 15, "writes_only": false, - "timezone": "Asia/Kolkata", + "timezone": "UTC", "holidays": 0, "status": "ok", "created_at": "2025-12-31T23:02:40Z", @@ -80,8 +80,8 @@ "machines": [ { "total_seconds": 190072.729, - "name": "WinWorkstation", - "machine_name_id": "6c19f20a-bec4-442a-8bab-b9e3f8beed9b", + "name": "Workstation-01", + "machine_name_id": "22222222-2222-4222-8222-222222222222", "percent": 100.0, "digital": "52:47", "decimal": "52.78", @@ -93,7 +93,7 @@ "projects": [ { "total_seconds": 78956.482, - "name": "cluster-health-monitor", + "name": "project-alpha", "percent": 41.54, "digital": "21:55", "decimal": "21.92", @@ -103,7 +103,7 @@ }, { "total_seconds": 48383.625, - "name": "waka-readme-stats", + "name": "project-beta", "percent": 25.46, "digital": "13:26", "decimal": "13.43", @@ -113,7 +113,7 @@ }, { "total_seconds": 39838.069, - "name": "readme-translator-action", + "name": "docs-builder", "percent": 20.96, "digital": "11:03", "decimal": "11.05", @@ -123,7 +123,7 @@ }, { "total_seconds": 13548.075, - "name": "databoysu-readme-translator", + "name": "data-core", "percent": 7.13, "digital": "3:45", "decimal": "3.75", @@ -133,7 +133,7 @@ }, { "total_seconds": 5754.991, - "name": "GitHub_readme", + "name": "automation-suite", "percent": 3.03, "digital": "1:35", "decimal": "1.58", @@ -143,7 +143,7 @@ }, { "total_seconds": 1883.624, - "name": "myGPU", + "name": "ai-assist", "percent": 0.99, "digital": "0:31", "decimal": "0.52", @@ -153,7 +153,7 @@ }, { "total_seconds": 654.452, - "name": "contrib", + "name": "community-notes", "percent": 0.34, "digital": "0:10", "decimal": "0.17", @@ -163,7 +163,7 @@ }, { "total_seconds": 591.807, - "name": "Vibe_Programming", + "name": "creative-labs", "percent": 0.31, "digital": "0:09", "decimal": "0.15", @@ -173,7 +173,7 @@ }, { "total_seconds": 461.604, - "name": "DeepCool Replacement", + "name": "standby-scripts", "percent": 0.24, "digital": "0:07", "decimal": "0.12", From 74dc0aec553a7eefafc3cd4853c6a37d2ec235b2 Mon Sep 17 00:00:00 2001 From: Void_The_Null Date: Tue, 13 Jan 2026 20:13:00 +0530 Subject: [PATCH 16/46] Update Dockerfile (#6) * Update Dockerfile * Update ci_pr.yml --- .github/workflows/ci_pr.yml | 24 +++++++----------------- Dockerfile | 3 ++- 2 files changed, 9 insertions(+), 18 deletions(-) diff --git a/.github/workflows/ci_pr.yml b/.github/workflows/ci_pr.yml index 54555b5e..c9de37d2 100644 --- a/.github/workflows/ci_pr.yml +++ b/.github/workflows/ci_pr.yml @@ -10,6 +10,7 @@ concurrency: permissions: contents: read issues: write + pull-requests: write jobs: ci: @@ -108,21 +109,10 @@ jobs: run: python3 sources/main.py - - name: Comment preview output πŸ’¬ - if: ${{ steps.changed.outputs.code == 'true' && github.event.pull_request.head.repo.full_name == github.repository }} - uses: actions/github-script@v7 - env: - README_CONTENT: ${{ steps.make-stats.outputs.README_CONTENT }} + - name: Create Comment πŸ’¬ + uses: jungwinter/comment@v1 with: - script: | - const body = process.env.README_CONTENT - if (!body || body.trim().length === 0) { - core.warning('No README_CONTENT output found; skipping comment.') - return - } - await github.rest.issues.createComment({ - owner: context.repo.owner, - repo: context.repo.repo, - issue_number: context.payload.pull_request.number, - body, - }) + type: create + body: ${{ steps.make-stats.outputs.README_CONTENT }} + issue_number: ${{ github.event.pull_request.number }} + token: ${{ github.token }} diff --git a/Dockerfile b/Dockerfile index 4b565a2c..6ba2870e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,7 +11,8 @@ RUN apk add --no-cache g++ jpeg-dev zlib-dev libjpeg make git && pip3 install -r RUN git config --global user.name "readme-bot" RUN git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com" -ADD sources/* /waka-readme-stats/ +ADD sources/* /waka-readme-stats/ locales/* ENTRYPOINT cd /waka-readme-stats/ && python3 main.py + From e1f1e7c43e1caa9832988bf1a1acae2579b2977c Mon Sep 17 00:00:00 2001 From: Anshuman Singh <148977651+DataBoySu@users.noreply.github.com> Date: Tue, 13 Jan 2026 20:13:42 +0530 Subject: [PATCH 17/46] Experimenting with preview comment --- .github/workflows/ci_pr.yml | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci_pr.yml b/.github/workflows/ci_pr.yml index 54555b5e..49453bdc 100644 --- a/.github/workflows/ci_pr.yml +++ b/.github/workflows/ci_pr.yml @@ -108,21 +108,30 @@ jobs: run: python3 sources/main.py - - name: Comment preview output πŸ’¬ + - name: Create Comment πŸ’¬ if: ${{ steps.changed.outputs.code == 'true' && github.event.pull_request.head.repo.full_name == github.repository }} uses: actions/github-script@v7 env: README_CONTENT: ${{ steps.make-stats.outputs.README_CONTENT }} with: script: | - const body = process.env.README_CONTENT - if (!body || body.trim().length === 0) { + let body = process.env.README_CONTENT || '' + if (body.trim().length === 0) { core.warning('No README_CONTENT output found; skipping comment.') return } + + // GitHub comment body limit is 65536 chars. + const max = 65000 + if (body.length > max) { + const note = '\n\n---\n\n(Preview truncated: exceeded GitHub comment size limit.)\n' + body = body.slice(0, max - note.length) + note + core.warning(`README_CONTENT too large (${process.env.README_CONTENT.length} chars). Posting truncated preview.`) + } + await github.rest.issues.createComment({ owner: context.repo.owner, repo: context.repo.repo, issue_number: context.payload.pull_request.number, body, - }) + }) \ No newline at end of file From eaa996ae607e81e7e7e6c46c5a35fca1525d0b20 Mon Sep 17 00:00:00 2001 From: Void_The_Null Date: Tue, 13 Jan 2026 21:08:05 +0530 Subject: [PATCH 18/46] Rename ci.yml to ci_PR.yml --- .github/workflows/{ci.yml => ci_PR.yml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/workflows/{ci.yml => ci_PR.yml} (100%) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci_PR.yml similarity index 100% rename from .github/workflows/ci.yml rename to .github/workflows/ci_PR.yml From 89f08f8619f5b14fb55a91d048ac17031f4c42c6 Mon Sep 17 00:00:00 2001 From: Void_The_Null Date: Tue, 13 Jan 2026 21:08:26 +0530 Subject: [PATCH 19/46] Rename ci_PR.yml to ci_MASTER.yml --- .github/workflows/{ci_PR.yml => ci_MASTER.yml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/workflows/{ci_PR.yml => ci_MASTER.yml} (100%) diff --git a/.github/workflows/ci_PR.yml b/.github/workflows/ci_MASTER.yml similarity index 100% rename from .github/workflows/ci_PR.yml rename to .github/workflows/ci_MASTER.yml From f5601ee39e3290e78bfceb30b416f8a7c2c56bdb Mon Sep 17 00:00:00 2001 From: Void_The_Null Date: Tue, 13 Jan 2026 21:11:03 +0530 Subject: [PATCH 20/46] Update ci_pr.yml --- .github/workflows/ci_pr.yml | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/.github/workflows/ci_pr.yml b/.github/workflows/ci_pr.yml index c9de37d2..c91c4323 100644 --- a/.github/workflows/ci_pr.yml +++ b/.github/workflows/ci_pr.yml @@ -71,12 +71,6 @@ jobs: if: ${{ steps.changed.outputs.code == 'true' }} run: mkdir assets - - name: Hide previous preview comments 🫣 - if: ${{ steps.changed.outputs.code == 'true' && github.event.pull_request.head.repo.full_name == github.repository }} - uses: int128/hide-comment-action@v1 - with: - starts-with: "README stats current output:" - - name: Run Action Preview on PR Code(Mock Waka stats/Implicit Github token) πŸ§ͺ if: ${{ steps.changed.outputs.code == 'true' }} id: make-stats @@ -109,10 +103,13 @@ jobs: run: python3 sources/main.py - - name: Create Comment πŸ’¬ - uses: jungwinter/comment@v1 + - name: Create or Update Preview Comment πŸ’¬ + if: ${{ steps.changed.outputs.code == 'true' }} + uses: thollander/actions-comment-pull-request@v2 with: - type: create - body: ${{ steps.make-stats.outputs.README_CONTENT }} - issue_number: ${{ github.event.pull_request.number }} - token: ${{ github.token }} + message: | + ## README stats current output: + + ${{ steps.make-stats.outputs.README_CONTENT }} + comment_tag: readme_stats_preview + mode: recreate From 4fd61eb4951ce7a8d8cb5b34f1df6fdb8b9ceba6 Mon Sep 17 00:00:00 2001 From: Void_The_Null Date: Tue, 13 Jan 2026 21:22:04 +0530 Subject: [PATCH 21/46] Update CI_PR --- .github/workflows/{ci_pr.yml => ci_PR.yml} | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) rename .github/workflows/{ci_pr.yml => ci_PR.yml} (87%) diff --git a/.github/workflows/ci_pr.yml b/.github/workflows/ci_PR.yml similarity index 87% rename from .github/workflows/ci_pr.yml rename to .github/workflows/ci_PR.yml index c91c4323..31d67259 100644 --- a/.github/workflows/ci_pr.yml +++ b/.github/workflows/ci_PR.yml @@ -103,13 +103,17 @@ jobs: run: python3 sources/main.py - - name: Create or Update Preview Comment πŸ’¬ - if: ${{ steps.changed.outputs.code == 'true' }} - uses: thollander/actions-comment-pull-request@v2 + - name: Hide previous preview comments 🫣 + if: ${{ steps.changed.outputs.code == 'true' }} + uses: int128/hide-comment-action@v1 + with: + starts-with: "README stats current output:" + + - name: Update Comment πŸ’¬ + uses: jungwinter/comment@v1 with: - message: | - ## README stats current output: - - ${{ steps.make-stats.outputs.README_CONTENT }} - comment_tag: readme_stats_preview - mode: recreate + type: create + body: ${{ steps.make-stats.outputs.README_CONTENT }} + issue_number: ${{ github.event.pull_request.number }} + token: ${{ github.token }} + From 6304e05b86477371a7c337a91c6f4b9411007063 Mon Sep 17 00:00:00 2001 From: Anshuman Singh <148977651+DataBoySu@users.noreply.github.com> Date: Tue, 13 Jan 2026 21:29:21 +0530 Subject: [PATCH 22/46] temp --- .github/workflows/ci_pr.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ci_pr.yml b/.github/workflows/ci_pr.yml index c9de37d2..6cc39069 100644 --- a/.github/workflows/ci_pr.yml +++ b/.github/workflows/ci_pr.yml @@ -71,12 +71,6 @@ jobs: if: ${{ steps.changed.outputs.code == 'true' }} run: mkdir assets - - name: Hide previous preview comments 🫣 - if: ${{ steps.changed.outputs.code == 'true' && github.event.pull_request.head.repo.full_name == github.repository }} - uses: int128/hide-comment-action@v1 - with: - starts-with: "README stats current output:" - - name: Run Action Preview on PR Code(Mock Waka stats/Implicit Github token) πŸ§ͺ if: ${{ steps.changed.outputs.code == 'true' }} id: make-stats @@ -109,7 +103,13 @@ jobs: run: python3 sources/main.py - - name: Create Comment πŸ’¬ + - name: Hide previous preview comments 🫣 + if: ${{ steps.changed.outputs.code == 'true' && github.event.pull_request.head.repo.full_name == github.repository }} + uses: int128/hide-comment-action@v1 + with: + starts-with: "README stats current output:" + + - name: Update Comment πŸ’¬ uses: jungwinter/comment@v1 with: type: create From 9b0bb8d62624b0f274d2a82c289b8bd6fcd2045c Mon Sep 17 00:00:00 2001 From: Anshuman Singh <148977651+DataBoySu@users.noreply.github.com> Date: Tue, 13 Jan 2026 21:45:35 +0530 Subject: [PATCH 23/46] fixing issue when multiple comments exist --- .github/workflows/ci_PR.yml | 92 ++++++++++++++++++++++++++----------- 1 file changed, 65 insertions(+), 27 deletions(-) diff --git a/.github/workflows/ci_PR.yml b/.github/workflows/ci_PR.yml index 7f4d56cd..66cac5ae 100644 --- a/.github/workflows/ci_PR.yml +++ b/.github/workflows/ci_PR.yml @@ -104,36 +104,74 @@ jobs: run: python3 sources/main.py - - name: Hide previous preview comments 🫣 - if: ${{ steps.changed.outputs.code == 'true' && github.event.pull_request.head.repo.full_name == github.repository }} + - name: Upsert preview comment πŸ’¬ + if: ${{ steps.changed.outputs.code == 'true' }} uses: actions/github-script@v7 + env: + README_CONTENT: ${{ steps.make-stats.outputs.README_CONTENT }} with: script: | - const { data: comments } = await github. rest.issues.listComments({ - owner: context.repo. owner, - repo: context. repo.repo, - issue_number: context.payload.pull_request.number, - }); - - const botComments = comments.filter(comment => - comment.user. type === 'Bot' && - comment.body.startsWith('README stats current output:') - ); - - for (const comment of botComments) { - await github.rest. issues.updateComment({ - owner: context.repo.owner, - repo: context.repo.repo, - comment_id: comment.id, - body: `~~${comment.body}~~\n\n_This preview has been superseded by a newer run._` - }); + const marker = 'README stats current output:' + const body = process.env.README_CONTENT || '' + + if (!context.payload.pull_request) { + core.info('No pull_request in context; skipping comment.') + return } - - name: Create Comment πŸ’¬ - uses: jungwinter/comment@v1 - with: - type: create - body: ${{ steps.make-stats.outputs.README_CONTENT }} - issue_number: ${{ github.event.pull_request.number }} - token: ${{ github.token }} + if (!body.trim()) { + core.warning('README_CONTENT is empty; skipping comment.') + return + } + + const { owner, repo } = context.repo + const issue_number = context.payload.pull_request.number + + try { + const { data: comments } = await github.rest.issues.listComments({ + owner, + repo, + issue_number, + per_page: 100, + }) + + const botComments = comments + .filter(c => c.user?.type === 'Bot') + .filter(c => (c.body || '').startsWith(marker)) + .sort((a, b) => new Date(b.created_at) - new Date(a.created_at)) + + const [latest, ...older] = botComments + + // Hide older previews (if any) + for (const c of older) { + const current = c.body || '' + const alreadyHidden = current.startsWith('~~') + if (alreadyHidden) continue + await github.rest.issues.updateComment({ + owner, + repo, + comment_id: c.id, + body: `~~${current}~~\n\n_This preview has been superseded by a newer run._`, + }) + } + + // Update the most recent preview if it exists; otherwise create one. + if (latest) { + await github.rest.issues.updateComment({ + owner, + repo, + comment_id: latest.id, + body, + }) + } else { + await github.rest.issues.createComment({ + owner, + repo, + issue_number, + body, + }) + } + } catch (e) { + core.warning(`Unable to create/update PR comment: ${e.message || e}`) + } From 1173ad3749859feb76e2ce11989b04f625cfc01d Mon Sep 17 00:00:00 2001 From: Void_The_Null Date: Tue, 13 Jan 2026 22:05:32 +0530 Subject: [PATCH 24/46] Restore error message on github token absence --- sources/main.py | 1 + 1 file changed, 1 insertion(+) diff --git a/sources/main.py b/sources/main.py index e199bac9..c9d8f761 100644 --- a/sources/main.py +++ b/sources/main.py @@ -87,6 +87,7 @@ async def get_short_github_info() -> str: DBM.i("Adding user disk usage info...") if GHM.USER.disk_usage is None: disk_usage = FM.t("Used in GitHub's Storage") % "?" + DBM.p("Please add new github personal access token with user permission!") else: disk_usage = FM.t("Used in GitHub's Storage") % naturalsize(GHM.USER.disk_usage) stats += f"> πŸ“¦ {disk_usage} \n > \n" From 08bcf61aeaee001a947cd186b061282c4775d205 Mon Sep 17 00:00:00 2001 From: Anshuman Singh <148977651+DataBoySu@users.noreply.github.com> Date: Tue, 13 Jan 2026 22:26:02 +0530 Subject: [PATCH 25/46] temp --- .github/workflows/ci_PR.yml | 74 +------------------------------------ 1 file changed, 1 insertion(+), 73 deletions(-) diff --git a/.github/workflows/ci_PR.yml b/.github/workflows/ci_PR.yml index 66cac5ae..1c4ccd29 100644 --- a/.github/workflows/ci_PR.yml +++ b/.github/workflows/ci_PR.yml @@ -102,76 +102,4 @@ jobs: INPUT_SHOW_LANGUAGE_PER_REPO: True INPUT_SHOW_UPDATED_DATE: True - run: python3 sources/main.py - - - name: Upsert preview comment πŸ’¬ - if: ${{ steps.changed.outputs.code == 'true' }} - uses: actions/github-script@v7 - env: - README_CONTENT: ${{ steps.make-stats.outputs.README_CONTENT }} - with: - script: | - const marker = 'README stats current output:' - const body = process.env.README_CONTENT || '' - - if (!context.payload.pull_request) { - core.info('No pull_request in context; skipping comment.') - return - } - - if (!body.trim()) { - core.warning('README_CONTENT is empty; skipping comment.') - return - } - - const { owner, repo } = context.repo - const issue_number = context.payload.pull_request.number - - try { - const { data: comments } = await github.rest.issues.listComments({ - owner, - repo, - issue_number, - per_page: 100, - }) - - const botComments = comments - .filter(c => c.user?.type === 'Bot') - .filter(c => (c.body || '').startsWith(marker)) - .sort((a, b) => new Date(b.created_at) - new Date(a.created_at)) - - const [latest, ...older] = botComments - - // Hide older previews (if any) - for (const c of older) { - const current = c.body || '' - const alreadyHidden = current.startsWith('~~') - if (alreadyHidden) continue - await github.rest.issues.updateComment({ - owner, - repo, - comment_id: c.id, - body: `~~${current}~~\n\n_This preview has been superseded by a newer run._`, - }) - } - - // Update the most recent preview if it exists; otherwise create one. - if (latest) { - await github.rest.issues.updateComment({ - owner, - repo, - comment_id: latest.id, - body, - }) - } else { - await github.rest.issues.createComment({ - owner, - repo, - issue_number, - body, - }) - } - } catch (e) { - core.warning(`Unable to create/update PR comment: ${e.message || e}`) - } - + run: python3 sources/main.py \ No newline at end of file From 82238c1262fd3ec3d3ed25a31c1a198e0ad145b3 Mon Sep 17 00:00:00 2001 From: Anshuman Singh <148977651+DataBoySu@users.noreply.github.com> Date: Tue, 13 Jan 2026 22:37:08 +0530 Subject: [PATCH 26/46] chore: upgrade PyGithub to 2.8.1 --- .github/workflows/ci_PR.yml | 73 ++++++++++++++++++++++++++++++++++++- requirements.txt | 2 +- sources/manager_github.py | 6 ++- 3 files changed, 77 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci_PR.yml b/.github/workflows/ci_PR.yml index 1c4ccd29..886473a5 100644 --- a/.github/workflows/ci_PR.yml +++ b/.github/workflows/ci_PR.yml @@ -102,4 +102,75 @@ jobs: INPUT_SHOW_LANGUAGE_PER_REPO: True INPUT_SHOW_UPDATED_DATE: True - run: python3 sources/main.py \ No newline at end of file + run: python3 sources/main.py + + - name: Upsert preview comment πŸ’¬ + if: ${{ steps.changed.outputs.code == 'true' }} + uses: actions/github-script@v7 + env: + README_CONTENT: ${{ steps.make-stats.outputs.README_CONTENT }} + with: + script: | + const marker = 'README stats current output:' + const body = process.env.README_CONTENT || '' + + if (!context.payload.pull_request) { + core.info('No pull_request in context; skipping comment.') + return + } + + if (!body.trim()) { + core.warning('README_CONTENT is empty; skipping comment.') + return + } + + const { owner, repo } = context.repo + const issue_number = context.payload.pull_request.number + + try { + const { data: comments } = await github.rest.issues.listComments({ + owner, + repo, + issue_number, + per_page: 100, + }) + + const botComments = comments + .filter(c => c.user?.type === 'Bot') + .filter(c => (c.body || '').startsWith(marker)) + .sort((a, b) => new Date(b.created_at) - new Date(a.created_at)) + + const [latest, ...older] = botComments + + // Hide older previews (if any) + for (const c of older) { + const current = c.body || '' + const alreadyHidden = current.startsWith('~~') + if (alreadyHidden) continue + await github.rest.issues.updateComment({ + owner, + repo, + comment_id: c.id, + body: `~~${current}~~\n\n_This preview has been superseded by a newer run._`, + }) + } + + // Update the most recent preview if it exists; otherwise create one. + if (latest) { + await github.rest.issues.updateComment({ + owner, + repo, + comment_id: latest.id, + body, + }) + } else { + await github.rest.issues.createComment({ + owner, + repo, + issue_number, + body, + }) + } + } catch (e) { + core.warning(`Unable to create/update PR comment: ${e.message || e}`) + } \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 99a59a62..de1167ad 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ # GitHub integration modules: -PyGithub~=1.58 +PyGithub==2.8.1 GitPython~=3.1 # Markdown visualization modules: diff --git a/sources/manager_github.py b/sources/manager_github.py index d228ea0f..b47122e5 100644 --- a/sources/manager_github.py +++ b/sources/manager_github.py @@ -7,7 +7,9 @@ from string import ascii_letters from git import Repo, Actor -from github import Github, AuthenticatedUser, Repository +from github import Auth, Github +from github.AuthenticatedUser import AuthenticatedUser +from github.Repository import Repository from manager_environment import EnvironmentManager as EM from manager_file import FileManager as FM @@ -44,7 +46,7 @@ def prepare_github_env(): - Named repo of the user [username]/[username]. - Clone of the named repo. """ - github = Github(EM.GH_TOKEN) + github = Github(auth=Auth.Token(EM.GH_TOKEN)) clone_path = "repo" # we take the pr author's creds or the creds of token owner From afe8813b37d0b0642a40cdcdc6f89a2c18041d60 Mon Sep 17 00:00:00 2001 From: Anshuman Singh <148977651+DataBoySu@users.noreply.github.com> Date: Tue, 13 Jan 2026 22:46:48 +0530 Subject: [PATCH 27/46] artifact naming sanitization --- .github/workflows/ci_MASTER.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci_MASTER.yml b/.github/workflows/ci_MASTER.yml index 8b20cf63..bbb69b80 100644 --- a/.github/workflows/ci_MASTER.yml +++ b/.github/workflows/ci_MASTER.yml @@ -102,16 +102,18 @@ jobs: - name: Save Branch Name Without Slashes πŸ“› if: ${{ steps.gate.outputs.code == 'true' }} + id: branch env: BRANCH_NAME: ${{ github.ref_name }} run: | BRANCH_NAME=${{ env.BRANCH_NAME }} BRANCH_NAME=${BRANCH_NAME////_} echo BRANCH_NAME=${BRANCH_NAME} >> $GITHUB_ENV + echo branch_name=${BRANCH_NAME} >> $GITHUB_OUTPUT - name: Upload Artifact πŸ“¦ if: ${{ steps.gate.outputs.code == 'true' }} uses: actions/upload-artifact@v4 with: - name: ${{ format('assets-{0}', github.ref_name) }} + name: ${{ format('assets-{0}', steps.branch.outputs.branch_name) }} path: assets From 2c508fcb5aa415c0c69fcc32ac956b31f6ed9ca4 Mon Sep 17 00:00:00 2001 From: Anshuman Singh <148977651+DataBoySu@users.noreply.github.com> Date: Tue, 13 Jan 2026 23:19:39 +0530 Subject: [PATCH 28/46] max cap trial --- README.md | 2 ++ action.yml | 5 +++++ sources/main.py | 18 ++++++++++++++--- sources/manager_download.py | 37 ++++++++++++++++++++++------------ sources/manager_environment.py | 6 +++++- 5 files changed, 51 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 437d0486..9b29b0d6 100644 --- a/README.md +++ b/README.md @@ -268,6 +268,8 @@ The `SHOW_LOC_CHART` flag can be set to `False` to hide the lines of code writte The `IGNORED_REPOS` flag can be set to `"waka-readme-stats, my-first-repo"` (just an example) to ignore some repos you don’t want to be counted. +The `MAX_REPOS` flag can be set to limit how many GitHub repositories are fetched for analysis (default: `0` = unlimited). This can be useful to speed up runs for accounts with many repos. + The `WAKATIME_API_URL` flag can be set if you are hosting your own wakatime compliant backend like [wakapi](https://github.com/muety/wakapi). You only have to supply your base url like so `https://your-own-wakapi.dev/api/` The `SYMBOL_VERSION` flag can be set for the symbol for the progress bar (default: `1`). diff --git a/action.yml b/action.yml index 66388857..81fdf9bf 100644 --- a/action.yml +++ b/action.yml @@ -142,6 +142,11 @@ inputs: description: "Repos you don't want to be counted" default: "" + MAX_REPOS: + required: false + description: "Maximum number of GitHub repositories to fetch (0 = unlimited)" + default: "0" + SYMBOL_VERSION: required: false description: "Version of the symbol block and empty of the progress bar" diff --git a/sources/main.py b/sources/main.py index c9d8f761..61db136a 100644 --- a/sources/main.py +++ b/sources/main.py @@ -136,16 +136,28 @@ async def collect_user_repositories() -> Dict: :returns: Complete list of user repositories. """ DBM.i("Getting user repositories list...") - repositories = await DM.get_remote_graphql("user_repository_list", username=GHM.USER.login, id=GHM.USER.node_id) + repositories = await DM.get_remote_graphql( + "user_repository_list", + username=GHM.USER.login, + id=GHM.USER.node_id, + _max_nodes=(EM.MAX_REPOS if EM.MAX_REPOS > 0 else None), + ) + if EM.MAX_REPOS > 0 and len(repositories) >= EM.MAX_REPOS: + DBM.w(f"\tMAX_REPOS cap reached ({EM.MAX_REPOS}); skipping contributed repos.") + return repositories[: EM.MAX_REPOS] repo_names = [repo["name"] for repo in repositories] DBM.g("\tUser repository list collected!") - contributed = await DM.get_remote_graphql("repos_contributed_to", username=GHM.USER.login) + remaining = (EM.MAX_REPOS - len(repositories)) if EM.MAX_REPOS > 0 else None + contributed = await DM.get_remote_graphql("repos_contributed_to", username=GHM.USER.login, _max_nodes=remaining) contributed_nodes = [repo for repo in contributed if repo is not None and repo["name"] not in repo_names and not repo["isFork"]] DBM.g("\tUser contributed to repository list collected!") - return repositories + contributed_nodes + combined = repositories + contributed_nodes + if EM.MAX_REPOS > 0: + return combined[: EM.MAX_REPOS] + return combined async def get_stats() -> str: diff --git a/sources/manager_download.py b/sources/manager_download.py index 75972621..e6194538 100644 --- a/sources/manager_download.py +++ b/sources/manager_download.py @@ -5,7 +5,7 @@ from json import load as json_load from os.path import join from string import Template -from typing import Dict, Callable, Optional, List, Tuple +from typing import Any, Callable, Optional, List, Tuple from httpx import AsyncClient from yaml import safe_load @@ -152,7 +152,7 @@ class DownloadManager: _REMOTE_RESOURCES_CACHE = dict() @staticmethod - def _load_mock_json(filename: str) -> Dict: + def _load_mock_json(filename: str) -> dict: path = join(EM.MOCK_DATA_DIR, filename) with open(path, "r", encoding="utf-8") as f: return json_load(f) @@ -196,7 +196,7 @@ async def close_remote_resources(): DBM.w(f"Error while awaiting resource: {e}") @staticmethod - async def _get_remote_resource(resource: str, convertor: Optional[Callable[[bytes], Dict]]) -> Optional[Dict]: + async def _get_remote_resource(resource: str, convertor: Optional[Callable[[bytes], dict]]) -> Optional[dict]: """ Receive execution result of static query, wait for it if necessary. If the query wasn't cached previously, cache it. @@ -234,7 +234,7 @@ async def _get_remote_resource(resource: str, convertor: Optional[Callable[[byte raise Exception(f"Query '{res.url}' failed to run by returning code of {res.status_code}: {res.json()}") @staticmethod - async def get_remote_json(resource: str) -> Optional[Dict]: + async def get_remote_json(resource: str) -> Optional[dict]: """ Shortcut for `_get_remote_resource` to return JSON response data. :param resource: Static query identifier. @@ -243,7 +243,7 @@ async def get_remote_json(resource: str) -> Optional[Dict]: return await DownloadManager._get_remote_resource(resource, None) @staticmethod - async def get_remote_yaml(resource: str) -> Optional[Dict]: + async def get_remote_yaml(resource: str) -> Optional[dict]: """ Shortcut for `_get_remote_resource` to return YAML response data. :param resource: Static query identifier. @@ -252,7 +252,7 @@ async def get_remote_yaml(resource: str) -> Optional[Dict]: return await DownloadManager._get_remote_resource(resource, safe_load) @staticmethod - async def _fetch_graphql_query(query: str, retries_count: int = 10, **kwargs) -> Dict: + async def _fetch_graphql_query(query: str, retries_count: int = 10, **kwargs) -> dict: """ Execute GitHub GraphQL API simple query. :param query: Dynamic query identifier. @@ -272,7 +272,7 @@ async def _fetch_graphql_query(query: str, retries_count: int = 10, **kwargs) -> raise Exception(f"Query '{query}' failed to run by returning code of {res.status_code}: {res.json()}") @staticmethod - def _find_pagination_and_data_list(response: Dict) -> Tuple[List, Dict]: + def _find_pagination_and_data_list(response: dict) -> Tuple[List, dict]: """ Parses response as a paginated response. NB! All paginated responses are expected to have the following structure: @@ -289,33 +289,40 @@ def _find_pagination_and_data_list(response: Dict) -> Tuple[List, Dict]: """ if "nodes" in response.keys() and "pageInfo" in response.keys(): return response["nodes"], response["pageInfo"] - elif len(response) == 1 and isinstance(response[list(response.keys())[0]], Dict): + elif len(response) == 1 and isinstance(response[list(response.keys())[0]], dict): return DownloadManager._find_pagination_and_data_list(response[list(response.keys())[0]]) else: return list(), dict(hasNextPage=False) @staticmethod - async def _fetch_graphql_paginated(query: str, **kwargs) -> Dict: + async def _fetch_graphql_paginated(query: str, max_nodes: Optional[int] = None, **kwargs) -> List[dict]: """ Execute GitHub GraphQL API paginated query. Queries 100 new results each time until no more results are left. Merges result list into single query, clears pagination-related info. :param query: Dynamic query identifier. :param use_github_action: Use GitHub actions bot auth token instead of current user. + :param max_nodes: Optional maximum number of nodes to return (early-stops pagination). :param kwargs: Parameters for substitution of variables in dynamic query. :return: Response JSON dictionary. """ initial_query_response = await DownloadManager._fetch_graphql_query(query, **kwargs, pagination="first: 100") page_list, page_info = DownloadManager._find_pagination_and_data_list(initial_query_response) - while page_info["hasNextPage"]: + if max_nodes is not None and max_nodes > 0 and len(page_list) >= max_nodes: + return page_list[:max_nodes] + + while page_info["hasNextPage"] and (max_nodes is None or max_nodes <= 0 or len(page_list) < max_nodes): pagination = f'first: 100, after: "{page_info["endCursor"]}"' query_response = await DownloadManager._fetch_graphql_query(query, **kwargs, pagination=pagination) new_page_list, page_info = DownloadManager._find_pagination_and_data_list(query_response) page_list += new_page_list + if max_nodes is not None and max_nodes > 0 and len(page_list) >= max_nodes: + page_list = page_list[:max_nodes] + break return page_list @staticmethod - async def get_remote_graphql(query: str, **kwargs) -> Dict: + async def get_remote_graphql(query: str, **kwargs) -> Any: """ Execute GitHub GraphQL API query. The queries are defined in `GITHUB_API_QUERIES`, all parameters should be passed as kwargs. @@ -324,12 +331,16 @@ async def get_remote_graphql(query: str, **kwargs) -> Dict: Parse and return response as JSON. :param query: Dynamic query identifier. :param kwargs: Parameters for substitution of variables in dynamic query. + :param _max_nodes: Internal parameter to cap nodes for paginated queries (not substituted into GraphQL). :return: Response JSON dictionary. """ - key = f"{query}_{md5(dumps(kwargs, sort_keys=True).encode('utf-8')).digest()}" + max_nodes = kwargs.pop("_max_nodes", None) + cache_key_kwargs = dict(kwargs) + cache_key_kwargs["_max_nodes"] = max_nodes + key = f"{query}_{md5(dumps(cache_key_kwargs, sort_keys=True).encode('utf-8')).digest()}" if key not in DownloadManager._REMOTE_RESOURCES_CACHE: if "$pagination" in GITHUB_API_QUERIES[query]: - res = await DownloadManager._fetch_graphql_paginated(query, **kwargs) + res = await DownloadManager._fetch_graphql_paginated(query, max_nodes=max_nodes, **kwargs) else: res = await DownloadManager._fetch_graphql_query(query, **kwargs) DownloadManager._REMOTE_RESOURCES_CACHE[key] = res diff --git a/sources/manager_environment.py b/sources/manager_environment.py index e879a661..3b6cb867 100644 --- a/sources/manager_environment.py +++ b/sources/manager_environment.py @@ -8,7 +8,7 @@ class EnvironmentManager: The others have a provided default value. For all boolean variables a 'truthy'-list is checked (not only true/false, but also 1, t, y and yes are accepted). List variable `IGNORED_REPOS` is split and parsed. - Integer variable `SYMBOL_VERSION` is parsed. + Integer variables `SYMBOL_VERSION` and `MAX_REPOS` are parsed. """ _TRUTHY = ["true", "1", "t", "y", "yes"] @@ -59,6 +59,10 @@ class EnvironmentManager: LOCALE = getenv("INPUT_LOCALE", "en") UPDATED_DATE_FORMAT = getenv("INPUT_UPDATED_DATE_FORMAT", "%d/%m/%Y %H:%M:%S") IGNORED_REPOS = getenv("INPUT_IGNORED_REPOS", "").replace(" ", "").split(",") + _raw_max_repos = getenv("INPUT_MAX_REPOS", "0").strip() + MAX_REPOS = int(_raw_max_repos) if _raw_max_repos else 0 + if MAX_REPOS < 0: + MAX_REPOS = 0 SYMBOL_VERSION = int(getenv("INPUT_SYMBOL_VERSION", "1")) BADGE_STYLE = getenv("BADGE_STYLE", "flat") From cd2b5569aff7c27d10d7d2f1d9e01d6ad31d4e8a Mon Sep 17 00:00:00 2001 From: Anshuman Singh <148977651+DataBoySu@users.noreply.github.com> Date: Tue, 13 Jan 2026 23:24:59 +0530 Subject: [PATCH 29/46] max cap logs --- sources/main.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/sources/main.py b/sources/main.py index 61db136a..e01ab6ab 100644 --- a/sources/main.py +++ b/sources/main.py @@ -136,12 +136,16 @@ async def collect_user_repositories() -> Dict: :returns: Complete list of user repositories. """ DBM.i("Getting user repositories list...") + if EM.MAX_REPOS > 0: + DBM.i(f"\tMAX_REPOS enabled: {EM.MAX_REPOS}") repositories = await DM.get_remote_graphql( "user_repository_list", username=GHM.USER.login, id=GHM.USER.node_id, _max_nodes=(EM.MAX_REPOS if EM.MAX_REPOS > 0 else None), ) + if EM.MAX_REPOS > 0: + DBM.i(f"\tFetched {len(repositories)} repos out of MAX_REPOS={EM.MAX_REPOS}") if EM.MAX_REPOS > 0 and len(repositories) >= EM.MAX_REPOS: DBM.w(f"\tMAX_REPOS cap reached ({EM.MAX_REPOS}); skipping contributed repos.") return repositories[: EM.MAX_REPOS] @@ -156,6 +160,10 @@ async def collect_user_repositories() -> Dict: combined = repositories + contributed_nodes if EM.MAX_REPOS > 0: + if len(combined) < EM.MAX_REPOS: + DBM.i(f"\tFetched repos < MAX_REPOS ({len(combined)} < {EM.MAX_REPOS}).") + else: + DBM.i(f"\tMAX_REPOS reached ({EM.MAX_REPOS}).") return combined[: EM.MAX_REPOS] return combined From 5b9e70cddff20c66293d18e8362df888955cdf15 Mon Sep 17 00:00:00 2001 From: Void_The_Null Date: Wed, 14 Jan 2026 00:10:55 +0530 Subject: [PATCH 30/46] Apply suggestions from code review Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .github/workflows/ci_MASTER.yml | 2 +- Dockerfile | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci_MASTER.yml b/.github/workflows/ci_MASTER.yml index 8b20cf63..db87f073 100644 --- a/.github/workflows/ci_MASTER.yml +++ b/.github/workflows/ci_MASTER.yml @@ -113,5 +113,5 @@ jobs: if: ${{ steps.gate.outputs.code == 'true' }} uses: actions/upload-artifact@v4 with: - name: ${{ format('assets-{0}', github.ref_name) }} + name: ${{ format('assets-{0}', env.BRANCH_NAME) }} path: assets diff --git a/Dockerfile b/Dockerfile index 6ba2870e..892ef923 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,8 +11,7 @@ RUN apk add --no-cache g++ jpeg-dev zlib-dev libjpeg make git && pip3 install -r RUN git config --global user.name "readme-bot" RUN git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com" -ADD sources/* /waka-readme-stats/ locales/* +ADD sources/ /waka-readme-stats/sources/ +ADD locales/ /waka-readme-stats/locales/ ENTRYPOINT cd /waka-readme-stats/ && python3 main.py - - From 6004a0e3d2b45fa527406edae5fab38b58428723 Mon Sep 17 00:00:00 2001 From: Anshuman Singh <148977651+DataBoySu@users.noreply.github.com> Date: Wed, 14 Jan 2026 00:20:33 +0530 Subject: [PATCH 31/46] added skip logic --- sources/manager_download.py | 23 ++++++++++++++++++++--- sources/yearly_commit_calculator.py | 20 ++++++++++++++++++-- 2 files changed, 38 insertions(+), 5 deletions(-) diff --git a/sources/manager_download.py b/sources/manager_download.py index e6194538..f71ecb1f 100644 --- a/sources/manager_download.py +++ b/sources/manager_download.py @@ -1,5 +1,6 @@ import asyncio import collections.abc +import json from hashlib import md5 from json import dumps from json import load as json_load @@ -266,10 +267,26 @@ async def _fetch_graphql_query(query: str, retries_count: int = 10, **kwargs) -> ) if res.status_code == 200: return res.json() - elif res.status_code == 502 and retries_count > 0: + + # Transient errors can happen (GitHub flakiness, rate limiting, proxies returning HTML/empty bodies). + if res.status_code in (502, 503, 504, 429, 403) and retries_count > 0: + # Minimal backoff (keeps behavior simple but avoids tight recursion loops) + await asyncio.sleep(1.0) return await DownloadManager._fetch_graphql_query(query, retries_count - 1, **kwargs) - else: - raise Exception(f"Query '{query}' failed to run by returning code of {res.status_code}: {res.json()}") + + try: + body_obj = res.json() + body_preview = dumps(body_obj)[:500] + except (json.JSONDecodeError, ValueError): + body_preview = (res.text or "").replace("\n", " ").replace("\r", " ")[:500] + + content_type = res.headers.get("content-type", "") + rate_remaining = res.headers.get("x-ratelimit-remaining", "?") + rate_reset = res.headers.get("x-ratelimit-reset", "?") + raise Exception( + f"Query '{query}' failed (HTTP {res.status_code}, content-type='{content_type}', " + f"x-ratelimit-remaining={rate_remaining}, x-ratelimit-reset={rate_reset}). Body: {body_preview}" + ) @staticmethod def _find_pagination_and_data_list(response: dict) -> Tuple[List, dict]: diff --git a/sources/yearly_commit_calculator.py b/sources/yearly_commit_calculator.py index 83ffd3f5..c60a4bf0 100644 --- a/sources/yearly_commit_calculator.py +++ b/sources/yearly_commit_calculator.py @@ -54,13 +54,29 @@ async def update_data_with_commit_stats(repo_details: Dict, yearly_data: Dict, d :param date_data: Commit date dictionary to update. """ owner = repo_details["owner"]["login"] - branch_data = await DM.get_remote_graphql("repo_branch_list", owner=owner, name=repo_details["name"]) + try: + branch_data = await DM.get_remote_graphql("repo_branch_list", owner=owner, name=repo_details["name"]) + except Exception as e: + repo_name = "[private]" if repo_details.get("isPrivate") else f"{owner}/{repo_details.get('name', '?')}" + DBM.w(f"\t\tSkipping repo due to branch query error ({repo_name}): {e}") + return if len(branch_data) == 0: DBM.w("\t\tSkipping repo.") return for branch in branch_data: - commit_data = await DM.get_remote_graphql("repo_commit_list", owner=owner, name=repo_details["name"], branch=branch["name"], id=GHM.USER.node_id) + try: + commit_data = await DM.get_remote_graphql( + "repo_commit_list", + owner=owner, + name=repo_details["name"], + branch=branch["name"], + id=GHM.USER.node_id, + ) + except Exception as e: + repo_name = "[private]" if repo_details.get("isPrivate") else f"{owner}/{repo_details.get('name', '?')}" + DBM.w(f"\t\tSkipping branch due to commit query error ({repo_name}@{branch.get('name','?')}): {e}") + continue for commit in commit_data: date = search(r"\d+-\d+-\d+", commit["committedDate"]).group() curr_year = datetime.fromisoformat(date).year From 820b264798c5c50bf46265e3a5a6fea2d2b68de8 Mon Sep 17 00:00:00 2001 From: Anshuman Singh <148977651+DataBoySu@users.noreply.github.com> Date: Wed, 14 Jan 2026 11:52:47 +0530 Subject: [PATCH 32/46] Docker fix+alt max_cap --- README.md | 2 ++ action.yml | 7 ++++++- sources/manager_environment.py | 5 ++++- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9b29b0d6..38a31a9c 100644 --- a/README.md +++ b/README.md @@ -270,6 +270,8 @@ The `IGNORED_REPOS` flag can be set to `"waka-readme-stats, my-first-repo"` (jus The `MAX_REPOS` flag can be set to limit how many GitHub repositories are fetched for analysis (default: `0` = unlimited). This can be useful to speed up runs for accounts with many repos. +If you see examples using `MAX_CAP`, that is a deprecated alias for `MAX_REPOS`. + The `WAKATIME_API_URL` flag can be set if you are hosting your own wakatime compliant backend like [wakapi](https://github.com/muety/wakapi). You only have to supply your base url like so `https://your-own-wakapi.dev/api/` The `SYMBOL_VERSION` flag can be set for the symbol for the progress bar (default: `1`). diff --git a/action.yml b/action.yml index 81fdf9bf..22ba695c 100644 --- a/action.yml +++ b/action.yml @@ -147,6 +147,11 @@ inputs: description: "Maximum number of GitHub repositories to fetch (0 = unlimited)" default: "0" + MAX_CAP: + required: false + description: "(Deprecated) Alias for MAX_REPOS" + default: "0" + SYMBOL_VERSION: required: false description: "Version of the symbol block and empty of the progress bar" @@ -164,7 +169,7 @@ inputs: runs: using: 'docker' - image: 'docker://wakareadmestats/waka-readme-stats:master' + image: 'Dockerfile' branding: icon: 'activity' diff --git a/sources/manager_environment.py b/sources/manager_environment.py index 3b6cb867..c56e6970 100644 --- a/sources/manager_environment.py +++ b/sources/manager_environment.py @@ -60,7 +60,10 @@ class EnvironmentManager: UPDATED_DATE_FORMAT = getenv("INPUT_UPDATED_DATE_FORMAT", "%d/%m/%Y %H:%M:%S") IGNORED_REPOS = getenv("INPUT_IGNORED_REPOS", "").replace(" ", "").split(",") _raw_max_repos = getenv("INPUT_MAX_REPOS", "0").strip() - MAX_REPOS = int(_raw_max_repos) if _raw_max_repos else 0 + _raw_max_cap = getenv("INPUT_MAX_CAP", "0").strip() + # Prefer MAX_REPOS; fall back to MAX_CAP for compatibility. + _raw_repo_cap = _raw_max_repos if _raw_max_repos not in ("", "0") else _raw_max_cap + MAX_REPOS = int(_raw_repo_cap) if _raw_repo_cap else 0 if MAX_REPOS < 0: MAX_REPOS = 0 SYMBOL_VERSION = int(getenv("INPUT_SYMBOL_VERSION", "1")) From 3d991b373514b687c79ceb20bf8ebf67b1a94425 Mon Sep 17 00:00:00 2001 From: Anshuman Singh <148977651+DataBoySu@users.noreply.github.com> Date: Wed, 14 Jan 2026 11:58:02 +0530 Subject: [PATCH 33/46] Docker file error invest --- Dockerfile | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/Dockerfile b/Dockerfile index 6ba2870e..90f577db 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,18 +1,22 @@ FROM python:3.13-alpine -ENV PYTHONUNBUFFERED 1 -ENV PYTHONDONTWRITEBYTECODE 1 +ENV PYTHONUNBUFFERED=1 +ENV PYTHONDONTWRITEBYTECODE=1 RUN mkdir -p /waka-readme-stats/assets -ADD requirements.txt /waka-readme-stats/requirements.txt -RUN apk add --no-cache g++ jpeg-dev zlib-dev libjpeg make git && pip3 install -r /waka-readme-stats/requirements.txt +WORKDIR /waka-readme-stats + +COPY requirements.txt ./requirements.txt +RUN apk add --no-cache g++ jpeg-dev zlib-dev libjpeg make git && pip3 install -r ./requirements.txt RUN git config --global user.name "readme-bot" RUN git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com" -ADD sources/* /waka-readme-stats/ locales/* -ENTRYPOINT cd /waka-readme-stats/ && python3 main.py +COPY sources/. ./ +COPY locales/. ./locales/ + +ENTRYPOINT ["python3", "main.py"] From e2d75ed9b7ca62397a12d0bd8051e16df0b42569 Mon Sep 17 00:00:00 2001 From: Anshuman Singh <148977651+DataBoySu@users.noreply.github.com> Date: Wed, 14 Jan 2026 12:01:04 +0530 Subject: [PATCH 34/46] Docker file error invest --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 90f577db..55935199 100644 --- a/Dockerfile +++ b/Dockerfile @@ -16,7 +16,7 @@ RUN git config --global user.email "41898282+github-actions[bot]@users.noreply.g COPY sources/. ./ COPY locales/. ./locales/ -ENTRYPOINT ["python3", "main.py"] +ENTRYPOINT ["python3", "/waka-readme-stats/sources/main.py"] From 893c07c93295c1506cc3ee7adb435a6cd08993e2 Mon Sep 17 00:00:00 2001 From: Anshuman Singh <148977651+DataBoySu@users.noreply.github.com> Date: Wed, 14 Jan 2026 12:03:26 +0530 Subject: [PATCH 35/46] Docker file error invest --- Dockerfile | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/Dockerfile b/Dockerfile index 55935199..24d54d7f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,22 +1,18 @@ FROM python:3.13-alpine -ENV PYTHONUNBUFFERED=1 -ENV PYTHONDONTWRITEBYTECODE=1 +ENV PYTHONUNBUFFERED 1 +ENV PYTHONDONTWRITEBYTECODE 1 RUN mkdir -p /waka-readme-stats/assets -WORKDIR /waka-readme-stats - -COPY requirements.txt ./requirements.txt -RUN apk add --no-cache g++ jpeg-dev zlib-dev libjpeg make git && pip3 install -r ./requirements.txt +ADD requirements.txt /waka-readme-stats/requirements.txt +RUN apk add --no-cache g++ jpeg-dev zlib-dev libjpeg make git && pip3 install -r /waka-readme-stats/requirements.txt RUN git config --global user.name "readme-bot" RUN git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com" -COPY sources/. ./ -COPY locales/. ./locales/ - -ENTRYPOINT ["python3", "/waka-readme-stats/sources/main.py"] +ADD sources/* /waka-readme-stats/ +ENTRYPOINT cd /waka-readme-stats/ && python3 main.py From d044ba01278328257127844cd273d7758f3815af Mon Sep 17 00:00:00 2001 From: Anshuman Singh <148977651+DataBoySu@users.noreply.github.com> Date: Wed, 14 Jan 2026 12:14:14 +0530 Subject: [PATCH 36/46] Docker fix --- Dockerfile | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index 24d54d7f..0edc340e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ FROM python:3.13-alpine -ENV PYTHONUNBUFFERED 1 -ENV PYTHONDONTWRITEBYTECODE 1 +ENV PYTHONUNBUFFERED=1 +ENV PYTHONDONTWRITEBYTECODE=1 RUN mkdir -p /waka-readme-stats/assets @@ -13,6 +13,3 @@ RUN git config --global user.email "41898282+github-actions[bot]@users.noreply.g ADD sources/* /waka-readme-stats/ ENTRYPOINT cd /waka-readme-stats/ && python3 main.py - - - From 5432434e6c29e364fa219a668087a150e72e09f9 Mon Sep 17 00:00:00 2001 From: Anshuman Singh <148977651+DataBoySu@users.noreply.github.com> Date: Wed, 14 Jan 2026 12:20:41 +0530 Subject: [PATCH 37/46] Syntax fix --- sources/yearly_commit_calculator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/yearly_commit_calculator.py b/sources/yearly_commit_calculator.py index c60a4bf0..ead9a8fe 100644 --- a/sources/yearly_commit_calculator.py +++ b/sources/yearly_commit_calculator.py @@ -75,7 +75,7 @@ async def update_data_with_commit_stats(repo_details: Dict, yearly_data: Dict, d ) except Exception as e: repo_name = "[private]" if repo_details.get("isPrivate") else f"{owner}/{repo_details.get('name', '?')}" - DBM.w(f"\t\tSkipping branch due to commit query error ({repo_name}@{branch.get('name','?')}): {e}") + DBM.w(f"\t\tSkipping branch due to commit query error ({repo_name}@{branch.get('name', '?')}): {e}") continue for commit in commit_data: date = search(r"\d+-\d+-\d+", commit["committedDate"]).group() From 10931ea538116f30f832ba190728a201bcd8ffa6 Mon Sep 17 00:00:00 2001 From: Anshuman Singh <148977651+DataBoySu@users.noreply.github.com> Date: Wed, 14 Jan 2026 13:17:32 +0530 Subject: [PATCH 38/46] pygithub modifications --- sources/main.py | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/sources/main.py b/sources/main.py index e01ab6ab..423d0c26 100644 --- a/sources/main.py +++ b/sources/main.py @@ -199,8 +199,35 @@ async def get_stats() -> str: DBM.w("Profile views skipped in DEBUG_RUN mode.") else: DBM.i("Adding profile views info...") - data = GHM.REMOTE.get_views_traffic(per="week") - stats += f"![Profile Views](http://img.shields.io/badge/{quote(FM.t('Profile Views'))}-{data['count']}-blue?style={quote(EM.BADGE_STYLE)})\n\n" + views_count = 0 + try: + traffic = GHM.REMOTE.get_views_traffic(per="week") + except Exception as e: + DBM.w(f"Profile views unavailable, defaulting to 0: {e}") + else: + if isinstance(traffic, dict): + views_count = traffic.get("count") + elif hasattr(traffic, "count"): + views_count = getattr(traffic, "count") + elif isinstance(traffic, (list, tuple)): + first = traffic[0] if len(traffic) > 0 else None + if isinstance(first, dict): + views_count = first.get("count") + elif hasattr(first, "count"): + views_count = getattr(first, "count") + elif isinstance(first, list) and all(hasattr(v, "count") for v in first): + views_count = sum(getattr(v, "count") for v in first) + elif all(hasattr(v, "count") for v in traffic): + views_count = sum(getattr(v, "count") for v in traffic) + + if views_count is None: + DBM.w(f"Profile views returned unexpected type ({type(traffic)}), defaulting to 0.") + views_count = 0 + + stats += ( + f"![Profile Views](http://img.shields.io/badge/" + f"{quote(FM.t('Profile Views'))}-{views_count}-blue?style={quote(EM.BADGE_STYLE)})\n\n" + ) if EM.SHOW_LINES_OF_CODE: DBM.i("Adding lines of code info...") From 462ef8ba18a4ddb83596816214872341bd7baa7d Mon Sep 17 00:00:00 2001 From: Anshuman Singh <148977651+DataBoySu@users.noreply.github.com> Date: Wed, 14 Jan 2026 13:20:51 +0530 Subject: [PATCH 39/46] reformat main script --- sources/main.py | 93 ++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 76 insertions(+), 17 deletions(-) diff --git a/sources/main.py b/sources/main.py index 423d0c26..d587d02b 100644 --- a/sources/main.py +++ b/sources/main.py @@ -16,7 +16,11 @@ from manager_debug import init_debug_manager, DebugManager as DBM from graphics_chart_drawer import create_loc_graph, GRAPH_PATH from yearly_commit_calculator import calculate_commit_data -from graphics_list_formatter import make_list, make_commit_day_time_list, make_language_per_repo_list +from graphics_list_formatter import ( + make_list, + make_commit_day_time_list, + make_language_per_repo_list, +) async def get_waka_time_stats(repositories: Dict, commit_dates: Dict) -> str: @@ -35,11 +39,19 @@ async def get_waka_time_stats(repositories: Dict, commit_dates: Dict) -> str: if data is None: DBM.p("WakaTime data unavailable!") return stats - if EM.SHOW_COMMIT or EM.SHOW_DAYS_OF_WEEK: # if any on flag is turned on then we need to calculate the data and print accordingly + if ( + EM.SHOW_COMMIT or EM.SHOW_DAYS_OF_WEEK + ): # if any on flag is turned on then we need to calculate the data and print accordingly DBM.i("Adding user commit day time info...") stats += f"{await make_commit_day_time_list(data['data']['timezone'], repositories, commit_dates)}\n\n" - if EM.SHOW_TIMEZONE or EM.SHOW_LANGUAGE or EM.SHOW_EDITORS or EM.SHOW_PROJECTS or EM.SHOW_OS: + if ( + EM.SHOW_TIMEZONE + or EM.SHOW_LANGUAGE + or EM.SHOW_EDITORS + or EM.SHOW_PROJECTS + or EM.SHOW_OS + ): no_activity = FM.t("No Activity Tracked This Week") stats += f"πŸ“Š **{FM.t('This Week I Spend My Time On')}** \n\n```text\n" @@ -50,22 +62,38 @@ async def get_waka_time_stats(repositories: Dict, commit_dates: Dict) -> str: if EM.SHOW_LANGUAGE: DBM.i("Adding user top languages info...") - lang_list = no_activity if len(data["data"]["languages"]) == 0 else make_list(data["data"]["languages"]) + lang_list = ( + no_activity + if len(data["data"]["languages"]) == 0 + else make_list(data["data"]["languages"]) + ) stats += f"πŸ’¬ {FM.t('Languages')}: \n{lang_list}\n\n" if EM.SHOW_EDITORS: DBM.i("Adding user editors info...") - edit_list = no_activity if len(data["data"]["editors"]) == 0 else make_list(data["data"]["editors"]) + edit_list = ( + no_activity + if len(data["data"]["editors"]) == 0 + else make_list(data["data"]["editors"]) + ) stats += f"πŸ”₯ {FM.t('Editors')}: \n{edit_list}\n\n" if EM.SHOW_PROJECTS: DBM.i("Adding user projects info...") - project_list = no_activity if len(data["data"]["projects"]) == 0 else make_list(data["data"]["projects"]) + project_list = ( + no_activity + if len(data["data"]["projects"]) == 0 + else make_list(data["data"]["projects"]) + ) stats += f"πŸ±β€πŸ’» {FM.t('Projects')}: \n{project_list}\n\n" if EM.SHOW_OS: DBM.i("Adding user operating systems info...") - os_list = no_activity if len(data["data"]["operating_systems"]) == 0 else make_list(data["data"]["operating_systems"]) + os_list = ( + no_activity + if len(data["data"]["operating_systems"]) == 0 + else make_list(data["data"]["operating_systems"]) + ) stats += f"πŸ’» {FM.t('operating system')}: \n{os_list}\n\n" stats = f"{stats[:-1]}```\n\n" @@ -99,7 +127,10 @@ async def get_short_github_info() -> str: DBM.i("Adding contributions info...") if len(data["years"]) > 0: - contributions = FM.t("Contributions in the year") % (intcomma(data["years"][0]["total"]), data["years"][0]["year"]) + contributions = FM.t("Contributions in the year") % ( + intcomma(data["years"][0]["total"]), + data["years"][0]["year"], + ) stats += f"> πŸ† {contributions}\n > \n" else: DBM.p("GitHub contributions data unavailable!") @@ -119,7 +150,9 @@ async def get_short_github_info() -> str: stats += f"> πŸ“œ {FM.t('public repository') % public_repo} \n > \n" DBM.i("Adding private repositories info...") - private_repo = GHM.USER.owned_private_repos if GHM.USER.owned_private_repos is not None else 0 + private_repo = ( + GHM.USER.owned_private_repos if GHM.USER.owned_private_repos is not None else 0 + ) if public_repo != 1: stats += f"> πŸ”‘ {FM.t('private repositories') % private_repo} \n > \n" else: @@ -153,9 +186,15 @@ async def collect_user_repositories() -> Dict: DBM.g("\tUser repository list collected!") remaining = (EM.MAX_REPOS - len(repositories)) if EM.MAX_REPOS > 0 else None - contributed = await DM.get_remote_graphql("repos_contributed_to", username=GHM.USER.login, _max_nodes=remaining) + contributed = await DM.get_remote_graphql( + "repos_contributed_to", username=GHM.USER.login, _max_nodes=remaining + ) - contributed_nodes = [repo for repo in contributed if repo is not None and repo["name"] not in repo_names and not repo["isFork"]] + contributed_nodes = [ + repo + for repo in contributed + if repo is not None and repo["name"] not in repo_names and not repo["isFork"] + ] DBM.g("\tUser contributed to repository list collected!") combined = repositories + contributed_nodes @@ -180,7 +219,12 @@ async def get_stats() -> str: stats = str() repositories = await collect_user_repositories() - if EM.SHOW_LINES_OF_CODE or EM.SHOW_LOC_CHART or EM.SHOW_COMMIT or EM.SHOW_DAYS_OF_WEEK: # calculate commit data if any one of these is enabled + if ( + EM.SHOW_LINES_OF_CODE + or EM.SHOW_LOC_CHART + or EM.SHOW_COMMIT + or EM.SHOW_DAYS_OF_WEEK + ): # calculate commit data if any one of these is enabled yearly_data, commit_data = await calculate_commit_data(repositories) else: yearly_data, commit_data = dict(), dict() @@ -215,13 +259,17 @@ async def get_stats() -> str: views_count = first.get("count") elif hasattr(first, "count"): views_count = getattr(first, "count") - elif isinstance(first, list) and all(hasattr(v, "count") for v in first): + elif isinstance(first, list) and all( + hasattr(v, "count") for v in first + ): views_count = sum(getattr(v, "count") for v in first) elif all(hasattr(v, "count") for v in traffic): views_count = sum(getattr(v, "count") for v in traffic) if views_count is None: - DBM.w(f"Profile views returned unexpected type ({type(traffic)}), defaulting to 0.") + DBM.w( + f"Profile views returned unexpected type ({type(traffic)}), defaulting to 0." + ) views_count = 0 stats += ( @@ -231,7 +279,14 @@ async def get_stats() -> str: if EM.SHOW_LINES_OF_CODE: DBM.i("Adding lines of code info...") - total_loc = sum([yearly_data[y][q][d]["add"] for y in yearly_data.keys() for q in yearly_data[y].keys() for d in yearly_data[y][q].keys()]) + total_loc = sum( + [ + yearly_data[y][q][d]["add"] + for y in yearly_data.keys() + for q in yearly_data[y].keys() + for d in yearly_data[y][q].keys() + ] + ) data = f"{intword(total_loc, format='%.2f')} {FM.t('Lines of code')}" stats += ( f"![Lines of code](https://img.shields.io/badge/" @@ -250,11 +305,15 @@ async def get_stats() -> str: if EM.SHOW_LOC_CHART: await create_loc_graph(yearly_data, GRAPH_PATH) - stats += f"**{FM.t('Timeline')}**\n\n{GHM.update_chart('Lines of Code', GRAPH_PATH)}" + stats += ( + f"**{FM.t('Timeline')}**\n\n{GHM.update_chart('Lines of Code', GRAPH_PATH)}" + ) if EM.SHOW_UPDATED_DATE: DBM.i("Adding last updated time...") - stats += f"\n Last Updated on {datetime.now().strftime(EM.UPDATED_DATE_FORMAT)} UTC" + stats += ( + f"\n Last Updated on {datetime.now().strftime(EM.UPDATED_DATE_FORMAT)} UTC" + ) DBM.g("Stats for README collected!") return stats From c6be4b6be199261146ff03451aab551cab50becd Mon Sep 17 00:00:00 2001 From: Anshuman Singh <148977651+DataBoySu@users.noreply.github.com> Date: Wed, 14 Jan 2026 13:46:59 +0530 Subject: [PATCH 40/46] main script reformatted --- sources/main.py | 87 +++++++++---------------------------------------- 1 file changed, 16 insertions(+), 71 deletions(-) diff --git a/sources/main.py b/sources/main.py index d587d02b..ac715b18 100644 --- a/sources/main.py +++ b/sources/main.py @@ -39,19 +39,11 @@ async def get_waka_time_stats(repositories: Dict, commit_dates: Dict) -> str: if data is None: DBM.p("WakaTime data unavailable!") return stats - if ( - EM.SHOW_COMMIT or EM.SHOW_DAYS_OF_WEEK - ): # if any on flag is turned on then we need to calculate the data and print accordingly + if EM.SHOW_COMMIT or EM.SHOW_DAYS_OF_WEEK: # if any on flag is turned on then we need to calculate the data and print accordingly DBM.i("Adding user commit day time info...") stats += f"{await make_commit_day_time_list(data['data']['timezone'], repositories, commit_dates)}\n\n" - if ( - EM.SHOW_TIMEZONE - or EM.SHOW_LANGUAGE - or EM.SHOW_EDITORS - or EM.SHOW_PROJECTS - or EM.SHOW_OS - ): + if EM.SHOW_TIMEZONE or EM.SHOW_LANGUAGE or EM.SHOW_EDITORS or EM.SHOW_PROJECTS or EM.SHOW_OS: no_activity = FM.t("No Activity Tracked This Week") stats += f"πŸ“Š **{FM.t('This Week I Spend My Time On')}** \n\n```text\n" @@ -62,38 +54,22 @@ async def get_waka_time_stats(repositories: Dict, commit_dates: Dict) -> str: if EM.SHOW_LANGUAGE: DBM.i("Adding user top languages info...") - lang_list = ( - no_activity - if len(data["data"]["languages"]) == 0 - else make_list(data["data"]["languages"]) - ) + lang_list = no_activity if len(data["data"]["languages"]) == 0 else make_list(data["data"]["languages"]) stats += f"πŸ’¬ {FM.t('Languages')}: \n{lang_list}\n\n" if EM.SHOW_EDITORS: DBM.i("Adding user editors info...") - edit_list = ( - no_activity - if len(data["data"]["editors"]) == 0 - else make_list(data["data"]["editors"]) - ) + edit_list = no_activity if len(data["data"]["editors"]) == 0 else make_list(data["data"]["editors"]) stats += f"πŸ”₯ {FM.t('Editors')}: \n{edit_list}\n\n" if EM.SHOW_PROJECTS: DBM.i("Adding user projects info...") - project_list = ( - no_activity - if len(data["data"]["projects"]) == 0 - else make_list(data["data"]["projects"]) - ) + project_list = no_activity if len(data["data"]["projects"]) == 0 else make_list(data["data"]["projects"]) stats += f"πŸ±β€πŸ’» {FM.t('Projects')}: \n{project_list}\n\n" if EM.SHOW_OS: DBM.i("Adding user operating systems info...") - os_list = ( - no_activity - if len(data["data"]["operating_systems"]) == 0 - else make_list(data["data"]["operating_systems"]) - ) + os_list = no_activity if len(data["data"]["operating_systems"]) == 0 else make_list(data["data"]["operating_systems"]) stats += f"πŸ’» {FM.t('operating system')}: \n{os_list}\n\n" stats = f"{stats[:-1]}```\n\n" @@ -150,9 +126,7 @@ async def get_short_github_info() -> str: stats += f"> πŸ“œ {FM.t('public repository') % public_repo} \n > \n" DBM.i("Adding private repositories info...") - private_repo = ( - GHM.USER.owned_private_repos if GHM.USER.owned_private_repos is not None else 0 - ) + private_repo = GHM.USER.owned_private_repos if GHM.USER.owned_private_repos is not None else 0 if public_repo != 1: stats += f"> πŸ”‘ {FM.t('private repositories') % private_repo} \n > \n" else: @@ -186,15 +160,9 @@ async def collect_user_repositories() -> Dict: DBM.g("\tUser repository list collected!") remaining = (EM.MAX_REPOS - len(repositories)) if EM.MAX_REPOS > 0 else None - contributed = await DM.get_remote_graphql( - "repos_contributed_to", username=GHM.USER.login, _max_nodes=remaining - ) + contributed = await DM.get_remote_graphql("repos_contributed_to", username=GHM.USER.login, _max_nodes=remaining) - contributed_nodes = [ - repo - for repo in contributed - if repo is not None and repo["name"] not in repo_names and not repo["isFork"] - ] + contributed_nodes = [repo for repo in contributed if repo is not None and repo["name"] not in repo_names and not repo["isFork"]] DBM.g("\tUser contributed to repository list collected!") combined = repositories + contributed_nodes @@ -219,12 +187,7 @@ async def get_stats() -> str: stats = str() repositories = await collect_user_repositories() - if ( - EM.SHOW_LINES_OF_CODE - or EM.SHOW_LOC_CHART - or EM.SHOW_COMMIT - or EM.SHOW_DAYS_OF_WEEK - ): # calculate commit data if any one of these is enabled + if EM.SHOW_LINES_OF_CODE or EM.SHOW_LOC_CHART or EM.SHOW_COMMIT or EM.SHOW_DAYS_OF_WEEK: # calculate commit data if any one of these is enabled yearly_data, commit_data = await calculate_commit_data(repositories) else: yearly_data, commit_data = dict(), dict() @@ -259,34 +222,20 @@ async def get_stats() -> str: views_count = first.get("count") elif hasattr(first, "count"): views_count = getattr(first, "count") - elif isinstance(first, list) and all( - hasattr(v, "count") for v in first - ): + elif isinstance(first, list) and all(hasattr(v, "count") for v in first): views_count = sum(getattr(v, "count") for v in first) elif all(hasattr(v, "count") for v in traffic): views_count = sum(getattr(v, "count") for v in traffic) if views_count is None: - DBM.w( - f"Profile views returned unexpected type ({type(traffic)}), defaulting to 0." - ) + DBM.w(f"Profile views returned unexpected type ({type(traffic)}), defaulting to 0.") views_count = 0 - stats += ( - f"![Profile Views](http://img.shields.io/badge/" - f"{quote(FM.t('Profile Views'))}-{views_count}-blue?style={quote(EM.BADGE_STYLE)})\n\n" - ) + stats += f"![Profile Views](http://img.shields.io/badge/" f"{quote(FM.t('Profile Views'))}-{views_count}-blue?style={quote(EM.BADGE_STYLE)})\n\n" if EM.SHOW_LINES_OF_CODE: DBM.i("Adding lines of code info...") - total_loc = sum( - [ - yearly_data[y][q][d]["add"] - for y in yearly_data.keys() - for q in yearly_data[y].keys() - for d in yearly_data[y][q].keys() - ] - ) + total_loc = sum([yearly_data[y][q][d]["add"] for y in yearly_data.keys() for q in yearly_data[y].keys() for d in yearly_data[y][q].keys()]) data = f"{intword(total_loc, format='%.2f')} {FM.t('Lines of code')}" stats += ( f"![Lines of code](https://img.shields.io/badge/" @@ -305,15 +254,11 @@ async def get_stats() -> str: if EM.SHOW_LOC_CHART: await create_loc_graph(yearly_data, GRAPH_PATH) - stats += ( - f"**{FM.t('Timeline')}**\n\n{GHM.update_chart('Lines of Code', GRAPH_PATH)}" - ) + stats += f"**{FM.t('Timeline')}**\n\n{GHM.update_chart('Lines of Code', GRAPH_PATH)}" if EM.SHOW_UPDATED_DATE: DBM.i("Adding last updated time...") - stats += ( - f"\n Last Updated on {datetime.now().strftime(EM.UPDATED_DATE_FORMAT)} UTC" - ) + stats += f"\n Last Updated on {datetime.now().strftime(EM.UPDATED_DATE_FORMAT)} UTC" DBM.g("Stats for README collected!") return stats From ff12ba628b66aa5337cc6554d3f259eebc3626de Mon Sep 17 00:00:00 2001 From: Anshuman Singh <148977651+DataBoySu@users.noreply.github.com> Date: Wed, 14 Jan 2026 14:21:42 +0530 Subject: [PATCH 41/46] import fixed --- sources/manager_download.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sources/manager_download.py b/sources/manager_download.py index f71ecb1f..cd43e274 100644 --- a/sources/manager_download.py +++ b/sources/manager_download.py @@ -2,8 +2,7 @@ import collections.abc import json from hashlib import md5 -from json import dumps -from json import load as json_load +from json import dumps, load as json_load from os.path import join from string import Template from typing import Any, Callable, Optional, List, Tuple From b1ca74270f76bd6bd098756823fef47b309ddec8 Mon Sep 17 00:00:00 2001 From: Anshuman Singh <148977651+DataBoySu@users.noreply.github.com> Date: Wed, 14 Jan 2026 14:24:32 +0530 Subject: [PATCH 42/46] import fixed --- sources/manager_download.py | 1 - 1 file changed, 1 deletion(-) diff --git a/sources/manager_download.py b/sources/manager_download.py index cd43e274..3067d95b 100644 --- a/sources/manager_download.py +++ b/sources/manager_download.py @@ -1,6 +1,5 @@ import asyncio import collections.abc -import json from hashlib import md5 from json import dumps, load as json_load from os.path import join From 6dd815a62a8227b2b446e77f788be06f18ddebd0 Mon Sep 17 00:00:00 2001 From: Anshuman Singh <148977651+DataBoySu@users.noreply.github.com> Date: Wed, 14 Jan 2026 14:29:04 +0530 Subject: [PATCH 43/46] import fixed --- sources/manager_download.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sources/manager_download.py b/sources/manager_download.py index 3067d95b..14257345 100644 --- a/sources/manager_download.py +++ b/sources/manager_download.py @@ -1,7 +1,7 @@ import asyncio import collections.abc +import json from hashlib import md5 -from json import dumps, load as json_load from os.path import join from string import Template from typing import Any, Callable, Optional, List, Tuple @@ -154,7 +154,7 @@ class DownloadManager: def _load_mock_json(filename: str) -> dict: path = join(EM.MOCK_DATA_DIR, filename) with open(path, "r", encoding="utf-8") as f: - return json_load(f) + return json.load(f) @staticmethod async def load_remote_resources(**resources: str): @@ -274,7 +274,7 @@ async def _fetch_graphql_query(query: str, retries_count: int = 10, **kwargs) -> try: body_obj = res.json() - body_preview = dumps(body_obj)[:500] + body_preview = json.dumps(body_obj)[:500] except (json.JSONDecodeError, ValueError): body_preview = (res.text or "").replace("\n", " ").replace("\r", " ")[:500] @@ -352,7 +352,7 @@ async def get_remote_graphql(query: str, **kwargs) -> Any: max_nodes = kwargs.pop("_max_nodes", None) cache_key_kwargs = dict(kwargs) cache_key_kwargs["_max_nodes"] = max_nodes - key = f"{query}_{md5(dumps(cache_key_kwargs, sort_keys=True).encode('utf-8')).digest()}" + key = f"{query}_{md5(json.dumps(cache_key_kwargs, sort_keys=True).encode('utf-8')).digest()}" if key not in DownloadManager._REMOTE_RESOURCES_CACHE: if "$pagination" in GITHUB_API_QUERIES[query]: res = await DownloadManager._fetch_graphql_paginated(query, max_nodes=max_nodes, **kwargs) From c4fe578a9a7bb1f12d9b10bba76507ad0bb7286c Mon Sep 17 00:00:00 2001 From: Anshuman Singh <148977651+DataBoySu@users.noreply.github.com> Date: Wed, 14 Jan 2026 15:06:04 +0530 Subject: [PATCH 44/46] remove unreachable code + restore safe docker config --- .github/workflows/ci_PR.yml | 80 +++++-------------------------------- action.yml | 2 +- 2 files changed, 10 insertions(+), 72 deletions(-) diff --git a/.github/workflows/ci_PR.yml b/.github/workflows/ci_PR.yml index 886473a5..8ea8ff8d 100644 --- a/.github/workflows/ci_PR.yml +++ b/.github/workflows/ci_PR.yml @@ -101,76 +101,14 @@ jobs: INPUT_SHOW_DAYS_OF_WEEK: True INPUT_SHOW_LANGUAGE_PER_REPO: True INPUT_SHOW_UPDATED_DATE: True + run: | + mkdir -p preview + python3 sources/main.py --preview | tee preview/preview.md - run: python3 sources/main.py - - - name: Upsert preview comment πŸ’¬ - if: ${{ steps.changed.outputs.code == 'true' }} - uses: actions/github-script@v7 - env: - README_CONTENT: ${{ steps.make-stats.outputs.README_CONTENT }} + - name: Upload preview artifact + if: ${{ always() && steps.changed.outputs.code == 'true' }} + uses: actions/upload-artifact@v4 with: - script: | - const marker = 'README stats current output:' - const body = process.env.README_CONTENT || '' - - if (!context.payload.pull_request) { - core.info('No pull_request in context; skipping comment.') - return - } - - if (!body.trim()) { - core.warning('README_CONTENT is empty; skipping comment.') - return - } - - const { owner, repo } = context.repo - const issue_number = context.payload.pull_request.number - - try { - const { data: comments } = await github.rest.issues.listComments({ - owner, - repo, - issue_number, - per_page: 100, - }) - - const botComments = comments - .filter(c => c.user?.type === 'Bot') - .filter(c => (c.body || '').startsWith(marker)) - .sort((a, b) => new Date(b.created_at) - new Date(a.created_at)) - - const [latest, ...older] = botComments - - // Hide older previews (if any) - for (const c of older) { - const current = c.body || '' - const alreadyHidden = current.startsWith('~~') - if (alreadyHidden) continue - await github.rest.issues.updateComment({ - owner, - repo, - comment_id: c.id, - body: `~~${current}~~\n\n_This preview has been superseded by a newer run._`, - }) - } - - // Update the most recent preview if it exists; otherwise create one. - if (latest) { - await github.rest.issues.updateComment({ - owner, - repo, - comment_id: latest.id, - body, - }) - } else { - await github.rest.issues.createComment({ - owner, - repo, - issue_number, - body, - }) - } - } catch (e) { - core.warning(`Unable to create/update PR comment: ${e.message || e}`) - } \ No newline at end of file + name: preview-stats + path: preview/preview.md + if-no-files-found: ignore \ No newline at end of file diff --git a/action.yml b/action.yml index 22ba695c..50a1d7aa 100644 --- a/action.yml +++ b/action.yml @@ -169,7 +169,7 @@ inputs: runs: using: 'docker' - image: 'Dockerfile' + image: 'docker://wakareadmestats/waka-readme-stats:master' branding: icon: 'activity' From 37b21be0a4b5a0c2105d061c97a9a866a41b6641 Mon Sep 17 00:00:00 2001 From: Anshuman Singh <148977651+DataBoySu@users.noreply.github.com> Date: Wed, 14 Jan 2026 15:09:43 +0530 Subject: [PATCH 45/46] Preview update --- action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/action.yml b/action.yml index 22ba695c..50a1d7aa 100644 --- a/action.yml +++ b/action.yml @@ -169,7 +169,7 @@ inputs: runs: using: 'docker' - image: 'Dockerfile' + image: 'docker://wakareadmestats/waka-readme-stats:master' branding: icon: 'activity' From 7b6f248ad9dc1799529baeac6ebff567dfe922c5 Mon Sep 17 00:00:00 2001 From: Anshuman Singh <148977651+DataBoySu@users.noreply.github.com> Date: Wed, 14 Jan 2026 15:28:16 +0530 Subject: [PATCH 46/46] change comment process --- .github/workflows/ci_PR.yml | 89 ++++++++++++++++++++++++++++++++++++- 1 file changed, 87 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci_PR.yml b/.github/workflows/ci_PR.yml index 115ca742..68402523 100644 --- a/.github/workflows/ci_PR.yml +++ b/.github/workflows/ci_PR.yml @@ -101,14 +101,99 @@ jobs: INPUT_SHOW_DAYS_OF_WEEK: True INPUT_SHOW_LANGUAGE_PER_REPO: True INPUT_SHOW_UPDATED_DATE: True + + run: | + mkdir -p preview + python3 sources/main.py 2>&1 | tee preview/run.log + + - name: Write preview markdown + if: ${{ steps.changed.outputs.code == 'true' }} + env: + README_CONTENT: ${{ steps.make-stats.outputs.README_CONTENT }} run: | mkdir -p preview - python3 sources/main.py --preview | tee preview/preview.md + printf '%s\n' "$README_CONTENT" > preview/preview.md + if [ ! -s preview/preview.md ]; then + echo "README_CONTENT was empty." > preview/preview.md + fi - name: Upload preview artifact if: ${{ always() && steps.changed.outputs.code == 'true' }} uses: actions/upload-artifact@v4 with: name: preview-stats - path: preview/preview.md + path: | + preview/preview.md + preview/run.log if-no-files-found: ignore + + - name: Upsert preview comment πŸ’¬ + if: ${{ steps.changed.outputs.code == 'true' && github.event.pull_request.head.repo.full_name == github.repository }} + uses: actions/github-script@v7 + env: + README_CONTENT: ${{ steps.make-stats.outputs.README_CONTENT }} + with: + script: | + const marker = 'README stats current output:' + const body = process.env.README_CONTENT || '' + + if (!context.payload.pull_request) { + core.info('No pull_request in context; skipping comment.') + return + } + + if (!body.trim()) { + core.warning('README_CONTENT is empty; skipping comment.') + return + } + + const { owner, repo } = context.repo + const issue_number = context.payload.pull_request.number + + try { + const { data: comments } = await github.rest.issues.listComments({ + owner, + repo, + issue_number, + per_page: 100, + }) + + const botComments = comments + .filter(c => c.user?.type === 'Bot') + .filter(c => (c.body || '').startsWith(marker)) + .sort((a, b) => new Date(b.created_at) - new Date(a.created_at)) + + const [latest, ...older] = botComments + + // Hide older previews (if any) + for (const c of older) { + const current = c.body || '' + const alreadyHidden = current.startsWith('~~') + if (alreadyHidden) continue + await github.rest.issues.updateComment({ + owner, + repo, + comment_id: c.id, + body: `~~${current}~~\n\n_This preview has been superseded by a newer run._`, + }) + } + + // Update the most recent preview if it exists; otherwise create one. + if (latest) { + await github.rest.issues.updateComment({ + owner, + repo, + comment_id: latest.id, + body, + }) + } else { + await github.rest.issues.createComment({ + owner, + repo, + issue_number, + body, + }) + } + } catch (e) { + core.warning(`Unable to create/update PR comment: ${e.message || e}`) + }