Description
A modern, real-time messaging application built with React, TypeScript and Express. Features one-on-one conversations, group chats, and an innovative conversation tone visualization system that allows users to grow a tree together.

Objective
Budding Messenger was an idea I had for a messaging platform that encourages positive interaction between users.
A tree appears in the background of a conversation between users and the tone of their messages is analysed. If a majority of their conversation is positive the tree will grow!
This was a learning project for me where I tackled a lot of new methods and technologies such as TypeScript, writing documentation, deploying via AWS, Tailwind CSS and persistent server connections via Websockets.

They grow to different levels based on the overall tone of the conversation as well as total quantity of messages! Growing a big tree requires LOTS of positive messages.
Tech used
- React
- Express
- PostgreSQL
- Prisma
- Node
- TypeScript
- AWS
- Socket.io
- Sentiment
- Tailwind CSS
- Jest
Budding Messenger's front-end is powered by loads of tech! Some of the key players for this project were Tailwind CSS which allowed for rapid styling, Socket.io for persistent connections that enable 'instant' messaging, the Sentiment npm package for analysing the tone of messages and React Router for handling navigation and context for routes.
Server-side TypeScript ensures the integrity of data, whilst deployment via Amazon Web Services meant I could utilize a load balancer to handle both HTTPS and Websocket connections simulatneously.
Documentation-driven development with Jest for testing gave me confidence that my API was robust and easy to interface with as it let me create a quick reference table for my endpoints and resources.


On Mobile devices '+' symbols appear on the users, whereas Desktop devices can 'drag-and-drop' users into the 'Creating Group Chat Zone' to add them to the new group.
Challenges
Deploying with Amazon Web Services (AWS) for the first time was quite the learning curve!
It was challenging working out which combination of their services would best suit my deployment.
Initially I thought Lambda would work well for my server, though I learnt that it wouldn't be able to easily manage the combined HTTPS and Websocket connections used.
This lead me down the path of using EC2 to host the server with a load balancer to enable Socket.io's Websockets.
Configuring a lot of settings manually stretched my capacity. Having used a combination of Railway and Netlify to deploy previously, I gained a lot of respect for how much of the heavy lifting these services provide.
AWS really is feature-packed! My favourite part was interacting with my server in the cloud on an EC2 instance through the terminal. Virtual machines rock! 🤘

Let's Keep in Touch
If you're after a developer for your next project, have something you'd like to ask or just want to stay in touch, feel free to reach out.
ruuksine@gmail.com