Stopwatch and Timer

Two Property kinds that capture elapsed time as it happens — Start, Pause, Resume, Stop. Timer is a Stopwatch with a target duration.


Most Property kinds answer the question "what did you log?" with a number, a piece of text, or a yes/no. Stopwatch and Timer answer it with elapsed time — captured as it happens, not typed in after.

If you've been writing 45 into a "duration" field after every focus session, Stopwatch is the upgrade. If you've been using a separate Pomodoro app to count down 25 minutes, Timer is the upgrade.

Stopwatch vs Timer at a glance

StopwatchTimer
CountsUp from zeroUp from zero, with a goal in mind
TargetNoneRequired — set on the Property (e.g. 25 min)
When the goal is hitn/aVisual cue + keeps counting (25m+) — no auto-stop
Good forGardening, deep work, workoutsPomodoro, breathing, meditation, language study

Underneath, they're identical: both store a list of Intervals (each interval is a Start → Stop slice) and a running total in minutes. The only difference is whether the Property carries a target duration.

How it works in the app

Adding a Stopwatch or Timer Property to a Collection is the same as adding any other kind — pick the kind in the Collection builder, give it a name, and if it's a Timer, set the target duration.

By default a new Entry starts paused — you tap Start yourself. If you'd rather have it start ticking the instant you log it, turn on auto-start (see below).

When you log an Entry, the card shows the live controls right there, on their own full-width row — the same controls in the browser and in the phone app, on the card, on the Entry's own page, and on a sub-entry row inside a bigger log:

🪴 Gardening
  0.00      ▶  ⤢

Tap Start (▶) and the counter starts ticking — live, every second. A Stopwatch counts up from zero; a Timer counts down the time remaining (e.g. 25:00 → 0:00).

🪴 Gardening
  3:42   12m   ⏸  ✓  ⤢

While it's running, the button shows Pause (⏸) — tap it to take a break, Resume to keep going. The check (✓) finishes the session (more below), and the expand icon (⤢) opens the full-screen view. Reset lives in the full-screen view, one tap away — deliberately kept off the quick row so you can't wipe a session by accident. Tapping the small session count opens the per-session editor.

You can Start / Pause / Resume as many times as you want on the same Entry. Each Start opens a new Interval; each Pause or Stop closes one. The total on the card is the sum of every closed Interval.

Starting automatically when you log it

If you always tap Start the moment you log an Entry anyway, skip the tap: turn on auto-start and the Entry is born already ticking.

Go to Collections → your Collection → Properties, open the Stopwatch or Timer Property's settings, and find Behavior. Flip the toggle from "Started manually" (✋) to "Starts when entry is created" (⚡). From then on, logging a new Entry for that Collection starts the clock in the same instant the Entry appears — no extra tap.

A couple of things to know:

  • It only applies to an Entry you're logging right now. Backfilling a session from earlier, or scheduling one on the calendar for later, never auto-starts — those aren't "I'm doing this right now" moments.
  • A Timer needs a target duration set before it can auto-start; without one there's nothing to count down to.

The header chip — never lose a running timer

While anything is timing, a small chip appears in the chat log header, next to "Your log": a pulsing dot, the Entry's emoji and name, and a live clock — 🧹 Tidying 23:31. A Timer counts down on the chip exactly as it does on the card. The chip simply mirrors the Entry: pause on the card and the chip freezes (the dot stops pulsing), resume and it ticks again, and it disappears the moment you finish the session or delete the Entry. Tap it and the log scrolls straight to the running Entry's card, so you're never more than one tap from your live session — all the controls (pause, finish) live on the card itself.

Timing more than one thing at once? Every running Stopwatch or Timer gets its own chip, side by side in the header — so if you're mid-workout and mid-meditation, you'll see both clocks ticking at a glance, not just the most recent one.

Finishing a session

When you're done, tap Finish (✓). It stops the clock and freezes the session: the card collapses to a tidy summary — the total time and how many sittings it took. No buttons clutter the row; to make a correction, just tap the time or the session count and the editor opens.

