Task Tracker is a simple yet powerful task management application that leverages microservice architecture to provide a scalable and efficient solution. The application allows users to organize their tasks in a Trello-like manner, with a React-based client for a seamless user experience. The backend is implemented using Spring Boot, with additional features like a scheduler in Kotlin for task automation and an email sender for notifications.
-
Client (React): The front end is built using React, providing a modern and responsive user interface for an optimal user experience.
-
Backend API (Spring Boot): The backend is developed using Spring Boot, offering a robust and scalable foundation for managing tasks and user data.
-
Scheduler (Kotlin Spring Boot): Kotlin is used for creating scheduled tasks to automate certain processes within the application, ensuring efficiency and timely updates.
-
Email Sender (Kotlin Spring Boot): Kotlin Spring Boot is employed for sending email notifications to users, keeping them informed about important updates and deadlines.
-
Database (Postgres): Postgres is used as the relational database to store task-related information securely.
-
Caching (Redis): Redis is utilized for caching to enhance the performance of the application by storing frequently accessed data in-memory.
-
Message Broker (RabbitMQ): RabbitMQ is employed as a message broker to enable communication and data exchange between microservices, ensuring a loosely coupled architecture.
-
Authentication (JWT Tokens): JSON Web Tokens (JWT) are used for secure user authentication, providing a reliable mechanism for verifying the identity of users.
The application comprises the following microservices, each responsible for specific functionalities:
-
Task Tracker Web API: Implements the core business logic of the application, managing tasks and user-related operations.
-
Task Tracker React Client: Provides a modern and responsive user interface for users to interact with the task management system.
-
Task Tracker Email Service: Manages the sending of email notifications, keeping users informed about important updates and deadlines.
-
Task Tracker Scheduler Service: Implements scheduled tasks to automate processes within the application, ensuring efficiency and timely updates.
The microservices are deployed using Docker containers, with the following architecture:
- Spring Boot: A framework for building Java-based enterprise applications.
- Kotlin: A modern programming language that works seamlessly with Java on the JVM.
- Spring Data JPA: Simplifying data access with JPA.
- Postgres: A powerful, open-source relational database system.
- Spring Security: A powerful and customizable authentication and access control framework.
- ModelMapper: An object mapping library that automatically maps one object to another.
- Flyway: Database migration tool for Java-based systems.
- Swagger: A tool for documenting APIs, providing a user interface to interact with your RESTful services.
- React: A JavaScript library for building user interfaces.
- TypeScript: A superset of JavaScript that adds static typing and other features.
Main method of running this application is using docker-compose. Learn more about configuration in Docker.md
Run the application with the default configuration (docker compose is required). This will start the following services:
-
Clone the repository
git clone https://github.com/farneser/task-tracker && cd task-tracker
-
Run the application
./run.sh
-
Open the browser and go to http://localhost:3000
-
Stop and remove the containers
./run.sh stop
-
Clone the repository
git clone https://github.com/farneser/task-tracker --recurse-submodules && cd task-tracker
-
Run build docker compose
docker-compose -f docker-compose-build.yml build
-
Run the application
docker-compose -f docker-compose-build.yml up
-
Open the browser and go to http://localhost:3000
-
Stop and remove the containers
docker-compose -f docker-compose-build.yml down -v
As part of the project, an automated CI/CD process has been configured using GitHub Actions for each microservice. This process ensures the automatic creation of Docker images and their upload to a shared repository (Docker Hub) when changes are made to the master branch.