A self-hosted hobby tracker that runs locally on your PC. Log sessions, set weekly or monthly goals, track streaks, and visualise activity over time with a GitHub-style heatmap. No cloud, no account, no data leaving your machine.
- Hobbies - Add, edit, and delete hobbies with a name, category, description, status, and colour tag
- Session logging - Record sessions with a date, duration (hours and minutes), and optional notes. Edit or delete any entry.
- Quick-log - One-click button on every hobby card to jump straight to the session form
- Live timer - Start a timer against any hobby. When you stop it, the elapsed time is pre-filled into a new session log.
- Stats per hobby - Total time all-time, total time this month, last logged date, and current day streak
- Goals - Set a weekly or monthly hour target per hobby. A progress bar on each card shows how close you are for the current period.
- Dashboard - All hobbies at a glance with a weekly summary (total hours, most active hobby) and a nudge for any active hobby not logged in 7 or more days
- Activity heatmap - GitHub-style contribution heatmap of the past 12 months, visible on each hobby's Stats tab
- Notes - A freeform journal tab per hobby, separate from session logs. Add, edit, and delete entries.
- Data export - Download everything (hobbies, sessions, goals, notes) as a single JSON file
- Node.js v22 or newer (uses the built-in SQLite module)
- Windows, macOS, or Linux
1. Clone the repo
git clone https://github.com/Anahem/trkr.git
cd trkr2. Install dependencies
npm install3. Create your config file
cp .env.example .env4. Start the server
- Windows: double-click
start.bat - Mac / Linux:
node --experimental-sqlite server.js
5. Open your browser
Go to http://localhost:3002
The app is ready to use immediately. No login or setup required.
| Variable | Required | Description |
|---|---|---|
PORT |
No | Port to run on (default: 3002) |
| Route | Description |
|---|---|
/ |
Dashboard: all hobbies, weekly summary, neglected-hobby nudges |
/hobbies/new |
Add a new hobby |
/hobbies/:id |
Hobby detail with Sessions, Notes, and Stats tabs |
/hobbies/:id/edit |
Edit hobby details and goal |
/hobbies/:id/sessions/new |
Log a new session (also used as the timer landing page) |
/hobbies/:id/sessions/:sid/edit |
Edit or delete a logged session |
/export |
Download all data as a JSON file |
All data is stored locally:
| Path | Contents |
|---|---|
data/tracker.db |
All hobbies, sessions, goals, and notes |
To back up: copy data/tracker.db somewhere safe.
To restore: stop the server, replace data/tracker.db, restart.
The export button in the nav (/export) also downloads a full JSON snapshot at any time.
- Runtime: Node.js 22+ with
node:sqlite(no external DB driver) - Server: Express
- Templates: EJS
- Database: SQLite (via Node.js built-in)
- Styling: Vanilla CSS (dark theme, Inter + JetBrains Mono)