A beautiful, modern time tracking application built with Tauri (Rust backend) and BeerCSS (Material Design 3 frontend), featuring the One Dark color scheme.
- Linux script autodetect distro and install package accordingly not bundle all 3 this shall only happen if releasing flang is set
- π¨ One Dark Theme: Beautiful dark theme inspired by the popular Atom editor theme
- π± Material Design 3: Modern UI following BeerCSS/Material Design 3 guidelines
- β±οΈ Task Time Tracking: Start, stop, and track time for multiple tasks
- πΎ Persistent Storage: Tasks automatically saved and restored between sessions
- π€ Export to TXT: Export all tasks and times to a text file
- π Dark/Light Toggle: Switch between dark and light themes
- π Real-time Updates: Live time display for running tasks
- β Confirmation Dialogs: Prevent accidental resets and deletions
- π₯οΈ Cross-Platform: Runs on Linux, Windows, and macOS
- Tauri 2.0: Secure, lightweight desktop app framework
- Serde: JSON serialization for persistence
- Chrono: Date and time handling
- BeerCSS 4.0: Material Design 3 CSS framework
- Vanilla JavaScript: No framework dependencies
- Material Symbols: Google Material icons
Before building the project, ensure you have the following installed:
-
Rust (latest stable version)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
-
Node.js (v18 or later)
# Using nvm (recommended) nvm install 18 nvm use 18 -
System Dependencies (Linux only)
# Debian/Ubuntu sudo apt update sudo apt install libwebkit2gtk-4.1-dev build-essential curl wget file \ libssl-dev libayatana-appindicator3-dev librsvg2-dev # Fedora sudo dnf install webkit2gtk4.1-devel openssl-devel curl wget file \ libappindicator-gtk3-devel librsvg2-devel # Arch Linux sudo pacman -S webkit2gtk-4.1 base-devel curl wget file openssl \ appmenu-gtk-module libappindicator-gtk3 librsvg
-
Clone the repository
git clone <repository-url> cd time-tracker
-
Install Node.js dependencies
npm install
-
Build the application
npm run build
npm run devThis will start the application with hot-reloading enabled for the frontend.
time-tracker/
βββ src/ # Frontend source
β βββ index.html # Main HTML with BeerCSS
β βββ styles.css # One Dark theme CSS
β βββ app.js # JavaScript application logic
β βββ beer.min.css # BeerCSS framework
β βββ beer.min.js # BeerCSS JavaScript
βββ src-tauri/ # Rust backend
β βββ src/
β β βββ main.rs # Entry point
β β βββ lib.rs # Library with Tauri setup
β β βββ commands.rs # Tauri IPC commands
β β βββ state.rs # Application state management
β β βββ task.rs # Task domain model
β β βββ persistence.rs # File persistence
β βββ capabilities/ # Tauri security capabilities
β βββ icons/ # Application icons
β βββ Cargo.toml # Rust dependencies
β βββ tauri.conf.json # Tauri configuration
βββ package.json # Node.js configuration
βββ LICENSE # MIT License
βββ README.md # This file
- Enter a task name in the input field
- Click "Add Task" or press Enter
- The task appears as a card below
- Click the play button (
βΆοΈ ) to start tracking time - Click the pause button (βΈοΈ) to stop tracking
- Time accumulates across multiple start/stop sessions
- Reset: Click the replay icon to reset a task's time to 00:00:00
- Delete: Click the trash icon to permanently remove a task
- Both actions require confirmation
- Click the "Export" button in the header
- Choose a location to save the file
- Tasks are exported in a readable text format
- Click the sun/moon icon in the header to switch between dark and light themes
Tasks are automatically saved to:
- Linux:
~/.config/time_tracker_tauri_data.json - macOS:
~/Library/Application Support/time_tracker_tauri_data.json - Windows:
%APPDATA%\time_tracker_tauri_data.json
The application follows a clean separation of concerns:
- Domain Layer (
task.rs): Task entity with business logic - Persistence Layer (
persistence.rs): File I/O operations - State Management (
state.rs): Thread-safe application state - API Layer (
commands.rs): Tauri commands for frontend communication
- UI Rendering: Pure DOM manipulation with BeerCSS components
- State Sync: Polls backend for running task updates
- Event Handling: User interactions trigger Tauri IPC calls
The application uses the One Dark color palette:
| Color | Hex | Usage |
|---|---|---|
| Background | #282c34 |
Main background |
| Foreground | #abb2bf |
Text and icons |
| Blue | #61afef |
Primary, active elements |
| Purple | #c678dd |
Secondary accents |
| Green | #98c379 |
Success, start button |
| Red | #e06c75 |
Error, stop/delete |
| Yellow | #e5c07b |
Warnings |
| Cyan | #56b6c2 |
Tertiary accents |
npm run build
# Output: src-tauri/target/release/bundle/npm run build
# Output: src-tauri\target\release\bundle\npm run build
# Output: src-tauri/target/release/bundle/The application state may be corrupted. Delete the data file and restart:
rm ~/.config/time_tracker_tauri_data.jsonEnsure all system dependencies are installed (see Prerequisites).
Make sure withGlobalTauri is set to true in src-tauri/tauri.conf.json.
MIT License - see LICENSE file for details.
- Tauri - Desktop app framework
- BeerCSS - Material Design 3 CSS framework
- One Dark - Color scheme inspiration
- Material Symbols - Icon font