Skip to content

Desktop suite for time tracking, habits and productivity 🕒 💪 ✅

Notifications You must be signed in to change notification settings

WarLikeLaux/smart-multi-timer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

77 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🎯 Smart Multi-Timer

Настольное приложение для управления временем, привычками и продуктивностью


📋 О проекте

Smart Multi-Timer — это desktop-приложение для Windows и Linux, объединяющее несколько инструментов тайм-менеджмента и трекинга привычек в одном интерфейсе.

Зачем это нужно?

  • ⏱️ Много таймеров одновременно — отслеживайте несколько задач параллельно
  • 🎯 Привычки с напоминаниями — формируйте полезные привычки с гибкими интервалами
  • Список задач — простое управление todo-листом с фильтрами
  • 💊 Трекер лекарств — не забывайте принимать медикаменты вовремя
  • 💪 Счётчик отжиманий — отслеживайте физическую активность
  • 🍽️ Трекер калорий — контролируйте питание с базой продуктов и подсчётом БЖУ
  • ⚙️ Гибкие настройки — настройте приложение под свои нужды

🌟 Возможности

⏱️ Система таймеров

  • Неограниченное количество одновременных таймеров
  • Готовые пресеты:
    • Pomodoro (25 минут работы + 5 минут отдыха)
    • Long Focus (52 минуты + 17 минут)
    • Произвольное время
  • Визуализация:
    • Круговой прогресс-бар
    • Полноэкранный режим фокусировки
    • Интеграция с системным треем
  • Кастомизация:
    • Свои звуки уведомлений
    • Описание с эмодзи
    • Snooze функция

🎯 Трекер привычек

  • Гибкая настройка:
    • Интервалы (ежедневно, каждые N дней, произвольно)
    • Активные часы (напр. только с 9:00 до 18:00)
    • Группировка по времени суток (утро, день, вечер, ночь)
  • Умные напоминания:
    • Звуковые уведомления
    • Интеграция с системным треем
    • Статистика выполнения
  • История и аналитика:
    • Календарь выполнения
    • Процент успешности
    • Серии (streaks)

✅ Список задач (TODO)

  • Создание задач с приоритетами
  • Фильтрация (все / активные / завершённые)
  • Поиск по тексту
  • Drag-n-drop для изменения порядка
  • Быстрое добавление (Enter)

💊 Трекер лекарств

  • Визуальная сетка (лекарство × время)
  • Отметки о приёме
  • Быстрое создание таймеров-напоминаний
  • Сброс на новый день

💪 Счётчик отжиманий

  • Быстрые кнопки (5, 10, 15, 20, 25, 30, 35, 40, 45, 50)
  • Произвольное количество
  • История по дням
  • Дневной прогресс

🍽️ Трекер калорий

  • База продуктов:
    • Создание и редактирование продуктов
    • Хранение данных о калориях и БЖУ (белки, жиры, углеводы)
    • Импорт продуктов из CSV
    • Поиск и фильтрация
  • Приемы пищи:
    • 4 категории: Завтрак, Обед, Ужин, Перекус
    • Добавление продуктов с указанием количества (граммы или порции)
    • Расчёт калорий и БЖУ для каждого приёма
  • Статистика:
    • Прогресс-бар достижения дневной нормы калорий
    • Общий подсчёт БЖУ за день
    • Остаток/превышение калорий
  • Навигация:
    • Просмотр истории по дням
    • Быстрый переход на сегодня

⚙️ Настройки

  • Поведение окна:
    • Выбор между сворачиванием в трей и полным закрытием при нажатии ✕
    • Управление системным треем
  • Настройки калорий:
    • Установка целевого количества калорий в день (1000-5000 ккал)
    • Автоматический пересчёт прогресса
  • Темы оформления:
    • 20+ встроенных тем (ubuntu, arc, equilux, adapta и др.)

🚀 Установка

Для пользователей (готовый .exe)

  1. Скачайте последний релиз из Releases
  2. Распакуйте архив
  3. Запустите 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

Быстрый старт с Makefile

# Создать venv, установить зависимости и запустить
make dev

# Только установка зависимостей
make install

# Сборка .exe с PyInstaller
make build

📦 Зависимости

