Blog
Exploring the intersection of design, AI, and engineering
Automate Local Server Restart with Nodemon
Streamline your Node.js development workflow with Nodemon. This guide shows you how to use this handy utility to automatically restart your local server whenever you make changes to your code.

Bundle Splitting in Webpack: Optimizing for Performance
Optimize your web application's performance with Webpack's bundle splitting feature. This article explains how to separate your vendor code from your application code to improve caching and reduce load times.

Creating your first Dockerfile
Learn how to create your first Dockerfile with this step-by-step guide. This article covers the essential commands and instructions for building a custom Docker image for a Node.js application.

Docker Commands Cheat Sheet
A handy cheat sheet of essential Docker commands for managing containers, from basic operations like running and stopping containers to more advanced tasks like cleaning up your system.

Docker Compose explained for beginners
Simplify your multi-container Docker applications with Docker Compose. This guide for beginners explains how to use a YAML file to configure and run your application's services with a single command.

Docker explained for beginners
A beginner-friendly introduction to Docker, explaining the core concepts of containers, images, and the Docker ecosystem. Learn how Docker simplifies software installation and deployment, and why it's a critical tool for modern developers.

Docker Port Mapping Explained
Learn the essentials of Docker port mapping, a crucial technique for accessing applications running inside containers. This guide covers how it works, why it's necessary, and best practices for secure and efficient port forwarding.

Docker Restart Policies Explained
A breakdown of Docker's restart policies, including 'no', 'always', 'on-failure', and 'unless-stopped'. Learn when to use each policy to maintain container uptime and ensure your services recover from failures automatically.

Docker Volumes explained
An explanation of Docker volumes and how they can enhance your development workflow. Learn how to use volumes to reflect code changes in real-time, without the need to rebuild your Docker image.

ES6 array helper functions every developer should know
A quick look at the most useful ES6 array helper functions, including .map(), .find(), .every(), .some(), .filter(), and .reduce(). Learn how these functions can make your code cleaner and more readable.

ES6 .reduce helper explained
A deep dive into the JavaScript .reduce() array helper. This article explains the role of the accumulator and provides practical examples of how to use .reduce() to flatten arrays, count occurrences, and more.

Geospatial Data in MongoDB: Storage, Indexing, and Queries
A comprehensive guide to working with geospatial data in MongoDB. Learn how to store data in the GeoJSON format, create geospatial indexes, and use query operators like $near, $geoWithin, and $geoIntersects.

Getter functions in Javascript
An explanation of getter functions in JavaScript and how they can make your code more intuitive and maintainable. Learn the difference between a traditional function and a getter, and when to use each.

Handling Router Errors in Front-End Testing of React Applications
A guide to handling common router errors in React Testing Library. Learn how to wrap your components in a router to provide the necessary context for testing components that use <Link> or other router-specific components.

How Node.js Works Under the Hood: A Deep Dive
A deep dive into the inner workings of Node.js. This article explores the Node.js architecture, the V8 engine, libuv, and how they all work together to provide a powerful and efficient runtime environment.

How to check hover and popover styles in Chrome DevTools
A quick tip for web developers on how to inspect hover and popover styles in Chrome DevTools. Learn how to use the F8 shortcut to freeze the UI and debug transient elements with ease.

How to create references between different mongoDB documents.
Learn how to create relationships between different collections in MongoDB using ObjectID references. This guide also covers the use of subdocuments and when to choose each approach.

How to optimize your MongoDB using indexes
An essential guide to optimizing your MongoDB performance with indexes. Learn about the different types of indexes, the trade-offs involved, and how to use the `explain()` method to diagnose and plan your queries.

How to run additional commands inside a docker container
Learn how to use the `docker exec` command to run additional commands inside a running Docker container. This guide covers how to start an interactive shell, as well as practical use cases for debugging, configuration, and more.

How to Run Individual Tests in Jest from the Terminal
Learn how to run individual tests or test suites in Jest directly from the terminal. This guide explains how to use watch mode and the 'p' command to filter tests by filename or description, making your testing process more efficient.

How to set up a local Kubernetes Environment
A step-by-step guide to setting up a local Kubernetes environment using Kubectl, a VM driver, and Minikube. This setup allows you to test, develop, and debug your applications in an environment that closely mirrors a production Kubernetes cluster.

How to update documents in MongoDB
A guide to updating documents in MongoDB. This article covers the `updateOne()` and `updateMany()` methods, as well as various update operators for manipulating fields and arrays.

How to Use Webhooks on Localhost with LocalTunnel
Learn how to test webhooks on your local machine using LocalTunnel. This guide explains how to expose your local development environment to the internet, allowing you to receive and debug webhook integrations without deploying your code.

Interfaces vs. Inheritance: Structuring Your Code in OOP
A guide to structuring your code in Object-Oriented Programming. This article explains the difference between interfaces and inheritance (via abstract classes) and when to use each to create flexible and maintainable software.

Javascript doesn’t really have classes!
An exploration of JavaScript's unique approach to object-oriented programming. This article explains the difference between prototypal and class-based inheritance and why JavaScript's 'class' syntax is syntactic sugar over its prototypal nature.

Javascript property descriptors explained
An explanation of JavaScript property descriptors and how they give you granular control over the behavior of object properties. Learn how to use `writable`, `enumerable`, and `configurable` to create more robust and secure code.

Kubectl command cheat sheet
A quick reference guide to the most essential kubectl commands for managing your Kubernetes cluster. This cheat sheet covers everything from checking pod status to applying configuration changes and deleting resources.
Kubernetes core concepts for beginners
A beginner-friendly introduction to the core concepts of Kubernetes. Learn about nodes, masters, and the self-healing mechanism that makes Kubernetes a powerful tool for container orchestration.

Making Axios Calls Directly from the Browser Console
A quick guide on how to make Axios calls directly from the browser console. This technique is a great way to test API endpoints, especially when dealing with authentication, without the need for tools like Postman.

Making Testing Easier with logTestingPlaygroundURL from React Testing Library
Learn how to use the logTestingPlaygroundURL function from React Testing Library to simplify your testing workflow. This guide explains how this handy tool can help you select the right queries, debug your components, and collaborate with your team.

Managing Environment Variables in Docker Compose
A guide to managing environment variables in Docker Compose. Learn how to define variables inline, use .env files, and apply best practices for security and flexibility in your multi-container applications.

Master Debugging in React Testing Library with the debugger function
Learn how to master debugging in React Testing Library with the `debugger` function. This guide explains how to pause test execution and inspect the state of your components in real-time.

MongoDB methods, filters and operators explained
A comprehensive guide to MongoDB's methods, filters, and operators. Learn how to use these essential tools to perform a wide range of operations on your data, from basic CRUD to complex queries.

MongoDB query projections explained
Learn how to use MongoDB query projections to optimize your queries and improve performance. This guide covers basic and advanced projections, as well as different ways of defining them in Node.js.

MongoDB Schema Design: A Developer’s Guide to Modeling, Validation, and Relationships
A developer's guide to MongoDB schema design. Learn how to model your schemas based on application needs, implement schema validation, and understand the different ways to represent data relationships.

MongoDB schema validation levels and actions explained
An explanation of MongoDB's schema validation levels and actions. Learn the difference between strict and moderate validation and how to use them to enforce data integrity in your collections.

MongoDB Security: Users, Roles, and Encryption
A guide to securing your MongoDB instance. This article covers the essentials of user roles, role-based access control, and data encryption, both in-transit and at-rest.

Namespacing in Linux: The Foundation of Docker Containerization
An exploration of namespacing in Linux and its crucial role in containerization technologies like Docker. Learn how namespacing allows you to isolate software versions and create independent environments for your applications.