🪴 Gardening
  20m   3 sessions

Finishing is the safe way to say "this one's done." A finished session can't be reset, restarted, or continued — the data is locked in, so a stray tap won't wipe it. The summary shows the real total (down to the second for short sessions — 27s, not a rounded 0m) and how many sittings it took, and the whole readout is tappable to open the editor. If you tap Finish by mistake, an Undo pops up right away, and you can always reopen it later from the editor (see Editing after the fact).

Three ways it shows up

The same Stopwatch or Timer follows you across three views — pick whichever fits the moment:

ViewWhereWhat it looks like
On the cardYour log, or any feedA compact full-width row: live numbers and small tap-target icon controls. Quick glance, quick Start.
On the entry pageOpen the EntryThe same compact row, sitting in the Properties list like any other Property — numbers plus the small controls.
Full screenTap the expand icon (⤢)A distraction-free, full-page view with a soft animated background. A big progress ring around big numbers, big controls — for a Timer the ring empties as the target approaches; for a Stopwatch it sweeps once a minute, like a second hand. Ideal for a focus session you keep on screen. Great on a phone.

Timer specifics

A Timer is a Stopwatch with a target_minutes value. When you create the Collection, the target sits on the Property itself (e.g. "Focus session, target 25 min"). When you create an Entry, that target is snapshotted onto the Entry so you can override just this session if you want (e.g. "this one was a 50-min deep block").

While it's running, a Timer shows the time remaining, counting down from the target (25:00, 24:59, …), and the progress ring empties to match. Next to the countdown, a small muted number shows the total time elapsed so far — so a session of 10 minutes, a pause, then 10 more reads as 20m at a glance, no mental arithmetic. The target is a cue, not a hard stop: at zero the Timer rolls into overtime (+0:30) instead of stopping, so a session that runs long is captured, not cut off.

What gets recorded is the elapsed time — this is what the card total and your Dashboard read:

ElapsedRecorded display
00m
8m 30s8m
25m25m (you hit the target)
42m25m+ (you went past — no auto-stop)

The Timer is happy to overflow. Most focus sessions don't end on the dot.

Why overtime is a feature, not a bug

A kitchen timer hits zero and screams at you. Kaizendex is a logger, not an alarm clock — so when a Timer reaches its target it doesn't stop, it rolls into overtime (+0:30). That means:

  • Going past the target is a useful data point, not a "the alarm went off, what now?" moment.
  • What you keep is the time you actually spent — even if it's more (or less) than you planned.
  • The same controls work for a Stopwatch (no target, counts up) and a Timer (counts down to the target, then over).

If you need an audible alarm, your phone's clock app is one tap away. Kaizendex stays focused on capturing the data.

Example Collections using Stopwatch

  • 🧘 Meditationsession (Stopwatch). Start at the beginning of a sit, Stop at the end.
  • 🎯 Deep workduration (Stopwatch) · project (Tag) · note (Markdown).
  • 🪴 Gardeningduration (Stopwatch). Phone in pocket, Start when you go out, Stop when you come back.
  • 🎸 Practicetime (Stopwatch) · piece (Text) · tempo_bpm (Number).
  • 🧹 House cleaningtime (Stopwatch). Realise it takes less than you think.
  • 📞 Sales callduration (Stopwatch) · account (Relation) · outcome (Tag).

Example Collections using Timer

  • 🍅 Pomodorofocus (Timer, target 25). The classic 25-min work block.
  • 🌬 Breathworksession (Timer, target 10).
  • 🧘 Meditation (timed)sit (Timer, target 15). Same Collection, different style.
  • 📚 Study sprintblock (Timer, target 50).
  • 🏃 Cardio targetrun (Timer, target 30).
  • 🗣 Language drillpractice (Timer, target 20).

What gets recorded

Every Stopwatch/Timer Entry stores two things together:

  1. The list of Intervals[{start, end}, {start, end}, …]. Every Start/Pause/Stop transition appends or closes one Interval.
  2. The total in minutes — automatically summed from every closed Interval. This is what your Dashboard charts.

