To track what you actually got done without logging anything, read the trail your work already leaves. Commits, published posts, closed tasks and processed queue rows are a record you’re making anyway. I built a private app that reads all six of mine nightly, sorts each finished thing into a category, and emails me the day at 9pm. I’ve never typed an entry into it.

The night I was sure I’d done nothing
I had a week where I shipped a lot. Then Friday came and I felt like I’d done nothing at all, and I mean nothing, the kind of nothing where you start wondering what you even do all day. The work happened. I just had no access to it. It was scattered across four repos, three blogs, an Asana project and a work queue, and none of those places will ever tell you “you had a good week.”
I have ADHD, and time blindness means a week is a smear. Ask me what I did on Thursday and I’ll guess. So I built the thing that answers the question for me.
Then I found the second problem, and it turned out to be the bigger one.
Busy is not the same as productive, and I couldn’t tell them apart
Some weeks I was genuinely slammed and still felt hollow at the end. Once the finished work was in one place and sorted, I could finally see why: the whole week had been admin. Invoices, inbox, dependency bumps, renaming things. Real work, all of it, and not one piece of it moved anything forward.
That’s the number I actually needed. Not “how much did I do,” but “what kind was it.” A day with three pieces of growth work and a day with three pieces of busywork look identical in a to-do app and feel nothing alike.
So every finished thing gets a category, and the app shows me the mix.
Who is a done log for?
It’s for anyone whose finished work scatters across places that never talk to each other, and who gets to Friday with no idea whether the week went well. If you have ADHD and a week reads as one long smear, that’s the sharpest version of it. Same if you’re running several things at once and can’t tell which one you actually fed this week.
It’s not for you if what you want is a planner. This has no concept of a to-do, a goal or a backlog, so it can’t tell you what to do next and it isn’t trying to. It’s also not much use if all your work already lands in one place and that place gives you a decent summary, because you’ve already got this.
Get the done log skill
The full version runs on a Cloudflare Worker with a database and six scheduled workflows, which is a lot to ask of someone who just wants the idea. The small version is one file that does the same job. It reads whatever trail you have, asks one question about the rest, sorts and scores it, and keeps a plain done-log.md file. No server, no database, no workflows.
My categories are mine, though. Income, growth, maintenance, busywork and life are the shape of my week, and yours is a different shape. So rather than hand you my file to edit, the tool below asks what kinds of work you actually do, what counts as income for you, and where your work already leaves a trail, then writes the file around your answers. Nothing is saved and nothing is sent anywhere.
If you’ve never installed one of these, I wrote a plain explanation of what a Claude Code skill is first.
Take the skill file it gives you and save it as SKILL.md in a folder named done-log, inside .claude/skills/. The folder name becomes the command. If you picked the chat prompt instead, there’s nothing to install at all: paste it into any chat window and answer the one question it asks you.
The box that matters most is what counts as income for you, because it’s the one that changes most between people. A freelancer’s is an invoice sent. A shop owner’s is a sale. If you’re job hunting, it might be an application submitted, and that’s a real answer.
Another thing to know, my entire life runs in Asana. So, I literally have “Give dog meds” as a task in Asana. That’s why this system tracks it. Once it gets checked off, it goes in the Done Museum. If you are normal, you probably do not obsessively track things like this!
What do you need to build a done log app?
A Cloudflare Worker with a D1 database, n8n running somewhere to hold the schedules, a Gmail account to send from, and API access to wherever your finished work already lands. The free tiers cover most of it, and the VPS is the only thing I pay for.
Some links below are affiliate links. If you sign up through one, I earn a commission.
- Cloudflare Workers and D1 – the app and its database. The free tier covers a single-user app like this one.
- n8n – runs the six harvesters and the two email jobs on a schedule. Free if you self-host.
- Hostinger – the VPS my n8n runs on. Paid. I compared this against n8n’s cloud pricing in Should You Self-Host n8n?
- A Gmail account – the daily and weekly emails send from it.
- API access to wherever you already work – GitHub, Asana, WordPress, Airtable. Each one needs a token and about twenty lines of normalizing.
Start with one source. Six is where I ended up, not where I began.

How does the done log app work?
Six harvesters run on a schedule and POST anything finished to one ingest endpoint. Each one only has to do two things: find what’s new, and hand over the same shape.
| Harvester | Watches | Runs |
|---|---|---|
| Git | Commits across my repos | 8pm and 11pm |
| Asana | Completed tasks | nightly |
| WordPress | Published posts | nightly |
| Work Queue | Closed queue rows | nightly |
| Airtable | Finished records | nightly |
| Stripe | Sales | built, currently off |
Three details did most of the work:
One trophy per repo per day. Twelve commits fixing one bug isn’t twelve accomplishments. The git harvester groups by repo and date so the shelf says “shipped the checkout fix,” not twelve slivers of the same afternoon.
The server owns the cursor. Each harvester asks the app where it left off. A first run gets back “90 days ago,” which means the backfill isn’t a separate feature, it’s what happens naturally on run one. Deleting a cursor row re-runs that backfill.
Dedupe on a composed ID. Every item carries an ID like git:repo-name:2026-08-18. Re-running a harvester is a no-op, which means I never have to be careful about triggering one twice.

The rules that keep it from turning mean
A tracker turns into a stick the moment it can measure you against something. Four decisions stop that:
- A zero day still sends an email. One gentle line, no guilt, and a link to add something by hand. A tracker that goes silent on your worst day is only there for your best one. I wrote about why the restart matters more than the streak over on the other blog, and this rule is that argument in code.
- The week compares to the median of the previous four weeks, never to my personal best. A best becomes a ceiling to fall short of, and I’d hit it once and then feel worse for a month.
- One observation, no moral. It’ll say “most of the income landed on Thursday” and stop. It never says what I should do about it.
lifeis excluded from the work mix. Going to pilates isn’t busywork and it isn’t income. Folding it in would wreck the only number the panel exists to report.
Where it’s wrong, and why I left it that way
It classifies with an AI pass, and the AI is roughly right rather than exactly right. It filed the dog’s medicine as a medium task when it’s plainly small. It puts things in maintenance that I’d call growth. So I go in and fix them, and I’m nitpicky about it.
I could keep tuning the classifier. I’d rather have a system whose guesses are easy to correct, because a classifier good enough to never need correcting is a much bigger project than the thing it would improve. Being editable beat being right.
What does a done log not do?
- Only finished things, never plans. It has no concept of a to-do, a goal or a backlog. Nothing enters until it’s already done, so it can never become another list telling me I’m behind.
- It’s just for me. One user, one login, no signup. There’s no privacy policy because I’m the only person whose data is in it.
It also cannot tell you what any of it cost you. That is a separate log, and I built one for energy to answer it: rate how you feel a few times a day, tag what you were doing, and after a week you can see what actually charges you.
Frequently asked questions
How do you track what you got done without logging it?
Read the records your work already creates. Commits, published posts, completed tasks and closed queue rows all carry a timestamp and a title, which is most of a log entry already. The only work left is deciding what category each one belongs to.
Do I need to build an app to do this?
No. The generator above writes you a single markdown file that does the same sorting and scoring, with no server and no database. Start there. Build the app version only if you find yourself wanting the emails.
What are the categories and why five?
Income, growth, maintenance, busywork and life. Five is enough to separate the work that pays from the work that keeps the lights on, and few enough that sorting takes no thought. Fewer than five and busywork hides inside maintenance.
Won’t the AI get the categories wrong?
Sometimes, yes. Mine files small tasks as medium and calls some growth work maintenance. Fixing a line takes seconds, so I optimized for corrections being easy rather than for guesses being perfect.
Does it punish you for a bad day?
No, and that’s deliberate. A zero day still gets an email with one kind line and no advice. The weekly summary compares against a median rather than a best, so there’s no record to fall short of.
How long before it’s useful?
Immediately, because the first run backfills 90 days. Mine had 122 entries in it the day I turned it on, which is also when I learned how much of my time goes to maintenance.
A tool I built
Energy Battery
Log your energy through the day and watch your battery fill, so you can see what actually charges you and what drains you.
Find your spark →I run an affiliate program on the tools I build. Approved affiliates earn 20% on what their referrals pay, for up to a year. US only for now. See the program →
Related reading
- What a Claude Code Skill Is, and How to Make One
- Turn Your Blog Post Checklist Into a Claude Code Skill
- n8n Workflow to Turn Asana Tasks Into a Daily Plan
Start with one day
Build your version above, run it tonight, and look at the mix rather than the total. The total tells you whether you were busy. The mix tells you whether being busy meant anything, and those are different questions with the same miserable feeling attached.
Tracking what you actually got done comes down to three moves: read the trail you already leave, sort it by kind of work, and never let it compare you to your best day.
Subscribe if you haven’t already, and go find out what you actually did this week.
