A small time tracker on top of Todoist. Start a stopwatch on any active task,
pause and resume it, and click Done to post a session comment on the task
and overwrite its duration with the time tracked. Done never completes the task.
npm install
cp .env.example .env # then paste your Todoist API token
npm run devWithout TODOIST_API_TOKEN the app asks for a token in the browser and keeps it
in localStorage. Either way, Todoist is only called from the app's server
routes (src/routes/api), so the token never ends up in the client bundle.
Timers are saved in localStorage (todoist-timer:v1) on every change and
survive closing the browser; a running timer keeps counting while it's closed.
npm run dev— dev servernpm test— Vitestnpm run lint— Prettier, ESLint and svelte-checknpm run build— production build (pick an adapter before deploying)
src/lib/timer.ts— pure timer math and the session comment formatsrc/lib/persistence.ts— load/validate/save the timer mapsrc/lib/done-flow.ts— the two Done steps, with skip-on-retrysrc/lib/timers.svelte.ts— runes store wrapping the above, one shared tickersrc/lib/todoist.ts— every Todoist SDK callsrc/lib/server/todoist-api.ts— builds the SDK client per requestsrc/lib/components/—TaskList,TaskRow,TimerControls, …