App.Tracker records what an application is for, tracks the changes you want made to it, and keeps every transition in an append-only log. Months later the reasoning is still there, in a file you can read without the application that wrote it.
# When Ref What happened
41 2026-07-26 06:00Z INVREC-2 Proposed → Accepted
42 2026-07-31 06:00Z INVREC-2 Accepted → In Progress
43 2026-08-11 06:00Z INVREC-2 In Progress → Blocked — needs a decision on who signs off a mismatch
44 2026-08-17 06:00Z INVREC-3 Proposed → Deferred — only two suppliers; revisit if a third appears
45 2026-09-14 14:07Z INVREC-2 Marked as blocks INVREC-1
Rows are never updated and never deleted. A correction is a new event.
A desktop tool for one person, running on your own machine. It answers four questions that a task list cannot: what is this application for, what do I want changed, why did I want it, and what actually happened.
Each application carries its purpose and constraints — who it is for, what problem it solves, what finished looks like.
Every change request requires a reason. That field is the one that pays off a year later, when the decision matters and the context is gone.
Proposed, Accepted, In Progress, In Review, Done — with Blocked, Deferred and Rejected as off-ramps. Blocked is a real status, so time spent blocked shows up in the numbers.
Mention INVREC-2 in a commit message and the commit attaches itself to that change. Optional, and it reads your local repository only.
Most trackers store the current state and let the history blur. This one stores the history and derives the current state from it. That single decision is what makes the rest possible — aging reports, time in status, reopen rate, and a full rebuild from the log if the database is ever lost.
append-only — Events are never updated and never deleted. The database refuses it at the schema level, not by convention.
UTC — Every timestamp is stored in UTC and converted only when it is displayed, so travelling does not rewrite your history.
occurred / recorded — When something happened is kept separate from when it was typed in, so backfilled history is honest about being backfilled.
a reason — Moving a change to Blocked, Deferred or Rejected will not save without a reason. The friction is deliberate.
log wins — Backups write the log and a database snapshot. If the two ever disagree, the log is authoritative and the database is rebuilt from it.
App.Tracker opens a window onto a small web server bound to your own computer. Nothing is uploaded, because there is nowhere for it to go: the application has no server, no account system, and makes no outbound network requests at all.
✓ Your data lives in your user profile, in a SQLite database and a plain-text log.
✓ Backups go where you point them, one way, and only when you ask or when the app closes.
— No account, no sign-in, no password.
— No analytics, no telemetry, no crash reporting.
— No cookies, no fonts or scripts fetched from anyone else.
— No sync between machines, and no mobile app. One person, one computer.
The whole record is a SQLite file and a JSON Lines file. If this tool
disappeared tomorrow, your history would still open in any text editor.
Operating system: Windows 10 version 1809 or later, and Windows 11.
WebView2: Included with Windows 11. On older Windows 10 machines it may need installing; without it the app opens in your browser instead.
Disk: About 250 MB installed. Your data adds a few megabytes per year.
Git: Optional, and only for linking commits to changes. Everything else works without it.
Internet: Not required, and not used.
App.Tracker — RANN APPS · Privacy policy · Local only. History is append-only.