A Chrome extension that automatically archives your CSSBattle solutions, screenshots, and profile stats to your own GitHub repository.
No backend. No database. Just solve targets and let the extension push everything to a repo you control.
See it in action: AbhishekBalija/My-CSS-Battle is the live archive and analytics website powered by this extension.
- Detects every successful CSSBattle submission
- Saves battle and daily target solutions as JSON
- Captures a screenshot of the result
- Updates your profile stats and history
- Works with the CSSBattle plugin system built-in (no Plus subscription required)
Create a new empty repository on GitHub (e.g., your-username/cssbattle-solutions). This is where the extension will write all data.
- Go to GitHub → Settings → Developer settings → Personal access tokens → Tokens (classic)
- Click Generate new token (classic)
- Select the
reposcope - Copy the token (it starts with
ghp_)
- Download or clone this repository.
- Open Chrome and go to
chrome://extensions/. - Enable Developer mode in the top right.
- Click Load unpacked.
- Select the
extension/folder from this repo.
Click the CSSBattle Tracker icon in your toolbar and fill in the popup:
| Section | Field | Required | How to find it |
|---|---|---|---|
| Repository Config | GitHub owner | Yes | Your GitHub username or organization |
| Repository Config | Repository name | Yes | The data repo you created, e.g. cssbattle-solutions |
| Repository Config | Branch | Yes | Usually main |
| CSSBattle Profile | CSSBattle user ID | Yes | From your profile URL: cssbattle.dev/player/<user>?userId=YOUR_USER_ID |
| CSSBattle Profile | CSSBattle username | Yes | Your CSSBattle username |
| CSSBattle Profile | Display name | No | Name shown in content/profile.json |
| CSSBattle Profile | Country | No | Country shown in content/profile.json |
| GitHub Token | Token | Yes | The classic PAT with repo scope |
Click Save Settings, then Test Connection. If it says "Connected", you're ready.
Solve any target and submit. The extension will push the solution, screenshot, and profile update to your repo within seconds.
├── data/
│ ├── battles.json # All battle solutions
│ └── daily/
│ └── {year}/
│ └── {month}-{monthname}.json # Daily target solutions
├── content/
│ ├── profile.json # Latest profile snapshot
│ └── profileHistory.json # Historical snapshots
└── public/
└── screenshots/
└── {levelId}.png # Screenshot for each solution
The extension includes a few community plugins by Joe Crawford (artlung), accessible from a toolbar inside the CSSBattle editor:
| Plugin | Description |
|---|---|
| Blank Template | Insert a basic starter template |
| Nested Template | Insert a nested-CSS starter template |
| Minify | Strip whitespace, comments, and normalize tokens |
| Unit Replacement | Replace px with the shortest vw/vh/pc/0 equivalent |
Enable or disable plugins and show/hide the toolbar from the extension popup. Plugins only run when you click them — nothing is auto-applied.
Fill in all required fields in the popup: GitHub owner, repo, branch, CSSBattle user ID, CSSBattle username, and GitHub token.
- Make sure you generated a classic token, not a fine-grained token.
- The classic token must have the
reposcope. - If you revoked or regenerated the token, paste the new one.
- Double-check the owner and repo name.
- Make sure the repo exists and the token can access it.
- If the repo is private, the token needs the
reposcope (not justpublic_repo).
- Make sure you are on a
cssbattle.dev/play/*page. - Reload the extension from
chrome://extensions/. - Open the page console and look for
[CSSBattle Tracker]logs.
Apache-2.0 — see LICENSE.
The built-in plugins are based on artlung/artlung-cssbattle-plugins and retain their original Apache-2.0 attribution.