Parham Forati
all projects

$ cat projects/tempo/README.md

Tempo

A modern, minimal multi-purpose time tracker for your Obsidian notes — timestamp-based in-note tracking plus a companion stats block with aggregation, charts, and a public JS API.

status
Live
duration
Ongoing
role
Developer & Maintainer
stack
TypeScript · Obsidian API · esbuild · moment.js

$ head summary.md

Quick summary

problem

Problem Solved

Tracking time inside Obsidian notes was awkward. Timers were fragile, tied to the open note, and there was no easy way to aggregate time across files. Users wanted a lightweight, in-note tracker that kept running even when switching notes or restarting Obsidian, plus a way to view totals and stats.

solution

Our Solution

Tempo turns any note into a live timer with named segments using a simple code block. Because time is stored purely as start/end timestamps, a running tracker survives note switches, app restarts, and reboots. The companion tempo-stats block aggregates tracked time across chosen sources into totals, daily charts, and a per-task leaderboard — all configurable and backed by a public JavaScript API.

impact

Results Achieved

Tempo delivers reliable timestamp-based tracking, per-segment and total durations, CSV export, and a rich stats view with aggregation, charts, and leaderboards. A public JS API enables DataviewJS integration, and the plugin ships with linting, typechecking, and a test vault for development.

$ cat features.txt

Key features

  • ▸In-note time tracking via simple code blocks
  • ▸Icon-based play (▶) / stop (⏹) controls with named segments
  • ▸Timestamp-based storage — trackers survive note switches, app restarts, and reboots
  • ▸Multiple segments: play, continue, rename, and delete inline
  • ▸Copy as CSV for spreadsheets
  • ▸Tempo Stats: aggregate across chosen sources with today/7/30-day/custom ranges
  • ▸Daily bar chart and per-task leaderboard
  • ▸Configurable formatting (moment.js format, CSV delimiter, durations, segment order)
  • ▸Public JavaScript API for DataviewJS integration
  • ▸Declarative settings API (Obsidian 1.13+)

Interested in working together?

I'm always open to discussing new opportunities and interesting projects. Let's create something amazing together.