Time Tracker for Mac OS
# MTimer — Нативний Time Tracker для macOS
## Про проєкт
Повнофункціональний нативний додаток для відстеження часу на macOS. Розроблений з використанням PyObjC (AppKit) та SQLite, демонструє глибоке розуміння екосистеми Apple та створення професійних desktop-додатків на Python.
**Ключові досягнення:**
- 100% нативний UI через AppKit без веб-технологій
- Universal binary (x86_64 + arm64) готовий до розповсюдження
- Багатомовність з автоматичним визначенням системної мови (UK/EN/RU)
- Production-ready архітектура з чистим розділенням логіки
## Технічний стек
**Основа:** PyObjC (AppKit), SQLite, py2app
**Паттерни:** MVC, Singleton, Observer, State Management
**UI:** NSTableView, NSStatusBar, NSAlert, NSUserNotificationCenter
## Основний функціонал
**Управління часом**
- Smart Timer з автоматичним розділенням сесій в опівночі
- Фільтри періодів (Today/Week/Month) з real-time агрегацією
- Динамічний розрахунок вартості на основі почасових ставок
- Автоматичне відновлення активної сесії після рестарту
**User Experience**
- Адаптивний дизайн з підтримкою світлої/темної теми
- Keyboard shortcuts (⌘, для Settings, Delete для видалення)
- Нативні сповіщення при старті/зупинці відстеження
- Menu Bar App з живим таймером та швидким перемиканням завдань
**Управління даними**
- CRUD операції з проєктами та почасовими ставками
- Редагування через окреме Settings вікно
- Safe deletion з NSAlert підтвердженням
- Real-time sync UI та menu bar при зміні даних
## Технічні виклики
**1. Обробка клавіатури в NSTableView**
Створено `DeletableTableView` subclass з override `keyDown_` для Delete key, використовуючи `objc.super()` для коректної роботи з Objective-C runtime.
**2. Синхронізація UI після редагування**
Реалізовано систему callbacks зі збереженням вибору через project_id, refresh всіх компонентів (table, status bar, filters) одночасно.
**3. Локалізація в compiled app**
Використано `NSLocale.preferredLanguages()` замість locale module з fallback ланцюгом для максимальної сумісності.
**4. Життєвий цикл додатку**
Override `windowShouldClose_` з `orderOut_`, `setReleasedWhenClosed_(False)` та `applicationShouldHandleReopen_` для коректного hide/show.
## Результати
✓ Стабільний production-ready додаток без crashes
✓ Підтримка Intel Mac та Apple Silicon
✓ Мінімальний footprint (~50MB standalone)
✓ Миттєва відповідь UI
✓ Повністю документований код
## Отримані навички
- **macOS Development:** AppKit framework, NSStatusBar/NSMenu/NSTableView, system events handling, multi-window coordination
- **Python Advanced:** PyObjC bridging, Objective-C runtime interaction, py2app packaging, code signing
- **Database:** SQLite оптимізація, агрегатні запити, transaction management
- **Software Engineering:** i18n best practices, UX design для desktop, error handling, version control
---
**GitHub:** https://github.com/maciborka/MTimer
**Stack:** Python 3.12, PyObjC (AppKit), SQLite, py2app
**Platform:** macOS 12+ Universal (x86_64 + arm64)
**License:** MIT
## Про проєкт
Повнофункціональний нативний додаток для відстеження часу на macOS. Розроблений з використанням PyObjC (AppKit) та SQLite, демонструє глибоке розуміння екосистеми Apple та створення професійних desktop-додатків на Python.
**Ключові досягнення:**
- 100% нативний UI через AppKit без веб-технологій
- Universal binary (x86_64 + arm64) готовий до розповсюдження
- Багатомовність з автоматичним визначенням системної мови (UK/EN/RU)
- Production-ready архітектура з чистим розділенням логіки
## Технічний стек
**Основа:** PyObjC (AppKit), SQLite, py2app
**Паттерни:** MVC, Singleton, Observer, State Management
**UI:** NSTableView, NSStatusBar, NSAlert, NSUserNotificationCenter
## Основний функціонал
**Управління часом**
- Smart Timer з автоматичним розділенням сесій в опівночі
- Фільтри періодів (Today/Week/Month) з real-time агрегацією
- Динамічний розрахунок вартості на основі почасових ставок
- Автоматичне відновлення активної сесії після рестарту
**User Experience**
- Адаптивний дизайн з підтримкою світлої/темної теми
- Keyboard shortcuts (⌘, для Settings, Delete для видалення)
- Нативні сповіщення при старті/зупинці відстеження
- Menu Bar App з живим таймером та швидким перемиканням завдань
**Управління даними**
- CRUD операції з проєктами та почасовими ставками
- Редагування через окреме Settings вікно
- Safe deletion з NSAlert підтвердженням
- Real-time sync UI та menu bar при зміні даних
## Технічні виклики
**1. Обробка клавіатури в NSTableView**
Створено `DeletableTableView` subclass з override `keyDown_` для Delete key, використовуючи `objc.super()` для коректної роботи з Objective-C runtime.
**2. Синхронізація UI після редагування**
Реалізовано систему callbacks зі збереженням вибору через project_id, refresh всіх компонентів (table, status bar, filters) одночасно.
**3. Локалізація в compiled app**
Використано `NSLocale.preferredLanguages()` замість locale module з fallback ланцюгом для максимальної сумісності.
**4. Життєвий цикл додатку**
Override `windowShouldClose_` з `orderOut_`, `setReleasedWhenClosed_(False)` та `applicationShouldHandleReopen_` для коректного hide/show.
## Результати
✓ Стабільний production-ready додаток без crashes
✓ Підтримка Intel Mac та Apple Silicon
✓ Мінімальний footprint (~50MB standalone)
✓ Миттєва відповідь UI
✓ Повністю документований код
## Отримані навички
- **macOS Development:** AppKit framework, NSStatusBar/NSMenu/NSTableView, system events handling, multi-window coordination
- **Python Advanced:** PyObjC bridging, Objective-C runtime interaction, py2app packaging, code signing
- **Database:** SQLite оптимізація, агрегатні запити, transaction management
- **Software Engineering:** i18n best practices, UX design для desktop, error handling, version control
---
**GitHub:** https://github.com/maciborka/MTimer
**Stack:** Python 3.12, PyObjC (AppKit), SQLite, py2app
**Platform:** macOS 12+ Universal (x86_64 + arm64)
**License:** MIT