Details
A daily activity timer for focusing, batching everyday tasks, and guarding your time. Learn how it works and where its code and data live.
Daily activities
Timer shows today’s activities in Asia/Jakarta time. Add an activity with a name, an optional description, and a duration in hours, minutes, and seconds. The duration must be between one second and 24 hours.
Each card shows time spent against its duration. Start begins an activity, Pause stops it, and Continue resumes from the saved time. Only one activity runs at once; starting another pauses the current one. At its duration, the activity stops and is marked Reached. With Autoplay enabled, Done or a duration completion starts the next unfinished activity, prioritizing paused activities. Autoplay runs while the site is open and stops when all activities are complete.
X and House keeping appear every day with a one-hour budget each. X is for bookmarks and scrolling; House keeping covers sweeping, mopping, watering plants, washing dishes, and cooking rice. Activities you add belong to that day only.
Task colors
Task colors show each activity’s current state: danger means it is running, attention means it is paused, and success means it has not started. Completed activities use muted colors and appear in the completed tasks table. The progress bar uses the same state color as the timer.
Running
danger
Time is counting toward the duration.
Paused
attention
Time is saved. Continue when you are ready.
Not started
success
The activity is ready to start.
Time and notifications
Running time is calculated from saved timestamps, so it can recover after navigating away, reloading, or closing the browser. Time spent never exceeds the activity’s duration. At midnight in Jakarta, the previous day stops counting and a new day begins with the recurring activities.
Completion appears as an on-screen message. You can also enable browser notifications. Alerts may arrive late while the browser is closed or suspended; there is no background scheduler or push service. Clicking a system notification opens or focuses Timer.
Statistics
Open Statistics to choose a date and review every activity’s description, duration, time spent, and status. The chart shows total time spent each day across 30 dates ending on the selected date. Dates without records contribute zero time.
Storage and sample data
In local development, one JSON file stores each day under data/timer/. Records include each activity’s duration, accumulated time, running timestamp, and completion information. Writes are serialized by one local server process and saved atomically. These personal files are ignored by Git.
Run bun run seed:timer to create realistic sample history for the previous 30 completed days. Existing records are preserved. Sample history is generated data, rather than measured activity.
The deployed app displays a read-only generated preview. It does not read personal JSON files or accept activity changes. Personal records are also excluded from deployment tracing.
Implementation files
Paths are relative to the project root.
Integration files
Shared files that connect Timer to the rest of the site.
Daily data files
File names follow the calendar date, so the inventory grows as you use Timer.
For example, data/timer/2026-10-16.json stores activities for 16 October 2026 in Jakarta time. Each date uses the same naming pattern; personal records are not listed or loaded by this page.