Learning

content writing in process

Project Journey

1. Real-Time Chat App


🚀 Idea & Curiosity

  • You might be surprised to know that I decided to build this when I only knew HTML, CSS, and had just finished intermediate JavaScript.
  • The idea came from a simple thought — users enjoy things like emojis, GIFs, and visually appealing chat spaces. But most messaging apps focus heavily on security (which is important), while design flexibility and personalization often feel limited.
  • I wanted to explore a different angle: what if a chat app allowed users to make their chat space more expressive and visually engaging — almost like customizing their own room (okay, maybe not literally a bedroom 😅).
  • Since this was my first time building something like this, I decided not to overthink everything at once. My focus was to first understand how real-time chat actually works, and then gradually improve things like security later.
  • The challenge was obvious — I had barely practiced JavaScript deeply, knew only around 10% of Node.js, and had never worked with concepts like Socket.IO before. I wasn’t even sure what technologies were required at the beginning. To figure that out, I consulted an AI chatbot, which gave me a starting direction — and from there, the real journey began.

😵 Starting Without Knowing

  • You might think that starting a project without fully understanding the concepts isn’t a good idea, but I realized the opposite. When you try to build something with even a little knowledge and figure things out along the way, the learning becomes much more engaging and real. It keeps you from getting bored and pushes you toward actual developer-style learning, not just theory.
  • Programming isn’t about memorizing — it’s about practicing and experimenting. I believed that if I kept building and modifying things in my own way, I would eventually go beyond just copying code and truly understand what I was doing.

🤖 Using AI as a Learning Tool

  • At the beginning, I wasn’t even sure what technologies were required to build a real-time chat application. So, I asked an AI chatbot what I needed. It suggested using Node.js for the backend and Socket.IO for real-time communication.
  • I then asked whether I needed to complete Node.js fully before starting. The answer was no — I only needed to understand the basic concept, like how the backend connects with the frontend. I also asked about Socket.IO, thinking it might be as large as JavaScript or Python, but it turned out to be a small and focused tool that could be understood quickly.
  • After that, I tried learning Socket.IO from YouTube, but most videos were teaching everything in depth, which wasn’t what I needed at that moment. I didn’t want to master the entire concept first — I wanted to start building.
  • So instead, I asked the AI to give me a basic working code. I copied it and ran it. Surprisingly, the code was much smaller and simpler than I had imagined. That gave me confidence.
  • Then I carefully observed how HTML, CSS, JavaScript, and Node.js were working together. I asked the AI to explain the code line by line and cleared my doubts step by step.
  • After understanding it, I challenged myself to build it on my own. I got confused again at some points and faced errors, but I kept debugging and asking questions. Finally, on my second attempt, I was able to create it myself — not by memorizing the code, but by actually understanding it.
  • One thing I learned from this process is that it doesn’t matter which AI tool you use. What matters is how you use it — as a guide or teacher, not just for copying answers.

🧩 Breaking & Fixing Things

  • I didn’t treat AI-generated code as something to copy blindly. Instead, I used it as a guide and tried building things in my own way. When things worked, it reinforced my understanding; when they didn’t, I debugged and asked why the error occurred.
  • Because I focused on concepts rather than memorization, mistakes became a key part of my learning process.

🔁 Iterations & Improvements

  • I enhanced the chat experience by adding features like emoji support, message formatting, and keyboard-based message sending. I also experimented with localStorage to persist user data and messages across refreshes (though not extensively yet).
  • These small improvements helped me understand how frontend state, UI behavior, and real-time updates work together.

⚡ Understanding the Core Concept

  • While building this project, I understood how real-time communication actually works.
  • The client connects to the server using Socket.IO, and both communicate through events. When a user sends a message, it is emitted to the server, which then broadcasts it to all connected clients
  • I also learned how the server keeps track of users using sockets, and how events like joining, messaging, and disconnecting are handled in real time.
  • This helped me move from just “using code” to actually understanding the flow behind real-time systems.

🧠 What Changed in Me

  • Before this project, I used to think that I needed to learn everything first before building something real. But this experience changed that mindset completely.
  • I realized that starting with limited knowledge and learning along the way is far more effective than waiting to feel “fully ready.” Instead of depending on tutorials, I began focusing on understanding how things work and building from that understanding.
  • I also became more comfortable with confusion and errors. Earlier, they felt like obstacles, but now I see them as part of the process.
  • Overall, this project shifted me from just learning code to actually thinking like a developer.

🔮 What’s Next

  • This was the final stage of my journey with this real-time chat application. While writing about it, I also had to balance the experience with the overall UX of this portfolio.
  • If you preview this project, you might wonder — where are the advanced features I mentioned, like custom designs, emojis, or interactive chat spaces? There aren’t even separate rooms or authentication yet.
  • The reason is simple: toward the end, I realized that my goal was learning, not perfection. I had already understood the core concept of real-time communication, and I didn’t want to get stuck focusing only on design or extra features.
  • Instead, I chose to move forward and explore other projects, applying what I learned here in new ways.
  • I’ve also shared the source code above — feel free to explore it, understand it, take help from AI if needed, and try building it yourself.
This project reflects my build-first approach, where I start with limited knowledge and learn by building instead of waiting to master everything first.

Aadarsh Aaryan’s approach focuses on learning by building instead of waiting for complete knowledge.