Experiment
In daily use at Knox
Knox Project Management System
Running an agency means quoting, chasing, tracking and billing every single day. I built one place that does all four, so I stopped doing them by hand.
- Role
- Founder, product + build, solo
- Apparatus
- React · TypeScript · Express · MySQL · Claude Code
- Tags
The problem
Every day at an agency looks the same. A client sends a list of work and wants to know how long it will take. Someone has to guess. Then someone has to check who is doing what, chase the people who forgot to log their time, and at the end of the month turn all of it into a bill.
None of that is the actual work. It is the work around the work, and it was landing on me.
The day-to-day problem
- "How long will this take?"Before: a guess, every time. Now: the app suggests a quote from how long the same kind of task took us before.
- "Who's on what today?"Before: asking around. Now: everyone gets their plan by email at 7am, and sees it on My Tasks.
- "Did anyone log their hours?"Before: chasing at month end. Now: a nudge at 7pm that lists the tasks they touched but didn't log.
- "What do we bill this client?"Before: rebuilding the month in a spreadsheet. Now: each client has a link that already shows their hours and the amount.
- "Where's my work at?"Before: clients asking on calls and messages. Now: clients log in and see their own projects, without our hours or margins.
- "Who's doing well?"Before: gut feeling at review time. Now: a monthly score built from work delivered, with the method written down.
Why not just use Asana
Asana tracks tasks. Our day runs on tasks, quotes, hours and bills, joined together.
- Four tools, not oneOff the shelf, this is a task tool, a time tracker, a quoting spreadsheet and an invoicing tool. Four logins, and nothing talks to anything.
- Clients inside, quotes hiddenWe want clients in the same project as the team. They must never see the hours behind a quote, or every quote becomes a negotiation.
- Our rules, not a templateHow we quote, what counts as late, who gets credit for a task. These are decisions about how Knox runs. A tool should follow them, not the other way round.
- No per-seat billEvery developer and every client would be a paid seat. Ours runs on hosting we already have.
How it works
A client’s list of work arrives as a batch. The app quotes it from our own history. A developer checks the hours and commits to a turnaround. Then the work happens on a board, time gets logged, and the bill builds itself.


A day with it
- 7amEach developer gets their plan: overdue, due today, next.
- During the dayThey work from My Tasks, move cards and log time as they go.
- ClientsAdd work and follow it in their own projects.
- 7pmDevelopers get a "log your time" nudge. I get the whole team's day in one email.
- Month endClient bills are already in their timesheet links. I close the month's scores.
- AnytimeAnything that rewrites the record, like deleting worked-on tasks, waits for my approval.

The score
Developers are scored monthly, 0 to 100, for reviews and bonuses. It counts work delivered: finished on time, close to the quote, not reopened, logged every working day. It never counts hours, because hours are easy to pad. Leave and holidays don’t count against anyone.


Everything it does
- WorkProjects, teams, boards and lists. Tasks with notes, subtasks, tags, files, comments and several assignees.
- QuoteBatches with a quote from history or a developer's hours. A client's PDF can become a batch through Claude.
- ClientsTheir own projects. They add tasks, comment and ask for revisions, and never see hours.
- BillA private link per client, by month, project, task and day, at their rate. CSV, print and PDF.
- NudgeEmails on assignment, comments and completion. Morning plan, evening reminder, team summary, announcements.
- MeasureAnalytics for the team, and the monthly score with points, levels and badges.
- PeopleCheck-ins, leave and holidays.
- SafetyArchive and undo anything. Big deletions and late quote changes need approval. Every score change is logged.

What I learned
- For an internal tool, the rules are the product. Most of the work was deciding who sees what, and who gets credit for what.
- If it touches pay, publish the method. People trust a number they can check.
- Build on what people already use. A browser and their inbox. Nothing new to install, so the team actually uses it.
What happened
- 2 emails a day do the chasing. A plan at 7am, a "log your time" nudge at 7pm.
- ₹0 per seat. It runs on hosting we already pay for.
- 268 automated tests on the rules that touch money and pay.
The honest note
Building your own tool is usually the wrong call. It made sense here because our process is unusual, the tool is small, and I can build it myself. If any of those were false, I'd be on Asana.
The performance score only started on 1 October. It touches pay, so it will take a few months before I trust it fully. The manager rating is still there for what the numbers can't see.
The screenshots are from a test project with made-up tasks, so no client's work is on show.
Not built yet
- A proper phone layout. Today it is a desktop app.
- Deactivating a user without deleting their history.
- Task dependencies, a calendar view and saved filters. Left out until someone actually asks.