Time Management Tool Based Off the Pomodoro Technique

Website https://zenfocus.surge.sh/
Repository https://github.com/builtwithluv/ZenFocus
Category Productivity
Keywords Time
Downloads latest-mac.json latest.yml zen-focus-2.0.0-mac.zip zen-focus-setup-2.0.0.exe
Latest Release 2.0.0 (v2.0.0)
Release Notes

UI Changes:

  • Show welcome slides as a new window
  • Various changes to layout and size of window
  • Menu bar appears on windows


  • Removed library feature
  • Add feature to change sound per phase
  • Confirmation when session ends


ZenFocus at its core is based off the time management technique known as the Pomodoro technique developed by Francesco Cirillo. In short, it is a way for individuals to plan, focus and complete tasks in the form of managing different time blocks (focus time, short breaks and long breaks). This technique is used by many in different industries including but not limited to education, medical, fitness and music.

Zen Focus Snapshot


First, fork the repo and clone to your local.

And then install dependencies. ProTip: Install with yarn for faster and safer installation:

$ cd your-project-name && yarn install


Start the app in the dev environment. This starts the renderer process in hot-module-replacement mode and starts a server sends hot updates to the renderer process:

$ yarn run dev


Toggle Chrome DevTools

  • OS X: Cmd Alt I or F12
  • Linux: Ctrl Shift I or F12
  • Windows: Ctrl Shift I or F12

See electron-debug for more information.

DevTools extension

This boilerplate is included following DevTools extensions:

You can find the tabs on Chrome DevTools.

If you want to update extensions version, please set UPGRADE_EXTENSIONS env, just run:

$ UPGRADE_EXTENSIONS=1 yarn run dev

# For Windows
$ set UPGRADE_EXTENSIONS=1 && yarn run dev

💡 You can debug your production build with devtools by simply setting the DEBUG_PROD env variable:

DEBUG_PROD=true yarn run package


yarn test

Note: If you receive this error:

TypeError: Path must be a string. Received undefined

  at assertPath (path.js:28:11)
  at Object.join (path.js:1239:7)
  at Object.<anonymous> (app/node_modules/electron-settings/lib/settings.js:47:31)
  at Object.<anonymous> (app/node_modules/electron-settings/index.js:10:18)

then assign default variable to string like so

const settingsFilePath = path.join(userDataPath || '', settingsFileName || '');



MIT © builtwithluv

Something missing? Edit this app.