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.
- In the process of marketing the product I can learn the nuances of marketing.
- 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.
- The backend will be a set of REST APIs that make integration with third party applications easy.
- The frontend will be built with Reactjs or Vuejs and will integrate with the backend restful service.
- For backend authentication I will be using jwt tokens.
- 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.
- For the pipeline I will use Jenkins and later in the project I will implement SonarQube in my pipeline for code analysis.
- 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.
- To simplify setting up the environment on localhost I will be using Docker.
- I have plans to use OpenAI for some AI capabilities that I have in my mind. :-)
- Modules or features that I will focus on before launching
- Ticket management
- Ticket escalation
- Creating tickets and comments via emails
- Reports
- Modules or features that I will focus on after launching
- API documentation
- Knowledge base articles
- Demo videos
- A landing page (website)
- Integration with some popular third party applications like Freshsales, Zohocrm and Zappier
- Artificial intelligence for some interesting capabilities (not disclosing it now :-) )
Technical decisions
- Source code will reside in a Bitbucket repository.
- For the backend I will be using Laravel.
- 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.
- 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.
- For the centralised logging system I will use an application that I built for myself.
- For monitoring I will use Prometheus and Grafana.
- For the UI I will be using a free bootstrap template. I have used this template in other projects in the past.
- For now I will be using a database based queue. If the product gets traction I will replace it with Beanstalkd or RabbitMQ.
- For the AI component, I will use Python. I am thinking of using Django.
- The database will be indexed and the indexes will be applied via Laravel migrations.
- For caching I will use Memcached.
Known obstacles and challenges
- 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.
- 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.
- 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.