Kaamkar

Kaamkar

Effortlessly identify what needs to get done, organize tasks, and get a clearer picture of the project timeline.

1
Kaamkar

Kaamkar

Effortlessly identify what needs to get done, organize tasks, and get a clearer picture of the project timeline.

The problem Kaamkar solves

I've recently been using to-do lists to record my progress for side projects. So, I thought it'd be cool to ship a side-project that lets me do just that (very meta I know XD)! This application is great for solo projects, doing household chores, or even just keeping track of your groceries.

Challenges I ran into

đź’ˇConception

Recently, I've been reading up on Test Driven Development practices and how it acts as a thinking tool that helps you with:

  • managing your stress levels during programming
  • thinking about the design of your programs
  • managing the scope of your projects

So, I've been trying to apply the principles I learned to my own software and game-dev side projects.

Another handy trick I picked up while learning about TDD was to always maintain a to-do-list of the specs you know that you have to write and implement so that you can pay attention to the work that you're doing in a programming session instead of succumbing to your stress because of the ton of work remaining.

Then, it struck me. Since I've been using to-do lists a lot, wouldn't it be cool if I build an application that I can use to make to-do lists for my side-projects, while applying these concepts!

✍️Development

Before I wrote the first line of code, I defined the domain by pondering the following questions:

  • What should I be able to do with the finished version of the project?
  • What is the domain, what are the concepts that exist within it, and how do they interact with one another?
  • What are the behaviors that these concepts should display?

Once the domain abstractions were modeled, I set up a Model View Controller (MVC) architecture such that:

  • The domain layer deals only with domain types
  • The view, which handles user inputs and outputs, only accepts primitive types
  • The controller orchestrates the flow of data from the domain and views layers with the help of a Parser and Renderer.

Primitive Type → Parser → Domain Type Domain Type → Renderer → Primitive Type

I've also created Components for reusable UI elements so that rendering the necessary information and setting up event listeners is easier.

Discussion