TrackIt is a Tauri desktop app for Jira-linked personal time tracking. The current codebase uses a React + TypeScript UI, a Rust/Tauri backend, SQLite for local persistence, and a macOS tray-first windowed experience.
The visible product name is being updated to TrackIt. Some internal package names and identifiers in the repo still use tracklet for compatibility with the current code.
- Jira OAuth authorization against Atlassian Cloud
- Local loopback callback capture via
http://127.0.0.1:43823/callback - Assigned-issue sync from Jira after authorization
- Jira site selection when the authenticated account can access multiple sites
- Local fallback timer start even when no Jira issue is selected
- Focus/break countdown flow with auto-start options
- Tray timer badge updates while a countdown is active
- Local analytics and daily breakdown views backed by SQLite
- Cached Jira/account state persisted locally between launches
- Tauri 2
- Rust
- React 19
- TypeScript
- SQLite via
rusqlite esbuildfor the UI bundle
- Node.js 20+
- Rust toolchain (
rustup,cargo) - Tauri CLI
Install dependencies:
npm install
cargo install tauri-cliCreate a .env file in the repository root before running the app:
JIRA_CLIENT_ID=your_atlassian_oauth_client_id
JIRA_CLIENT_SECRET=your_atlassian_oauth_client_secret
JIRA_REDIRECT_URI=http://127.0.0.1:43823/callback
# Optional: narrow multi-site authorization to a single Jira site
# JIRA_CLOUD_ID=your_preferred_jira_cloud_id
# JIRA_SITE_URL=https://your-site.atlassian.netImportant notes:
JIRA_REDIRECT_URImust be anhttp://loopback URL using127.0.0.1orlocalhost.- The redirect URI must include an explicit port.
- The same redirect URI must be configured in the Atlassian OAuth app.
- The code currently requests the scopes
read:jira-work read:jira-user offline_access.
Run the test suite:
npm testRun smoke tests only:
npm run test:smokeRun type checking:
npm run typecheckBuild the frontend bundle:
npm run build:uiStart the desktop app in development:
npm run tauri:devBuild a desktop bundle:
npm run tauri:buildsrc/ui/: React UI, timer flow, analytics view, and Jira authorization UIsrc/domain/: shared TypeScript domain helperssrc-tauri/src/: Rust commands, OAuth flow, Jira integration, timer engine, and DB accesssrc-tauri/migrations/: SQLite schema migrationstests/: UI, domain, and smoke tests
- The app listens locally for the Jira OAuth callback instead of using a custom URI scheme.
- If multiple Jira sites are available, the app may require
JIRA_CLOUD_IDorJIRA_SITE_URLto disambiguate. - Timer and analytics behavior are covered by lightweight Node test files that inspect app structure and domain logic.
- Local persisted data currently uses existing internal
trackletstorage names in the codebase.
- Jira sync is read-only; there is no Jira worklog write-back.
- The app is currently macOS-oriented (
macOSPrivateApiis enabled in Tauri config). - Some generated and historical design files still reference
Tracklet.