From 7a583a2b272cf0ae1955f51c015ae09a9d273e35 Mon Sep 17 00:00:00 2001 From: lashman Date: Sat, 7 Feb 2026 01:18:48 +0200 Subject: [PATCH] Revamp README - emojis, better formatting, cleaner layout --- README.md | 410 ++++++++++++++++++++++++++++++++---------------------- 1 file changed, 242 insertions(+), 168 deletions(-) diff --git a/README.md b/README.md index 9eb8571..034e29b 100644 --- a/README.md +++ b/README.md @@ -1,102 +1,125 @@

- Core Cooldown + + + +

-

Core Cooldown

+

+ CORE COOLDOWN +

- A portable break timer for Windows that reminds you to rest.
- Because your time and your body belong to you - not to your screen. + A portable break timer for Windows that reminds you to rest.
+ Because your time and your body belong to you - not to your screen.

- CC0 1.0 - Windows - Tauri v2 - Svelte 5 - Rust - Tailwind v4 + CC0 1.0 + Windows + Tauri v2 + Svelte 5 + Rust + Tailwind v4 +

+ +

+ Download latest release


--- -
+## Why does this exist? -## Why +Repetitive strain injury and eye strain are not personal failings. They are the predictable result of systems that treat human attention as an extractable resource. Every person at a screen deserves a tool that gently interrupts the grind - one that serves *them*, not a subscription model, not an analytics dashboard, not a corporate wellness KPI. -Repetitive strain injury and eye strain are not personal failings. They are the predictable consequence of systems that treat human attention as an extractable resource. Every worker at a screen deserves a tool that gently interrupts the grind - one that serves *them*, not a subscription model, not an analytics dashboard, not a corporate wellness KPI. - -Core Cooldown is a single portable `.exe` with no installer, no account, no telemetry, and no data leaving your machine. Drop it in a folder and run it. It will remind you to rest. That's it. +Core Cooldown is a single portable `.exe`. No installer, no account, no telemetry, no data leaving your machine. Drop it in a folder and run it. It reminds you to rest. That's it.
+--- + ## Features -### Timer & Breaks +### โฑ๏ธ Timer & Breaks -| Feature | Description | -|:--------|:------------| -| **Configurable intervals** | Set work sessions from 5-120 minutes and breaks from 1-60 minutes | -| **Pre-break warnings** | Toast notification and optional sound alert before each break | -| **Break enforcement** | Always-on-top break window, optional fullscreen mode | -| **Strict mode** | When enabled, the skip and cancel buttons are removed entirely | -| **Early end** | Optionally allow ending a break after 50% completion | -| **Snooze** | Delay a break by a configurable number of minutes (with configurable limits) | -| **Skip cooldown** | Prevent rapid-fire skipping with a configurable cooldown timer | -| **Immediate breaks** | Skip the pre-break notification and go straight into the break | -| **Manual break** | Start a break at any time from the dashboard or the tray menu | +| | Feature | Description | +|:--|:--------|:------------| +| ๐Ÿ”„ | **Configurable intervals** | Work sessions from 5-120 min, breaks from 1-60 min | +| ๐Ÿ”” | **Pre-break warnings** | Toast notification + optional sound alert before each break | +| ๐Ÿ›ก๏ธ | **Break enforcement** | Always-on-top break window with optional fullscreen mode | +| ๐Ÿ”’ | **Strict mode** | Removes skip and cancel buttons entirely | +| โฉ | **Early end** | Optionally allow ending a break after 50% completion | +| ๐Ÿ˜ด | **Snooze** | Delay breaks by a configurable duration (with limits) | +| โณ | **Skip cooldown** | Prevents rapid-fire skipping with a cooldown timer | +| โšก | **Immediate breaks** | Skip pre-break notification, go straight into break | +| ๐ŸŽฏ | **Manual break** | Start a break anytime from the dashboard or tray menu | -### Idle Detection & Smart Breaks +
-| Feature | Description | -|:--------|:------------| -| **Idle auto-pause** | Detects inactivity via Windows API (`GetLastInputInfo`) and pauses the timer | -| **Auto-resume** | Timer resumes automatically when you return | -| **Smart breaks** | Recognizes natural breaks (stepping away from the keyboard) and optionally counts them toward your daily goal | -| **Configurable thresholds** | Idle timeout (30-600s) and smart break threshold (2-15 min) are independently adjustable | +### ๐Ÿง  Idle Detection & Smart Breaks -### Break Activities +| | Feature | Description | +|:--|:--------|:------------| +| ๐Ÿ’ค | **Idle auto-pause** | Detects inactivity via Windows API and pauses the timer | +| โ–ถ๏ธ | **Auto-resume** | Timer resumes automatically when you return | +| ๐ŸŒฟ | **Smart breaks** | Recognizes natural breaks (stepping away) and optionally counts them toward your daily goal | +| โš™๏ธ | **Configurable thresholds** | Idle timeout (30-600s) and smart break threshold (2-15 min) are independently adjustable | -Each break screen shows a randomized activity suggestion from a curated library of **70 activities** across four categories: +
-- **Eyes** - palming, distance focusing, figure-eights, warm compress visualization, peripheral awareness drills -- **Stretch** - neck rolls, wrist flexion, shoulder blade squeezes, chest openers, spinal twists, hip flexor stretches -- **Breathing** - box breathing, 4-7-8 technique, alternate nostril, diaphragmatic breathing, resonance breathing -- **Movement** - standing calf raises, wall push-ups, balance exercises, gentle squats, toe touches, desk yoga +### ๐Ÿง˜ Break Activities + +Each break shows a randomized suggestion from a curated library of **70 activities** across four categories: + +| Category | Examples | +|:---------|:---------| +| ๐Ÿ‘๏ธ **Eyes** | Palming, distance focusing, figure-eights, warm compress visualization, peripheral awareness | +| ๐Ÿคธ **Stretch** | Neck rolls, wrist flexion, shoulder blade squeezes, chest openers, spinal twists, hip flexors | +| ๐ŸŒฌ๏ธ **Breathing** | Box breathing, 4-7-8 technique, alternate nostril, diaphragmatic, resonance breathing | +| ๐Ÿƒ **Movement** | Calf raises, wall push-ups, balance exercises, gentle squats, toe touches, desk yoga | Activities cycle every 30 seconds and never repeat consecutively. -### Working Hours Schedule +
-A per-day schedule with support for multiple time ranges per day. The timer only runs during your configured working hours - outside of those hours, it pauses automatically. +### ๐Ÿ“… Working Hours Schedule + +A per-day schedule with multiple time ranges per day. The timer only runs during your configured hours - outside those hours, it pauses automatically. - **Monday through Sunday** - each day independently togglable - **Multiple ranges per day** - for split shifts or non-contiguous work blocks -- **Weekend defaults** - Saturday and Sunday are disabled by default +- **Weekend defaults** - Saturday and Sunday disabled by default -### Statistics & History +
-| Metric | Description | -|:-------|:------------| -| **Today's summary** | Breaks completed, skipped, snoozed, and total break time | -| **Natural breaks** | Separately tracked idle breaks (with optional stat inclusion) | -| **Compliance rate** | Ratio of completed breaks to total scheduled | -| **Streak tracking** | Current and best consecutive-day streaks | -| **7-day chart** | Canvas-rendered bar chart showing daily break history | +### ๐Ÿ“Š Statistics & History -All statistics are stored locally in a plain JSON file next to the executable. +| | Metric | Description | +|:--|:-------|:------------| +| โœ… | **Today's summary** | Breaks completed, skipped, snoozed, and total break time | +| ๐ŸŒฟ | **Natural breaks** | Separately tracked idle breaks (with optional stat inclusion) | +| ๐Ÿ“ˆ | **Compliance rate** | Ratio of completed to total scheduled breaks | +| ๐Ÿ”ฅ | **Streak tracking** | Current and best consecutive-day streaks | +| ๐Ÿ“‰ | **7-day chart** | Canvas-rendered bar chart showing daily break history | -### Sound Effects +All statistics stored locally in a plain JSON file next to the executable. -Synthesized notification sounds via the Web Audio API - no bundled audio files, no network requests. +
-**8 presets:** Bell, Chime, Soft, Digital, Harp, Bowl, Rain, Whistle +### ๐Ÿ”Š Sound Effects -Each preset plays on break start, pre-break warning, and break completion. Volume is configurable from 0-100%. +Synthesized notification sounds via Web Audio API - no bundled audio files, no network requests. -### Global Keyboard Shortcuts +> **8 presets:** Bell ยท Chime ยท Soft ยท Digital ยท Harp ยท Bowl ยท Rain ยท Whistle + +Sounds play on break start, pre-break warning, and break completion. Volume configurable 0-100%. + +
+ +### โŒจ๏ธ Global Keyboard Shortcuts | Shortcut | Action | |:---------|:-------| @@ -104,95 +127,120 @@ Each preset plays on break start, pre-break warning, and break completion. Volum | `Ctrl + Shift + B` | Start break now | | `Ctrl + Shift + S` | Show / hide main window | -These work system-wide, even when Core Cooldown is not focused. +Works system-wide, even when Core Cooldown is not focused. -### System Tray +
-- **Dynamic icon** - a 32ร—32 progress arc rendered in real-time: orange during focus, purple during breaks, dimmed when paused -- **Countdown tooltip** - hover over the tray icon to see time remaining -- **Context menu** - pause/resume, start break, toggle mini mode, show/hide, quit +### ๐Ÿ”ฒ System Tray -### Mini Mode +- ๐ŸŽจ **Dynamic icon** - 32x32 progress arc rendered in real-time (orange = focus, purple = break, dimmed = paused) +- ๐Ÿ’ฌ **Countdown tooltip** - hover over tray icon to see time remaining +- ๐Ÿ“‹ **Context menu** - pause/resume, start break, toggle mini mode, show/hide, quit -A compact floating timer (200ร—50px) that sits on top of your other windows. +
-- **Click-through** - the mini timer is completely transparent to mouse events by default, so it never blocks what's underneath -- **Hover to grab** - hover over it for a configurable number of seconds (default: 3) and it becomes draggable -- **Double-click** - opens the main window -- **Togglable** - enable/disable from the tray menu +### ๐Ÿ“Œ Mini Mode -### Appearance & Customization +A compact floating timer (200x50px) that sits on top of your other windows. + +- ๐Ÿ‘ป **Click-through** - completely transparent to mouse events, never blocks what's underneath +- โœ‹ **Hover to grab** - hover for a configurable number of seconds and it becomes draggable +- ๐Ÿ–ฑ๏ธ **Double-click** - opens the main window +- ๐Ÿ”€ **Togglable** - enable/disable from the tray menu + +
+ +### ๐ŸŽจ Appearance & Customization | Setting | Range | |:--------|:------| -| **UI zoom** | 50-200% with live preview | -| **Accent color** | Hex color picker for the main UI accent | -| **Break color** | Separate hex color for the break screen ring | -| **Color schemes** | Ocean, Forest, Sunset, Midnight, Dawn | -| **Countdown font** | Google Fonts selector for the timer display | -| **Background blobs** | Animated gradient blobs with film grain overlay | -| **Backdrop opacity** | 50-100% for the break screen overlay | -| **Break title & message** | Fully customizable text shown during breaks | -| **Dark mode** | Always on (it's the only civilized option) | +| ๐Ÿ” **UI zoom** | 50-200% with live preview | +| ๐ŸŽฏ **Accent color** | Hex color picker for the main UI accent | +| ๐Ÿ’œ **Break color** | Separate hex for the break screen ring | +| ๐ŸŒˆ **Color schemes** | Ocean, Forest, Sunset, Midnight, Dawn | +| ๐Ÿ”ค **Countdown font** | Google Fonts selector for timer display | +| ๐Ÿซง **Background blobs** | Animated gradient blobs with film grain overlay | +| ๐ŸŒ‘ **Backdrop opacity** | 50-100% for the break screen overlay | +| ๐Ÿ’ฌ **Break title & message** | Fully customizable text shown during breaks | +| ๐ŸŒ™ **Dark mode** | Always on (the only civilized option) | -### Notifications +
+ +### ๐Ÿ”” Notifications Native Windows toast notifications for: -- Pre-break warnings (configurable seconds before break) -- Break completion +- โฐ Pre-break warnings (configurable seconds before break) +- โœ… Break completion -### Window Behavior +
+ +### ๐ŸชŸ Window Behavior - **Frameless window** with custom titlebar and drag region - **Transparent background** with frosted glass effects -- **Window position persistence** - main and mini windows remember their position between launches -- **Animated view transitions** - directional fly/scale/fade transitions (700ms, cubicOut easing) between all views +- **Window position persistence** - main and mini windows remember position between launches +- **Animated view transitions** - directional fly/scale/fade transitions (700ms, cubicOut easing)
-## Portability +--- -Core Cooldown is fully portable. The executable carries everything it needs and stores everything it creates right next to itself: +## ๐Ÿ“ฆ Portability + +Core Cooldown is **fully portable**. The executable carries everything it needs and stores everything it creates right next to itself: ``` -core-cooldown.exe โ† the application -config.json โ† your settings (created on first run) -stats.json โ† your break history (created on first run) -data/ โ† WebView2 runtime data (created on first run) +๐Ÿ“ anywhere-you-want/ +โ”œโ”€โ”€ core-cooldown.exe โ† the application +โ”œโ”€โ”€ config.json โ† your settings (auto-created on first run) +โ”œโ”€โ”€ stats.json โ† your break history (auto-created on first run) +โ””โ”€โ”€ data/ โ† WebView2 runtime data (auto-created on first run) ``` -No installer. No registry entries. No writes to `%APPDATA%`, `%LOCALAPPDATA%`, or any other system directory. Move the folder anywhere - a USB stick, a shared drive, a different machine. It just works. - -There is nothing to uninstall. Delete the folder and it's gone. No traces left behind. +- No installer +- No registry entries +- No writes to `%APPDATA%`, `%LOCALAPPDATA%`, or any system directory +- Move the folder anywhere - USB stick, shared drive, different machine +- Nothing to uninstall - delete the folder and it's gone, zero traces
-## Installation +--- -1. Download `core-cooldown.exe` from the [Releases](../../releases) page -2. Put it in any folder you like -3. Run it +## ๐Ÿš€ Installation -That's it. No elevated permissions required. No runtime dependencies to install. The first launch may take a moment while Windows initializes the WebView2 runtime. +``` +1. Download core-cooldown.exe from the Releases page +2. Put it in any folder you like +3. Run it +``` + +That's it. No elevated permissions. No runtime dependencies. The first launch may take a moment while Windows initializes the WebView2 runtime. + +**[Download latest release โ†’](../../releases/latest)**
-## Building from Source +--- -### Prerequisites +## ๐Ÿ”จ Building from Source + +
+Prerequisites + +
- **Node.js** (v18+) and **npm** - **Rust** toolchain (`rustup`) with the `x86_64-pc-windows-gnu` target -- **MinGW-w64** - the GNU toolchain for Windows (provides the linker, windres, and dlltool) +- **MinGW-w64** - the GNU toolchain for Windows (provides linker, windres, dlltool) + +
### Setup ```bash -# Clone the repository git clone https://git.lashman.live/lashman/core-cooldown.git cd core-cooldown - -# Install JavaScript dependencies npm install ``` @@ -212,37 +260,35 @@ ar = "C:/path/to/mingw64/bin/ar.exe" ### Development ```bash -# Launch the app with hot-reload +# Launch with hot-reload npm run tauri dev -# Check Rust code without building +# Rust check (no full build) cd src-tauri && cargo check -# Build frontend only (no Tauri shell) +# Frontend only (no Tauri shell) npm run dev ``` ### Release Build ```bash -# Build a release executable (no installer) npm run tauri build ``` -The compiled binary will be at: -``` -src-tauri/target/x86_64-pc-windows-gnu/release/core-cooldown.exe -``` +Output: `src-tauri/target/x86_64-pc-windows-gnu/release/core-cooldown.exe`
-## Architecture +--- -Core Cooldown is a split-architecture desktop application: a Rust backend for system integration and timer logic, and a Svelte frontend rendered in a native WebView. +## ๐Ÿ—๏ธ Architecture + +A split-architecture desktop app: Rust backend for system integration and timer logic, Svelte frontend rendered in a native WebView. ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” -โ”‚ System Tray โ”‚ +โ”‚ ๐Ÿ”ฒ System Tray โ”‚ โ”‚ (dynamic icon ยท tooltip ยท menu) โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ โ”‚ @@ -252,58 +298,71 @@ Core Cooldown is a split-architecture desktop application: a Rust backend for sy โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ -โ”‚ โ”‚ Tauri IPC (commands + events) โ”‚ +โ”‚ โ”‚ Tauri IPC โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ -โ”‚ โ”‚ Rust Backend โ”‚ โ”‚ +โ”‚ โ”‚ Rust Backend โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ -โ”‚ โ”‚ TimerManager โ”‚ โ† state machine (tick/sec) โ”‚ -โ”‚ โ”‚ Config โ”‚ โ† JSON persistence โ”‚ -โ”‚ โ”‚ Stats โ”‚ โ† break history tracking โ”‚ -โ”‚ โ”‚ IdleDetector โ”‚ โ† GetLastInputInfo polling โ”‚ -โ”‚ โ”‚ GlobalShortcuts โ”‚ โ† Ctrl+Shift+P/B/S โ”‚ -โ”‚ โ”‚ TrayIcon โ”‚ โ† RGBA ring rendering โ”‚ -โ”‚ โ”‚ Notifications โ”‚ โ† Windows toast โ”‚ +โ”‚ โ”‚ TimerManager โ”‚ state machine (1 tick/sec) โ”‚ +โ”‚ โ”‚ Config โ”‚ JSON persistence (portable) โ”‚ +โ”‚ โ”‚ Stats โ”‚ break history tracking โ”‚ +โ”‚ โ”‚ IdleDetector โ”‚ GetLastInputInfo polling โ”‚ +โ”‚ โ”‚ GlobalShortcuts โ”‚ Ctrl+Shift+P/B/S โ”‚ +โ”‚ โ”‚ TrayIcon โ”‚ RGBA ring rendering โ”‚ +โ”‚ โ”‚ Notifications โ”‚ Windows toast โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` -### Backend (Rust) +
+Backend modules (Rust) | Module | Responsibility | |:-------|:---------------| | `lib.rs` | Tauri app builder, command registration, tray setup, timer tick thread, window management, global shortcuts | -| `config.rs` | Configuration struct with serde serialization, validation (clamping all values to safe ranges), and file I/O | -| `timer.rs` | Timer state machine (`Running` โ†’ `Paused` โ†’ `BreakActive`), idle detection via Windows API, working hours enforcement | +| `config.rs` | Config struct with serde serialization, validation (clamping all values to safe ranges), portable file I/O | +| `timer.rs` | Timer state machine (`Running` / `Paused` / `BreakActive`), idle detection via Windows API, working hours enforcement | | `stats.rs` | Daily break statistics, streak calculation, history queries | | `main.rs` | Entry point | -### Frontend (Svelte 5 + TypeScript) +
+ +
+Frontend layers (Svelte 5 + TypeScript) | Layer | Files | |:------|:------| -| **Views** | `Dashboard.svelte`, `BreakScreen.svelte`, `Settings.svelte`, `StatsView.svelte` | -| **Windows** | `BreakWindow.svelte` (standalone break modal), `MiniTimer.svelte` (floating mini mode) | -| **Components** | `TimerRing.svelte`, `Titlebar.svelte`, `ToggleSwitch.svelte`, `Stepper.svelte`, `ColorPicker.svelte`, `FontSelector.svelte`, `TimeSpinner.svelte`, `BackgroundBlobs.svelte` | -| **Stores** | `timer.ts` (reactive timer state from IPC events), `config.ts` (config state with debounced auto-save) | -| **Utilities** | `sounds.ts` (Web Audio synthesis), `activities.ts` (70 break activities), `animate.ts` (motion library actions) | +| **Views** | `Dashboard`, `BreakScreen`, `Settings`, `StatsView` | +| **Windows** | `BreakWindow` (standalone break modal), `MiniTimer` (floating mini mode) | +| **Components** | `TimerRing`, `Titlebar`, `ToggleSwitch`, `Stepper`, `ColorPicker`, `FontSelector`, `TimeSpinner`, `BackgroundBlobs` | +| **Stores** | `timer.ts` (reactive timer state from IPC events), `config.ts` (config with debounced auto-save) | +| **Utilities** | `sounds.ts` (Web Audio synthesis), `activities.ts` (70 break activities), `animate.ts` (motion library) | -### IPC Contract +
+ +
+IPC contract **Commands** (frontend โ†’ backend): -`get_config`, `save_config`, `update_pending_config`, `reset_config`, `toggle_timer`, `start_break_now`, `cancel_break`, `snooze`, `get_timer_state`, `set_view`, `get_stats`, `get_daily_history` +`get_config` ยท `save_config` ยท `update_pending_config` ยท `reset_config` ยท `toggle_timer` ยท `start_break_now` ยท `cancel_break` ยท `snooze` ยท `get_timer_state` ยท `set_view` ยท `get_stats` ยท `get_daily_history` **Events** (backend โ†’ frontend): -`timer-tick` (every second), `break-started`, `break-ended`, `prebreak-warning`, `config-changed` +`timer-tick` ยท `break-started` ยท `break-ended` ยท `prebreak-warning` ยท `config-changed` + +

