Vaibhav Jaiswal's blog

Vaibhav Jaiswal's blog

Taskify - An app to manage your daily tasks and boost your productivity - HarperDB Hackathon

Taskify - An app to manage your daily tasks and boost your productivity - HarperDB Hackathon

Have you ever felt that you are being unable to track your daily tasks and hardly manage to complete them? I have an app that will surely help you out

A bit about myself

Hello There 👋, I am Vaibhav. I am an Android Developer, currently a student 👨‍🎓 with a knack towards software development and everything about technology. I am very excited to share my journey building this project for HarperDB + Hashnode Hackathon

Taskify is here to help you manage all your tasks and track your productivity.

Video Introduction 📹

This is a small introduction video about Taskify.

A bit of background

I always felt that I am not very productive when I compare myself with others. At the end of the day, I used to think that i should have completed more work, which made me feel sad sometimes. I also used to forget things that I have planned to do in a day.

I was just scrolling through social media and my friend texted me that a new hackathon is being organized on Hashnode. This is how I got to know about HarperDB + Hashnode hackathon.

Then I started brainstorming about what to build and this idea struck me. But then I thought that - "Why would people even use it , when they can just use a notepad app to write all their work down"

But people need to use different apps to write down their tasks, track their time and they might not be able to see a detailed statistics of their productivity.

Taskify not just helps people to write down their tasks, but also lets you start a timer to track their time doing a task, It also shows you a detail view of the tasks you did in the last week.

Taskify has a clean and simple user-friendly interface which makes it easier for people of all age group to use it

Taskify - Manage your day to day tasks and boost your productivity 🔥

UI Designs

Before starting with the project I started with the UI designing, and this is one of the thougest part in building a project. Mostly selecting the right illustrations and icons.

These are the designs I made in Adobe XD

designs_light.png

designs_dark.png

App Features

  • User Authentication - Allowing users to login and register using email based authentication and Google authentication.
  • Dashboard - This is the dashboard screen which shows list of all running, paused, upcoming and completed tasks.
  • Add Task - Creating tasks and saving them.
  • Task Timer - A Timer which tracks time taken in completing a task, it also runs in background so users does not need to keep app open all the time
  • Statistics - Shows statistics of all tasks created within last week.
  • Profile - Shows user's profile.
  • About - Shows information about the app like its version number and more.

Insights into the app 🔎

light_dark.png

Taskify offers light as well as dark theme 🌓. So now you can use Taskify in whatever theme you like the most. 🔥

slide-1.png

Taskify supports both email based and Social media authentication like Google authentication. Planning to add Facebook authentication too. 😁

slide-2.png

Have a look at your running task, upcoming and completed tasks all in one place. Create a task by pressing the FAB below.

slide-3.png

Taskify lets you start a timer ⌚ to track the time you take completing a task. Timer runs in background, so you dont need to keep the app open all the time. 👍 See stats 💪 of all tasks you created within the last week, including total tasks created in a day and breakdown of tasks based on category.

Technical details

  • Taskify uses Firebase Authentication for authentication and Firebase Crashlytics for crash reporting
  • Taskify uses HarperDB as its main database which is access using the HarperDB REST API.
  • Taskify has full offline support, it uses Android's ROOM database for caching all data offline.
  • Taskify is made using Kotlin and following Modern Android Development practices.
  • Taskify uses all Jetpack libraries and follows MVVM architecture. It also has a G.O.A.T rating in Android's M.A.D scorecard.
  • Taskify's code follows all the best practices and software development principles which make it a very good learning resource for beginners.

summary.png

Tech Stack

  • Android
  • Kotlin
  • Android Jetpack Components
  • Firebase
  • HarperDB
This is my HarperDB SQL Schema

SQL Schema

data class UserDTO(
    val username: String = "",
    val email:String = "",
    val profile_img:String = ""
)

data class TaskDTO(
    val email: String,
    val task_title: String,
    val task_description: String,
    val task_category: String,
    val state: String,
    val duration: Long,
    val time_left: Long,
    val created_time: Long,
    val task_id: String = "$email.$created_time"
)
This is how I am making calls to the HarperDB REST API to fetch data

This is my model class to hold SQL data as per HarperDB's documentation.

data class SQLModel(
    val sql: String,
    val operation: String = "sql"
)

This is my utility method to prepare the SQL Statement.

private fun getSqlModelToGetTasks(email: String) = SQLModel(
    sql = String.format(
        "SELECT * FROM edufy.tasks WHERE email = '%s' ORDER BY created_time DESC",
        email,
    )
)

This is my method which makes the API call and handles data.

suspend fun getAllTasksOfUser(email: String): Resource<List<TaskDTO>> = try {
        val sqlModel = getSqlModelToGetTasks(email)
        val response = api.getAllTasksOfUser(sqlModel)
        if (response.isSuccessful) {
            response.body()?.let {
                Resource.Success(data = it)
            } ?: Resource.Error("failed to load tasks")
        } else
            Resource.Error("failed to load tasks")
    } catch (e: Exception) {
        Resource.Error(e.message.toString())
}

Challenges I faced and how I solved them ✅

Developing a software is full of challenges and twists and turns.

  • Making the timer work in background and send live updates to the UI was very challenging to me. I had to try all 3 types of services (Lifecycle Service, Intent Service and Service) to figure out which one works for me. For the live UI updates I figured out a way to make it work that was to use a singleton class and keep the observables there. After a few debugging and tries, Voilà it worked. 🎉

  • The Statistics screen was also quite a tricky part, mainly customizing the graphs according to my designs was a very difficult thing to do as the library had almost no documentation. After some hours of research I found out the exact properties to alter to make it look close to what I wanted it to.

Future Improvements 🌟

  • Adding Facebook Authentication.
  • Adding support to see all tasks organized in a calendar.
  • Making timer feature offline ready, so timer can be run even without internet, and data gets stored as soon as internet becomes available.
  • Improve the Statistics section a bit.

Source Code 👩‍💻

If you want to have a look at the source code of the app, here is the link to the Github Repository Taskify.

You can download the latest version of Taskify from github.com/Vaibhav2002/Taskify/releases/tag..

Feel free to contribute to Taskify and raise issues if you find any.

Vote of thanks 👏

I would like to thank Hashnode Discord server for providing such a good support. Special thanks to the members of HarperDB slack channel for helping me fix some of issues using HarperDB.


If you like my projects and want to support me to build more cool open source projects


 
Share this