Skip to content

konradmichalik/roots

Repository files navigation

roots Logo

Unified work time overview across Moco, Jira, Outlook and Personio

Documentation Svelte 5 Tauri 2 TypeScript Tailwind CSS MIT License


Roots aggregates your work time from multiple services into a single desktop app. It pulls data from Moco, Jira, Outlook and Personio, then reconciles and displays everything in a unified timeline — so you always know where your hours went.

roots — Unified Work Time Overview

✨ Features

  • Multi-Service Integration — Connect Moco, Jira (Cloud & Server), Outlook and Personio
  • Unified Timeline — Day, week and month views across all connected services
  • Confidence-Based Reconciliation — Automatic matching and comparison between services
  • Smart Booking Suggestions — Suggests Moco project + task based on recent booking history when creating entries from Jira worklogs or Outlook events
  • Personio Sync — Work schedule and absence import with automatic weekday-hours update
  • Native Desktop App — Lightweight Tauri 2 app; no browser CORS issues
  • Dark / Light Mode — Nord-palette design tokens with full theme support

🔥 Installation

Homebrew (recommended)

brew tap konradmichalik/tap
brew install --cask roots

Update to the latest version:

brew update && brew upgrade --cask roots

Manual Download

Download the latest .dmg from GitHub Releases.

Warning

The app is currently unsigned. On first launch, right-click the app and select Open, or run xattr -cr /Applications/Roots.app in your terminal.

🚀 Getting Started

Connect at least one service in Settings → Connections to start seeing entries. Each service requires different credentials:

Service Auth Method Provides
Moco API Key Time entries, projects, presences
Jira Cloud Email + API Token Worklogs
Jira Server Username/Password or PAT Worklogs
Outlook OAuth2 Calendar events
Personio Client ID + Secret Absences, work schedule

Note

Personio does not provide time entries. When connected, it automatically updates your weekday-hours target from your work schedule and disables manual absence editing.

🧑‍💻 Contributing

Prerequisites

  • Node.js 18+
  • Rust toolchain (required for Tauri builds)
  • At least one service account (Moco, Jira, Outlook, or Personio)

Setup

git clone https://github.com/konradmichalik/roots.git
cd roots
npm install

Development Modes

Browser mode — fastest iteration, no Rust compilation:

# Terminal 1 — CORS proxy (required)
cd proxy && npm install && node server.js

# Terminal 2 — Vite dev server
npm run dev

Tip

Use browser mode for UI development. The CORS proxy runs on localhost:3002 and forwards requests to external services.

Desktop mode — full Tauri app with native features:

npm run tauri:dev

Scripts

Command Description
npm run dev Vite dev server (browser mode)
npm run build Production build
npm run tauri:dev Desktop app development
npm run tauri:build Build native app bundle
npm run check Svelte check + TypeScript
npm run lint ESLint
npm run lint:fix ESLint with auto-fix
npm run format Prettier
npm run release Bump version, sync Tauri config, tag and push

⚙️ Tech Stack

Layer Technology
UI Framework Svelte 5 with Runes + TypeScript
Desktop Runtime Tauri 2 (Rust)
Styling Tailwind CSS v4 + Nord palette design tokens
UI Components shadcn-svelte + bits-ui
Validation Zod for all API response schemas

📜 License

MIT

About

⏱️ Unified work time overview across Moco, Jira, Outlook and Personio

Resources

Stars

Watchers

Forks

Contributors