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.
- Desktop timer for Windows and Linux.
- Full and compact timer modes.
- Windows-only taskbar timer mode.
- Exact
HH:MM:SStimer 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.
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.
cd desktop
npm install
npm run devBuild and package the Windows installer:
cd desktop
npm run package:winRun desktop checks without packaging:
cd desktop
npm run verifyBuild Linux packages on Linux:
cd desktop
npm run package:linuxDesktop installers are published from GitHub Releases:
- Windows: download
Focus-Timer-Setup-<version>.exeand run it. - openSUSE/Fedora Linux: download the
.rpmpackage and install it with your package manager. - Debian/Ubuntu Linux: download the
.debpackage. - Other common Linux distros: download the
.AppImage, runchmod +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.
cd mobile
npm install
.\scripts\build-android.ps1Install the APK on a connected Android phone:
cd mobile
.\scripts\install-android.ps1- Launch the desktop app.
- Make sure the phone and PC are on the same Wi-Fi network.
- Find the PC IPv4 address with:
ipconfig- 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.
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.



