From eba85df363b15bf2357ad83c1cc92bdfa3a15326 Mon Sep 17 00:00:00 2001 From: KumudithaSilva <131386682+KumudithaSilva@users.noreply.github.com> Date: Tue, 26 Aug 2025 20:06:45 +0530 Subject: [PATCH 1/5] Create python-app.yml --- .github/workflows/python-app.yml | 39 ++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 .github/workflows/python-app.yml diff --git a/.github/workflows/python-app.yml b/.github/workflows/python-app.yml new file mode 100644 index 0000000..200872c --- /dev/null +++ b/.github/workflows/python-app.yml @@ -0,0 +1,39 @@ +# This workflow will install Python dependencies, run tests and lint with a single version of Python +# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python + +name: Python application + +on: + push: + branches: [ "master" ] + pull_request: + branches: [ "master" ] + +permissions: + contents: read + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + - name: Set up Python 3.10 + uses: actions/setup-python@v3 + with: + python-version: "3.10" + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install flake8 pytest + if [ -f requirements.txt ]; then pip install -r requirements.txt; fi + - name: Lint with flake8 + run: | + # stop the build if there are Python syntax errors or undefined names + flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics + # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide + flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics + - name: Test with pytest + run: | + pytest From 8433999859c60cb3e51c6807987e4eac7ee7ef55 Mon Sep 17 00:00:00 2001 From: KumudithaSilva <131386682+KumudithaSilva@users.noreply.github.com> Date: Tue, 26 Aug 2025 20:08:28 +0530 Subject: [PATCH 2/5] Delete .github/workflows directory --- .github/workflows/python-app.yml | 39 -------------------------------- 1 file changed, 39 deletions(-) delete mode 100644 .github/workflows/python-app.yml diff --git a/.github/workflows/python-app.yml b/.github/workflows/python-app.yml deleted file mode 100644 index 200872c..0000000 --- a/.github/workflows/python-app.yml +++ /dev/null @@ -1,39 +0,0 @@ -# This workflow will install Python dependencies, run tests and lint with a single version of Python -# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python - -name: Python application - -on: - push: - branches: [ "master" ] - pull_request: - branches: [ "master" ] - -permissions: - contents: read - -jobs: - build: - - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - name: Set up Python 3.10 - uses: actions/setup-python@v3 - with: - python-version: "3.10" - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install flake8 pytest - if [ -f requirements.txt ]; then pip install -r requirements.txt; fi - - name: Lint with flake8 - run: | - # stop the build if there are Python syntax errors or undefined names - flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics - # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide - flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics - - name: Test with pytest - run: | - pytest From d2444a976a726a2f0d744ff0b863daeb65b7cfa1 Mon Sep 17 00:00:00 2001 From: KumudithaSilva <131386682+KumudithaSilva@users.noreply.github.com> Date: Thu, 4 Sep 2025 19:51:30 +0530 Subject: [PATCH 3/5] Update README.md --- README.md | 161 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 160 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 8c37e9c..f937f02 100644 --- a/README.md +++ b/README.md @@ -1 +1,160 @@ -# TaskOn +# 🌱 TaskOn β€” Pomodoro Timer App + +TaskOn is a lightweight, user-friendly productivity app built with **Python** and **Tkinter**, following the **Pomodoro Technique** to help you manage your time effectively. +Unlike simple timers, TaskOn is built with **Object-Oriented Programming (OOP)** principles and follows **SOLID design practices** to ensure: + +- πŸ› οΈ **Maintainability** β€” easy to update & extend +- πŸ”„ **Reusability** β€” modular classes for timer, UI, audio, and task logic +- 🧩 **Scalability** β€” add new features (themes, persistence, reports) without breaking existing code +It helps you stay productive with focused work sessions, refreshing breaks, audio notifications, and visual progress tracking. + +TaskOn makes **focus rewarding** with **visual checkmarks, audio cues, and simple controls** β€” turning productivity into a habit. + +--- + +## πŸŽ“ Purpose + +- πŸ§‘β€πŸ’» Stay **focused** with structured work & break sessions. +- πŸ•’ Prevent burnout with **short and long breaks**. +- 🌱 Track your progress visually with **checkmarks & icons**. +- 🧠 Promote **habit building** with repetition + reinforcement. +- πŸ› οΈ Demonstrate a real-world **OOP + SOLID Python project**. + +--- + +## 🧠 Key Features + +- ⏱️ **Automated Pomodoro sessions** (Work β†’ Short Break β†’ Work β†’ Long Break). +- 🎨 **Minimal Tkinter-based UI** with start/reset controls. +- πŸ”” **Audio alerts** for session transitions. +- βœ… **Checkmarks** to celebrate completed work sessions. +- βš™οΈ **Customizable durations** (work, short/long breaks, repetitions). +- πŸ“ **Session logging** β€” activities logged in console & `app.log`. + +--- + +## πŸ“Έ TaskOn App Output (UI Preview) + +image + + +--- + +## ✨ Features + +- ⏱️ **Pomodoro Timer** β€” Work, Short Break, and Long Break sessions. +- 🎨 **Minimal & Clean UI** powered by Tkinter. +- πŸ”” **Audio Notifications** with sound cues for session transitions. +- 🌿 **Visual Feedback** β€” progress checkmarks and dynamic logos. +- βš™οΈ **Customizable Configurations** (session durations, repetitions, countdowns). +- πŸ“ **Built-in Logging** β€” records actions in `app.log` and console. +- πŸ“¦ **Lightweight** β€” runs with Python standard libraries and `pygame`. + +--- + +## πŸ“Œ How It Works + +1. Press **▢️ Start** β†’ a short tick countdown begins. +2. Timer alternates between: + - **Work sessions** πŸ§‘β€πŸ’» + - **Short breaks** β˜• + - **Long breaks** 🌿 after several work sessions. +3. 🎢 **Audio alerts** notify when time’s up. +4. βœ… **Checkmarks** track completed work sessions. +5. Press **⏸️ Reset** anytime to clear progress. + +--- + +## 🎯 App Flow Overview + +- ▢️ **Play** β†’ Starts timer. +- ⏳ **Tick countdown** β†’ Quick prep before session begins. +- ⏱️ **Work timer** β†’ Focus until alarm. +- 🌿 **Break timers** β†’ Short or long depending on progress. +- βœ… **Completion tracking** β†’ Adds checkmarks to UI. +- ⏸️ **Reset** β†’ Clears timers, progress, and starts fresh. + +--- + +## πŸ”§ Core Functionalities + +### βœ… `TaskManager` +- Tracks **session repetitions** and decides whether the next is work, short break, or long break. + +### βœ… `Timer` +- Handles **countdown logic** (tick + main timer). +- Triggers **callbacks** to update UI and play sounds. + +### βœ… `TaskOnUI` +- Tkinter-based **user interface** with buttons, logos, and timers. +- Displays countdowns, alarm messages, and checkmarks. + +### βœ… `AudioService` +- Plays **notification sounds** for transitions. + +### βœ… `ResourceLoader` +- Dynamically loads **images and icons** from `assets/`. + +--- + +## πŸ–₯️ System Requirements + +- Python **3.8+** +- Dependencies: + - `tkinter` (built-in with Python) + - `pygame` (for audio) + +Install dependencies with: +```bash +pip install -r requirements.txt +``` +--- + +## πŸ—‚οΈ Project Structure +```bash +TaskOnApp/ +β”œβ”€β”€ main.py # Entry point (launches the app) +β”œβ”€β”€ taskon/ +β”‚ β”œβ”€β”€ app.py # Main TaskOnApp (coordinates everything) +β”‚ β”œβ”€β”€ timer.py # Timer class (countdowns & ticks) +β”‚ β”œβ”€β”€ task_manager.py # Controls session switching & repetition +β”‚ β”œβ”€β”€ ui.py # Tkinter-based UI +β”‚ β”œβ”€β”€ audio_service.py # IAudioService interface + pygame implementation +β”‚ β”œβ”€β”€ config.py # Configurable durations & settings +β”‚ β”œβ”€β”€ resources.py # Loads images/icons +β”‚ └── logger.py # Centralized logging +└── assets/ + β”œβ”€β”€ audio/ # Sound files (beep.wav, congratulations.wav) + └── images/ # Icons (play, pause, logos, checkboxes) +``` +--- + +## πŸ“¦ Future Enhancements + +- 🎨 Modern UI Themes β€” Add dark mode & customizable color schemes. + +- πŸ”” Custom Alerts β€” Allow users to upload/select their own sounds. + +- πŸ“Š Productivity Analytics β€” Track sessions completed & generate reports. + +- 🌐 Cross-Platform Sync β€” Save sessions & configs to the cloud. + +- πŸ“ Task Notes β€” Attach quick notes/todos to each work session. + +--- + +## 🀝 Contributing + +- 🍴 Fork the repo +- 🌱 Create a feature branch +- πŸ› οΈ Commit changes +- πŸ“€ Push branch & open Pull Request + +- We welcome UI tweaks, new features, bug fixes, and documentation improvements! + +--- + +## πŸ’‘ Inspiration + +>TaskOn is inspired by Francesco Cirillo’s Pomodoro Technique, designed to help people work with time instead of against it. +This project also demonstrates how OOP + SOLID principles can be applied to build a real-world, extensible productivity app. From 739cdfa6e4cd09e7cd77f9db1a2a1550b159a01b Mon Sep 17 00:00:00 2001 From: KumudithaSilva <131386682+KumudithaSilva@users.noreply.github.com> Date: Fri, 5 Sep 2025 21:06:37 +0530 Subject: [PATCH 4/5] Update README.md --- README.md | 54 ++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 40 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index f937f02..98bf35d 100644 --- a/README.md +++ b/README.md @@ -112,20 +112,46 @@ pip install -r requirements.txt ## πŸ—‚οΈ Project Structure ```bash -TaskOnApp/ -β”œβ”€β”€ main.py # Entry point (launches the app) -β”œβ”€β”€ taskon/ -β”‚ β”œβ”€β”€ app.py # Main TaskOnApp (coordinates everything) -β”‚ β”œβ”€β”€ timer.py # Timer class (countdowns & ticks) -β”‚ β”œβ”€β”€ task_manager.py # Controls session switching & repetition -β”‚ β”œβ”€β”€ ui.py # Tkinter-based UI -β”‚ β”œβ”€β”€ audio_service.py # IAudioService interface + pygame implementation -β”‚ β”œβ”€β”€ config.py # Configurable durations & settings -β”‚ β”œβ”€β”€ resources.py # Loads images/icons -β”‚ └── logger.py # Centralized logging -└── assets/ - β”œβ”€β”€ audio/ # Sound files (beep.wav, congratulations.wav) - └── images/ # Icons (play, pause, logos, checkboxes) + +TaskOnApp/ +β”œβ”€β”€ taskon/ # Main application package +β”‚ β”œβ”€β”€ __init__.py +β”‚ β”œβ”€β”€ main.py # Entry point +β”‚ β”œβ”€β”€ app.py # App logic coordinator +β”‚ β”œβ”€β”€ timer.py # Timer logic +β”‚ β”œβ”€β”€ task_manager.py # Pomodoro/task session controller +β”‚ β”œβ”€β”€ ui.py # Tkinter UI +β”‚ β”œβ”€β”€ audio_service.py # Audio abstraction layer +β”‚ β”œβ”€β”€ config.py # Configurable durations +β”‚ β”œβ”€β”€ resources.py # Loads icons/audio +β”‚ β”œβ”€β”€ logger.py # Centralized logging +β”‚ └── assets/ # Static files +β”‚ β”œβ”€β”€ audio/ # .wav, .mp3 files +β”‚ └── images/ # .png, .ico files +β”‚ +β”œβ”€β”€ tests/ # Unit tests +β”‚ β”œβ”€β”€ __init__.py +β”‚ β”œβ”€β”€ test_timer.py +β”‚ └── test_task_manager.py +β”‚ +β”œβ”€β”€ dist/ # Built files (output) +β”‚ β”œβ”€β”€ TaskOnApp.exe # Windows executable (PyInstaller) +β”‚ └── taskonapp-0.1.0-py3-none-any.whl # Python package +β”‚ +β”œβ”€β”€ build/ # PyInstaller build cache +β”‚ └── ... +β”‚ +β”œβ”€β”€ .github/ # GitHub Actions workflows +β”‚ └── workflows/ +β”‚ └── taskon-tests.yml # CI/CD (test, Sonar, PyInstaller) +β”‚ +β”œβ”€β”€ .gitignore # Ignore build files, __pycache__, etc. +β”œβ”€β”€ README.md # Project overview, setup, usage +β”œβ”€β”€ requirements.txt # Runtime dependencies (pygame, etc.) +β”œβ”€β”€ MANIFEST.in # Includes assets in Python package +β”œβ”€β”€ pyproject.toml # Modern build system config +β”œβ”€β”€ TaskOnApp.spec # PyInstaller config file + ``` --- From 851c9010afb2eb044cb7617f90ec574ac0510269 Mon Sep 17 00:00:00 2001 From: KumudithaSilva <131386682+KumudithaSilva@users.noreply.github.com> Date: Fri, 5 Sep 2025 22:40:59 +0530 Subject: [PATCH 5/5] Update README.md --- README.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/README.md b/README.md index 98bf35d..00783fb 100644 --- a/README.md +++ b/README.md @@ -180,6 +180,34 @@ TaskOnApp/ --- +## πŸ”€ Git Flow Workflow + +The development process follows a **Git Flow** style workflow to keep development organized and efficient. Currently, it uses these branches: + +- 🌿 **`master`** β€” Stable, production-ready code (released versions) +- 🌱 **`task_oop`** β€” Main development branch for ongoing work + +### Future branch structure : + +- ✨ **`feature/*`** β€” For developing new features, branched off `task_oop` +- πŸ› οΈ **`release/*`** β€” For preparing releases, branched off `task_oop` +- 🩹 **`hotfix/*`** β€” For urgent bug fixes, branched off `master` + +### Typical workflow (future plan): + +1. πŸ“₯ Pull the latest changes from `task_oop` +2. 🌟 Work on your changes (directly on `task_oop` for now) +3. πŸ”€ Open a Pull Request (PR) to merge into `task_oop` +4. βœ… After review and testing, merge PR into `task_oop` +5. πŸš€ When ready for release, create a `release/*` branch from `task_oop` for final testing and polishing +6. πŸŽ‰ Merge `release/*` into `master` and tag the new version +7. ⚑ For urgent fixes, create a `hotfix/*` branch off `master` +8. πŸ”„ Merge `hotfix/*` back into both `master` and `task_oop` + +This workflow helps maintain **stable releases** while supporting **safe feature development** and **quick fixes** as the project grows. + +--- + ## πŸ’‘ Inspiration >TaskOn is inspired by Francesco Cirillo’s Pomodoro Technique, designed to help people work with time instead of against it.