# Debashish Nath - Complete Knowledge Base & Portfolio > Self-taught software developer from Assam, India building web applications, open-source utilities, and interactive digital experiences. Canonical Site: https://debanath.com Author: Debashish Nath (debanath, AstroDollop) Contact: debanath26@gmail.com GitHub: https://github.com/debanath Twitter / X: https://x.com/AstroDollop --- ## 1. About the Author Debashish Nath is a developer based in Assam, India who specializes in JavaScript, TypeScript, Astro, Next.js, React, Node.js, and Python. His engineering philosophy emphasizes speed, simplicity, lightweight architecture, and thoughtful user experience. Primary skills: - Frontend: HTML5, CSS3, JavaScript (ESNext), TypeScript, React, Next.js, Astro, Tailwind CSS - Backend & Systems: Node.js, Express, Python, REST APIs, Socket.IO, WebSockets, Prisma, MongoDB/PostgreSQL - Deployment & DevOps: Vercel, Git, GitHub Actions, DNS & domain configuration --- ## 2. Projects & Case Studies ### Mikudex - Canonical URL: https://debanath.com/projects/mikudex - Date: 2026-02-13 - Summary: A Pokédex that started as a fun challenge and accidentally became a Hatsune Miku fan site.

Live Demo

It started with a dumb conversation. Me and a friend were talking about Pokémon over chat, as adults do, and we slowly came to the realization that we could not remember most of them. That felt serious. We tried going in order, like the actual Pokédex, but we gave up around the first ten. After that we just started typing out whatever names came to mind. Charizard. Gengar. Mewtwo. The classics. Beyond that, it got fuzzy fast. At some point we accepted defeat, and I closed the chat thinking there had to be a way to fix this. Or at least a fun excuse to build something. So I made a Pokédex. I already knew there were hundreds of Pokédex sites on the internet. That was not the point. I wanted to build one for myself, as a challenge, to try out some new stuff. I found out about [PokeAPI](https://pokeapi.co/), which was a lifesaver. It gave me everything I needed - names, stats, sprites, descriptions, the works. The basic Pokédex came together pretty quickly. But once it was working, I looked at it and felt nothing. It was just another Pokédex. Clean. Functional. Completely soulless. Whenever I build something, I like to add a personal touch to it. Because at this point in time, every website looks the same. Same layouts. Same color palettes. Same components copy-pasted from the same libraries. It's boring. I want my stuff to feel different. Quirky. A little raw. Like something a real person made, not a template. So I started thinking about how to make this one mine. --- Here is the part that I find a little embarrassing to admit, but it is what it is. I am a fan of Hatsune Miku. Yes. A grown adult. I know. But the moment I accepted that, the direction became obvious. Why not Mikufy it? So I started adding Miku elements here and there. The first thing I added was Miku's Musical Insights - a small section inside each Pokémon's detail modal where Miku herself pops up and gives her commentary. It checks which stat is the highest for that Pokémon and returns a fitting musical-themed quote for it. High speed? She talks about tempo. High attack? Power chords. It is silly and I love it. But that felt like enough. And then I thought, no. Let's full send it. --- So I added an easter egg. If you type "miku", "hatsune", or "39" into the search bar, something happens. An intro video plays - like a proper entrance into the Miku-verse. Once it ends, the entire theme of the site transforms. The Pokédex red switches to Miku's signature teal. The Poké Ball icon in the header is replaced by a Miku image. On desktop, the cursor changes into a leek. And hovering over any Pokémon card now floats little musical notes off of it. The whole thing is a state toggle. Typing the right keywords triggers the video, the video ending triggers the flash and the theme switch, and everything downstream reads from that one `isMikuMode` boolean. The leek cursor is pure CSS with a custom `.cur` file. The floating notes are absolutely-positioned elements with a short animation that spawns on hover. It is absolutely unhinged and I have no regrets. --- On the more technical side, the app is built with Next.js and Material UI. Data fetching is handled using TanStack Query, which made infinite scroll and caching straightforward. The Pokémon grid loads 24 at a time and fetches the next batch as you scroll down. Search works by fetching all Pokémon names upfront and filtering client-side, which keeps it snappy. Each card fetches its own data independently, which means they load progressively rather than waiting for the whole page. Clicking a card opens a detail modal with stats, description, height, weight, abilities, and of course, Miku's insight. Dark mode is supported and persists across sessions. The theme tokens were set up so switching between Pokémon mode and Miku mode is just a color swap at the top level, without touching individual components. --- I did not need to build this. There are better Pokédexes out there with more features, better performance, and more complete data. But none of them turn into a Hatsune Miku fan site if you know the right words to type. And honestly? That is enough for me. Sometimes a project does not need to solve a big problem. Sometimes you just want to make something that makes you smile when you open it. This one does that. ## Ty for reading --- ### Attendance Calculator - Canonical URL: https://debanath.com/projects/attendance-calc - Date: 2025-08-08 - Summary: A browser based attendance calculator with subject wise tracking and timetable support.

Live Demo

This project started from a very normal conversation. One night, a friend asked me if I knew how to calculate attendance percentage. I said yes. Then she asked something more specific. She wanted to know how many more classes she needed to attend to reach 75 percent attendance. She was planning to go home during the Diwali break and wanted to be sure she would still meet the requirement before that. I could have just calculated it for her and sent the numbers. It would have taken a few minutes. But that conversation made me realize something. It is not just her who worries about attendance. Almost every college student goes through this stress. There is always this constant fear in the background. Am I safe or not. Can I miss this class. Can I go home. Will I make it to 75 percent. So instead of doing one calculation, I decided to build something that could answer these questions properly. That is how this attendance calculator came to be. The idea was simple. You add your subjects, enter total classes and attended classes, and instantly see where you stand. But attendance is not just about totals. Weekly schedules matter too, so I added a timetable where subjects can be mapped across weekdays and periods. This makes it easier to understand how many classes you actually attend in a week and plan ahead. The entire project is built using plain HTML, CSS, and JavaScript. There is no backend and no frameworks. Everything runs in the browser. I used local storage so data can be saved and reused later. I also added export and import options so students can back up their data or move it between devices. I paid attention to mobile usage because many students check attendance on their phones. The layout adapts properly to smaller screens so it stays usable. This is not a complex project, and it was never meant to be. It exists to solve a very common, very real problem in a simple way. It started from helping one friend, but it was built for anyone who has ever worried about whether they will make it or not. --- ### Discord Clone - Canonical URL: https://debanath.com/projects/discord-clone - Date: 2024-06-13 - Summary: A discord clone, built to understand how socket works for a real time chat

GitHub Repo | Live Demo

This project started because I wanted to understand how real time chat apps actually work. Using apps like Discord feels effortless. Messages show up instantly, users come and go, and everything stays in sync. But when you try to build something similar, you quickly realize how much is happening behind the scenes. The goal of this project was not to recreate Discord completely. I mainly wanted to understand real time messaging, sockets, and how different parts of the system talk to each other. The app is built using Next.js and follows a fairly structured layout. Users exist as profiles. Profiles can create servers or join existing ones using invite links. Inside a server, members have roles and can participate in channels or direct messages. Thinking in terms of servers, members, and channels early on helped keep things from becoming messy later. Designing the database was one of the most important parts. Messages are stored instead of being treated as temporary socket events. Each message belongs to a channel or a direct conversation and is linked back to the member who sent it. I also added soft deletion so messages can be removed without breaking history or relationships. Direct messages were more complicated than I expected. Conversations are created between two members, and I had to make sure the same conversation is not created twice in different orders. Solving this made me think more carefully about data constraints and edge cases. Real time updates are handled using Socket.IO. Messages are sent, saved to the database, and then broadcast to the right users. This part took the most time. I ran into issues like duplicate socket connections, events firing twice, and messages randomly disappearing after refreshes. Debugging these problems forced me to understand how socket connections are created, reused, and cleaned up. On the frontend, I relied on reusable components and custom hooks to manage chat state, scrolling, and modals. Mixing real time updates with cached data was tricky at first, and I had to fix issues where the UI would show stale or duplicated messages. I also added features like file uploads, emojis, theming, and mobile support. These were not just visual improvements. Each one exposed new edge cases and forced me to handle things more carefully. The app is deployed and usable, which helped surface problems I never saw during local development. Things like reconnect behavior, network delays, and navigation bugs only showed up once real users started clicking around. There are still many things I would improve. Better error handling, cleaner socket logic, and stricter permission checks are some of them. But this project did what I wanted it to do. It helped me move from knowing that real time chat exists to actually understanding how it behaves when people use it. ```bash # File Structure . ├── app # App Router pages and layouts │ ├── api # REST APIs for servers, channels, messages │ ├── (auth) # Sign in and sign up routes │ ├── (invite) # Server invite handling │ ├── (main) # Main app UI │ │ └── servers # Server specific pages │ └── layout.tsx │ ├── components # Reusable UI and feature components │ ├── chat # Chat UI and logic │ ├── server # Server sidebar and controls │ └── modals # Create, edit, delete modals │ ├── hooks # Custom React hooks for chat and UI state ├── prisma # Database schema and models │ └── schema.prisma │ ├── pages │ └── api │ └── socket # Socket.IO handlers │ └── package.json ``` --- ### Covid Vaccination Slots - Canonical URL: https://debanath.com/projects/cowin-vacc - Date: 2021-06-01 - Summary: A simple program to find vaccination center and slots available in them

GitHub Repo

Back in 2021, during the peak of COVID in India, getting a vaccination slot felt like winning a lottery. The government required everyone to book slots through the CoWIN portal. The problem was not the idea, but the execution. To check availability, you had to enter your phone number, wait for an OTP, enter it, and only then see if slots were available. Every single refresh repeated this process. Slots were limited, competition was huge, and unless you were extremely lucky or knew exactly when slots went live, you were stuck refreshing endlessly. At that time, I already had a strong feeling that I wanted to pursue computer science. I had tried learning C++ through offline coaching before this, and honestly, it was a disaster. I struggled a lot and started doubting whether this field was even for me. Then I discovered JavaScript. Compared to C++, JS felt approachable. I started learning the basics, just enough to understand how things worked. Around the same time, while desperately trying to book a vaccination slot, I noticed something interesting at the bottom of the CoWIN website. An API reference. The CoWIN API. That moment changed everything. I got curious and started digging into the API documentation. I went through the endpoints, parameters, and responses. I searched YouTube and Reddit to see if someone had already built something useful with it. Surprisingly, I could not find much. This was before ChatGPT, before AI coding assistants, before vibe coding. It was just me, the docs, and a lot of trial and error. The biggest challenge was authentication and rate limiting. The API allowed unauthenticated requests but had a strict rate limit of around 80 requests per minute. Cross that limit and your IP would get blocked. So I played it safe. I built a simple script using JavaScript that pinged the API every 3 seconds. That kept the request count to about 20 per minute, well within limits. The script checked slot availability based on pincode and date and logged the results in the console. No fancy UI. Just raw data. And it worked. Using that small app, I was able to find and book vaccination slots for myself and my family when they became available. That moment is permanently etched in my memory. For the first time, I had built something that solved a real problem in my own life. Not a tutorial project. Not a college assignment. A real tool with real impact. That day, something clicked. I stopped doubting whether computer science was for me. I knew it. This is what I wanted to do. Building things that solve problems, even small ones, felt incredibly rewarding. That Cowin Vaccination Slot Finder was my first real project, and it is the reason I decided to seriously pursue software development. And honestly, that feeling of seeing your code help someone in the real world is something I have been chasing ever since. It is not rocket science, nor is it the best written or most optimized piece of code. Looking back, there are many things I would do differently today. But this project sits very close to my heart, because this is where it all started for me. It was the first time I truly felt the power of programming and realized that this is what I want to keep doing. Note: The CoWIN public APIs used in this project have since been discontinued, so the application no longer functions as intended today. However, the source code is still shared below for reference, as it reflects my early approach to reading documentation, handling rate limits, and building a practical solution from scratch. ## Code ```js /* ! First attempt it runs but not neat fetch( "https://cdn-api.co-vin.in/api/v2/appointment/sessions/public/findByPin?pincode=782446&date=11-06-2021" ) .then(res => res.json()) .then(data => { let availablePlaces = []; for (let i = 0; i < data["sessions"].length; i++) { let res = data["sessions"][i]; if (res["min_age_limit"] > 18 && res["available_capacity_dose1"] > 0) { availablePlaces.push(res); } } availablePlaces.length > 0 ? console.log(availablePlaces) : console.log("Sorry no slots available"); }); */ let pincode = ""; let date = ""; function startSearch() { pincode = document.getElementById("pincode").value; date = document.getElementById("date").value; //format DD-MM-YYYY let url = `https://cdn-api.co-vin.in/api/v2/appointment/sessions/public/findByPin?pincode=${pincode}&date=${date}`; checkAvailability(); setInterval(checkAvailability, 30000); async function checkAvailability() { const res = await fetch(url); //console.log(url); let availablePlaces = []; const data = await res.json(); for (let i = 0; i < data["sessions"].length; i++) { let res = data["sessions"][i]; if (res["min_age_limit"] >= 18 && res["available_capacity_dose1"] > 0) { availablePlaces.push(res); } } availablePlaces.length > 0 ? console.log(availablePlaces) : console.log("No slots available"); } } ``` ## Ty for reading --- ### Calculator - Canonical URL: https://debanath.com/projects/calculator - Date: 2020-04-21 - Summary: A simple calculator built during the COVID lockdown. My first real lock-in.

Live Demo

April 2020. COVID lockdown. Nowhere to go, nothing to do. For most people it was a strange, anxious time. For me, it accidentally became the period where I started taking programming seriously. I was learning HTML and CSS, and had just started dipping my toes into JavaScript. I was consuming everything I could find - freeCodeCamp, YouTube tutorials, documentation, anything at my disposal. At some point I decided I needed to build something. Not follow along with a tutorial. Actually build something myself. So I picked a calculator. From the outside, a calculator seems like the most boring, obvious beginner project you could possibly choose. Four operations. Some buttons. How hard could it be. Turns out, pretty hard. The moment you sit down to actually build one, things get complicated fast. How do you manage the display? How do you handle chaining multiple operators? What happens when someone hits equals twice? What about dividing by zero? What about backspace - do you clear the whole thing or just the last digit? Every question opened up three more questions. JavaScript was still very new to me at the time. I was not confident with it at all. I spent a lot of time going back and forth between the code and the docs, trying to understand why something was not working the way I expected. There were moments where I genuinely did not know if I was going to be able to figure it out. It took me about 3 to 4 days. And when it finally worked - I cannot even describe it properly. The feeling of pressing buttons on something I had built from scratch and watching it calculate correctly was one of the most rewarding moments I had experienced at that point. It sounds dramatic for a calculator. But if you have ever been in that place where you are learning something new and everything feels just slightly out of reach, and then suddenly it clicks - you know exactly what I mean. This was not a complex project. Looking at the code today I can see a hundred things I would do differently. But this was the first project I had to genuinely lock in for. The first time I had to push through the confusion instead of giving up and going back to tutorials. The lockdown gave me the time. The calculator gave me the reason to use it. And that feeling of seeing it work for the first time? I have been chasing it ever since. ## Ty for reading --- ## 3. Technical Articles & Dev Logs ### How YouTube Was Ruined - Canonical URL: https://debanath.com/blogs/how-youtube-is-ruined - Date: 2026-09-30 - Summary: How YouTube turned into corporate TV, why MrBeast became what he once fought, what we lose when we let tech think for us, and how the internet killed the local legend. ## The Death of the Bedroom Creator YouTube used to be a wonderfully chaotic corner of the internet. It was built on random, goofy, deeply personal content. You uploaded because you had a weird hobby, a goofy sense of humor, or a specific topic you cared about so much that you just wanted to share it with whoever might stumble across it. The algorithm didn't dictate your existence; like-minded people simply found each other. You hit record on whatever crusty webcam you had plugged into your computer, talked to the camera, and called it a day. Fast forward to today, and YouTube has turned into corporate slop—a giant money-making machine where everything is engineered for clicks and watch time, and almost nothing is about raw creativity. Content creation doesn't look like someone hanging out in their bedroom anymore; it looks like a mini Hollywood movie. Just to get your foot in the door, it feels like you need high-end cameras, professional lighting, studio gear, and industry contacts to help you out. Every big creator seems to have an entire team behind them: writers, producers, thumbnail designers, audio engineers, and full-time editors. I came across this Reddit comment that Felix made 13 years ago, and I still fuck with it heavily:

PewDiePie replying on Reddit 13 years ago. "I want YouTube to remain 'You'."

Now, I know Felix did eventually hire an editor later on, and bringing up this screenshot might feel almost hypocritical at first glance. But there's a big difference between bringing on an editor like Brad or Sive to mess around and riff on inside jokes, versus turning your channel into a corporate factory line. For PewDiePie, the editing highlighted his personality; it didn't replace him. What he said in that Reddit comment still hits hard: > *"I want YouTube to remain 'You'... I want to prove that to even be the biggest channel on YouTube; you don't have to have a lot of money or a hired staff involved. As long as you have a camera and passion you can go as far as you want."* Compare that mindset to what we have now. Wherever you look, it's the exact same video format. It's either AI-generated slop pumped out for quick cash, or MrBeast-style videos where people blow crazy amounts of money just to make an eight-minute video. --- ## The Great Irony: How MrBeast Became T-Series I still remember the biggest moment on the platform: **PewDiePie vs. T-Series** back in 2018–2019. Back then, the storyline felt huge. The whole internet rallied together around one idea: an individual creator, making videos from his bedroom, standing his ground against a massive corporate giant. And remember who was leading that campaign on the ground? **MrBeast.** He was buying billboards, running ads on radio stations, and pulling stunts at the Super Bowl. He campaigned because he wanted to see a solo creator win. Everyone was chanting the same thing: *we don't want corporate companies turning YouTube into TV; we want YouTube to stay for creators.* Yet look at where things ended up just a few years later. MrBeast didn't just beat T-Series—he basically became what T-Series was. He built a massive production company with millions of dollars, business executives, writers' rooms, data analysts, and animators, turning YouTube into something closer to television or Hollywood. The difference between these two eras is wild: * **The PewDiePie Era** was messy, random, and human. Felix could sit in his chair, scream at a buggy game, or laugh at dumb memes, and millions of people tuned in simply because they liked *him*. The videos didn't need to be perfect because people were watching for the person behind the screen. * **The MrBeast Era** is super cinematic and hyper-optimized. The thumbnail, the crazy hook in the first three seconds, the breathless pacing, the fake hype—almost every second is designed to trap your attention so you don't scroll away. At some point, it stops feeling like YouTube and starts feeling like cable television. And that's the irony: **the guy who once fought to protect indie creators helped create a standard that regular creators can't even afford to compete with.** --- ## The Retention Trap and the Anticlimax Have you noticed how difficult it has become to just find a good YouTube video to watch while you're eating alone? You sit down with a hot plate of food, open the app, and scroll endlessly. By the time you finally pick something, your food is already getting cold—and the video you settled on turns out to be just loud, exhausting noise. Every video starts with an explosive, high-stakes hook designed to grab you immediately. There's fake urgency, countdown timers, dramatic music, and creators yelling at the camera like your life depends on watching until the end. You click because you're actually interested. But as the video plays out, the actual point of the video feels paper-thin. By the time you get to the big reveal, it's completely underwhelming and anticlimactic. You're just left sitting there with an empty plate, feeling disappointed. When videos are made just to game the algorithm instead of telling a good story, the ending is always a letdown. You aren't watching someone share their passion; you're watching a video designed purely to keep you hooked for ad money. --- ## Marshall McLuhan and Cognitive Atrophy This isn't just an issue with YouTube, though. It's part of a bigger change in how we use technology. Some people can't walk around a city without an app telling them where to turn. Some people can't write a simple two-paragraph email without using AI to draft it first. The Canadian philosopher **Marshall McLuhan** once pointed out that our technologies both **extend** and **amputate** us: > *"Every extension is also an amputation."* The wheel let us travel farther than our feet ever could, but it made our feet go soft. We moved faster, but we lost our natural endurance. The same thing happens to our brains. It's called **cognitive atrophy**: the idea that the less you use a certain brain function, the worse you get at it, and eventually you might stop being able to do it altogether. * If you stop playing guitar, your fingers slow down and you lose your touch. * If you stop reading challenging books, your vocabulary and your ability to express yourself narrow down. * If you stop focusing on anything for long periods of time, your attention span shrivels. Of course, this isn't always a bad thing. The brain is an efficient organ—it drops what it doesn't need so it can focus on what it does. Few people reading this will ever need to start a fire without a lighter, and that's completely fine. But with AI being plugged into everything we do, the question becomes much more important: **What brain processes are we willing to give up?** Would you be okay giving up the ability to search multiple sources, dig through information, and write a clear thought on your own? Are you okay giving up the ability to make art and express your own views the way you want to? The problem isn't that our brains adapt—they will always grow or shrink based on what we do. The real question is: **what do we actually want to do with our brains? What do we want our inner life and experiences to feel like?** --- ## The Internet Accidentally Killed the Local Legend And that brings me to what might be the saddest part of the modern internet: **it accidentally killed the local legend.** Think about how towns used to be. In every town, there used to be a local legend: * There was a guy who was unbelievably funny at every party. * There was a girl who everyone in town thought was gorgeous. * There was someone who played the guitar so well that people would literally walk over just to hear him play on his porch. The cool thing was, they didn't have to be the best in the world. They didn't have to be Jimi Hendrix or a world-famous comic. They just had to be **the best anyone around had ever seen**. That was enough to make them feel special and give the community something to rally around. Today, that whole feeling is gone. The funniest guy you know is directly competing with every professional comedian on your phone screen. The prettiest girl in your town is compared to models flown across the world on Instagram. The local guitarist doesn't feel special anymore because an eleven-year-old on TikTok just played an impossible solo with zero mistakes. You can be incredibly talented nowadays and still feel completely ordinary, because our reference point used to be the **two hundred people around us**. Now, our reference point is the **entire planet**. And I wonder if that's why so many people never feel like they're exceptional anymore. People didn't become less interesting, less funny, or less gifted. **Maybe interesting just became impossibly expensive.** --- ## Reclaiming the Messy and the Human When every video has to be a million-dollar movie, when every paragraph has to be rewritten by an AI, and when every talent has to beat the entire planet just to feel worthwhile, everything starts to feel hollow and boring. We trade real human connection for watch-time graphs. We trade our own thinking for algorithmic convenience. And we trade the charm of the local legend for feeling mediocre next to an infinite feed. I miss the days when people made videos because they were excited, not because a retention graph told them to. I miss reading someone's clumsy, honest writing rather than clean, soulless AI text. Maybe the fix isn't trying to out-budget MrBeast or write the perfect AI prompt. Maybe it's just having the courage to make things that are raw, low-tech, and human again—and being completely fine with being a local legend in our own corner of the world. --- ## A Necessary Postscript on Hypocrisy And yes—the irony is not lost on me that after writing an entire essay warning about cognitive atrophy and the dangers of handing over human expression to machines, I used an AI to help me organize and edit these very thoughts. It proves just how easy it is to let the tools take over. It's so tempting to hand off the hard work of drafting and polishing because it saves time. But that effort is where the human part actually lives. The machine can give me back clean paragraphs, but it couldn't give me the memory of sitting in front of a computer watching bedroom creators, or the quiet sadness of watching the local legend disappear. The observations were mine; the friction was outsourced. And moving forward, maybe that friction is the exact thing we all need to fight to keep. *(For full radical transparency and proof of provenance, you can view my unedited [raw notes & initial brain dump](/raw/how-youtube-is-ruined)—with every typo, tangent, and unfiltered thought intact).* --- ### Building Minecraft's End Poem into My Site - Canonical URL: https://debanath.com/blogs/recreating-the-end-poem - Date: 2026-09-03 - Summary: Why I beat Minecraft from scratch just to re-read the End credits, and built an interactive 1:1 web replica of the End Poem on debanath.com/mcc. ## Sweating Bullets and a Deep State of Pondering Most games roll credits once you complete them, and Minecraft is no different. You defeat the Ender Dragon, jump back through that final bedrock exit portal, and the credits start rolling, a long sequence that almost everyone skips. I still remember the first time I beat the game years ago. I was tryharding like crazy, sweating bullets (if you've fought the dragon yourself, you know the feeling). Once I won, I was ready to head straight back to my base, but the credits started rolling and something told me to actually sit and watch.
> *"I see the player you mean."* > *"PLAYERNAME?"* > *"Yes. Take care. It has reached a higher level now. It can read our thoughts."* Reading through Julian Gough's dialogue, I fell into this deep state of pondering. For a game made entirely out of blocks, the reflections on dreaming, waking up, and living in reality were surprisingly profound. That poem has stayed close to my heart ever since. --- ## The Instagram Reel and Earning It Recently, while doomscrolling Instagram reels late at night, I came across a clip of someone beating the game for the first time, only to skip the credits immediately. My immediate reaction was: *come on, just give it a chance.* That moment sparked something in me. I wanted to read the poem again. I could have easily pulled up a video on YouTube in five seconds, but instead I downloaded Minecraft, booted it up, and played through to the end from scratch. It wasn't a speedrun by any means: multiple deaths, multiple restarts, but I got there and read the poem once more. I know that sounds like a ridiculous amount of effort just to read a poem. But I've always been someone who hates having things handed to me. If I don't earn it, it loses its value. I like working toward something to actually get it. --- ## Bringing the Experience to Everyone After finishing it, I thought about everyone who doesn't play Minecraft or skipped the credits entirely and missed out on this experience. That's when I decided to build a 1:1 replica of the End credits screen right inside my portfolio, so anyone can experience this piece of writing regardless of whether they've ever touched the game. When you step into **[/mcc](/mcc)**, here is how it comes together: * **Your Name in the Dialogue**: The dual-speaker script dynamically weaves your name into the text, alternating between the iconic cyan and green colors alongside periodic scrambled glyphs. * **The Drifting Starfield**: A lightweight canvas renders depth-scrolling stars behind the text to capture that endless floating void. * **Ambient Music & Mojangles Typography**: The original credits soundtrack (`credits.ogg`) plays in the background, styled with authentic pixel typography and drop shadows. * **The Mercy of a Pause Button**: In the actual game, if you miss a line, it's gone for good. Here you can hold `[Space]` or tap your screen to pause the scroll, scrub with your scroll wheel, or press `[ESC]` to fade the music and return to reality. --- ## Surviving the Short-Form Apocalypse The entire sequence takes about 6 to 8 minutes to scroll through. If your attention span has survived the short-form content apocalypse, grab a pair of headphones, turn your volume up (it genuinely makes a difference), and give it a read: 👉 **[debanath.com/mcc](/mcc)** Enter your player name and take in the poem. I would love to hear your thoughts if this is your first time reading it. Genuinely curious to know what clicked, what didn't, and how it lands for you. *- Deba* --- ### Owning My Little Plot of the Internet - Canonical URL: https://debanath.com/blogs/buying-my-first-domain - Date: 2026-08-31 - Summary: After a year on a vercel.app subdomain, I stayed up till 2 AM, fell down a Reddit rabbit hole, and bought debanath.com from a registrar with a pig mascot. ## The Subdomain Era For over a year, my personal site quietly lived at `astro-dollop.vercel.app`. If you're wondering where "AstroDollop" came from, there is no deeper lore behind it. When I first started building this site with [Astro.js](https://astro.build/), I wanted a unique handle, GitHub suggested a random word combination, and I rolled with it. It worked, it was functional, and Vercel made hosting effortless. But let's be honest: having a `.vercel.app` subdomain never quite sat right with me. Domains are cheap, hosting was already sorted (Vercel, just with my own nameservers and DNS pointed at it), and the only real blocker was me actually committing to buying one. --- ## The 2 AM Reddit Rabbit Hole Being my first time buying a domain, I didn't want to mess it up or get trapped in some shady renewal price hike. So naturally, my "in-depth research" consisted of doomscrolling Reddit comparison threads between 1 and 2 AM. I went through countless debates about GoDaddy, Namecheap, and Cloudflare. But one name kept popping up over and over again with almost cult-like praise: **Porkbun**.

The mascot that sealed the deal.

A domain registrar named Porkbun with a cartoon pig mascot? I was intrigued. After digging into pricing, transparent renewals, and free WHOIS privacy, it came down to Cloudflare vs. Porkbun. Porkbun's mascot sealed the deal for me. I put my trust in the pig, please don't let me down 😭. --- ## The Handle Identity Crisis Next came picking the actual domain name. I originally thought about going with `astrodollop.com`. But then I looked at all my other internet handles: * GitHub: `debanath` * Socials / Emails: `debanath` or `deba26` *(Quick story on the "26": when I got my first smartphone as a kid and signed up for Google, it suggested "26" at the end of my name, and I just never let it go).* I didn't want numbers in my domain though. So I typed in `debanath` on a whim. Available. Checked `.com`. Also available. I snatched `debanath.com` immediately before second thoughts could creep in. --- ## Setting It Up & Digital Real Estate Pointing Porkbun's DNS and nameservers over to Vercel took less than five minutes. Having done client freelance work, setting up records wasn't new to me, but doing it for *my own* name felt surprisingly different. It sounds simple, but watching `debanath.com` resolve for the first time gave me that weirdly satisfying feeling of: *"Woah, this is actually mine."* It feels like buying a tiny plot of land on this massive, chaotic internet. --- ## Trusting the Random Impulses Looking back, almost every milestone for this site was driven by random impulse: * Picking `AstroDollop` from a generator * Sticking with `deba26` because Google said so * Buying `debanath.com` at 2 AM on August 30th If I had overthought it, I probably would have convinced myself that the free Vercel subdomain was "good enough." But sometimes, you just have to trust the impulse and go with the flow. Welcome to my new home: [debanath.com](https://debanath.com), come say hi 👋 *- Deba* --- ### Physique Update - Canonical URL: https://debanath.com/blogs/an-interesting-journey - Date: 2025-10-01 - Summary: From 96kg to 73.9kg in 1 year 4 months. Still not perfect, but my best yet 🛐 ## The Turning Point I just want to put this out there because, honestly, it feels like an achievement - one I can't really keep to myself. My highest recorded weight was **98kg**, and when I saw that number, I was shocked. I knew if I didn't act soon, I'd hit 100+, and that idea alone was *diabolical*. I couldn't let it happen. At first, I tried some random diet plans and managed to drop to **96kg**, but it didn't feel like real progress. That's when I told myself, *nah, time to lock in for real.* That moment - **1 year and 4 months ago** - was the real start of my fat-loss journey. --- ## Where I Am Now Fast forward to today, and I've hit my lowest recorded weight: **73.95kg**. I'm not shredded like those fitness influencers you see online. I still have fat, I'm not in peak aesthetic shape, but I'm **in the best shape of my life** compared to every past version of me. That's what truly matters to me - progress over perfection. I've learned that the only person you should compare yourself to is the *you* from yesterday. Did you grow? Did you get better? If yes, then that's a win. --- ## The Journey The journey wasn't easy. In the beginning, it felt like a chore - tracking food, pushing myself to move more, and being mindful about what I ate. But somewhere along the way, I got the hang of it. Once it became a habit, it stopped feeling like punishment and started feeling like progress. Now, I'd actually call it an *interesting* journey rather than a hard one. I might not drop much lower from here and will probably maintain around **80kg** eventually, but hey, thoughts change 🤣. --- ## What I've Learned * Small, consistent actions beat occasional extremes. * Don't compare your Chapter 1 to someone else's Chapter 10. * Progress doesn't have to be dramatic - just consistent. * The goal isn't to be perfect, it's to be *better*. --- ## Final Thoughts Thanks for reading. I know it's not very *Deba-like* to post something like this, and yeah, some might call it cringe or self-glazing, but honestly, idc. This journey means a lot to me, and I just wanted to put it out there 🛐 If you're on your own journey - don't rush it. Don't compare. Just keep showing up and do better than you did yesterday. *- Deba* --- ### Experience Building MyPaste - Canonical URL: https://debanath.com/blogs/mypaste - Date: 2025-09-08 - Summary: My experience building and shipping MyPaste end-to-end for my first real client, from detailed PDF blueprints to production speed. ## The Blueprint and The Brief Let's start from the very beginning. When we first hopped on the project, I asked them about their requirements and references to understand what they were aiming for. They shared a PDF document containing all the specs: color schemes, themes, titles, page counts, and feature breakdowns. It was surprisingly detailed and gave me a clear direction right away. Of course, no matter how thorough a blueprint is, ideas evolve and revisions are inevitable once things become tangible. But having that structured foundation made getting started so much smoother. *(Quick FYI: if you're wondering about the name in the chat screenshots below, I went by "Robin" for this project, so yeah, Robin was my alias).* --- ## First UI Iterations: Fast from Day One I jumped straight into building the frontend with Next.js. My primary focus from day one was making sure the interface was not just clean and modern, but ridiculously fast. Once the initial UI structure was in place, I sent over an early preview to get their thoughts on the layout and color palette:
Hearing *"looks brilliant honestly great work"* on that first preview gave me a huge boost of confidence. We decided to keep the colors flexible and dialed in the styling as we moved forward. --- ## Nailing the Mobile Experience A web app can look stunning on a wide desktop monitor, but if it breaks on mobile, it's not ready. We spent time making sure the responsive layout was snappy, buttons had proper touch targets, and typography scaled cleanly across small viewports:
Seeing everyone test it on their phones and confirm that it felt smooth on mobile was a key milestone before tackling the rest of the stack. --- ## That "First Client" Feeling Working on personal hobby projects is one thing: if something breaks or takes a week to fix, only you know about it. But building software for actual people who are genuinely counting on your work is a completely different feeling:
Knowing how excited they were made me want to push even harder to deliver something top-tier. --- ## Domain Setup & Production Performance Once the core was shaped up, we moved on to production wiring: configuring the custom domain, setting up DNS, and squeezing every millisecond out of the loading times:
When a client's first message after opening the production build is *"omg it loads so fast"*, you know the architectural choices paid off. --- ## The "It Works!" Moment Every developer knows that moment when you've been wrestling with backend integration, API edge cases, and data persistence, and then suddenly everything links together flawlessly:
You really cannot beat the feeling of seeing genuine excitement on the other end when everything works exactly as intended. --- ## What Building MyPaste Taught Me Taking MyPaste from a concept PDF to a live, polished web application was one of the most rewarding learning experiences I've had. A few big takeaways: * **Clear Communication Matters**: Consistent updates and quick feedback loops eliminate misunderstandings before they turn into major rewrites. * **Speed is a Feature**: Prioritizing lightweight, fast-loading architecture from day one makes a lasting impression. * **Earn the Result**: Pushing through the tricky bugs and delivering something that makes clients genuinely happy is why I love building software. *- Deba* --- ### Landing My First Freelance Project - Canonical URL: https://debanath.com/blogs/freelancing - Date: 2025-08-24 - Summary: Reflections and notes on landing and beginning my first full-scale freelance web development project transferring a Flask app to Next.js. ## First Full-Scale Freelance Project Lets see how it rolls, so far i've already completed the UI of the app and the main headache starts now. I have to transfer their old py + flask + vanilla html css js app to a NextJs stack. Will keep y'all updated. --- ### My Astro Adventure - Canonical URL: https://debanath.com/blogs/astro-adventure - Date: 2025-07-27 - Summary: Tried building my portfolio with Astro. It was fun, frustrating, and full of trial-and-error. Learned a lot. Site's live now. ## The Initial Spark I've always wanted a space on the internet that felt like *me*. Something minimal, a bit retro, and personal, not just another cookie-cutter portfolio. So I went with [Astro](https://astro.build/), which I heard was great for static sites and content-heavy pages. Little did I know, the journey ahead wasn't going to be as "static" as I thought. 😅 --- ## Setting Up Astro I started off with Astro's CLI and quickly scaffolded a project. The goal was simple: - A homepage with a quirky, personal touch - A blog page that reads from Markdown files - A two-column layout with a cozy, nostalgic feel Seemed doable… until it wasn't. --- ## NowPlaying Nightmare I wanted a section to show what I'm currently listening to - something simple and dynamic. But no matter what I tried, the component wouldn't update live. Turns out… Astro's default config was sabotaging me. The project was set to output: "static", which meant no server-side code could run. The fix? - Change output to "server" in astro.config.mjs - Add @astrojs/vercel adapter Boom!! the dynamic route started working, and “Now Playing” finally came to life. All because of one config line and a missing adapter. --- ## The Blog Hurdle This was the trickiest part. I wanted the blog list to: 1. Automatically read from `.md` files 2. Display the date and title 3. Sort posts by latest first 4. Use the title as the URL slug 5. Format the date in `dd/mm/yy` + 12-hour time Each of these *sounds* easy. Together? A debugging marathon. --- ## Gotchas & Wins - **Sorting**: Had to use `new Date()` manually. - **Date formatting**: `toLocaleString()` is both friend and enemy. - **Slug from title**: Made a kebab-case function to slugify titles. - **Annoying TS error**: `"Spread types may only be created from object types"` - fixed it by explicitly defining keys. - **Markdown quirks**: A few file naming slip-ups caused silent failures. Also had to accept that some stuff just didn't need fixing. The blog's not a CMS, and that's okay. --- ## Final Thoughts Despite the bumps, I now have a site that feels like *me*. It's handcrafted, slightly chaotic, and proudly imperfect. --- ## Thanks, Astro Astro's learning curve surprised me, but once things clicked, it felt powerful and efficient. Perfect for a blog/portfolio hybrid. If you're building a personal site: start simple, stay patient, and embrace the chaos. 😄 --- *Thanks for reading! If you find a bug on my site, consider it an interactive feature.* ---