React Testing Library: The Power of within and getByRole
A guide to using the `within` and `getByRole` functions in React Testing Library. Learn how these powerful tools can help you write more maintainable and robust tests by encouraging good testing practices.

React Testing Library: Understanding act() and when to use it.
A deep dive into the `act()` function in React Testing Library. This article demystifies `act()` and explains why it's crucial for testing asynchronous operations in your React components.

Tagging Docker Images Explained
A guide to tagging Docker images. Learn why tagging is important, how to tag images during and after the build process, and best practices for a conventional naming schema.

The any Type in TypeScript: A Double-Edged Sword
The `any` type in TypeScript offers flexibility, but at a cost. This article explores the downsides of using `any`, such as loss of type safety and reduced code readability, and offers alternatives like union types and generics.

The Continuous Integration Flow: A Step-by-Step Guide
A step-by-step guide to the Continuous Integration (CI) flow. Learn how CI servers automate the process of testing and building your code, from the moment you push to GitHub to the final deployment.

The JavascripEvent Loop
A deep dive into the JavaScript event loop and how it enables Node.js to handle concurrent operations without multi-threading. This article also explores the role of libuv and the thread pool in achieving non-blocking I/O.

TIL — Understanding cookie based authentication
An explanation of cookie-based authentication and how it addresses the stateless nature of HTTP. Learn how tokens are used to maintain a secure communication channel between the client and the server.

Typescript decorators explained
A guide to TypeScript decorators, a powerful feature for annotating and modifying classes, properties, methods, and accessors. Learn how decorators work, when they are executed, and how they can enhance your code.

Understanding Abstract Classes in TypeScript
An introduction to abstract classes in TypeScript. Learn how to use abstract classes to create a base for other classes, enforce method implementation, and build more structured and maintainable code.

Understanding Body Parser Middleware in Express
A guide to the body-parser middleware in Express.js. Learn how this essential tool processes incoming request bodies, making it easier to handle POST and PUT requests in your Node.js applications.

Understanding Bound Functions in JavaScript
A deep dive into bound functions in JavaScript and how they help manage the `this` keyword. This article covers the `.bind()` method, arrow functions, and best practices for preserving context in your code.

Understanding Class Modifiers in TypeScript: Public, Private, and Protected
A guide to TypeScript's class access modifiers: `public`, `private`, and `protected`. Learn how to use these modifiers to control the visibility and accessibility of class members and write more encapsulated code.

Understanding Docker Stop vs Docker Kill
An explanation of the difference between `docker stop` and `docker kill`. Learn when to use each command to manage your Docker containers effectively and ensure a graceful shutdown whenever possible.

Understanding Enums in TypeScript
An introduction to enums in TypeScript. Learn how to use enums to group related values, improve code readability, and prevent common errors in your code.

Understanding Generics in TypeScript
A guide to generics in TypeScript. Learn how to use generics to create reusable and flexible components while maintaining type safety.

Understanding Mongoose Model Classes in Node.js
An introduction to Mongoose model classes in Node.js. Learn how to create a Mongoose model, how it interacts with your MongoDB collection, and how to use it to perform CRUD operations.

Understanding Primitive Types vs. Object Types in TypeScript
A guide to the differences between primitive and object types in TypeScript. Learn about the key features of each type and when to use them to write more robust and maintainable code.

Understanding Processes, Threads, and Scheduling in Node.js
A deep dive into the core concepts of processes, threads, and scheduling in Node.js. Learn how these building blocks work together to create a powerful and efficient runtime environment.

Understanding the Three Types of Routers in React
A concise overview of the three main types of routers in React Router: BrowserRouter, HashRouter, and MemoryRouter. Learn the purpose of each router and when to use them in your single-page applications.

Understanding 'this' in JavaScript: The Role of Context
A deep dive into the 'this' keyword in JavaScript and the role of context in determining its value. This article explores the differences between arrow functions and traditional function expressions and how they handle 'this'.

