From 5313be7e8ada6ab3bf2e13ce86b53e622888f4d5 Mon Sep 17 00:00:00 2001 From: nenad0707 Date: Thu, 14 Nov 2024 00:29:16 +0100 Subject: [PATCH] Update README.md to enhance project documentation and add screenshots --- README.md | 27 +++++++++++++++++++++++++-- tasktackler.webp | Bin 0 -> 17092 bytes 2 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 tasktackler.webp diff --git a/README.md b/README.md index 945fa52..a70070a 100644 --- a/README.md +++ b/README.md @@ -12,9 +12,9 @@ ## 🌐 Live Demo -[![Task Tackler Demo](https://img.shields.io/badge/Task%20Tackler-Live%20Demo-512BD4?style=for-the-badge&logo=microsoft-edge&logoColor=white)](https://nenadtara-001-site2.jtempurl.com/) +[![Task Tackler Demo](https://img.shields.io/badge/Task%20Tackler-Live%20Demo-512BD4?style=for-the-badge&logo=microsoft-edge&logoColor=white)](https://nenadtara-001-site2.jtempurl.com/) -> **⚠️ Note:** Registration with a valid email is required to access certain features. +> **⚠️ Note:** Registration is required to access the features. Please register and login to use the application. --- @@ -27,9 +27,21 @@ - [🛠️ Technologies Used](#️-technologies-used) - [📂 Project Structure](#-project-structure) - [🧩 Key Components](#-key-components) + - [🔒 Authentication](#-authentication) + - [🗃️ Caching](#️-caching) + - [🔄 Pagination](#-pagination) + - [📝 User Notifications](#-user-notifications) + - [🔄 Additional Components](#-additional-components) + - [CSS Isolation](#css-isolation) - [🌟 Features in Detail](#-features-in-detail) + - [🗃️ Client-Side Caching](#️-client-side-caching) + - [🔒 Authentication \& Authorization](#-authentication--authorization) + - [🔄 Pagination](#-pagination-1) + - [📝 User Notifications](#-user-notifications-1) - [🐳 Docker Configuration](#-docker-configuration) - [🚀 Deployment with GitHub Actions](#-deployment-with-github-actions) + - [Azure Resource Deployment](#azure-resource-deployment) + - [Manual Deployment Trigger](#manual-deployment-trigger) - [🏃 Running Locally](#-running-locally) - [📸 Screenshots](#-screenshots) - [📄 License](#-license) @@ -142,3 +154,14 @@ To run the project locally using Docker Compose: ```bash docker-compose build docker-compose up -d +``` + +## 📸 Screenshots + +Here are some screenshots of the Task Tackler application: + +![Screenshot 1](tasktackler.webp) + +## 📄 License + +This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details. diff --git a/tasktackler.webp b/tasktackler.webp new file mode 100644 index 0000000000000000000000000000000000000000..c7992b62cc279a03f6e5d36090da7f66e41299be GIT binary patch literal 17092 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 ZIbsX%*d#>n3l+PW$^495!2$sA{{TJE38er4 literal 0 HcmV?d00001