Every Friday, I used to lose time trying to remember what I actually worked on. My employer’s ERP made timesheets feel like unpaid homework — slow forms, clunky UX, way too many clicks.
Funny enough, back when I freelanced part-time, pen and paper was faster than the ERP. Just jot down:
09:00 Project A
10:30 Meeting
11:00 Project B
Simple. But as a full-time consultant, the list at the end of the week got long. Translating that back into the ERP became painful again. That’s when I thought: I should automate this.
What I Wanted
- Recording should be instant. The system should capture start times automatically, then calculate the time spent.
- Reporting should be painless. Group entries by task, push them to the ERP via API, and never open the ERP’s UX again.
I considered Excel, but it wouldn’t give me real automation. I checked a few existing tools, but they felt bloated and didn’t match my pen-and-paper logic:
- End a task by simply starting the next one.
- Automatically calculate the duration of the previous task.
So I built a web app.
Version 1: Already a Boost
- Add entries with one button or a keyboard shortcut.
- Date/time auto-populates.
- Previous task’s duration auto-calculated.
- Select multiple entries → see the total minutes right away.
I’d just take that total and type it into the ERP. Productivity win.
The stack remained super simple: no backend needed.
- Frontend deployed to Cloudflare Pages
- Data stored in browser localStorage
- No signup, no emails, no accounts. Just open the page and log.
Integrating with the ERP
Of course, I wanted more. My employer used Odoo, and I wanted to push timesheets directly to it at the end of each day, with one button click. That meant:
- Pulling projects and tasks from Odoo via API
- Linking entries in my app
- Pushing them back to Odoo in bulk at the end of the day, with rounding options for time spent (minimum 15 minutes)
Then came the classic: CORS issues.
Frontend → Odoo backend? Nope.
I tried using a Chrome extension and it worked, it was just not that practical.
The fix: Cloudflare Workers. They handled the proxy neatly, and suddenly I had a working integration.
Current Tech Stack (for the curious)
- Frontend: StencilJS (web components)
- Hosting: Cloudflare Pages
- Storage: Browser LocalStorage
- ERP Integration: Odoo API (Projects & Tasks)
- Proxy / CORS Fix: Cloudflare Workers
Lightweight, serverless, and cheap to run.
Small UX Wins
Over time, I kept scratching little itches:
- Added a “Break” button (instead of typing it every time) → logs as non-working time.
- Polished the design, made it responsive.
- Shortcuts for common actions.
Here's a quick screenshot:
I didn’t think mobile mattered at first, but once or twice I wanted to check/edit during my commute. Since the data lives in local storage, it wasn’t super useful. Maybe syncing across devices will come later... That would require a backend, a database, authentication etc.
What’s Next
- Teamwork integration (since that’s what I use now).
- Maybe calendar pre-fills to auto-generate some entries.
- CSV / Excel exports.
- Integrate with Zapier/Make hooks.
- Sync across devices if users ask for it.
- And why not at some point have an LLM improve the description of timesheets? 😅
But the core will stay: simple, fast, no sign-up, no data harvesting.
Wanna Try?
If you’re a freelancer, consultant, or developer who hates timesheets, maybe my app can help:
👉 timesheetr.app
I’d love to hear feedback — especially from devs who know the pain and want to make this faster.
Top comments (0)