Turn your learning into visible GitHub contributions. Every problem solved, every lecture watched, every lesson completed -- automatically committed to your contribution graph.
Progress Push is a cross-browser extension that silently monitors your activity on learning platforms and converts it into real GitHub commits. Your daily grind on LeetCode, Coursera, or Duolingo becomes a permanent part of your developer profile -- no manual effort required.
How it works:
Learning Platform --> Chrome Extension --> GitHub API --> Commit --> Green Square
The extension fires a repository_dispatch event to a private GitHub repository. A GitHub Action picks it up and writes a structured commit, keeping your contribution graph active and your progress documented.
| Feature | Description |
|---|---|
| Auto-Detection | Detects completed problems, lectures, and lessons without user intervention |
| Manual Push | Log progress from any platform via the extension popup |
| Custom Platforms | Add your own platforms (Udemy, YouTube, etc.) for manual tracking |
| Smart Debouncing | Prevents duplicate commits using persistent storage with 24-hour expiration |
| Auto-Setup | One-click repository initialization with the required GitHub Action workflow |
| Cross-Browser | Works on Chrome, Edge, Brave, Opera, Vivaldi, and Firefox |
| Privacy-First | Token stored in encrypted browser storage. Data goes directly to GitHub API only |
| Platform | Detection Method | Type |
|---|---|---|
| LeetCode | Monitors submission results for "Accepted" verdict | Automated |
| Coursera | Tracks video completion checkmarks and quiz pass notifications | Automated |
| Duolingo | Detects lesson completion screens and XP earned | Automated |
| Custom | User-defined platforms added via Settings | Manual |
- Go to github.com/new
- Name it
progress-log(or any name you prefer) - Set visibility to Private (contributions still count on your profile)
- Initialize with a README
- Push to main
- Go to GitHub Token Settings
- Create a Fine-grained token with these permissions:
- Repository access: Select your
progress-logrepo only - Contents: Read and Write
- Actions: Read and Write
- Workflows: Read and Write
- Repository access: Select your
- Copy the token immediately -- you will not see it again
Chrome / Edge / Brave:
- Open
chrome://extensions - Enable Developer mode (top-right toggle)
- Click Load unpacked
- Select the
chrome-extension/folder from this project
Firefox:
- Open
about:debugging#/runtime/this-firefox - Click Load Temporary Add-on
- Select the
manifest.jsonfile insidechrome-extension/
- Click the extension icon in your toolbar
- Go to the Settings tab
- Enter your GitHub Token, Username, and Repository Name
- Click Save Configuration
- Click Init Repository (Auto-Setup) to deploy the GitHub Action workflow
- Click Test Connection to verify everything works
Once configured, the extension works silently in the background:
- LeetCode: Solve a problem and get "Accepted" -- a commit is created automatically
- Coursera: Complete a video lecture or pass a quiz -- logged instantly
- Duolingo: Finish a lesson -- your XP and language are recorded
For platforms without automated detection:
- Click the extension icon
- Go to the Manual tab
- Select a platform (or add a custom one from Settings)
- Describe your activity
- Click Push to GitHub
You can add any platform you use for learning:
- Go to Settings
- Scroll to Managed Platforms
- Click + Add Custom Platform
- Enter the platform name (e.g., "Udemy", "YouTube", "Books")
- The platform appears in your Manual push dropdown
Each commit creates a structured log entry in your repository:
LeetCode: Solved: Two Sum (Easy)
Coursera: Watched: "Introduction to ML" -- Machine Learning Specialization
Duolingo: Completed Arabic lesson (+10 XP)
YouTube: Watched: System Design Interview patterns
Daily logs are organized by date in the logs/ directory:
progress-log/
README.md # Auto-updated with latest activity
logs/
2026-05-01.md
2026-05-02.md
2026-05-03.md
progress-push/
.github/
workflows/
log-progress.yml # GitHub Action that creates commits
chrome-extension/
manifest.json # Extension configuration (Manifest V3)
background.js # Service worker: GitHub API, dispatch events
popup.html # Extension UI: history, manual push, settings
popup.js # UI logic: tabs, platform management, push flow
content/
leetcode.js # Auto-detect accepted submissions
coursera.js # Auto-detect video/quiz completions
duolingo.js # Auto-detect lesson completions
To prevent duplicate commits, the extension uses a multi-layer debouncing system:
| Layer | Scope | Duration | Storage |
|---|---|---|---|
| Session Lock | Per-tab | Until page refresh | In-memory variable |
| Persistent Debounce | Per-activity | 24 hours | chrome.storage.local |
| History Dedup | Global | 10 minutes | Background script check |
Content Script (detects activity)
|
v
Background Service Worker (validates + deduplicates)
|
v
GitHub API: POST /repos/{owner}/{repo}/dispatches
|
v
GitHub Action: log-progress.yml (creates commit)
| Browser | Support | Notes |
|---|---|---|
| Google Chrome | Full | Primary development target |
| Microsoft Edge | Full | Chromium-based, identical behavior |
| Brave | Full | Chromium-based |
| Opera / Opera GX | Full | Chromium-based |
| Vivaldi | Full | Chromium-based |
| Firefox | Full | Requires about:debugging for local loading |
| Problem | Cause | Solution |
|---|---|---|
| "Repo not found" | Incorrect owner or repo name | Check spelling (case-sensitive) |
| "HTTP 422" | Missing workflow file | Click Init Repository in Settings |
| "HTTP 403" | Token lacks permissions | Regenerate token with Contents + Actions + Workflows R/W |
| No auto-detection | Platform updated their DOM | Use Manual push as fallback |
| Duplicate commits | Debounce expired | Normal behavior after 24 hours |
| Extension icon missing | Browser cache | Remove and re-load the extension |
- Token storage: Your GitHub token is stored in Chrome's encrypted
syncstorage, never exposed to web pages - Network traffic: Data is sent exclusively to
api.github.comvia HTTPS - No telemetry: Zero analytics, tracking, or third-party services
- Minimal permissions: Only
storage,notifications, andscriptingare requested - Private repos work: Contributions from private repositories still appear on your GitHub profile
MIT License. See LICENSE for details.