Oh boy, what kind of shit have you stepped into now? šŸ˜©

It all started on a lazy Sunday afternoon. You know those days when youā€™re just scrolling mindlessly through Twitter, and your browser starts acting up? Yeah, one of those. My ARC browser was being particularly dramatic that day, probably throwing a tantrum because I had about 47 tabs open (donā€™t judge, we all do it - thatā€™s why we switched to ARC in the first place, right?).

So there I was, desperately trying to figure out why my RAM was disappearing faster than free pizza at a developer meetup. I opened Activity Monitor, but come on - its interface looks like it was designed in the era when people still debated tabs vs spaces. Thatā€™s when nostalgia hit me, and I found myself missing the clean, terminal-based beauty of htop from my Linux days.

ā€œLet me home brew a htop (I donā€™t have it installed on my mac, like seriously? during my career I used monitoring tools like top, htop, 3 or 4 times and Iā€™m not even kidding, like what the fuck Iā€™d need them for? šŸ¤·ā€ā™‚ļø), then I thought wait is there a decent gui alternative for macOS,ā€ I thought. Big mistake. Or maybe the best mistake ever?

After browsing through some alternatives that looked like they were designed when dial-up internet was still cool šŸ’¾, I had what alcoholics call a ā€œmoment of clarityā€: ā€œHey, Iā€™ve been meaning to learn Rust, and everyoneā€™s talking about this Tauri shitā€¦ and I donā€™t want to build the next 1 billion dollar todo list app šŸ¤”ā€

ā€œHow hard could it be to build a system monitor? Itā€™s just numbers going up and down, right?ā€

Oh, sweet summer child.

First stop: The Rust book. You know, the one everyone says you should read cover to cover before even thinking about writing ā€œHello, World!ā€ I made it halfway through, just enough to understand ownership and borrowing (which is like learning about relationships in therapy - itā€™s all about who owns what and whoā€™s just borrowing feelings), and that Traits are basically Rustā€™s way of doing interfaces like in Go. Then I had my second moment of clarity: ā€œWait a minute, Rust is a systems languageā€¦ thereā€™s gotta be a crate for system stuff, right?ā€

Turns out, there were like fifty of them. But hey, decision paralysis is just part of the modern developer experience, right?

Now for the frontend. Tauri is framework-agnostic, which means I couldā€™ve used React or Angular. But letā€™s be real - shipping your app with React is like bringing an entire orchestra when all you needed was a kazoo. Plus, Iā€™ve got principles, dammit! Thatā€™s when I remembered Svelte, that beautiful compiler-first framework that React developers are now trying to copy with their ā€œcompiler magicā€ (Howā€™s that for innovation, Zuck?).

The first iteration wasā€¦ functional. Basic Tauri invokes were working (just sprinkle invoke() everywhere like itā€™s fairy dust āœØ), but it looked about as exciting as a terminal running ping. And if weā€™re making a GUI (and not shipping an entire Chromium instance like some other electron-ic frameworks I could mention - yeah, weā€™re using native webview because weā€™re not monsters), it better look good. Thatā€™s when the icon adventure beganā€¦

I spent THREE DAYS just trying to figure out how to get proper icons for processes. THREE. DAYS. The solution? A weird combination of SimpleIcons and some regex magic that Iā€™m pretty sure summoned a minor demon in the process.

But then something magical happened. The UI started coming together, and it actually lookedā€¦ good? The dark mode wasnā€™t burning my retinas (looking at you, htop), and the performance metrics were dancing across the screen like they were at a disco.

You see, Iā€™d been spending way too much time on Reddit looking at those fancy neofetch screenshots that cool kids keep sharing (you know the ones - where their terminal looks cooler than most peopleā€™s entire desktop setup). Thatā€™s actually what inspired the name ā€œNeoHtopā€ - a little nod to neofetch and its aesthetic-obsessed community. But why stop at just pretty colors?

