diff --git a/apps/company-website/src/content/images/blogs/developer-bad-day-fix-this-mess.png b/apps/company-website/src/content/images/blogs/developer-bad-day-fix-this-mess.png
new file mode 100644
index 0000000..abf41f4
Binary files /dev/null and b/apps/company-website/src/content/images/blogs/developer-bad-day-fix-this-mess.png differ
diff --git a/apps/company-website/src/pages/blog/block-russia-using-cloudfront.mdx b/apps/company-website/src/pages/blog/block-russia-using-cloudfront.mdx
index 767b4d1..10c09f1 100644
--- a/apps/company-website/src/pages/blog/block-russia-using-cloudfront.mdx
+++ b/apps/company-website/src/pages/blog/block-russia-using-cloudfront.mdx
@@ -12,7 +12,7 @@ export const meta = {
title:
"Block traffic to your website from Russia and Belarus using CloudFront",
description:
- "We want to invite you all to block your website traffic from Russia and Belarus to show support for the Ukranian people. the following tutorial will help you to enable CloudFront Geographic Restrictions and block traffic.",
+ "We want to invite you all to block your website traffic from Russia and Belarus to show support for the Ukrainian people. the following tutorial will help you to enable CloudFront Geographic Restrictions and block traffic.",
category: "AWS",
image: blogHeader,
date: 1645837875000,
@@ -20,7 +20,7 @@ export const meta = {
author: "davidabram",
editor: "velimirujevic",
abstract:
- "Russia invaded Ukraine on the 24th of February 2022. Belarus offers logistic support to the Russian army. This website won't be available in Russia and Belarus until the invasion stops. We don't intend to punish our readers from Russia and Belarus but to show dissatisfaction and disapproval of the political and philosophical stance of the Russian government. Our company and I are strong supporters and believers in individual liberty, free trade, and free association. In addition to being against war, we strongly oppose evil and destructive ideas that support autocracies. Make no mistake, this is not the doing of one man, but a joint effort of individuals who believe it is not you who should be deciding how to live your life. We want to invite you all to block your website traffic from Russia and Belarus to show support for the Ukranian people. the following tutorial will help you to enable CloudFront Geographic Restrictions and block traffic.",
+ "Russia invaded Ukraine on the 24th of February 2022. Belarus offers logistic support to the Russian army. This website won't be available in Russia and Belarus until the invasion stops. We don't intend to punish our readers from Russia and Belarus but to show dissatisfaction and disapproval of the political and philosophical stance of the Russian government. Our company and I are strong supporters and believers in individual liberty, free trade, and free association. In addition to being against war, we strongly oppose evil and destructive ideas that support autocracies. Make no mistake, this is not the doing of one man, but a joint effort of individuals who believe it is not you who should be deciding how to live your life. We want to invite you all to block your website traffic from Russia and Belarus to show support for the Ukrainian people. the following tutorial will help you to enable CloudFront Geographic Restrictions and block traffic.",
pageType: "blog-posting"
};
@@ -63,7 +63,7 @@ Check `Restriction type` - `Block list` and select from the dropdown Russia and
-You have just blocked all traffic from Russia and Belarus. All visitors from those locations will get 403 (Forrbidden) status code.
+You have just blocked all traffic from Russia and Belarus. All visitors from those locations will get 403 (Forbidden) status code.
+
+
+
+
+## Tooling and Infrastructure woes
+
+Tooling; The promise of automation, efficiency, and modern development practices. Except when it isn’t.
+
+Imagine this:
+
+You’re deep in the zone, cranking out lines of glorious code, feeling like a wizard. You submit a build and boom—it fails. Why? Who knows. A flaky test? A mysterious dependency issue? The server decided it’s on strike? All of the above.
+
+One dev put it perfectly: *“Every single tool we use feels like it’s barely working most days.”*
+
+It’s like trying to cook a family meal and your oven’s broken, the fridge is warm, and you only have spoons for cutlery. You’re not cooking; you’re just trying to survive. These issues drain your productivity and sap your vitality.
+
+## Process Inefficiencies
+
+As if unreliable tools weren’t enough, let’s talk about the *joy* of processes.
+
+Meetings. Documentation black holes. Ambiguous ownership. Shifting priorities. You get the idea. These things are supposed to make development smoother, but sometimes they feel like a game of bureaucratic whodunit.
+
+And the worst part? These inefficiencies pile up until your productive hours evaporate. A half of your day disappears while you're on meetings, leaving you with just enough time to start coding before getting interrupted again.
+
+## Team Dynamics and Communication
+
+We’re not talking about epic clashes of personalities—just the small, persistent stuff that grinds you down. Unresponsive teammates. Vague feedback. Passive-aggressive comments on your pull request. Maybe a bit of finger-pointing for good measure. It’s like being stuck in a dysfunctional family where everyone’s too polite to admit they hate the holiday dinner.
+
+A dev from the study remarked: *“Smiles are contagious, and so is grumpiness.”* So when a bad day infects one person, it doesn’t take long before the whole team catches the vibe.
+
+## Bad Days Hit Harder Than You Think
+
+Okay, so your tools are garbage, processes are chaos, and team morale is crumbling. But the damage doesn’t end there. Bad days aren’t just bad for work—they bleed into every part of your life.
+
+### Senior Devs - Disillusionment and Rage
+
+For senior developers, bad days often come with a generous helping of frustration, cynicism, and the occasional urge to flip a table. After dealing with blockers for the hundredth time, the existential dread kicks in:
+
+*“Why am I even driving on this road anymore?”*
+Translation: Maybe it’s time to check LinkedIn.
+
+Repeated bad days turn into serious doubts about whether the company *cares* about fixing the problems. And when senior devs start losing hope, well, let’s just say productivity isn’t the only thing on the chopping block.
+
+### Junior Devs - Guilt and Imposter Syndrome
+
+For junior devs, it’s a different flavor of misery. Instead of rage, they get guilt and self-doubt. When tools fail or processes block progress, they wonder if *they’re* the problem. One junior dev admitted, *“Am I just not competent enough to fix this?”*
+
+The result? Sleepless nights, overwork, and the gnawing feeling that they’re not cut out for this. Meanwhile, the *actual* problem (broken systems and poor processes) keeps chugging along, unbothered.
+
+### The Personal Spillover: Stress, Anxiety, and Overtime
+
+Bad days don’t clock out when you do. They follow you home, mess with your sleep, strain your relationships, and sometimes make you a zombie parent or partner. Developers reported working late into the night just to “catch up,” sacrificing family time and self-care.
+
+A dev summed it up: *“I feel like I’m not pulling my weight, so I work evenings to justify my existence as an employee.”*
+
+That’s not just unhealthy—it’s unsustainable.
+
+---
+
+## But Wait—We Have Data!
+
+It’s easy to dismiss these complaints as grumbling, but Microsoft’s study backed it up with hard data.
+
+The study showed that:
+
+**Pull requests stalled** significantly longer for developers who cited PR delays as a source of bad days.
+**Build times ballooned** for those who reported slow builds dragging them down.
+
+The numbers don’t lie: bad tools and processes aren’t just annoying; they’re productivity killers.
+
+## So, Can We Fix This Mess?
+
+Short answer: Yes.
+Long answer: *Hell Yes, but it requires real effort.*
+
+Here’s what developers are begging for:
+
+**Better Tools**: Stop making devs fight their IDEs, CI pipelines, and flaky tests.
+**Fewer but Better Meetings**: Respect their time. Let them code.
+**Mentorship and Support**: Help junior devs see that it’s *not* their fault.
+**Faster Feedback Loops**: Optimize PR reviews and build processes so devs don’t feel like they’re coding in quicksand.
+
+## Conclusion - Listen, Then Act
+
+Bad days for developers are a signal. They’re telling you that something’s broken—not just in the codebase, but in the environment.
+
+The good news? These problems are fixable. Listen to your developers, believe their frustrations, and *do something* about it.
+
+Because happy developers build great software. And great software makes *everyone’s* day better.
+
+export default (props) => {props.children};
diff --git a/apps/company-website/src/pages/blog/react-conditional-rendering.mdx b/apps/company-website/src/pages/blog/react-conditional-rendering.mdx
index 398d4cc..5caa4db 100644
--- a/apps/company-website/src/pages/blog/react-conditional-rendering.mdx
+++ b/apps/company-website/src/pages/blog/react-conditional-rendering.mdx
@@ -133,7 +133,7 @@ There are a few ways to fix this problem. The first (and the best) way is to use
## Convert falsy values to Boolean
-Alternatively, we can cast all our falsly values to Boolean or use the **`!!`** operator.
+Alternatively, we can cast all our falsy values to Boolean or use the **`!!`** operator.
The **`!!`** operator is used to convert a value to a Boolean. It is essentially a shorthand way of converting a truthy or falsy value to true or false.
```tsx
diff --git a/apps/company-website/src/pages/blog/react-input-component-clear-value-after-input.mdx b/apps/company-website/src/pages/blog/react-input-component-clear-value-after-input.mdx
index f3ec8c5..591c327 100644
--- a/apps/company-website/src/pages/blog/react-input-component-clear-value-after-input.mdx
+++ b/apps/company-website/src/pages/blog/react-input-component-clear-value-after-input.mdx
@@ -54,7 +54,7 @@ The most obvious solution to this problem is to transform the Input component in
/*
Input component that is exported from component library
- Controlled component's input element should recieve
+ Controlled component's input element should receive
value and onChange props for Input component to function properly
The inputValue should be stored in the parent's component state
@@ -141,7 +141,7 @@ But what if you want to keep your Input component uncontrolled? Another solution
/*
Input component that is exported from component library
- Uncontrolled component's input element should recieve
+ Uncontrolled component's input element should receive
ref prop for Input component to function properly
*/
const InputComponent = ({ label, inputRef }) => {
@@ -209,7 +209,7 @@ Fortunately, there is a hook called [useImperativeHandle](https://reactjs.org/do
By using useImperativeHandle we can create a ‘custom component API’ which can be used in the parent component by accessing `ref.current` thanks to `forwardRef`.
-Using the combination of both, we control what's exposed as the reference for our Input component. In our case we decided to expose a function `setInputValue` to set the value of the HTML `input` component, a function `clearInputValue` to clear it and a function`getInputValue` to retreive it.
+Using the combination of both, we control what's exposed as the reference for our Input component. In our case we decided to expose a function `setInputValue` to set the value of the HTML `input` component, a function `clearInputValue` to clear it and a function`getInputValue` to retrieve it.
Check out the code below:
@@ -217,7 +217,7 @@ Check out the code below:
/*
Input component that is exported from component library
- ref is passed by forwardRef to the componentx
+ ref is passed by forwardRef to the component
*/
const InputComponent = forwardRef(({ label }, ref) => {
const inputRef = useRef(null);
@@ -298,7 +298,7 @@ When implementing forms in React, using controlled components is always the pref
The uncontrolled component approach without `forwardRef` / `useImperativeHandle` can lead to your DOM getting changed by accident and/or outside purview of React.
-Although we have reinvented the Input component as an uncontrolled component using forwardRef and useImperativeHandle, I wouldn't suggest taking this approach unless you are implementing that component as part of a component library. Missuse of refs could lead you to pass refs through multiple components and a confusing data flow.
+Although we have reinvented the Input component as an uncontrolled component using forwardRef and useImperativeHandle, I wouldn't suggest taking this approach unless you are implementing that component as part of a component library. Misuse of refs could lead you to pass refs through multiple components and a confusing data flow.
We are actively working on expanding our internal component library, always striving to create neat and tidy component APIs. That is why long term thinking and reusability are key factors in our decision making when it comes to logic building of our components. We hope you found our solution helpful, and of course, feel free to comment or contact us about any ambiguities you might encounter while going through this post.
diff --git a/apps/company-website/src/pages/blog/the-dom-exercises.mdx b/apps/company-website/src/pages/blog/the-dom-exercises.mdx
index 2a0c0b7..f00abb2 100644
--- a/apps/company-website/src/pages/blog/the-dom-exercises.mdx
+++ b/apps/company-website/src/pages/blog/the-dom-exercises.mdx
@@ -13,7 +13,7 @@ export const meta = {
id: "the-dom-exercises",
title: "JavaScript DOM - Code Exercises",
description:
- "The DOM or the Document Object Model of the page is created after the web page is loaded. Learn some DOM manuipulation with these exercises.",
+ "The DOM or the Document Object Model of the page is created after the web page is loaded. Learn some DOM manipulation with these exercises.",
category: "Learn JavaScript",
image: blogHeader,
date: 1619463600000,
@@ -282,7 +282,7 @@ You are building a web page that displays a list of items. The user should be ab
const app = document.getElementById("list-app");
// Create the necessary elements
-const list = document.createElemeent("ul");
+const list = document.createElement("ul");
const input = document.createElement("input");
input.setAttribute("type", "text");
const addButton = document.createElement("button");