Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

97 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Focus Timer - Electron + Android Sync

A local-first focus timer for Windows, Linux, and Android.

The desktop app is built with Electron, React, TypeScript, and Vite. It includes a full timer window, compact mode, Windows taskbar timer mode, custom focus blocks, custom alarm audio/video, global shortcuts, and a daily plan calendar.

The Android app is built with React Native and TypeScript. It can sync with the desktop app over the local network when the desktop app is running.

No cloud service is required.

Screenshots

Android App

Android app

Desktop Overview

Desktop app overview

Settings: Custom Audio And Shortcuts

Settings with custom audio and shortcuts

Daily Plan And Calendar

Daily plan and calendar

Features

  • Desktop timer for Windows and Linux.
  • Full and compact timer modes.
  • Windows-only taskbar timer mode.
  • Exact HH:MM:SS timer input.
  • Custom focus block presets.
  • Global keyboard shortcuts.
  • Built-in, Windows system, or custom MP4/audio finish alarm.
  • Daily plan tracking with calendar history and streak.
  • Android companion app.
  • Local Wi-Fi sync between Android and the desktop app.
  • Local Git-tracked codebase.

Project Structure

desktop/   Electron + React + TypeScript desktop app
mobile/    React Native + TypeScript Android companion app
docs/      README screenshots

See project history for major design changes and release process for validation and packaging details.

Desktop Development

cd desktop
npm install
npm run dev

Build and package the Windows installer:

cd desktop
npm run package:win

Run desktop checks without packaging:

cd desktop
npm run verify

Build Linux packages on Linux:

cd desktop
npm run package:linux

Downloads

Desktop installers are published from GitHub Releases:

Download the latest release

  • Windows: download Focus-Timer-Setup-<version>.exe and run it.
  • openSUSE/Fedora Linux: download the .rpm package and install it with your package manager.
  • Debian/Ubuntu Linux: download the .deb package.
  • Other common Linux distros: download the .AppImage, run chmod +x <file>.AppImage, then launch it.

To publish a new desktop release, bump desktop/package.json, then push a matching tag that starts with desktop-v:

$version = (Get-Content desktop/package.json | ConvertFrom-Json).version
git tag "desktop-v$version"
git push origin "desktop-v$version"

CI verifies, packages, and smoke-tests each platform artifact before publishing the GitHub Release. See release process.

Android Development

cd mobile
npm install
.\scripts\build-android.ps1

Install the APK on a connected Android phone:

cd mobile
.\scripts\install-android.ps1

Local Sync

  1. Launch the desktop app.
  2. Make sure the phone and PC are on the same Wi-Fi network.
  3. Find the PC IPv4 address with:
ipconfig
  1. In the Android app, enter:
http://YOUR_PC_IP:5278

Example:

http://192.168.0.55:5278

The desktop app hosts the local sync API. The Android app pushes its current state and receives the merged desktop snapshot back. Daily-plan dates are merged independently, so adding or changing one day on a stale device does not replace history from the other device.

Notes

This is a solo-dev local productivity project. It is designed for personal use on a trusted local network. Sync uses plain HTTP and has no device pairing or authentication. Do not expose port 5278 to the internet or an untrusted LAN.

For stronger security, the next step would be adding a pairing token so only approved phones can sync with the desktop app.

Taskbar timer mode and Windows system sounds are Windows-only. Linux builds support the normal window, compact mode, daily plan calendar, custom media alarms, and local sync.

About

Local-first Electron focus timer with Android LAN sync, daily plans, shortcuts, and Windows taskbar mode.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages