@sirenodeck/addon-pomodoro
v0.1.0
Published
Pomodoro timer button with arc progress, blink on completion, and OS notification + bundled bell sound
Readme
Pomodoro
A third-party workspace addon that exposes a Pomodoro timer as a single button
type. Tap to start, tap again to stop, tap from finished to start a new cycle.
On completion the button blinks red for 10 s and fires an OS notification
with a bundled bell sound.
Button type
pomodoro:pomodoro
Install
# config.yml
addons:
- src: ./packages/addons/pomodoroConfig
type: pomodoro:pomodoro
config:
durationSec: 1500 # optional; default 1500 (25 min)State machine
idle ──tap──▶ running ──tap──▶ idle
(stopped, no notify)
finished ──tap──▶ running (resets and starts fresh)On running → finished the addon fires coreMethods.notify({title:"Pomodoro",
body:"Time's up!", sound:true}). The blink CSS animation runs for exactly 10 s
after the transition (@keyframes pomodoro-blink 1s 10); the finished state
itself is sticky and stays visible (red text, no animation) until the next tap.
Persistence
startTsMs and durationSec are stored per-button in the addon store via
store.buttonScope("pomodoro", buttonId). On daemon restart, a running timer
whose deadline has already passed is marked finished immediately (no delayed
wake-up). A running timer whose deadline is still in the future resumes from its
original startTsMs.
Sound
The bundled src/assets/pomodoro-complete.ogg is copied to dist/assets/ by
the scripts/post-build.mjs post-build hook. The runtime plays it via the
platform notification provider:
- Linux:
ffplaythenpaplayfallback. Skipped silently if neither is on PATH. - macOS:
afplay. - Windows:
System.Media.SoundPlayer.
Sound is best-effort; the toast/notification fires regardless.
Build
pnpm --filter @sirenodeck/addon-pomodoro buildThe build emits dist/index.js, dist/index.d.ts, dist/sirenodeck.json, and
dist/assets/pomodoro-complete.ogg. The dev script imports src/index.ts
directly via tsx.
Test
pnpm --filter @sirenodeck/addon-pomodoro test