Time Trapp is a modern time tracking application developed for desktop platforms. Built with Flutter, it runs seamlessly on macOS, Windows, and Linux.
- One-Click Start: Start your work sessions with a single click
- Detailed Tracking: Record sessions with purpose, goals, and link information
- Real-Time Counter: Track active sessions in real-time
- History Viewing: View all your work sessions
- Daily Overview: See your daily work hours
- Hourly Distribution: Analyze your hourly work distribution
- Statistics: Total time, session count, and average duration
- Customizable Webhooks: Send work data to external systems
- Multiple HTTP Methods: Support for GET, POST, PUT, PATCH
- Flexible Data Sending: Send data as body or query parameters
- Automatic Username Detection: Automatically uses system username for webhooks
- Cross-Platform Username Support: Works on Windows, macOS, and Linux
- Smart Username Management:
- Automatically detects system username changes
- Falls back to manual username if needed
- Updates username on app open/close
- Event-Based Triggers:
- When session starts
- When session stops
- When app opens
- When app closes
- User Profile: Personalized experience
- Webhook Configuration: Detailed webhook settings
- Data Management: Clear all data option
- Flutter SDK (3.4.0 or higher)
- Dart SDK
- Platform-specific development tools (Xcode, Visual Studio, etc.)
-
Clone the repository
git clone <repository-url> cd time_trapp
-
Install dependencies
flutter pub get
-
Run the application
# For macOS flutter run -d macos # For Windows flutter run -d windows # For Linux flutter run -d linux
- When the app opens for the first time, the onboarding process begins
- Enter your name and explore the app
- Start your first work session
- Click the "Start" button on the home page
- A modal will open, fill in the required information:
- Purpose (required): What are you working on?
- Goal (required): What do you want to achieve with this session?
- Link (optional): Related link, repo, documentation, etc.
- Click "Start Session"
- Stop: Click the "Stop" button to stop an active session
- View: View your recent sessions on the home page
- Reports: Make detailed analysis from the reports page
- Go to the Settings page
- Enter your webhook URL
- Select HTTP method (GET, POST, PUT, PATCH)
- Determine data sending method (Body or Query)
- Select which events should trigger webhooks
- Configure username settings:
- Automatic System Username: Uses system username automatically (default)
- Manual Username: Use custom username for webhooks
- Test your configuration with "Test Webhook"
To test webhooks locally, you can use a simple HTTP server:
Using Node.js:
# Install http-server globally
npm install -g http-server
# Start a simple server
http-server -p 3000 --corsUsing Python:
# Python 3
python -m http.server 3000
# Python 2
python -m SimpleHTTPServer 3000Then use http://localhost:3000 as your webhook URL in the app.
Troubleshooting Localhost Issues:
If you can access http://localhost:3000 in your browser but not from the app, try these solutions:
-
Use 127.0.0.1 instead of localhost:
http://127.0.0.1:3000 -
Check your local server is running:
# Test with curl curl http://localhost:3000 -
For macOS users: Make sure the app has network permissions in System Preferences > Security & Privacy > Privacy > Network.
-
For Android users: The app now includes
usesCleartextTraffic="true"to allow HTTP connections.
Webhook Behavior:
- app_open: Sent only once when the app is first launched or when resuming from a closed state
- app_close: Sent when the app is paused or closed
- session_start: Sent when a work session begins
- session_stop: Sent when a work session ends
- test: Sent only when you click the "Test Webhook" button
- State Management: Provider pattern
- Local Storage: SharedPreferences
- HTTP Requests: http package
- Date/Time: intl package
TaskSession: Work session informationWebhookConfig: Webhook configurationAppSettings: Application settings
StorageService: Local data managementWebhookService: Webhook operationsWebhookUsernameService: Automatic system username detection for webhooksUsernameService: Cross-platform system username detectionTimerProvider: Time tracking and state managementAppLifecycleService: Application lifecycle management
{
"event": "session_start",
"sessionId": "1234567890",
"purpose": "Flutter app development",
"goal": "Complete main page design",
"link": "https://github.com/user/repo",
"startTime": "2024-01-15T10:30:00.000Z",
"timestamp": "2024-01-15T10:30:00.000Z",
"userName": "john_doe"
}{
"event": "session_stop",
"sessionId": "1234567890",
"purpose": "Flutter app development",
"goal": "Complete main page design",
"link": "https://github.com/user/repo",
"startTime": "2024-01-15T10:30:00.000Z",
"endTime": "2024-01-15T12:15:00.000Z",
"duration": 6300000,
"formattedDuration": "01:45:00",
"timestamp": "2024-01-15T12:15:00.000Z",
"userName": "john_doe"
}{
"event": "app_open",
"timestamp": "2024-01-15T10:30:00.000Z",
"userName": "john_doe"
}lib/
├── models/ # Data models
├── providers/ # State management
├── screens/ # UI screens
├── services/ # Business logic services
├── widgets/ # Reusable widgets
└── main.dart # Main application file
- 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
Time Trapp, masaüstü platformlar için geliştirilmiş modern bir zaman takip uygulamasıdır. Flutter ile geliştirilmiştir ve macOS, Windows ve Linux'ta sorunsuz çalışır.
- Tek Tıkla Başlatma: Çalışma seanslarınızı tek tıkla başlatın
- Detaylı Takip: Amaç, hedef ve link bilgileriyle seanslarınızı kaydedin
- Gerçek Zamanlı Sayaç: Aktif seanslarınızı canlı olarak takip edin
- Geçmiş Görüntüleme: Tüm çalışma seanslarınızı görüntüleyin
- Günlük Görünüm: Günlük çalışma sürelerinizi görün
- Saatlik Dağılım: Saatlik çalışma dağılımınızı analiz edin
- İstatistikler: Toplam süre, seans sayısı ve ortalama süre bilgileri
- Özelleştirilebilir Webhooklar: Çalışma verilerinizi dış sistemlere gönderin
- Çoklu HTTP Metodları: GET, POST, PUT, PATCH desteği
- Esnek Veri Gönderimi: Body veya query parametreleri olarak veri gönderimi
- Otomatik Kullanıcı Adı Algılama: Webhook'larda sistem kullanıcı adını otomatik kullanır
- Çapraz Platform Kullanıcı Adı Desteği: Windows, macOS ve Linux'ta çalışır
- Akıllı Kullanıcı Adı Yönetimi:
- Sistem kullanıcı adı değişikliklerini otomatik algılar
- Gerekirse manuel kullanıcı adına geri döner
- Uygulama açılış/kapanışında kullanıcı adını günceller
- Olay Bazlı Tetikleme:
- Seans başlatıldığında
- Seans durdurulduğunda
- Uygulama açıldığında
- Uygulama kapandığında
- Kullanıcı Profili: Kişiselleştirilmiş deneyim
- Webhook Yapılandırması: Detaylı webhook ayarları
- Veri Yönetimi: Tüm verileri temizleme seçeneği
- Flutter SDK (3.4.0 veya üzeri)
- Dart SDK
- Platform bağımlı geliştirme araçları (Xcode, Visual Studio, vb.)
-
Projeyi klonlayın
git clone <repository-url> cd time_trapp
-
Bağımlılıkları yükleyin
flutter pub get
-
Uygulamayı çalıştırın
# macOS için flutter run -d macos # Windows için flutter run -d windows # Linux için flutter run -d linux
- Uygulama ilk açıldığında onboarding süreci başlar
- Adınızı girin ve uygulamayı keşfedin
- İlk çalışma seansınızı başlatın
- Ana sayfada "Başlat" butonuna tıklayın
- Modal açılacak, gerekli bilgileri doldurun:
- Amaç (zorunlu): Ne üzerinde çalışacaksınız?
- Hedef (zorunlu): Bu seansla neyi başarmak istiyorsunuz?
- Link (isteğe bağlı): İlgili link, repo, döküman vb.
- "Seansı Başlat" butonuna tıklayın
- Durdurma: Aktif seansı durdurmak için "Durdur" butonuna tıklayın
- Görüntüleme: Ana sayfada son seanslarınızı görüntüleyin
- Raporlama: Raporlar sayfasından detaylı analizler yapın
- Ayarlar sayfasına gidin
- Webhook URL'nizi girin
- HTTP metodunu seçin (GET, POST, PUT, PATCH)
- Veri gönderme yöntemini belirleyin (Body veya Query)
- Hangi olaylarda webhook gönderileceğini seçin
- Kullanıcı adı ayarlarını yapılandırın:
- Otomatik Sistem Kullanıcı Adı: Sistem kullanıcı adını otomatik kullanır (varsayılan)
- Manuel Kullanıcı Adı: Webhook'lar için özel kullanıcı adı kullanın
- "Webhook Test Et" ile yapılandırmanızı test edin
Webhook'ları yerel olarak test etmek için basit bir HTTP sunucusu kullanabilirsiniz:
Node.js kullanarak:
# http-server'ı global olarak yükleyin
npm install -g http-server
# Basit bir sunucu başlatın
http-server -p 3000 --corsPython kullanarak:
# Python 3
python -m http.server 3000
# Python 2
python -m SimpleHTTPServer 3000Sonra uygulamada webhook URL olarak http://localhost:3000 kullanın.
Localhost Sorunları İçin Çözümler:
Tarayıcıdan http://localhost:3000 adresine erişebiliyorsanız ama uygulamadan erişemiyorsanız, bu çözümleri deneyin:
-
localhost yerine 127.0.0.1 kullanın:
http://127.0.0.1:3000 -
Yerel sunucunuzun çalıştığından emin olun:
# curl ile test edin curl http://localhost:3000 -
macOS kullanıcıları için: Sistem Tercihleri > Güvenlik ve Gizlilik > Gizlilik > Ağ bölümünden uygulamanın ağ izinlerine sahip olduğundan emin olun.
-
Android kullanıcıları için: Uygulama artık HTTP bağlantılarına izin vermek için
usesCleartextTraffic="true"ayarını içeriyor.
Webhook Davranışları:
- app_open: Sadece uygulama ilk açıldığında veya kapalı durumdan geri döndüğünde bir kez gönderilir
- app_close: Uygulama duraklatıldığında veya kapandığında gönderilir
- session_start: Çalışma seansı başladığında gönderilir
- session_stop: Çalışma seansı bittiğinde gönderilir
- test: Sadece "Webhook Test Et" butonuna bastığınızda gönderilir
- State Management: Provider pattern
- Local Storage: SharedPreferences
- HTTP İstekleri: http package
- Tarih/Saat: intl package
TaskSession: Çalışma seansı bilgileriWebhookConfig: Webhook yapılandırmasıAppSettings: Uygulama ayarları
StorageService: Yerel veri yönetimiWebhookService: Webhook işlemleriWebhookUsernameService: Webhook'lar için otomatik sistem kullanıcı adı algılamaUsernameService: Çapraz platform sistem kullanıcı adı algılamaTimerProvider: Zaman takibi ve state yönetimiAppLifecycleService: Uygulama yaşam döngüsü yönetimi
{
"event": "session_start",
"sessionId": "1234567890",
"purpose": "Flutter uygulaması geliştirme",
"goal": "Ana sayfa tasarımını tamamla",
"link": "https://github.com/user/repo",
"startTime": "2024-01-15T10:30:00.000Z",
"timestamp": "2024-01-15T10:30:00.000Z",
"userName": "ahmet_yilmaz"
}{
"event": "session_stop",
"sessionId": "1234567890",
"purpose": "Flutter uygulaması geliştirme",
"goal": "Ana sayfa tasarımını tamamla",
"link": "https://github.com/user/repo",
"startTime": "2024-01-15T10:30:00.000Z",
"endTime": "2024-01-15T12:15:00.000Z",
"duration": 6300000,
"formattedDuration": "01:45:00",
"timestamp": "2024-01-15T12:15:00.000Z",
"userName": "ahmet_yilmaz"
}{
"event": "app_open",
"timestamp": "2024-01-15T10:30:00.000Z",
"userName": "ahmet_yilmaz"
}lib/
├── models/ # Veri modelleri
├── providers/ # State management
├── screens/ # UI ekranları
├── services/ # İş mantığı servisleri
├── widgets/ # Yeniden kullanılabilir widget'lar
└── main.dart # Ana uygulama dosyası
- Fork yapın
- Feature branch oluşturun (
git checkout -b feature/amazing-feature) - Değişikliklerinizi commit edin (
git commit -m 'Add amazing feature') - Branch'inizi push edin (
git push origin feature/amazing-feature) - Pull Request oluşturun
Bu proje MIT lisansı altında lisanslanmıştır.
Herhangi bir sorun veya öneriniz için issue açabilirsiniz.
Made with ❤️ using Flutter