I use GoatCounter for my personal site analytics. If you haven't heard of it — it's a privacy-first, open-source analytics tool that doesn't track personal data. No cookies, no consent banners, lightweight script. I love it. But the built-in dashboard is... minimal. It shows you the data, and that's about it. No interactive charts. No world map. No visual drill-down into browser versions or region
Hello readers 👋, welcome to the 23rd blog in this JavaScript series! In the last post, we discovered how async/await makes asynchronous code feel as natural as synchronous code. Today, we are going to talk about a pair of operators that look identical but do completely opposite jobs: the spread and rest operators. Both use three dots (...), but one expands values out while the other collects valu
Hello readers 👋, welcome to the 22nd blog in this JavaScript series! In our last post, we learned how try...catch helps us build resilient applications that handle failures gracefully. Today we are going to explore something that makes asynchronous code feel almost as straightforward as synchronous code: async/await. If you have ever wished that promise chains could read like a simple sequence of
Hello readers 👋, welcome to the 21st blog in this JavaScript series! In the last post, we unlocked the elegance of destructuring and how it simplifies working with arrays and objects. Today, we are going to talk about a topic that separates a fragile program from a robust one: error handling. No matter how carefully we write code, things go wrong. A network fails, a file is missing, an API return
Hello readers 👋, welcome to the 20th blog in this JavaScript series! In the last post, we explored Map and Set, two modern data structures that make our code cleaner and more expressive. Today, we are going to talk about a feature that smooths out one of the most common repetitive tasks in JavaScript: pulling values out of arrays and objects. That feature is called destructuring. If you have ever
Hello readers 👋, welcome to the 19th blog in this JavaScript series! In the last post, we explored the this keyword and how it flexibly points to different callers depending on the context. Today, we are going to talk about two powerful data structures introduced in ES6 that often don't get enough love: Map and Set. If you have been using plain objects for key-value storage or arrays for everythi
CSV is everywhere — spreadsheets, data exports, API responses that somehow still use it. JSON is what your code actually wants. Here's how to convert between them in pure JavaScript, without installing anything. CSV (comma-separated values) is simple and universal. JSON is structured and directly usable in JavaScript. The conversion problem shows up constantly: You export user data from a CRM as C
Generative AI is no longer just an emerging technology. It is becoming a core business capability across software development, customer support, analytics, content generation, automation, knowledge management, and enterprise productivity. For cloud professionals, developers, data teams, and solution architects, learning Generative AI on AWS is now a high-value career move. AWS provides a growing e