Type. While AI Thinks.
A Chrome extension that turns AI wait time into practice time. Sharpen your typing speed or learn IDE shortcuts — right inside ChatGPT and Gemini.
Install from Chrome Web Store | Landing page
Practice on random English words while the AI generates a response. The overlay appears automatically, tracks your keystrokes, and shows your WPM when done.
Learn keyboard shortcuts for Cursor and JetBrains IDEs (macOS & Windows). Pick the right key combo from four options — no more forgetting shortcuts.
- You ask ChatGPT or Gemini a question
- While the AI is thinking, Idletime shows an overlay
- Practice typing or shortcuts until the response arrives
- The overlay disappears automatically — back to your conversation
The overlay also auto-hides after 3 seconds of inactivity, or on any click/scroll.
Install it from the Chrome Web Store, or load it manually:
- Clone this repository
- Open Chrome and go to
chrome://extensions/ - Enable Developer mode (top-right toggle)
- Click Load unpacked and select the project directory (or
dist/after building)
npm install # install dev dependencies (sharp for icon generation)
npm run build # copy source files to dist/
npm run package # build + create idletime-extension.zip
npm run icons # regenerate icon sizes from source imageAfter building, load dist/ as an unpacked extension in Chrome to test.
detectors/ # AI site state detectors (ChatGPT, Gemini)
logic/ # Session state management (typing, shortcuts)
ui/ # DOM components (overlay, word display, caret, toast, quiz)
utils/ # Helpers (key capture, idle timer, dismiss detection, storage)
shortcuts/ # Keyboard shortcut datasets per IDE and platform
stats/ # WPM calculation
content.js # Content script entry point
popup.js # Extension popup coordinator
- No bundler — plain ES modules loaded via
chrome.runtime.getURL() - Shadow DOM — UI is encapsulated to avoid conflicts with host page styles
- Manifest V3 — uses
chrome.storagefor settings, no background service worker
- Create a detector in
detectors/that exports{ observe(cb), disconnect() } - Register it in
detectors/index.jswith a hostname match - Add the site URL pattern to
manifest.jsoncontent script matches
- Add a new file in
shortcuts/following the existing format (array of{ action, chord }) - Register it in
shortcuts/index.js
Idletime stores typing stats (WPM and duration) locally using chrome.storage. No data is transmitted off-device. The extension only requires the storage permission.
See CONTRIBUTING.md for guidelines.

