I am a contractor. I spend most of my tokens on meaningful client work. Client work brings in revenue, so I consider every token spent an investment in my business.
Being a contractor means that clients pay me for my time. I have to log my hours and submit invoices. If I "guess" the hours wrong, I either lose money by under-billing or risk losing the client's trust by over-billing. Both of those are bad.
So I decided to invest my tokens in building a solution to a problem: a time-tracking desktop app that wraps a UI layer in Tauri and, most importantly, exposes an API for my agents to manage my logged hours. This app protects billing accuracy, so it protects revenue.
Why this exists
Manual logging failed me. I work on multiple features a day, and lately I am working with multiple agents in parallel. I jump between those threads, then a meeting comes up, and I forget to log the hours.
This app is a solution to that problem. It allows me to log hours in a structured way and most importantly, it allows my agents to log hours for me. I can tell the agent to "log 2 hours for this task" and it will add a log with a summary and a link to the task.
At the end of the month, I can generate a work report that I send to my client together with the invoice.
Three days on a partially new stack
I built the app in three days. I was familiar with the UI stack (React, Vite, Tailwind), but I had never used the backend stack before. I had never written Rust, had never used Tauri, and had never created a CLI/MCP server from the ground up.
And I still haven't. The agent did, and I don't mind.
After all, this is the point of working with coding agents. I have enough engineering knowledge to know what I want, and I can describe it in a way that the agent can understand. The agent has enough engineering knowledge to know how to implement it.
pstack was another core part of the process by which the code got written. I wrote about it last week. I am still using it as-is. I experimented with my own pstack mode, but honestly it didn't work as well as the default one. The plugin steers the work toward the boring, rigorous version of development: discovery, architecture, design, judgement, implementation, verification.
And it does most of it autonomously. The desktop app was an exception: Cursor agents didn't have the native tooling to verify desktop applications, so I created a skill that asks me to perform the manual validation. The agent waits for my confirmation to proceed to the next step.
With my existing engineering knowledge and the available agentic tools, I was able to describe the app I wanted to build, and now I have a fully working desktop app to solve my time-tracking problem.
I still read the diffs. I still decide. The agents are not a replacement for knowing what I want.
What I am not claiming
I am not claiming this is a product that is useful for anyone else. I am not claiming I invented contractor time tracking.
I am claiming this. I had a real problem that I could describe clearly. I used a set of tools that steers agent work toward the rigorous version. Now I have an app that solves my problem.
I will keep polishing it. The invoices are still generated by an accounting service I pay for, but the service provides an API that I will eventually integrate into the app to generate invoices directly.
The app is now part of my workflow, and it will continue to evolve as I work with agents more and more.