Krishnan's Personal Website


Home | About | Blog | Interesting Reads | Tutorials | Skills | Personal Projects | Books | Fun | Connect with me


Building a Twitter Clone


Published On: Jun 24 2023
Written By: Krishnan Sethuraman
Category: Building Chuckle


Chuckle is an open source Twitter like application that I will be building in the coming weeks and months to demonstrate my skills in software engineering, devops and project management. It will help a probable client or a hiring manager to gauge my skill set and decide if I am the right fit for their requirements. 

Though I am building Chuckle as a portfolio project I will not be restricting it to a mere demo application. I will be building it to be a full featured application that resonates with the real world Twitter. 

This blog post is about a basic introduction of the project and some high level technical decisions that I have made before starting the project. 

Throughout working on this project, in addition to increasing my proficiency in the technologies I know, I will also be open to learn and use new technologies to accomplish the tasks. 

The overall application development process will be split into multiple phases and the phases will be split into multiple sprints. Each sprint will consist of new features and bugs with bugs always getting a higher preference to new features unless there is an exception. So ideally I will try my best to follow most of the 12 rules suggested by Joel Spolsky

Through this project I will be demonstrating the following skills. 

  • Project management (Jira)
  • Sprint planning
  • System design
  • Building APIs with Laravel (Php)
  • Planning and building database
  • Creating Docker containers for localhost development
  • Building web apps with React
  • Setting up and configuring servers with Terraform
  • Continuous integration with Github Action
  • Source code documentation
  • Technical writing
  • Logging and monitoring
  • Writing automated tests

I will be hosting the application on a Linode server running Ubuntu. The different components of the application will run inside Docker containers to mimic a distributed system. 

To start with there will be a backend system consisting of all the rest apis to be consumed by the frontend. It will have features like sign up via email, Google, Facebook and Twitter etc, including login, create a tweet and so on. I will be using Laravel, a Php framework to build the backend. The database will be built on Mysql and for caching I will be using Memcached.  

I picked up Laravel in 2020 during the Covid period. Before that I was predominantly using Codeigniter 3. Since 2020 though I have used Laravel to build numerous production systems but I strongly feel that there are a lot of aspects of Laravel which I am yet to learn. So I feel using Laravel for this project will increase my prowess in addition to demonstrating the skills I already possess. 

To keep the costs low I will be running the whole system on a single server. I love Linode for their customer service so it will be my natural choice. Having said that, I have used both AWS and GCP in my day to day job. 

For the frontend I want to use React. It is something that I have always wanted to learn and I feel React would be a perfect fit for this project as I have witnessed React being used in similar projects in the past. 

The source code will be hosted on a public repository on Github  so that it can be viewed by the whole world. The source code will be primarily hosted on two repositories. One for the frontend and another for the backend. For CI I will be using Github Action as it is free for public Github repos. 

I have narrowed down on some open source logging applications on Github and I am planning to use them in some interesting manner. The logs that the application generates will also be publicly available. I have few things in mind for this use case and will write more about it as the project progresses. 

The monitoring dashboard will also be publicly available and I will be using Grafana for it. 

I do not want the graphs flatlines and the application to be empty so I will also be writing some scripts that will resemble real traffic on the server and perform some close to real life interactions with the intended web application. 

After every two sprints I will be focusing on creating api documentation for my imaginary frontend developers. The source code will also be documented in the form of comments within the source code. 

To test the APIs I am thinking of going with a postman collection with inbuilt scripting so that I can run the tests with the newman command on a terminal. For the frontend I am yet to decide on the right tool for testing. 

That being said I am super excited to kick start the project and I hope it is as much fun as it seems to be. :-)