Day view
Your day as one proportional bar — every entry sized against your working day, and whatever is left over is an Unlogged slot you click to fill.
Worklog is a GitHub-backed timesheet. Clients, tasks and hours are stored as Markdown in a repository you own — this app just reads and writes them, and commits every change back for you.
Requests the repo scope so it can read and commit to your timesheet repository.
Recorded against a demo timesheet — every screen is the real app. Want the long version? The 90-second tour walks through every view, from the day bar to the commit it writes.
Your day as one proportional bar — every entry sized against your working day, and whatever is left over is an Unlogged slot you click to fill.
The half of a day that isn’t billed and isn’t a task: what was said, what was decided, what you want to remember on Monday.
Everything that has slipped, across every client, grouped with the longest-overdue first — plus a count badge so nothing quietly rots.
Everything still ahead, bucketed by how far off it is — tomorrow, later this week, next week, later this month — so a deadline three weeks out stops being a surprise.
A month grid of who you worked for each day, with per-client rollups. Click any day to jump straight into it.
Group work by client — with tags, due dates, subtasks, links and full Markdown descriptions — or drop it in the general to-do bucket that belongs to no client.
“Monthly on last”, “weekly on mon,thu”, “every 3 days”. Tick one off and the next occurrence is computed on the spot — nothing runs in the background.
Reusable checklists — a packing list, a release run, the invoicing routine. Tick through it, drag items into order, press Start again and it is waiting unticked for next time.
One shortcut over open tasks, the archive and your day notes. Filter by tag, and every tag chip in the app is a filter you can click.
Monthly hours and days per client, an events breakdown, an hours-by-client chart and a trend line — turned into charts, never a spreadsheet.
Closed tasks roll into a searchable archive you can filter by period, so your active lists stay clean.
One click. Your token stays server-side in an httpOnly cookie — never in the browser.
Choose an existing repository or spin up a fresh one. Worklog initializes the folders it needs on first use.
Log hours, manage tasks and watch your insights build — all saved as Markdown you can read anywhere.
Capture a task from anywhere. A bookmarklet, a browser extension or any shortcut that can open a URL hands Worklog a task:/app/new?title=…&url=…&client=acme opens the new-task form pre-filled. It fills the form and nothing else — you review it and press Save.
No proprietary format, no database. Everything Worklog knows lives in a handful of human-readable files you can open, grep, diff and hand-edit — right inside your repo.
your-repo/ ├── .worklog/ │ └── config.json # hours/day · week start · clients · statuses · sync ├── clients/ │ ├── acme.md # one file per client · its open tasks │ └── todos.md # general, non-client to-dos ├── worklog/ │ └── 2026-06.md # one file per month · logged hours ├── notes/ │ └── 2026-06.md # one block per day · freeform notes ├── archive/ │ └── acme/2026-06.md # closed tasks · per client, per month ├── lists/ │ └── release.md # one file per reusable checklist └── assets/ # images pasted into descriptions
{
"hoursPerDay": 8,
"weekStart": 1,
"clients": [
{ "id": "acme", "name": "Acme Corp", "color": "#3366ff" }
],
"statuses": [
{ "id": "open", "label": "Open" },
{ "id": "done", "label": "Closed", "terminal": true }
],
"autoSync": {
"enabled": true,
"delayMinutes": 5,
"events": ["timeLogged", "dayNote"]
}
}events lists the change kinds worth pushing straight away — the rest coalesce into one commit after delayMinutes.# Worklog 2026-06 - 2026-06-25 acme 4 — social feed - 2026-06-25 globex 3.5 - 2026-06-26 acme 8 - 2026-06-27 event:vacation 8
- date client hours — note.# Acme Corp ## Build the onboarding flow - id: t_a1b2c3 - status: in-progress - due: 2026-06-30 - worked: 2026-06-21 - tags: frontend, priority Freeform Markdown description — images and all. ## Send the monthly invoice reminder - id: t_rc3ccc - status: open - due: 2026-06-30 - repeat: monthly on last
## heading block per task; closing it moves the block to archive/ — or, with a repeat: line, rolls it onto the next occurrence.# Notes 2026-06 ## 2026-06-25 Kickoff with Globex. They want the uploader before the demo. - chase the SSO ticket ## 2026-06-26 Export queue prototype. Renders, doesn't paginate yet.
## <date> block per day. A heading is only a day when it is nothing but a date, so your own ## headings stay prose.# Release checklist - last run: 2026-06-12 Run this from a clean checkout of `main`. ## Steps - [ ] Bump the version - [x] Update the changelog - [ ] Tag it ## After - [ ] Announce it
## headings. Ticking one rewrites that single line; Start againclears them all and stamps - last run:.Every change is written straight back to your branch through the GitHub Git Data API —blobs → tree → commit → ref — coalesced into a singlechore: worklog sync <date> commit. No pull requests. A sync goes both ways: it pulls whatever was committed elsewhere first, and a file that moved on both sides ismerged record by record, never line by line — tasks by their id, logged hours by date and client — so a conflict marker can never land in Markdown. Your token stays in a server-side httpOnly cookie; the browser never calls GitHub directly.
Yes. You bring your own GitHub repository — there's no separate account, no server storing your data, and nothing to pay for. The code is on GitHub.
repo scope?So it can read your timesheet and commit your changes back. GitHub's OAuth repo scope is granted per token, but Worklog only ever touches its own files — .worklog/, clients/, worklog/, notes/, archive/, lists/ and assets/ — in the repository you choose.
In your repository, and nowhere else — Worklog has no database. Keep it in a private repo and it stays private. Your GitHub token lives in a server-side, httpOnly cookie, so it's never exposed to the browser or any third party.
Absolutely. Everything is plain Markdown and JSON (see Under the hood). Edit in your own editor or right on github.com — Worklog reads whatever's there the next time you open it.
Yes — Worklog is a PWA. Add it to your desktop or phone home screen for a native, full-screen feel; it caches its shell so it loads instantly, and commits your work back to GitHub whenever you're online.
Yes — Worklog for Chrome adds a task to your timesheet straight from a GitHub issue or pull request, or from a Productive item, without leaving the page you're on. It's optional; everything still lands in the same repo.
It moves out of the client file and into archive/<client>/<month>.md, stamped with its completion date. Your active lists stay tidy, and nothing is ever lost — reopening a task simply moves it back. A recurring task instead rolls onto its next date and files a snapshot of the occurrence you just finished.
Yes — the repo is the shared state. Every sync pulls before it pushes, an open tab notices a push from elsewhere on its own, and anything changed on both sides is merged per task, per logged day and per client rather than per line. Edit on your laptop, your phone, or on github.com; it all converges.
No database, no export button, no lock-in — just Markdown in a repo you already trust.
Sign in with GitHubFree · installs as an app on desktop & mobile · your data never leaves your repo.