Understanding Volumes in Kubernetes
An introduction to volumes in Kubernetes. Learn about the different types of volumes, their lifecycles, and how they are used to manage persistent data for containerized applications.

Using Generic Constraints in TypeScript for Type Safety
Learn how to use generic constraints in TypeScript to enforce type safety and create more robust and reusable code. This guide provides a clear example of how to use interfaces and the `extends` keyword to constrain generic types.

Webpack explained for beginners
A beginner-friendly guide to Webpack. Learn what Webpack is, why it's needed, and how it works with Babel to bundle and transpile your JavaScript code for optimal performance and browser compatibility.

What is a Kubernetes cluster?
An introduction to Kubernetes clusters. Learn about the master and node components, and how they work together to orchestrate and manage your containerized applications.

What is “Atomicity” in MongoDB
An explanation of atomicity in MongoDB. Learn how MongoDB ensures that CRUD operations are all-or-nothing at the document level, providing a guarantee for data integrity.

What is Kubernetes and why do we use it?
An introduction to Kubernetes and why it has become an essential tool for modern software development. Learn how Kubernetes automates the deployment, scaling, and operation of application containers.

Why you should be using Typescript
An exploration of the benefits of using TypeScript in your projects. Learn how TypeScript's static type checking can help you catch errors early, improve code maintainability, and make your development process more efficient.

TIL - Understanding the Different Types of For Loops in JavaScript and Their Ideal Use Cases
A comprehensive guide to the different types of 'for' loops in JavaScript, including traditional 'for' loops, 'for...in', 'for...of', and the 'forEach' method. Learn when to use each loop to write more efficient and readable code.

The dos and don’ts of building in public
A short introduction to the dos and donts of building in public, what they are and why you should use them.

TIL — How to add Twitter Pixel in a React app to track ad conversion
A step-by-step guide on how to implement the new Twitter Pixel in a React application to track ad conversions. This tutorial covers both the base code and event code implementation.

TIL — How to track ad conversion with UTM
Learn how to track ad conversions effectively using UTM parameters. This guide covers the five main UTM parameters and provides a step-by-step process for creating and using them to optimize your marketing campaigns.

TIL — MongoDB Sorting and Aggregation Explained
A guide to sorting and aggregation in MongoDB. Learn how to use aggregation pipelines and the sort() method to manipulate and analyze your data effectively.

TIL — Virtual Fields in Mongoose
Learn how to use virtual fields in Mongoose to compute properties on the fly without persisting them to the database. This guide covers how to add virtual fields to your schema and when to use them.

TIL — Typescript type guards and predicates
Learn how to use TypeScript type guards and predicates to make your code more type-safe and reduce runtime errors. This guide provides a clear example of how to create and use a type guard function.

TIL — Demystifying MongoDB Sorting Pipelines
An essential guide to MongoDB's sorting pipelines. Learn how to use the $sort stage of the aggregation framework to arrange your documents in ascending or descending order based on one or more fields.

TIL -“act” and “waitFor” react-testing-library
Learn how to use the `act` and `waitFor` utilities from the React Testing Library to handle asynchronous behavior in your tests. This guide provides clear examples of how to use these functions to write more reliable and predictable tests.

TIL — Javascript .reduce and .filter explained
A clear and concise explanation of the JavaScript .reduce() and .filter() array methods. Learn the difference between these two powerful tools and when to use each one to write more efficient code.

How to use React Query Debugger
Learn how to use the React Query Debugger to inspect the state of your queries, mutations, and cache. This guide provides a simple, step-by-step process for integrating this powerful debugging tool into your React application.

TIL — MongoDB Queries and Projections explained
A comprehensive guide to MongoDB queries and projections. Learn how to use various operators to filter your data and how to use projections to return only the fields you need.

The 4 steps of Jiu-Jitsu according to one of its greatest coaches
Learn the four fundamental steps of Brazilian Jiu-Jitsu as explained by renowned coach John Danaher. This article breaks down his systematic approach to minimizing risk and maximizing control in a fight.

