Skip to content

About

Floating always-on-top spreadsheet post-it for quick math (Electron + Univer)

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

19 Commits

Folders and files

Repository files navigation

Scratch Sheet

A floating, always-on-top spreadsheet post-it for quick math on Windows.

It sits in the system tray, pops up on a global hotkey, and behaves like a tiny Google Sheet: formulas, number formats, bold, cell highlights, arrow-key navigation, scrollbars, copy and paste. Everything autosaves and reopens exactly where you left it, so you can keep scrolling down to fresh space forever.

Features

  • No title bar at all. Drag the rounded tab in the bottom-right corner, or hold Ctrl and drag anywhere on the sheet, to move the window; resize from any edge
  • Full formula engine (Univer): SUM, AVERAGE, IF, ROUND, VLOOKUP, CONCATENATE and hundreds more
  • Typing $12,133 or 5.7% keeps the number and applies the format, like Sheets
  • Formula bar like Sheets: A1, fx, the formula. Top-right corner holds always on top (pin), dark/light mode, Clear, Save, and × (hide to tray)
  • Right-click a cell for Number format (Automatic, Number, Percent, Currency, Date, Time, Plain text) and Align
  • Bold, italic, undo, redo are keyboard only: Ctrl+B, Ctrl+I, Ctrl+Z, Ctrl+Y
  • Three floating circles you can drag anywhere as a group: the palette opens the text tools (font size A- A+, text color, paint bucket), 123 opens the number formats (%, $, date, .0←, .00→), and the grid opens conditional formatting, borders and merge cells
  • Save writes an .xlsx with values, formulas, formatting, borders and merged cells. Conditional formatting rules stay in the app
  • Global show/hide hotkey, default Ctrl+Alt+Space
  • Launches at login, hidden in the tray. Close and minimize both hide to the tray. Quit is in the tray menu
  • Dark mode by default; switch with the corner button or the tray menu
  • Autosave with atomic writes, including scroll position and active cell

Setup

npm install
npm run build        # builds the renderer and the installer: release\Scratch Sheet Setup <version>.exe

Run the installer once. It is a per-user install (no admin prompt) into %LOCALAPPDATA%\Programs\scratchsheet, adds a Start Menu entry and an uninstaller under Settings > Apps. On first launch the app registers itself to start hidden at login; after that you only need the hotkey. Your sheet lives in %APPDATA%\Scratch Sheet\ and survives reinstalls and uninstalls.

To update: quit from the tray, run the new installer, start it from the Start Menu.

Hotkey on a Logitech G key

G keys only send whatever G HUB assigns them, so map a G key to the combo Ctrl+Alt+Space in G HUB. To change the combo, open the tray menu, pick Edit config, change hotkey (Electron accelerator syntax, e.g. Control+Shift+F12), and restart the app.

Development

npm run dev          # vite build + electron .
npm run build:dir    # unpacked build in release\win-unpacked (no installer)
npm test             # DevTools Protocol smoke test against an instance started with --remote-debugging-port=9222
# QUIET=1 never shows the window (skips right-click steps); CDP_PORT picks another port;
# SCRATCH_DATA=<dir> checks the sheet.json of an instance started with --user-data-dir=<dir>

Data lives in %APPDATA%\Scratch Sheet\: config.json (hotkey, theme, window bounds, always-on-top, launch-at-login) and sheet.json (the sheet snapshot).

Layout

electron/main.js     window, tray, hotkey, IPC, login item
electron/preload.js  contextBridge API exposed as window.scratch
electron/export.js   snapshot -> .xlsx (ExcelJS), pure Node
src/                 renderer: Univer grid, toolbar, autosave
build/make-icon.js   generates build/icon.png with no dependencies
test/                CDP smoke and restart tests

Stack

Electron 44, Univer 1.x (Apache 2.0), Vite 8, ExcelJS 4, electron-builder 26.

About

Floating always-on-top spreadsheet post-it for quick math (Electron + Univer)

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages