Настольное приложение для управления временем, привычками и продуктивностью
Smart Multi-Timer — это desktop-приложение для Windows и Linux, объединяющее несколько инструментов тайм-менеджмента и трекинга привычек в одном интерфейсе.
- ⏱️ Много таймеров одновременно — отслеживайте несколько задач параллельно
- 🎯 Привычки с напоминаниями — формируйте полезные привычки с гибкими интервалами
- ✅ Список задач — простое управление todo-листом с фильтрами
- 💊 Трекер лекарств — не забывайте принимать медикаменты вовремя
- 💪 Счётчик отжиманий — отслеживайте физическую активность
- 🍽️ Трекер калорий — контролируйте питание с базой продуктов и подсчётом БЖУ
- ⚙️ Гибкие настройки — настройте приложение под свои нужды
- Неограниченное количество одновременных таймеров
- Готовые пресеты:
- Pomodoro (25 минут работы + 5 минут отдыха)
- Long Focus (52 минуты + 17 минут)
- Произвольное время
- Визуализация:
- Круговой прогресс-бар
- Полноэкранный режим фокусировки
- Интеграция с системным треем
- Кастомизация:
- Свои звуки уведомлений
- Описание с эмодзи
- Snooze функция
- Гибкая настройка:
- Интервалы (ежедневно, каждые N дней, произвольно)
- Активные часы (напр. только с 9:00 до 18:00)
- Группировка по времени суток (утро, день, вечер, ночь)
- Умные напоминания:
- Звуковые уведомления
- Интеграция с системным треем
- Статистика выполнения
- История и аналитика:
- Календарь выполнения
- Процент успешности
- Серии (streaks)
- Создание задач с приоритетами
- Фильтрация (все / активные / завершённые)
- Поиск по тексту
- Drag-n-drop для изменения порядка
- Быстрое добавление (Enter)
- Визуальная сетка (лекарство × время)
- Отметки о приёме
- Быстрое создание таймеров-напоминаний
- Сброс на новый день
- Быстрые кнопки (5, 10, 15, 20, 25, 30, 35, 40, 45, 50)
- Произвольное количество
- История по дням
- Дневной прогресс
- База продуктов:
- Создание и редактирование продуктов
- Хранение данных о калориях и БЖУ (белки, жиры, углеводы)
- Импорт продуктов из CSV
- Поиск и фильтрация
- Приемы пищи:
- 4 категории: Завтрак, Обед, Ужин, Перекус
- Добавление продуктов с указанием количества (граммы или порции)
- Расчёт калорий и БЖУ для каждого приёма
- Статистика:
- Прогресс-бар достижения дневной нормы калорий
- Общий подсчёт БЖУ за день
- Остаток/превышение калорий
- Навигация:
- Просмотр истории по дням
- Быстрый переход на сегодня
- Поведение окна:
- Выбор между сворачиванием в трей и полным закрытием при нажатии ✕
- Управление системным треем
- Настройки калорий:
- Установка целевого количества калорий в день (1000-5000 ккал)
- Автоматический пересчёт прогресса
- Темы оформления:
- 20+ встроенных тем (ubuntu, arc, equilux, adapta и др.)
- Скачайте последний релиз из Releases
- Распакуйте архив
- Запустите
SmartMultiTimer.exe(Windows) илиSmartMultiTimer(Linux)
- Python 3.8+
- pip
- Git (опционально)
# Клонируйте репозиторий
git clone https://github.com/WarLikeLaux/smart-multi-timer.git
cd smart-multi-timer
# Создайте виртуальное окружение (рекомендуется)
python -m venv venv
source venv/bin/activate # Linux/macOS
venv\Scripts\activate # Windows
# Установите зависимости
pip install -r requirements.txt
# Запустите приложение
python src/main.py# Создать venv, установить зависимости и запустить
make dev
# Только установка зависимостей
make install
# Сборка .exe с PyInstaller
make build- tkinter — GUI фреймворк (встроен в Python)
- ttkthemes — современные темы для tkinter
- pygame — воспроизведение звуков
- Pillow — работа с изображениями
- pystray — интеграция с системным треем
- telethon — Telegram API
- pyinstaller — сборка исполняемого файла
Полный список в requirements.txt
- Нажмите "Добавить таймер"
- Выберите пресет или установите своё время
- Добавьте описание (опционально)
- Нажмите "Запустить"
- Для полноэкранного режима нажмите на таймер
- Выберите период времени (Утро/День/Вечер/Ночь) или создайте свой
- Нажмите "Добавить привычку"
- Настройте интервалы и активные часы
- Включите напоминания при необходимости
- Отмечайте выполнение галочками
- Введите задачу в поле ввода
- Нажмите Enter для добавления
- Используйте фильтры для сортировки
- Отмечайте выполненные задачи
- Перейдите во вкладку "Калории"
- Нажмите "+ Добавить продукт" для создания продукта в базе
- Используйте "+ Добавить" в секциях приёмов пищи для добавления записей
- Следите за прогресс-баром и статистикой БЖУ
- Используйте стрелки или кнопку "Сегодня" для навигации по дням
- Перейдите во вкладку "Настройки"
- Настройте поведение окна при закрытии (трей или выход)
- Установите целевое количество калорий
- Выберите тему оформления через меню "Тема" в верхней панели
- Esc — выход из полноэкранного таймера
- Enter — добавить задачу в TODO (когда фокус на поле ввода)
smart-multi-timer/
├── src/
│ ├── components/ # Переиспользуемые UI компоненты
│ │ └── timer.py # Виджет таймера
│ ├── tabs/ # Вкладки приложения
│ │ ├── calorie_tracker_tab.py # Трекер калорий
│ │ ├── calorie_storage.py # Хранилище данных о калориях
│ │ ├── calorie_dialogs.py # Диалоги трекера калорий
│ │ ├── calorie_meal_dialogs_impl.py # Реализация диалогов приёмов пищи
│ │ ├── habits_tab.py # Трекер привычек
│ │ ├── medication_tab.py # Трекер лекарств
│ │ ├── pushup_tracker_tab.py # Счётчик отжиманий
│ │ ├── todo_list_tab.py # TODO-лист
│ │ └── settings_tab.py # Настройки приложения
│ ├── windows/ # Окна приложения
│ │ ├── main_window.py # Главное окно
│ │ └── main_timer_window.py # Полноэкранный таймер
│ ├── utils/ # Утилиты
│ │ ├── constants.py # Константы и пути к ресурсам
│ │ ├── habit_reminder.py # Фоновые напоминания
│ │ ├── resource_path.py # Работа с ресурсами в .exe
│ │ ├── sound_utils.py # Воспроизведение звуков
│ │ └── timer_notification.py # Уведомления таймеров
│ ├── resources/ # Ресурсы
│ │ ├── images/ # Иконки
│ │ └── sounds/ # Звуки
│ └── main.py # Точка входа
├── docs/
│ └── ai/
│ └── contract.md # Политика разработки
├── app.spec # Конфигурация PyInstaller
├── Makefile # Автоматизация сборки (Linux/macOS)
├── main.bat # Меню запуска и сборки (Windows)
├── requirements.txt # Зависимости Python
├── CLAUDE.md # Инструкции для AI-ассистентов
└── README.md # Этот файл
Перед началом работы ознакомьтесь с docs/ai/contract.md — там описаны:
- Принципы разработки (KISS > YAGNI > DRY)
- Стандарты кода
- Языковая политика (UI на русском, код на английском)
- Паттерны проектирования
- Работа с threading и Tkinter
# Автоматическая сборка через Makefile
make build
# Или вручную через PyInstaller
pyinstaller app.specРезультат в папке dist/
- Создайте новый tab в
src/tabs/my_feature_tab.py - Наследуйтесь от
ttk.Frame - Реализуйте
setup_ui(),load_data(),save_data() - Зарегистрируйте в
src/windows/main_window.py - Добавьте JSON-файл в
.gitignoreесли нужно - Напишите тесты для бизнес-логики (см.
docs/TESTING.md)
Подробнее в docs/ai/contract.md
Проект использует pytest для тестирования бизнес-логики.
Запуск тестов:
# Windows
main.bat
# Выберите опцию "3. Запустить тесты"
# Linux/macOS
make test
# Вручную
python -m pytest tests/ -v
# С покрытием кода
python -m pytest tests/ --cov=src --cov-report=htmlЧто тестируется:
- Бизнес-логика (Storage классы, вычисления)
- Утилиты (helpers, converters)
- Модели данных
Что НЕ тестируется:
- Tkinter UI компоненты (тестируются вручную)
- Системные интеграции (трей, звук)
Полное руководство по тестированию в docs/TESTING.md
- Где:
habits_tab.py,HabitReminder - Проблема: Daemon thread вызывает
save_habits()одновременно с UI thread - Риск: Race condition → повреждение файла
habits.json - Обход: Не закрывайте приложение во время сохранения
- Где:
habits_tab.py:519, 530, 535 - Проблема: Вызовы несуществующих методов
load_json()иsave_json() - Статус: Требуется рефакторинг или удаление мёртвого кода
- Проблема: Убийство процесса во время сохранения → поврежденные JSON
- Обход: Корректно закрывайте приложение
- Проблема: Задачи теряются при закрытии приложения
- Статус: В планах добавить persistence
- Проблема: Сохранение при каждом изменении (износ SSD)
- Статус: Планируется debounce или сохранение только при закрытии
- Проблема: Сложно дебажить проблемы пользователей
- Статус: Планируется добавить logging в файл
- Проверьте Issues
- Если проблема новая — создайте issue с:
- Описанием проблемы
- Шагами воспроизведения
- Скриншотами (если применимо)
- Версией Python и ОС
Мы приветствуем контрибуции! Вот как можно помочь:
- Fork репозитория
- Создайте ветку для фичи
git checkout -b feature/amazing-feature
- Сделайте изменения следуя
docs/ai/contract.md - Напишите тесты (если применимо)
- Закоммитьте
git commit -m "feat: add amazing feature" - Push в вашу ветку
git push origin feature/amazing-feature
- Создайте Pull Request
- Следуйте стилю кода (см.
docs/ai/contract.md) - UI тексты только на русском
- Код (переменные, функции) на английском
- Добавляйте type hints
- Обязательно
encoding="utf-8"в file operations - Избегайте вложенности > 2 уровней
- Функции ≤ 50 строк
Этот проект распространяется под лицензией MIT. Подробности в файле LICENSE.
Нравится проект? Поставьте ⭐️ на GitHub!
Автор: WarLikeLaux Telegram: @teagamesen Проект: github.com/WarLikeLaux/smart-multi-timer
- 📖 Политика разработки — для разработчиков
- 🧪 Руководство по тестированию — написание и запуск тестов
- 📝 CLAUDE.md — инструкции для AI-ассистентов
- 🐛 Issues — баги и предложения
- 📦 Releases — готовые сборки
Сделано с ❤️ by WarLikeLaux