Every accepted solution on Codeforces, AtCoder or TryHackMe is worth keeping. It documents your progression, gives you a searchable reference for techniques and signals genuine practice. This note maps out what tools already exist, where the gaps are and what I want to build or contribute to.
LeetCode has the most mature tooling. The original LeetHub extension (QasimWani) started the pattern: a Manifest V2 Chrome extension that injects a content script into the submission result page, detects an accepted verdict and pushes the solution to GitHub via a stored PAT. LeetCode has since changed its frontend enough that the original is partially broken, so the community maintains forks. LeetHub 3.0 (raphaelheinz) is the actively maintained version as of 2025. LeetSync takes a different approach - it uses the LeetCode API directly to fetch submission data rather than scraping the DOM, then writes to GitHub. LeetCode does not have any official built-in GitHub integration of its own; all sync tools are community-built extensions.
CFPusher (SarJ2004) already solves this for Codeforces. It is a Manifest V3 Chrome extension on the Chrome Web Store that automatically pushes accepted submissions to a GitHub repo. It includes a streak tracker, a problem rating chart and GitHub OAuth integration. It uses the Codeforces API (user.status endpoint at codeforces.com/apiHelp/methods) for metadata and a content script to capture the source code from the submission page (since the API does not return source code). CFPusher is open source - if there are missing features or bugs, contributing directly makes more sense than building from scratch.
There is also UpCode (CrapTheCoder), a Python CLI tool that bulk-uploads all historical accepted submissions from Codeforces, AtCoder and CodeChef to GitHub. It scrapes submission pages (which requires an authenticated session for Codeforces). Useful for an initial backfill but not real-time.
AtCommitter (kult0922) is a tool that auto-commits accepted AtCoder solutions to GitHub. AtCoderProblems (kenkoooo) is the main community platform for tracking AtCoder progress - it shows which problems you have solved, heat maps and language breakdowns, but does not push to GitHub. The auto-push tooling for AtCoder is less mature and less actively maintained than the LeetCode equivalents. There is no well-maintained Chrome extension for AtCoder equivalent to CFPusher.
TryHackMe has no equivalent tooling. There is no API for programmatically fetching room completion data or writeup content, and no extension or script that auto-pushes writeups to GitHub. People maintain their THM repos manually. This is the biggest gap in the space. The closest workflow anyone uses is writing notes in Obsidian or a local folder during a room and then pushing manually. A browser extension that detected room completion and triggered a structured commit (with a templated README per room: category, difficulty, tags, notes) would be genuinely useful.
CFPusher already exists for Codeforces and LeetHub 3.0 covers LeetCode, so rebuilding those from scratch makes no sense. The gaps worth filling - each as its own dedicated extension since these are completely separate platforms with separate use cases, separate repos and separate audiences:
Manifest V3 extension, same pattern as CFPusher:
Manifest V3 extension, simpler since there is no API:
Each platform gets its own dedicated repo:
# codeforces-solutions (managed by CFPusher)
1234A-diverse-strings/
solution.cpp
README.md ← rating, tags, contest, problem URL
# atcoder-solutions (managed by the AtCoder extension)
abc300-c-vaccine/
solution.cpp
README.md ← contest, task, difficulty
# tryhackme-writeups (managed by the THM extension)
rooms/
advent-of-cyber-2024/
notes.md ← category, difficulty, tools, key learningsIf the AtCoder extension works well, publishing it makes sense - the AtCoder community actively wants this and nothing well-maintained exists. The TryHackMe extension would appeal to the CTF and security learner community who are already manually pushing writeups. The main maintenance burden for both is keeping up with DOM changes when the platforms update their frontends - the same problem LeetHub has faced through v1 to v3.