FREE · OPEN · FOR DEVELOPERS

Commit from the terminal.
Done in your timesheet.

chronik reads your GitHub and GitLab commits, picks up task tags from the commit message, and fills in your Odoo timesheets automatically. Self-host, free, fully under your control.

No credit card. No paywall. Never has been, never will be.

yourteam/chronik
  • a3f12efix OAuth state verify +T2184
  • 91b0cdhandle Odoo 409 on duplicate line +T2184
  • 1fa87cskeleton for drafts review UI +T2201
  • c0d41ebump apalis to 0.6.4
DRAFT · 17 April 2 entries
Task #2184 — OAuth stability
chronik · 2 commits
2.00h
Task #2201 — Drafts review UI
chronik · 1 commit
1.50h
Pushed to Odoo 3.50h
account.analytic.line #48712 · 48713
WHY

Timesheets are not real work. Yet we fill them in every single day.

Can't remember yesterday

Open GitHub, scroll commits, type them out again — every day.

Manual copy-and-paste

10 minutes a day × 220 days = 36 hours a year of retyping.

Wrong project

Charge client A for work done for client B — auditors will notice.

HOW IT WORKS

Five steps. One-time setup.

  1. 1

    Connect

    Click Continue with Google to sign in, then link GitHub and GitLab. OAuth is one-click — no need to register your own app.

  2. 2

    Map

    Map each repository to an Odoo project. Set a default task per repository as a fallback.

  3. 3

    Tag

    Write commits that include +T{task_id}. Optional — commits without a tag land on the default task.

  4. 4

    Review

    chronik turns your commits into timesheet drafts. Review them, tweak the hours if needed, then approve.

  5. 5

    Done

    Entries appear in Odoo. Prefer fully hands-off? Switch to auto_push mode.

FEATURES

Everything you need.
Nothing you don't.

AI HOURS

Estimate hours with AI (optional)

Every commit goes to the model with its full diff, the task's remaining budget, and your own historical pace per commit. Anchored reference points keep the output grounded — trivial typos around 0.1h, a major refactor up to your per-commit cap. Pick an optimist, realistic, or pessimist bias to match your estimating style. Temperature 0, JSON-only, OpenAI-compatible — OpenAI, Azure, OpenRouter, or self-hosted Ollama.

hours_mode            = "ai_estimate"
ai_max_hours_per_commit = 4.0
ai_estimation_bias    = "realistic"   # optimist · realistic · pessimist

# Signals sent to the model, per commit:
#   • commit message + full diff
#   • task name, description, budget, remaining
#   • user historical average h/commit
#   • anchored scale: typo 0.1h · fix 0.5-1h · feature 1-3h · refactor ≤ cap

# Provider: OpenAI / Azure / OpenRouter / Ollama (OpenAI-compatible URL)

One-click connect

GitHub and GitLab OAuth built in. No need to register your own app.

Date-range sync

Sync today, this week, or any custom range. Per-provider checkpoints prevent duplicates.

Configurable parser

Defaults to +T{id}. Switch to #123 or [T-42] — any regex works.

Review or auto-push

Review drafts before they reach Odoo, or go fully hands-off — your choice, per user.

POWER TOOLS

Built for how timesheets actually work.

Beyond the basics — the quality-of-life features that make chronik usable every day.

Bulk AI redistribute

Spread hours across a date range with weekend skips, or set a target total and let the AI split it across commits — weighted by volume and complexity.

Scheduled sync

A cron-driven background worker runs sync on your schedule. Set it once at 07:00 and stop thinking about it.

Inline editing

Tweak hours with auto-save, change project or task in place, skip or approve rows in two clicks — no modal round-trips.

Round-trip delete

Remove a draft from chronik and unlink its Odoo timesheet entry in a single action — no stale entries left behind.

Multi-identity matching

Your GitLab display name differs from your GitHub login? Add aliases by email, login, or name — chronik matches them all and de-duplicates by SHA.

Smart commit filters

Skip WIP commits by regex, enforce a minimum message length, restrict branches, exclude merges, or keep only working days — mix and match.

+ Plus a bilingual UI (English / Bahasa Indonesia), a built-in dark mode, and a description template you can shape to fit your team.

UNDER THE HOOD
Rust Axum HTMX Postgres Supabase Auth Docker MIT

One binary, one docker-compose file, one VPS. Host it yourself and stay in full control.

FAQ

Frequently asked questions.

Why is it free?

I got tired of filling in timesheets too. Once the problem was solved I just wanted to share it. There is no plan to monetise.

Is my data safe?

Your GitHub, GitLab, and Odoo tokens are encrypted with XChaCha20-Poly1305. We never ask for your Odoo password — only an API key.

Which Odoo versions are supported?

Odoo 14 through 19. Anything with External API (XML-RPC / JSON-RPC) and the API Key feature (introduced in Odoo 14).

Can I self-host?

Yes. A docker-compose setup is included. Use Supabase Postgres or your own Postgres. When self-hosting you register your own OAuth apps — your call.

Is self-hosted GitLab supported?

The MVP supports gitlab.com only. Self-hosted GitLab is on the roadmap — reach out if you need it.

Can my team use it?

Each user configures their own account. There is no shared organisation account in the MVP. Reach out if you need multi-user support.

Stop filling in timesheets.
Start committing.

Free forever. No dark-pattern sign-up.