Your degree won’t save you! How to create a career in the gig economy.
In the modern gig economy, a degree is no longer a guarantee of success. This article introduces the concept of the permissionless apprentice and provides a framework for building a successful career through creating value, effective communication, and compounding your skills.

The Beauty of Building Strength
Exercise is more than just a means to an end. This article explores the beauty of building strength, both physical and mental, and how it can lead to a more fulfilling and resilient life.

Remember everything you learn by building a second brain
Unlock your brain's full potential by building a second brain. This article introduces Tiago Forte's PARA method and the CODE framework for personal knowledge management, helping you capture, organize, and express your ideas more effectively.

How to break free from the real matrix
Social media has created a digital matrix that profits from our attention. This article explores how to break free using the principles of digital minimalism, allowing you to reclaim your focus and live a more intentional life.

TIL - How to truncate a string and make it appear on hover in React/HTML/CSS
Discover how to truncate long strings of text and reveal the full content on hover using both React and simple HTML/CSS. This guide provides two effective methods for creating clean and user-friendly text displays.

TIL - How to make a toggle button in react with styled-components
Learn how to create a stylish and functional toggle button in React using styled-components. This tutorial walks you through the process of building a custom toggle component with conditional styling.

From Fitness to Focus: Progressive Overload is Key
Progressive overload isn't just for the gym. Learn how to apply this powerful principle to boost your focus, improve your reading habits, and sharpen your writing skills.

My trip to Morocco
From the electric atmosphere of the World Cup to the bustling souks of Marrakech, this is a recap of my unforgettable trip to Morocco. Discover the highlights, from the food and football to the culture and history.

New Year, New Goals: How to Achieve Your Resolutions!
Tired of failed New Year's resolutions? This article breaks down why most resolutions fail and how you can use the 1% rule and process-based goals to make lasting positive changes in your life.

Pixel 7 Pro | Two Months Review
A two-month review of the Google Pixel 7 Pro, covering its design, display, performance, and camera. Find out if this flagship phone is worth the hype and how it stacks up against the competition.

Unleash your creativity with the power of creative constraints
Think you're not creative? Think again. This article explores how creative constraints can actually boost your creativity by forcing you to think outside the box and find innovative solutions.

Simplify self-development with the 30x30 challenge
The 30x30 challenge is a simple yet powerful framework for learning new skills and building habits. Discover how to leverage the Pareto Principle and logarithmic growth curves to make significant progress in just 30 days.

Don't follow your passion!
'Follow your passion' is popular career advice, but it might be leading you astray. This article explores the pitfalls of the passion hypothesis and offers an alternative approach to finding a fulfilling career.

What is identity capital? The secret to getting your dream career!
Identity capital is the currency you use to buy the career and life you want. Learn how to build this valuable asset through habits, reading, and hands-on experience, and start investing in your future today.

How to unlock your full potential with the growth mindset
Shift your perspective from a fixed to a growth mindset and unlock your true potential. This article, inspired by Dr. Carol Dweck's research, explores how embracing challenges and learning from failure can lead to greater achievement and satisfaction.

The Best Way to Learn Anything
Discover the Feynman Technique, a powerful method for learning by teaching. This article explains how to master any subject by explaining it in simple terms, identifying knowledge gaps, and refining your understanding.

Clean code tips for beginners
Discover essential clean code principles for beginners and experts alike. This guide, inspired by Robert C. Martin's 'Clean Code,' covers everything from naming conventions to error handling, helping you write more readable, maintainable, and professional code.

How to design an app (for beginners)
A step-by-step guide for beginners on how to design a mobile app, from user journeys and wireframes to color palettes and mock-ups. Learn the tools and techniques to bring your app idea to life.

Write like a Roman! Learn the ancient art of persuasion
Unlock the power of persuasion with the ancient art of rhetoric. This article explores the techniques of logos, ethos, and pathos, and breaks down rhetorical devices that will make your writing more dramatic, memorable, and convincing.
