Home / Resources / HourLedger
HourLedger: logged hours to a PDF invoice, in seconds.
Type your hours the way you already write them. HourLedger converts them, totals the month, works out what you’re owed and gives you a clean PDF invoice. Everything stays in your browser.
no sign-up · no tracking · works in any modern browser
Try the logic
4.28 = 4h 28m
why I built it
A small problem that came back every month
At my current job I’m paid by the hour. I logged time in an Excel sheet, converted hours and minutes by hand, then totalled everything at the end of the month. Small conversion slips meant my number and HR’s number didn’t always match, and sorting it out took time on both sides.
- 01Hours in a spreadsheet4h 28m written as 4.28, which a spreadsheet reads as 4.28 hours.
- 02Manual conversion at month endEvery entry converted by hand, and a total that was easy to get slightly wrong.
- ✓So I wrote the logic myselfWhile learning JavaScript, I built the conversion and totals first, then turned it into a tool anyone can use.
how it works
Three steps, about a minute
Enter hours your way
4.28 means 4h 28m. Paste many at once, separated by commas, spaces or new lines. Ctrl+Enter adds them.
Set your rate and period
Add an hourly rate, who you’re billing and the dates. The amount payable updates as you type.
Download the PDF invoice
Billing period, hours, rate and total on one clean page, ready to send.
// "4.28" means 4 hours 28 minutes, not 4.28 hours function toMinutes(entry) { const [h, m = "0"] = entry.trim().split("."); return Number(h) * 60 + Number(m.padEnd(2, "0")); } const total = entries.map(toMinutes).reduce((a, b) => a + b, 0); const label = `${Math.floor(total / 60)}h ${total % 60}m`; const payable = (total / 60) * rate;
what I learned
Built while learning JavaScript
- Parsing messy input: commas, spaces and new lines in one box
- Working in minutes, then showing hours, minutes and decimal hours
- Updating totals and the payable amount live as you type
- Generating a PDF in the browser, with no server and no stored data
faq
Questions about HourLedger
$ need –custom-tool
Your team has a spreadsheet problem too?
I build small, focused tools and WordPress features that remove a repeated manual step. Tell me what eats your time.
Is HourLedger free?
Yes. No account, no limits, no ads.
Does my data leave my browser?
No. Entries, rate and the PDF are all handled in your browser. Nothing is sent to a server or stored by me.
Which currency does it use?
The amount payable is shown in Bangladeshi taka (BDT), because that is how I am paid. The hours and minutes work for any currency.
Can you build a tool like this for my team?
Yes. If your team repeats a manual step every week, a small tool or a WordPress feature can usually remove it. Send me what eats your time.