Thatā€™s when it hit me - if developers can spend hours customizing their code editors šŸŽØ, why not let them do the same with their system monitor? Making the app themable wasnā€™t just about looking pretty; it was about giving users that same dopamine hit they get from perfectly customizing their VS Code setup. (And letā€™s be honest, we all know at least one developer who spends more time theming their editor than actually coding.)

I threw in some fancy animations, because why not? If weā€™re monitoring system resources, might as well do it with style. The irony of potentially using more resources to monitor resources was not lost on me.

And I kept going! Because apparently, I canā€™t leave well enough alone. I added search functionality (because scrolling is so 2023), filtering by status (for those who really need to know which processes are ā€œsleepingā€ - you know, like we all wish we were), and even pagination (why would an activity monitor need pagination, you ask? Wellā€¦ I asked myself the same question, but couldnā€™t come up with a good reason why NOT to add it šŸ¤·ā€ā™‚ļø).

I even wrote a few posts about it on Reddit and dev.to, with a little help from ChatGPT (because who has time to write coherent sentences when youā€™re busy adding unnecessary features? šŸ¤Ŗ). That backfired a bit when some keyboard warrior on dev.to decided to call me out for using ChatGPT - which I hadnā€™t even denied! But karma works in mysterious ways: the post got so popular that dev.to blessed me with some admin superpowers. Letā€™s just say certain negative comments found themselves taking a journey to the bottom of the thread. Hey, with great power comes greatā€¦ ability to reorganize comments? šŸ˜ˆ

Then came the real ā€œoh shitā€ moment. Thanks to Marouane (my friend and coworker who Iā€™ll never forgive for this), I decided to post it on GitHub, thinking ā€œmaybe a few people will find it useful.ā€ You know, the usual: mom, my puppy, and that one friend who stars everything I post.

But apparently, I wasnā€™t the only one who thought Activity Monitor needed a glow-up āœØ. Within 24 hours, the stars started rolling in. By day six, we hit 1,000 stars šŸŒŸ. My notifications were going crazy, and my impostor syndrome was having the time of its lifeā€¦and started asking myself what is this madness? what am I doing with my life? Am I going to spend the rest of my life replying to peoples issues on GitHub? I mean, I love open source and all, but I had a life too! and a little kid to take care of! and a wife! and a house! and a mortgage! and a cat! and a dog! and a life! what the kind of shit I stepped into now?.. anyways itā€™s just a little tool right? not like Iā€™m building the next big thing hereā€¦a bit of a stretch, but ok.

The best part? People actually started using it! Real people! And they were sending PRs and opening issues for suggestions.. stupid ones but also lot of good ones too!

And here we are now, with a full-featured system monitor that started because Arc was being a memory hog for the first time in months. The moral of the story? Sometimes the best projects come from the most mundane problems. it not really about the project, itā€™s about the process.. the experience.. the journey.. the lessons.. the people.. the laughs.. the memories.. what the fuck am I doing with my life? what memories? what laughs? what lessons? what journey? what process? what project?ā€¦ just kidding, itā€™s about the learning by doing.

P.S. If youā€™re wondering about the version history (spoiler: there were a lot of ā€œfix typoā€ commits hidden in the commit history under other commits messages like ā€œupdating dependenciesā€, ā€œupdating iconsā€, ā€œupdating download linksā€, etc.):

Yeah, weā€™re at 1.0.5 now. Each version bump represents at least one ā€œit works on my machineā€ moment and several sips of coffee.

Remember kids: Sometimes the best way to learn new tech is to build something you need, even if you end up way over your head. Just make sure to add some nice animations ā€“ they hide the pain of debugging memory leaks. And if youā€™re going to name your project after something, might as well pick something that the cool kids are already hyping up on Reddit! šŸ˜…

P.S.S. If youā€™re wondering how Iā€™m writing this post, remeber Iā€™m not using ChatGPT for this one.. with great power comes great responsibility.

Give NeoHtop a try, itā€™s free and open source: NeoHtop on GitHub