Timetracky is a small, fast desktop app for manually logging billable time and producing clean PDF time reports to attach to your invoices (e.g. from Wise, Stripe, or your accountant). No timers, no background tracking, no cloud — you fill in your hours the way you'd fill a timesheet, and everything stays in a local database on your machine.
- 📅 Calendar logging — a monthly calendar where you click any day to log time. Each day shows the hours already tracked at a glance; today is highlighted.
- 👤 Clients & rates — manage clients with a default hourly rate and currency. The rate is snapshotted onto each entry, so changing it later never rewrites past work.
- 📝 Manual entries — flexible duration input (
1h30m,90m, or1.5), descriptions, and a per-client filter with live totals. - 📄 PDF reports — pick a client and date range, generate a tidy time-tracking report, and export it as a polished PDF to attach to an invoice.
- ✅ Billed tracking — mark reported entries as billed so the same hours never get invoiced twice.
- 💾 Local & private — all data lives in a single SQLite database under your config directory. No account, no server, no telemetry.
Download the latest .rpm from the
Releases page and
install it:
sudo dnf install ./timetracky-1.0.0-1.x86_64.rpmThen launch Timetracky from your application menu, or run timetracky from
a terminal.
Requires Go 1.25+, a C compiler (Fyne uses CGO), and the X11/OpenGL dev headers.
# Fedora
sudo dnf install golang gcc libX11-devel libXcursor-devel libXrandr-devel \
libXinerama-devel libXi-devel mesa-libGL-devel
# Debian/Ubuntu
sudo apt-get install golang gcc libgl1-mesa-dev xorg-dev
git clone https://github.com/RaihanStark/timetracky.git
cd timetracky/time-tracker
go build -o timetracky .
./timetrackyWant to hack on Timetracky without building a binary first? Run it straight from source — Go compiles and launches the app in one step:
cd timetracky/time-tracker
go run .Or use the Makefile shortcut from the repo root:
make dev # same as `go run .`
make test # run the test suite
make build # produce the `timetracky` binary- Clients → Add Client, set an hourly rate and currency.
- Time Entries → click a day on the calendar → Add entry. The rate
pre-fills from the client; type a duration like
1h30mand save. - Report → choose the client and date range → Generate → Export PDF. Hit Mark as billed once you've sent the invoice.
| Concern | Choice |
|---|---|
| Language | Go |
| GUI | Fyne (+ fyne.io/x calendar widget) |
| Storage | SQLite via pure-Go modernc.org/sqlite |
go-pdf/fpdf |
|
| Packaging | nfpm → RPM, via GitHub Actions |
README.md project landing page
LICENSE MIT
packaging/ nfpm config, .desktop entry, icon
.github/workflows/ CI: build + RPM + GitHub release on tag
time-tracker/ the application (Go module)
├── main.go window + app bootstrap
└── internal/
├── model/ data types, money/duration formatting
├── store/ SQLite persistence + legacy JSON import
├── report/ report computation + text/PDF rendering
└── ui/ Fyne tabs: entries (calendar), clients, report
Your database is stored at ~/.config/time-tracker/data.db (Linux). Back it up
by copying that file. An older data.json is imported automatically on first
run.
If Timetracky saves you time, consider sponsoring the project — it helps keep development going. Thank you!
MIT © Raihan