So if your focus session was Start at 9:00 → Pause at 9:25 → Resume at 9:40 → Stop at 10:05, the Entry records:

intervals: [
  { start: 9:00, end: 9:25 },   // 25 min
  { start: 9:40, end: 10:05 },  // 25 min
]
total: 50m

The Dashboard sees 50. The card shows 50m.

Editing after the fact

If you forgot to Stop, or stopped accidentally, you can edit Intervals manually. The pencil (✎) in the full-screen view — or simply tapping the readout (the session count) on the card or entry page — opens a clean editor:

  • One day, set once. Sessions almost always happen on a single day, so you pick the day once at the top — every Interval lives on it. No more retyping the date on each row.
  • Just the times. Each Interval is a start → end pair you edit as a time of day. If an end time is earlier than its start, Kaizendex reads it as crossing midnight and lands the end on the next day — so a late session that runs past 12 still works.
  • Each session's length, front and centre. Every row shows its own duration in bold, down to the second (9s, 1m 17s, 1h 5m) — that's the number you're usually checking.
  • Add or delete. Backfill a session you forgot ("I actually worked from 2:00 to 3:30"), or delete one that shouldn't be there.

There's no Save button — every edit saves automatically, and the running total and per-row durations update as you go. When an edit doesn't add up yet (an end before its start on the same day, two sessions overlapping), the change holds locally and a note explains why until you fix it. Close the editor with the , by clicking outside it, or with Esc.

Undo a Finish. If a session is finished but still recent, the editor offers two extra actions: Reopen (un-finish and keep the recorded time, so you can add another sitting) and Reset & start over (clear it back to empty and begin fresh). Once a session has frozen on its own from age (below), these go away — you can still correct the recorded times, but not continue it.

The 24-hour cap

If you accidentally leave a Stopwatch running overnight or forget about it for a week, Kaizendex auto-closes the Interval after 24 hours — clamping the end to start + 24h. The cap exists because:

  • A forgotten-running stopwatch is almost never useful data.
  • Mobile devices suspend background apps, so a "ping the server every minute to keep alive" approach doesn't work reliably.
  • 24 hours covers any single legitimate session.

If the auto-close caught you mid-real-session, edit the Interval manually to the real end time afterwards.

Old sessions freeze on their own

Beyond that 24-hour cap, a Stopwatch or Timer you started a while ago and never finished freezes automatically after about two days of no activity — it shows as Finished, just as if you'd tapped Finish. You can't restart or continue it, and that's on purpose: picking up a session from days ago would pin today's time onto an old date and skew your totals and Dashboard.

You can still fix the recorded times on a frozen-from-age session (correct an end, delete a stray Interval) — that never moves it to today. What's locked is continuing it. If you meant to keep tracking, just log a fresh Entry. (For a session you finished only recently, the editor still lets you Reopen or Reset — see above.)

Stopwatch vs Number

These two kinds both end up storing a time, but they're for different moments:

KindWhen you write the value
NumberYou type any number — could be reps, kg, or minutes, including a time amount you already know (e.g. "I ran for 45 min"). No live behaviour.
StopwatchYou press Start at the beginning and Stop at the end. Live, captures every Interval.
TimerSame as Stopwatch, plus a target you set on the Property.

Pick Number for "I already know how long it took, I'll just type it in". Pick Stopwatch for "I want to time it as I do it". Pick Timer when you have a target in mind.

Stopwatch/Timer inside Sub-entries

A Stopwatch or Timer Property works inside a Sub-entries child like any other Property kind — the Start/Pause/Stop controls render right inside the child's row.

A useful example: a Morning ritual Collection with a Sub-entries property whose default children are:

  • Meditation (Timer, target 10 min)
  • Stretch (Stopwatch)
  • Gratitude journal (Markdown)
  • Water (Number, default 2 glasses)

Log a Morning ritual → it's born with those four child entries, defaults filled in. Start the Meditation timer, sit for 10 min, Stop. Then Start the Stretch stopwatch, do a few stretches, Stop. Type the journal entry. Done.

Next