Skip to content

Repository files navigation

⏱️ Bizneo Companion

Platform: macOS 13+ Swift 5.9 License: CC BY-NC 4.0

Your Bizneo time balance, live in the macOS menu bar — with one‑click clock in/out.

Stop opening Bizneo a dozen times a day to check whether you're ahead or behind. Bizneo Companion puts your running time balance right in the menu bar and lets you check in, take a break, resume, and check out without leaving what you're doing.

Unofficial, community‑built helper for Bizneo HR time tracking (control horario / fichaje / registro de jornada). Not affiliated with Bizneo.

        ●  −0:29          ← menu bar (red = behind · green = ahead)
        ╰───────────────────────────────╮
          Bizneo Companion              │
          ─────────────────────────────  │
          🔴 Today        missing 0:29   │
          🟢 This week    ahead   2:11   │
          🔴 This month   missing 1:01   │  (official −8:21, +7:20 pending)
          🟢 This year    ahead  14:30   │
          ─────────────────────────────  │
          🟢 Working (telework) · 09:48  │
          🏁 Leave by 18:15              │
             Take break                  │
             Check out…                  │
          ─────────────────────────────  │
          Pending changes (2)         ▸  │
          ─────────────────────────────  │
          Refresh now · Edit config · Quit
        ╰───────────────────────────────╯