-## Configuration Reference +--- -All settings are stored in `config.json` next to the executable. The settings panel exposes every option with live validation, but the file is plain JSON and can be edited by hand if you prefer. +## โš™๏ธ Configuration Reference + +All settings stored in `config.json` next to the executable. The settings panel exposes every option with live validation, but the file is plain JSON and can be edited by hand.
-Full configuration schema +Full configuration schema (35 keys) + +
| Key | Type | Default | Range | Description | |:----|:-----|:--------|:------|:------------| @@ -311,23 +370,23 @@ All settings are stored in `config.json` next to the executable. The settings pa | `break_frequency` | `u32` | `25` | 5-120 min | Interval between breaks | | `auto_start` | `bool` | `true` | - | Start timer on launch | | `break_title` | `string` | `"Rest your eyes"` | max 100 chars | Title shown on break screen | -| `break_message` | `string` | `"Look away from the screen..."` | max 500 chars | Message shown during breaks | +| `break_message` | `string` | `"Look away..."` | max 500 chars | Message shown during breaks | | `fullscreen_mode` | `bool` | `true` | - | Use fullscreen break window | | `strict_mode` | `bool` | `false` | - | Remove skip/cancel buttons | | `allow_end_early` | `bool` | `true` | - | Allow ending break after 50% | | `immediately_start_breaks` | `bool` | `false` | - | Skip pre-break notification | | `working_hours_enabled` | `bool` | `false` | - | Restrict timer to schedule | -| `working_hours_schedule` | `array` | Mon-Fri 09:00-18:00 | 7 days | Per-day time ranges | +| `working_hours_schedule` | `array` | Mon-Fri 09-18 | 7 days | Per-day time ranges | | `dark_mode` | `bool` | `true` | - | Dark theme | | `color_scheme` | `string` | `"Ocean"` | 5 presets | Color scheme name | -| `backdrop_opacity` | `f32` | `0.92` | 0.5-1.0 | Break screen backdrop opacity | +| `backdrop_opacity` | `f32` | `0.92` | 0.5-1.0 | Break screen opacity | | `notification_enabled` | `bool` | `true` | - | Enable toast notifications | | `notification_before_break` | `u32` | `30` | 0-300 sec | Pre-break warning time | | `snooze_duration` | `u32` | `5` | 1-30 min | Snooze delay | -| `snooze_limit` | `u32` | `3` | 0-5 (0=unlimited) | Max snoozes per cycle | +| `snooze_limit` | `u32` | `3` | 0-5 | Max snoozes per cycle | | `skip_cooldown` | `u32` | `60` | 0-600 sec | Cooldown between skips | | `sound_enabled` | `bool` | `true` | - | Play notification sounds | -| `sound_volume` | `u32` | `70` | 0-100 | Sound volume percentage | +| `sound_volume` | `u32` | `70` | 0-100 | Volume percentage | | `sound_preset` | `string` | `"bell"` | 8 presets | Sound preset name | | `idle_detection_enabled` | `bool` | `true` | - | Enable idle auto-pause | | `idle_timeout` | `u32` | `120` | 30-600 sec | Idle threshold | @@ -341,15 +400,18 @@ All settings are stored in `config.json` next to the executable. The settings pa | `countdown_font` | `string` | `""` | font family | Google Font for countdown | | `background_blobs_enabled` | `bool` | `false` | - | Animated background blobs | | `mini_click_through` | `bool` | `true` | - | Mini mode click-through | -| `mini_hover_threshold` | `f32` | `3.0` | 1.0-10.0 sec | Hover time before drag | +| `mini_hover_threshold` | `f32` | `3.0` | 1.0-10.0 sec | Hover delay before drag |

