Bambu Bar
Monitor Bambu Lab printers from your Mac menu bar: print progress, the live camera, AMS filament, alerts and desktop widgets. Bambu Bar for macOS 26+.
翻訳待ち
No updates detected yet. GitHub releases will appear here.
A Pomodoro timer that logs your focus sessions, tracks your tasks and shows your progress over time. You can also join a public room to focus on the same timer as other people.
翻訳待ち
Loading the full README. The saved excerpt is shown below.
A task-focused Pomodoro timer served from Cloudflare's edge. The web app in web/
(Svelte 5 and TypeScript) is built with Vite into dist/, which Cloudflare serves as static assets; a small
Worker in src/ powers shared rooms and account sync.Read the full README ↗A task-focused Pomodoro timer served from Cloudflare's edge. The web app in web/
(Svelte 5 and TypeScript) is built with Vite into dist/, which Cloudflare serves as static assets; a small
Worker in src/ powers shared rooms and account sync.
?)web/ the app (Vite root)
index.html page shell the components mount into
src/main.ts boot: global listeners, mounting the components, first render
src/state.ts shared state (tasks, settings, the timer) and the local/session storage helpers
src/store.ts saving tasks, settings and labels: this browser, or the account when signed in
src/cloud.ts account sync over a WebSocket, last write wins
src/render.ts redraws the components after a change
src/ui.ts handles to the mounted dialogs and popovers
src/keys.ts app-wide keyboard shortcuts
src/sound.ts bells and the optional ticking
src/soundscape.ts soundscapes during focus, made in an AudioWorklet (scapeWorklet.ts, lib/scapeSynth.ts)
src/float.ts the floating Picture-in-Picture timer
src/layout.ts dialog overlays and fitting the timer dial to the window
src/pages.ts phone pages; src/zen.ts full screen
src/lib/*.ts pure, tested logic: dates, the When parser, quick entry, list order, stats, settings, the timer dial, rooms, export files
src/timer/ the timer engine (engine.ts) and the timer card
src/tasks/ task helpers, actions, start-time plan and the task list
src/progress/ the Progress page and its session actions
src/composer/ the new-task box
src/popovers/ the When, label and menu popovers
src/settings/ the Settings dialog, and export and import
src/room/ shared-room networking (net.ts) and its dialog and strip
src/chrome/ top bar tools, banner, shortcut sheet, toast and tooltip
src/styles/app.css styles
public/ copied as-is: service worker, manifest, icons
src/ Cloudflare Worker: rooms and the public room lobby (worker.js), sync (sync.js) and landing page counts (hits.js)
extension/ an experimental site blocker browser extension, not released (see extension/README.md)
tests/ Worker tests (node:test)
npm install
npm run dev # builds, rebuilds on change, and serves app + Worker on http://localhost:8787
npm test # type check, app unit tests (Vitest), Worker tests
npm run dev rebuilds on every save; reload the page to see changes.
You need Node.js 20 or newer and a free Cloudflare account.
npm install
npx wrangler login # opens a browser to authorize, once per machine
npm run deploy
npm run deploy builds the app and deploys it with the Worker. Wrangler prints
your URL, for example https://pomodoro-ledger.<your-subdomain>.workers.dev.
To deploy from CI instead of wrangler login, set CLOUDFLARE_API_TOKEN
(template "Edit Cloudflare Workers") and CLOUDFLARE_ACCOUNT_ID.
The YEAR_IN_FOCUS repository variable (or secret) decides when Year in focus shows up:
on (the default when unset), off, a start day such as 2026-12-01, or a
window such as 2026-12-01..2027-01-15. Dates are checked in the browser, so a
window opens and closes on its own; changing the value needs a new deploy.
Open /?demo=1 to force an interactive demo, for example
http://localhost:8787/?demo=1. Demo changes stay in memory, reset on reload,
and never affect the saved ledger. An unused browser profile also shows the
example data automatically.
Tasks, history, labels, and settings are always kept in the browser's local storage, so the app works offline. Without sign-in they stay on that device.
Settings → Data & sync → Export downloads all of it as one JSON file
(pomodoro-ledger-YYYY-MM-DD.json), with or without an account. Import reads
that file, or one from the account export, and shows what it holds before
changing anything. Merge is the default: it adds new tasks, keeps the newer copy
of each task as sync does, and keeps sessions from both copies. Replace makes
this browser match the file and asks again first. The demo (?demo=1) can't
export or import.
This is the beginning of the README. Read the rest at the original. Read the full README ↗