Why you'll like it

  • 👀 Always visible — your balance sits in the menu bar; glance instead of logging in.
  • Counts what's pending — unapproved time‑edit requests are folded in, so the number matches reality, not just what's been approved.
  • 🟢 Net ahead/behind at a glance — the bar shows your cumulative week by default (green when you've banked extra, red when you owe time).
  • 🕒 Clock in/out from the menu — check in (with project), break, resume, check out.
  • 🏖️ Knows your days off — company free Fridays ("Fridom") don't get counted as missing time.
  • 🔐 No password, no API token — reuses your existing Chrome session, all locally.

Features

📊 Today / week / month / year Running balance for each period, pending‑aware
⏯️ Clock controls Check in · Take break · Resume · Check out (with confirm)
🏁 Leave‑by time While clocked in, the wall‑clock time you hit today's target
🗂️ Project picker Check in to a project; remembers your last one
🏠 Telework by default Configurable office/telework mode
🏖️ Day‑off aware Free "Fridom" Fridays don't count against you
🔄 Auto‑refresh Every 10 min (configurable) + on demand
🪶 Tiny & native Swift menu‑bar agent, no Dock icon, no Electron

Quick start

Requirements: macOS 13+, Google Chrome (logged in to Bizneo), and Apple's Command Line Tools (xcode-select --install).

# 1) Build the app
./build_app.sh                      # → BizneoCompanion.app

# 2) Point it at your account (see “Finding your details” below)
open "$HOME/Library/Application Support/BizneoCompanion/config.json"
#    set "tenant", "userId", and your Chrome "chromeProfile"

# 3) Launch it
open BizneoCompanion.app

On first run macOS shows one Keychain prompt ("Chrome Safe Storage") — click Always Allow so the app can read your Chrome session cookie.

Finding your tenant & user id

Open your Bizneo timesheet in Chrome. The URL looks like:

https://<your-company>.bizneohr.com/time-attendance/my-logs/<your-user-id>
  • tenant = <your-company>
  • userId = <your-user-id> (the number)
  • chromeProfile = the Chrome profile you're logged in with (e.g. Default, Profile 1). Find it at chrome://versionProfile Path.

Using it day to day

  • The bar number is your balance for the chosen period (barMetric, default week). Red = behind, green = ahead. Week/month/year are cumulative, so the bar reflects extra time you banked earlier in the period.
  • The dropdown breaks it down by today / week / month / year. When unapproved edits exist you'll see (official …, +… pending) so you know what's provisional.
  • Clock controls appear based on your current state: Check in when you're out, Take break / Check out while working, Resume / Check out on a break. The bar glyph shows ● working / ⏸ on break.

Privacy & security

  • 🔒 Local only. Everything runs on your Mac and talks directly to your Bizneo tenant. No third‑party servers.
  • 🙅 No password stored. It never asks for or keeps your Bizneo password — it reuses the session cookie Chrome already has.
  • 🔑 Cookie stays in memory. Read fresh each refresh, never written to disk.
  • 📍 No location/geolocation is ever sent when clocking in.

Configuration

Stored at ~/Library/Application Support/BizneoCompanion/config.json (or menu → Edit configuration…). Highlights:

Key What it does Default
barMetric Which period the bar shows: today/week/month/year week
enableYearTotal Show year‑to‑date (caches past months) true
defaultTelework Clock in/resume as telework true
defaultProjectId Project for the quick check‑in null
dayOffScheduleNames Schedule names that mean "day off" ["Fridom", "Fridom (7 hours)"]
includePending Fold in unapproved change requests true
liveTick Count balances up each second while the timer runs true
barShowSecondsWhileWorking Show seconds (H:MM:SS) in the menu bar while working false
dropdownSecondsScope Which dropdown rows tick in seconds: none/today/all today
refreshSeconds Auto‑refresh interval 600
Full config example
{
  "tenant": "<your-company>",
  "userId": "<your-user-id>",
  "chromeProfile": "Default",
  "refreshSeconds": 600,
  "weekStartsMonday": true,
  "includePending": true,
  "dayOffScheduleNames": ["Fridom", "Fridom (7 hours)"],
  "enableClockActions": true,
  "enableYearTotal": true,
  "barMetric": "week",
  "defaultTelework": true,
  "defaultProjectId": null,
  "liveTick": true,
  "barShowSecondsWhileWorking": false,
  "dropdownSecondsScope": "today",
  "manualCookie": null
}

FAQ

Do I need an API token or admin access? No — it reuses your normal Chrome login.

Will it change my data? Only when you click a clock action. The balance views are read‑only.

It says "Not logged in"? Your Bizneo session expired — open Bizneo in Chrome and log in; the app picks the new cookie up on the next refresh.

Does it work with Safari/Firefox? Currently Chrome only. (Or paste a cookie via manualCookie.)

How it works

Architecture & endpoints (for the curious)

Bizneo Companion authenticates by decrypting Chrome's _hcmex_key session cookie (Keychain Chrome Safe Storage + AES‑128‑CBC) and calling the same internal endpoints the web app uses, parsing the returned HTML.

Figure Source
Today GET /chrono/{userId}/hub_chrono → scheduled / logged
Month GET /time-attendance/my-logs/{userId}?month=&year= → balance "Until today"
Week same page → sum of daily balances
Year sum of monthly pages Jan→now (past months cached)
Pending …/logged-time-requests/{id} → proposed duration

Clock actions: POST /chrono (check in), PUT /chrono/{userId} with pause= to break/resume and without it to check out.

Parsers are anchored on stable labels/classes and covered by a built‑in self‑test against captured HTML fixtures:

BizneoCompanion.app/Contents/MacOS/BizneoCompanion \
  --selftest Tests/BizneoCompanionTests/Fixtures

Project layout: Sources/BizneoCore (parsing, models, client, cookie decrypt), Sources/BizneoCompanion (menu‑bar UI, probe, self‑test).

Roadmap

  • Real screenshots / demo GIF
  • Optional telework/office quick toggle
  • Manual "refresh year" for late approvals in past months
  • Safari/Firefox cookie support

Contributing

Issues and PRs welcome — especially if Bizneo changes its markup (re‑capture the HTML and update TimesheetParser). If this saved you some clicks, a ⭐ helps others find it.

License

Licensed under Creative Commons Attribution‑NonCommercial 4.0 International (CC BY‑NC 4.0) © 2026 asolfre. You may share and adapt it for non‑commercial purposes with attribution.

Disclaimer

Independent, unofficial tool. Not affiliated with or endorsed by Bizneo. It uses undocumented internal endpoints that may change at any time. Use at your own risk.

About

Your Bizneo HR time balance in the macOS menu bar, with one‑click clock in/out. No API token, reuses your Chrome session.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages