A native macOS menu bar application that provides a convenient interface for tracking time with Harvest. Built with SwiftUI and designed for macOS 15.2+.
- Menu Bar Integration: Quick access to time tracking directly from your macOS menu bar
- Harvest Integration: Full OAuth2 authentication with Harvest API
- Real-time Timer: Start, stop, and track time with live elapsed time display
- Project & Task Management: Browse and select from your assigned Harvest projects and tasks
- Today's Entries: View all time entries for the current day
- Multiple Themes: Auto, Light, and Dark theme support
- Accent Colors: Choose from Green, Blue, Orange, Purple, or Pink
- Favorite Projects: Mark frequently used projects as favorites for quick access
- Default Tasks: Set default tasks for projects to speed up time entry
- Time Rounding: Configurable time rounding intervals (15 minutes by default)
- Detached Window Mode: Pop out the timer into a standalone window
- Keyboard Shortcuts:
⌘S- Start timer⌘⇧S- Stop timer⌘R- Refresh data⌘,- Open settings⌘⌥1/2/3- Switch themes
- Advanced Settings: Manage favorites and default tasks in a dedicated settings window
- Secure OAuth2: Industry-standard authentication with Harvest
- Local Storage: All settings and tokens stored securely using Core Data
- macOS 15.2 or later
- Active Harvest account
- Launch the application
- Click on the clock icon in your menu bar
- Click "Sign In with Harvest"
- Complete the OAuth2 flow in your browser
- Return to the app to start tracking time
- Select a project from the dropdown
- Choose a task (if multiple tasks are available)
- Click "Start Timer" or use
⌘S - Work on your task
- Click "Stop Timer" or use
⌘⇧Swhen finished
- Access settings via
⌘,or the menu - Mark frequently used projects as favorites
- Set default tasks for projects to auto-select them
- Configure time rounding preferences
Time Logger/
├── MainApp.swift # Main app entry point
├── ContentView.swift # Primary UI interface
├── SharedModels.swift # Data models and view models
├── OAuthManager.swift # Harvest OAuth2 integration
├── AppDelegate.swift # App delegate
├── AppWindowView.swift # Window management
├── Persistence.swift # Core Data stack
├── Time_Logger.xcdatamodeld/ # Core Data model
├── Assets.xcassets/ # App assets
└── Time_Logger.entitlements # App entitlements
- SwiftUI: Modern declarative UI framework
- Core Data: Local data persistence for tokens and settings
- Combine: Reactive programming for state management
- OAuth2: Secure authentication with Harvest API
- Menu Bar Extra: Native macOS menu bar integration
The app integrates with Harvest's REST API v2:
- Authentication: OAuth2 flow with PKCE
- Projects: Fetch assigned projects and tasks
- Time Entries: Create, read, and manage time entries
- User Info: Retrieve account information
| Shortcut | Action |
|---|---|
⌘S |
Start Timer |
⌘⇧S |
Stop Timer |
⌘R |
Refresh Data |
⌘, |
Open Settings |
⌘⌥1 |
Auto Theme |
⌘⌥2 |
Light Theme |
⌘⌥3 |
Dark Theme |
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
For issues and feature requests, please use the GitHub issue tracker.
- Built with SwiftUI
- Integrates with Harvest time tracking service
- Uses OAuth2 for secure authentication
Made with ❤️ by Pelle
Happy time tracking!