header image

Krishnan's Personal Website


Home | Resume | Blog | Interesting Reads | Tutorials | Skills | Personal Projects | Books | Newsletters | Certifications | Fun | Connect with me


New project: building a helpdesk application


Published On: Jan 21 2024
Written By: Krishnan Sethuraman
Category: Projects


I have a fettish for building web applications and learning new frameworks. It's been almost three years since I started using Laravel. In comparison to Codeigniter 3 I love the middleware, jobs and commands feature in Laravel

However all the serious source code that I manage are either in Lumen or in Codeigniter 3. So to fix the problem I decided to build a web application from scratch. 

I also have plans to launch this application  as a product for two main reasons.

  1. In the process of marketing the product I can learn the nuances of marketing.
  2. If the product gets real users then it can help me in learning the strategies related to scaling the application and the underlying infrastructure. 

The web application that I am going to build is a ticketing system like Freshdesk and Zendesk. 

I am not going to get into the USP of this product and why I am building it when there are numerous options in the market because the agenda of this project is to not launch a viable product but to hone my skills. 

I have set some prerequisites and plans for this project to increase its complexity and to make it worthwhile. I have listed them below. 

  1. The backend will be a set of REST APIs that make integration with third party applications easy.
  2. The frontend will be built with Reactjs or Vuejs and will integrate with the backend restful service.
  3. For backend authentication I will be using jwt tokens.
  4. I will be using queues and workers heavily (obviously in the right scenarios) to ensure the requests can handle heavy load and have good performance.
  5. For the pipeline I will use Jenkins and later in the project I will implement SonarQube in my pipeline for code analysis.
  6. Logging - the application will log all the errors and warnings to identify the bugs to proactively resolve them. To make it easy I will use a centralised logging system.
  7. To simplify setting up the environment on localhost I will be using Docker.
  8. I have plans to use OpenAI for some AI capabilities that I have in my mind. :-)
  9. Modules or features that I will focus on before launching
    1. Ticket management
    2. Ticket escalation
    3. Creating tickets and comments via emails
    4. Reports
  10. Modules or features that I will focus on after launching
    1. API documentation
    2. Knowledge base articles
    3. Demo videos
    4. A landing page (website)
    5. Integration with some popular third party applications like Freshsales, Zohocrm and Zappier
    6. Artificial intelligence for some interesting capabilities (not disclosing it now :-) )

Technical decisions

  1. Source code will reside in a Bitbucket repository.
  2. For the backend I will be using Laravel.
  3. For the frontend I will be using Reactjs, but as I need to learn Reactjs I will use Codeigniter 3 for the frontend (only for routing and rendering html view) with Vuejs and later replace it with Reactjs.
  4. I have a small server with Linode where I host all my personal projects. For now I will be hosting the application on this server. But later in the process I will use Kubernetes.
  5. For the centralised logging system I will use an application that I built for myself.
  6. For monitoring I will use Prometheus and Grafana.
  7. For the UI I will be using a free bootstrap template. I have used this template in other projects in the past.
  8. For now I will be using a database based queue. If the product gets traction I will replace it with Beanstalkd or RabbitMQ.
  9. For the AI component, I will use Python. I am thinking of using Django.
  10. The database will be indexed and the indexes will be applied via Laravel migrations.
  11. For caching I will use Memcached. 

Known obstacles and challenges

  1. The server on which this application will run is a basic server. In case this application gets serious traction then I will have to move to a new server.
  2. I have tried running SonarQube on this server via docker compose but have faced issues due to the hardware limitations. So I might not be able to use SonarQube.
  3. I will be working on this product only on the weekends hence prioritising features will be of utmost importance. 
     

Next steps

I have divided the project into multiple phases and each phase into multiple sprints. 

To make things faster I will be using a Laravel boilerplate application that I have built for myself which has all necessary boilerplate code around signup, login and api authentication. 

Each weekend I will complete the features and launch them to production. This way tests can be performed by the QA team while I work on other features. 

I have named this application DaySupport. It’s catchy and also simple to pronounce and remember. 

With all the planning I am going to jump into writing some code.