Manifest V3 Chromium-family browser extension for tracking progress on the Cracking the Cryptic sudoku list at https://crackingthecryptic.com/sudokus. It is intended to work in Chrome, Chromium, and Vivaldi.
- Adds small status badges beside detected playable puzzle links on the sudoku list and filtered result pages.
- Adds
Todo,Solved, andClearcontrols on the individual puzzle page. - Automatically marks a puzzle as
openedwhen its puzzle page loads, but only when that puzzle has no existing status. - Automatically marks a puzzle as
solvedwhen the CTC solve-confirmation dialog appears. - Stores the solve duration shown in the SudokuPad solve dialog when automatic solved detection can read it.
- Tracks the last opened puzzle and shows it in the list toolbar and popup.
- Shows lightweight visual states on the list:
untouched: no stored record and no highlightopened: subtle blue/neutral tint and badgetodo: stronger yellow/orange tint and badgesolved: green tint/badge and slightly faded row
- Adds page controls for
Show all,Hide solved, andOnly todo. - Provides a popup with opened/todo/solved counts, storage diagnostics, JSON export, JSON import, and confirmed clear-all.
The extension does not sync SudokuPad grid progress and does not use a backend, Google OAuth, analytics, external tracking, or any VPS service.
- Open
chrome://extensions. - Enable
Developer mode. - Click
Load unpacked. - Select this folder:
/home/vodkolyan/projects/ctc-progress-tracker-extension. - Visit
https://crackingthecryptic.com/sudokus.
- Open
vivaldi://extensions. - Enable
Developer Mode. - Click
Load unpacked. - Select this folder:
/home/vodkolyan/projects/ctc-progress-tracker-extension. - Visit
https://crackingthecryptic.com/sudokus.
To confirm cross-device sync in Vivaldi, install the unpacked extension on both laptops, sign in with the same Vivaldi account, enable extension/storage sync if Vivaldi offers that setting, and use the popup's Test sync write/read action on each laptop.
Primary storage is chrome.storage.sync, so progress can sync through the browser account when the browser supports and enables extension sync storage. If chrome.storage.sync is unavailable or a sync operation fails, the extension falls back to chrome.storage.local and the popup shows Local-only storage.
The popup diagnostics show:
- whether the
chrome.storage.syncAPI is available - whether the active storage area is synced or local-only
- the last successful storage write time
- a
Test sync write/readaction, using local-only storage if sync is unavailable or has already failed
JSON export/import works with either synced or local-only storage.
Schema:
- Metadata key:
ctcProgress:meta - Shard keys:
ctcProgress:shard:0throughctcProgress:shard:63 - Each shard is an object keyed by compact puzzle keys.
- Current CTC puzzle URLs like
https://crackingthecryptic.com/sudoku?id=3310normalize to compact keys likes:3310. - Stored records use short fields:
s: status code, one ofo,t, orst: update timestamp in epoch millisecondsu: normalized puzzle URL, included for human-readable export/import backupsd: optional solve duration from the SudokuPad solved dialog, such as16:11, stored only when available
- Last opened puzzle metadata is stored in
ctcProgress:meta.lastOpenedwith compact keyk, normalized URLu, timestampt, and optional page title. JSON export/import includes this metadata.
Status codes:
o= openedt= todos= solved
The extension uses 64 shards because Chromium-family sync storage has small per-item limits. With the current CTC catalog size, this keeps each shard comfortably below typical per-item sync limits while avoiding one item per puzzle.
storage: stores progress in browser extension storage.https://crackingthecryptic.com/sudokus*: shows status badges and list filters on the CTC sudoku list page.https://crackingthecryptic.com/filter*: covers CTC's filtered sudoku result page, which is the same list experience after submitting the site filter form.https://crackingthecryptic.com/sudoku*: marks puzzles as opened and shows manual status controls on individual puzzle pages.https://sudokupad.app/*: detects the solved confirmation dialog inside the embedded SudokuPad puzzle iframe.
No broader CTC or SudokuPad permissions are requested.
- The live page currently renders puzzle entries as list items containing playable links like
/sudoku?id=3310and separate watch links like/sudokuwatch?id=3310. - Detection intentionally keys only on playable
/sudoku?id=...links and ignores watch links. - Row detection prefers the nearest
li,tr, orarticle, then falls back to the smallest nearbydivorsectionthat appears to contain one playable puzzle link. If CTC changes to a very different layout, controls may appear in a less ideal location or not appear. - The extension observes DOM changes on list pages and rescans defensively, but it does not depend on any official CTC API.
- Automatic solved detection runs inside the embedded SudokuPad iframe and depends on the solve dialog containing text like
You solved the puzzleandThe solution is correct, or the current dialog IDsclipboardcopyandsolvedcounter.
- Load the unpacked extension and open
https://crackingthecryptic.com/sudokus. - Confirm puzzle rows get status badges only, not
Todo,Solved, andClearbuttons. - Use the CTC filter form and confirm the
/filterresult page still shows the toolbar and status badges. - Open a puzzle title and confirm the puzzle page shows
Todo,Solved, andClearcontrols. - Return to the list and confirm that puzzle is marked
opened. - Confirm the list toolbar and popup show that puzzle as the last opened puzzle.
- Set a puzzle to
Todo, reopen it, and confirm it remainsTodo. - Set a puzzle to
Solved, reopen it, and confirm it remainsSolved. - Solve a puzzle and confirm the congratulations dialog automatically marks it
Solved. - Confirm the solved badge includes the solve duration from the dialog when SudokuPad shows one.
- Change a
Todopuzzle toSolvedfrom the puzzle page. - Clear a
Solvedpuzzle from the puzzle page and confirm the list highlight and badge disappear. - Use
Hide solved,Only todo, andShow all. - Open the extension popup and confirm counts match visible statuses.
- Confirm the popup shows synced storage or local-only storage clearly.
- Run
Test sync write/readin the popup. - Export JSON, clear all data, import the JSON, and confirm statuses are restored.
- In Vivaldi, repeat storage tests on both laptops while signed into the same Vivaldi account to verify actual browser sync behavior.