Skip to content
Book a free call
Skip to content

HourLedger

Home / Resources / HourLedger

Free tool · built and maintained by me

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
Total worked0h 0m= 0.00 hours
Amount payable৳ 0
Fahim Hasan working at a cafe

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.

  1. 01Hours in a spreadsheet4h 28m written as 4.28, which a spreadsheet reads as 4.28 hours.
  2. 02Manual conversion at month endEvery entry converted by hand, and a total that was easy to get slightly wrong.
  3. ✓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

01

Enter hours your way

4.28 means 4h 28m. Paste many at once, separated by commas, spaces or new lines. Ctrl+Enter adds them.

02

Set your rate and period

Add an hourly rate, who you’re billing and the dates. The amount payable updates as you type.

03

Download the PDF invoice

Billing period, hours, rate and total on one clean page, ready to send.

the core idea, simplified
// "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.

Fahim Hasanreplies within a day Start a project WhatsApp