-## Dependencies +--- -### Rust +## ๐Ÿ“š Dependencies + +
+Rust crates | Crate | Purpose | |:------|:--------| @@ -357,13 +419,15 @@ All settings are stored in `config.json` next to the executable. The settings pa | `tauri-plugin-shell 2` | Shell integration | | `tauri-plugin-notification 2` | Windows toast notifications | | `tauri-plugin-global-shortcut 2` | System-wide keyboard shortcuts | -| `serde` / `serde_json` | Configuration and statistics serialization | +| `serde` / `serde_json` | Config and stats serialization | | `chrono` | Date/time handling for schedules and statistics | -| `dirs` | Platform directory resolution (unused - legacy dep) | | `anyhow` | Error handling | | `winapi` | Windows idle detection (`GetLastInputInfo`) | -### JavaScript +
+ +
+JavaScript packages | Package | Purpose | |:--------|:--------| @@ -374,43 +438,51 @@ All settings are stored in `config.json` next to the executable. The settings pa | `motion` | Animation library | | `typescript 5` | Type safety | +
+
-## Contributing +--- + +## ๐Ÿค Contributing This project belongs to no one and everyone. If you find it useful and want to make it better, you are welcome. -There are no contribution agreements to sign, no corporate CLAs, no licensing traps. Everything here is in the public domain. Your contributions will be too - freely given, freely shared, freely built upon by anyone who needs them. +No contribution agreements to sign. No corporate CLAs. No licensing traps. Everything here is in the public domain. Your contributions will be too - freely given, freely shared, freely built upon by anyone who needs them. **Some ways to help:** -- Report bugs or rough edges -- Suggest new break activities (especially if you have physiotherapy or ergonomics knowledge) -- Improve accessibility -- Port idle detection to macOS/Linux -- Translate the interface -- Share it with someone who needs it +- ๐Ÿ› Report bugs or rough edges +- ๐Ÿง˜ Suggest new break activities (especially with physiotherapy or ergonomics knowledge) +- โ™ฟ Improve accessibility +- ๐Ÿง Port idle detection to macOS/Linux +- ๐ŸŒ Translate the interface +- ๐Ÿ’Œ Share it with someone who needs it The best software is built through mutual aid - people helping people because it's the right thing to do, not because there's a profit motive attached.
-## Philosophy +--- -Core Cooldown exists because rest is not a luxury. It is a fundamental need that no productivity framework, no employer, and no software platform should be able to gatekeep behind a paywall or a subscription. +## ๐Ÿ’ก Philosophy + +Core Cooldown exists because rest is not a luxury. It is a fundamental need that no productivity framework, no employer, and no software platform should gatekeep behind a paywall or a subscription. This application: - **Collects nothing.** No analytics, no telemetry, no usage tracking, no crash reports phoned home. Your break habits are your own business. -- **Costs nothing.** Not "free tier with limitations." Not "free for personal use." Free. Unconditionally. For everyone. +- **Costs nothing.** Not "free tier with limitations." Not "free for personal use." Free, unconditionally, for everyone. - **Requires nothing.** No account, no email, no app store, no internet connection after download. It runs on your machine and answers to you alone. - **Owns nothing.** Released under CC0 - the most complete relinquishment of rights possible under law. There is no owner. There are no restrictions. The code belongs to the commons. -We believe that tools for human wellbeing should never be enclosed, never be scarce, and never serve a master other than the person using them. +Tools for human wellbeing should never be enclosed, never be scarce, and never serve a master other than the person using them.
-## License +--- + +## ๐Ÿ“„ License

@@ -418,11 +490,13 @@ We believe that tools for human wellbeing should never be enclosed, never be sca

-**CC0 1.0 Universal - Public Domain Dedication** +

+ CC0 1.0 Universal - Public Domain Dedication +

-To the extent possible under law, the author has waived all copyright and related or neighboring rights to this work. This work is published from the commons, for the commons. +To the extent possible under law, the author has waived all copyright and related or neighboring rights to this work. Published from the commons, for the commons. -You can copy, modify, distribute, and perform the work, even for commercial purposes, all without asking permission. No permission is needed. No attribution is required (though it's always appreciated). +Copy, modify, distribute, perform - even commercially - all without asking permission. No attribution required (though always appreciated). See [`LICENSE`](LICENSE) for the full legal text. @@ -432,7 +506,7 @@ See [`LICENSE`](LICENSE) for the full legal text.

- Built with care. Shared without conditions.
- Rest well. + Built with care. Shared without conditions. ๐ŸงŠ
+ Rest well.