Основные

  • tkinter — GUI фреймворк (встроен в Python)
  • ttkthemes — современные темы для tkinter
  • pygame — воспроизведение звуков
  • Pillow — работа с изображениями
  • pystray — интеграция с системным треем
  • telethon — Telegram API

Для разработки

  • pyinstaller — сборка исполняемого файла

Полный список в requirements.txt


💻 Использование

Основные операции

Таймеры

  1. Нажмите "Добавить таймер"
  2. Выберите пресет или установите своё время
  3. Добавьте описание (опционально)
  4. Нажмите "Запустить"
  5. Для полноэкранного режима нажмите на таймер

Привычки

  1. Выберите период времени (Утро/День/Вечер/Ночь) или создайте свой
  2. Нажмите "Добавить привычку"
  3. Настройте интервалы и активные часы
  4. Включите напоминания при необходимости
  5. Отмечайте выполнение галочками

TODO-лист

  1. Введите задачу в поле ввода
  2. Нажмите Enter для добавления
  3. Используйте фильтры для сортировки
  4. Отмечайте выполненные задачи

Калории

  1. Перейдите во вкладку "Калории"
  2. Нажмите "+ Добавить продукт" для создания продукта в базе
  3. Используйте "+ Добавить" в секциях приёмов пищи для добавления записей
  4. Следите за прогресс-баром и статистикой БЖУ
  5. Используйте стрелки или кнопку "Сегодня" для навигации по дням

Настройки

  1. Перейдите во вкладку "Настройки"
  2. Настройте поведение окна при закрытии (трей или выход)
  3. Установите целевое количество калорий
  4. Выберите тему оформления через меню "Тема" в верхней панели

Горячие клавиши

  • 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

Сборка .exe

# Автоматическая сборка через Makefile
make build

# Или вручную через PyInstaller
pyinstaller app.spec

Результат в папке dist/

Добавление новой фичи

  1. Создайте новый tab в src/tabs/my_feature_tab.py
  2. Наследуйтесь от ttk.Frame
  3. Реализуйте setup_ui(), load_data(), save_data()
  4. Зарегистрируйте в src/windows/main_window.py
  5. Добавьте JSON-файл в .gitignore если нужно
  6. Напишите тесты для бизнес-логики (см. 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


🐛 Известные проблемы

Критические

1. Thread Safety в сохранении данных 🔴

  • Где: habits_tab.py, HabitReminder
  • Проблема: Daemon thread вызывает save_habits() одновременно с UI thread
  • Риск: Race condition → повреждение файла habits.json
  • Обход: Не закрывайте приложение во время сохранения

2. Незавершенный код 🔴

  • Где: habits_tab.py:519, 530, 535
  • Проблема: Вызовы несуществующих методов load_json() и save_json()
  • Статус: Требуется рефакторинг или удаление мёртвого кода

3. Отсутствие атомарной записи файлов 🟡

  • Проблема: Убийство процесса во время сохранения → поврежденные JSON
  • Обход: Корректно закрывайте приложение

Дизайн

4. TODO-лист не сохраняется 🟡

  • Проблема: Задачи теряются при закрытии приложения
  • Статус: В планах добавить persistence

5. Избыточный файловый I/O 🟢

  • Проблема: Сохранение при каждом изменении (износ SSD)
  • Статус: Планируется debounce или сохранение только при закрытии

6. Отсутствие логирования 🟢

  • Проблема: Сложно дебажить проблемы пользователей
  • Статус: Планируется добавить logging в файл

Как сообщить о проблеме

  1. Проверьте Issues
  2. Если проблема новая — создайте issue с:
    • Описанием проблемы
    • Шагами воспроизведения
    • Скриншотами (если применимо)
    • Версией Python и ОС

🤝 Участие в разработке

Мы приветствуем контрибуции! Вот как можно помочь:

Процесс

  1. Fork репозитория
  2. Создайте ветку для фичи
    git checkout -b feature/amazing-feature
  3. Сделайте изменения следуя docs/ai/contract.md
  4. Напишите тесты (если применимо)
  5. Закоммитьте
    git commit -m "feat: add amazing feature"
  6. Push в вашу ветку
    git push origin feature/amazing-feature
  7. Создайте 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


📚 Дополнительные ресурсы


Сделано с ❤️ by WarLikeLaux

⬆ Наверх

About

Desktop suite for time tracking, habits and productivity 🕒 💪 ✅

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •