Kaamkar

Kaamkar

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

1

Created on 15th January 2023

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

Builders also viewed

See more projects on Devfolio