Skip to content

PragmaTech-GmbH/BeanCounter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

BeanCounter

Local-only macOS menu bar Pomodoro timer with per-account tracking (personal / work / client) and weekly reporting. Inspired by TomatoBar, with persistent SQLite storage so you can mine the data later.

Screenshot placeholder — capture once the UI is dialed in.

Requirements

  • macOS 13 Ventura or newer
  • Xcode 15+
  • XcodeGen (brew install xcodegen)

Build & run

brew install xcodegen        # one-time
xcodegen                     # regenerates BeanCounter.xcodeproj from Project.yml
open BeanCounter.xcodeproj   # ⌘R to run

Regenerate the project whenever Project.yml changes. The generated BeanCounter.xcodeproj is gitignored on purpose.

Install locally

./install.sh              # build Release, replace /Applications/BeanCounter.app, relaunch
./install.sh --no-launch  # same but don't relaunch

The script never touches ~/Library/Application Support/BeanCounter/, so your session history survives every reinstall. It also quits any running instance, clears Gatekeeper quarantine, and reports the preserved session count.

Tests

xcodebuild test \
  -scheme BeanCounter \
  -destination 'platform=macOS' \
  CODE_SIGNING_ALLOWED=NO \
  | xcpretty

Tests use an in-memory GRDB queue, so no on-disk database is created during the run.

Data location

The SQLite database lives at:

~/Library/Application Support/BeanCounter/beancounter.sqlite

Inspect with the sqlite3 CLI:

sqlite3 ~/Library/Application\ Support/BeanCounter/beancounter.sqlite "select * from session;"

Gatekeeper bypass

The app is signed only with the local "Sign to Run Locally" identity, so macOS Gatekeeper will block first launch. Either right-click the .app and choose Open → Open, or drop the quarantine attribute:

xattr -d com.apple.quarantine /Applications/BeanCounter.app

Launch at login

Settings → Launch at login uses SMAppService.mainApp. macOS will silently ignore the registration if the app isn't living in /Applications, so move it there before flipping the toggle.

License

MIT — see LICENSE.

About

Counting them all 🫘

Resources

License

Stars

Watchers

Forks

Contributors