<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Aisha Muhyiddeen Ahmad</title>
    <description>The latest articles on DEV Community by Aisha Muhyiddeen Ahmad (@humairamuhyiddeen).</description>
    <link>https://dev.to/humairamuhyiddeen</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1488353%2Feb9133b0-06fb-495a-838d-7d8c8c0424cb.png</url>
      <title>DEV Community: Aisha Muhyiddeen Ahmad</title>
      <link>https://dev.to/humairamuhyiddeen</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/humairamuhyiddeen"/>
    <language>en</language>
    <item>
      <title>Building the Learning Tracker the Part That Finally Made Everything “Real”.</title>
      <dc:creator>Aisha Muhyiddeen Ahmad</dc:creator>
      <pubDate>Wed, 19 Nov 2025 11:39:18 +0000</pubDate>
      <link>https://dev.to/humairamuhyiddeen/building-the-learning-tracker-the-part-that-finally-made-everything-real-5e9b</link>
      <guid>https://dev.to/humairamuhyiddeen/building-the-learning-tracker-the-part-that-finally-made-everything-real-5e9b</guid>
      <description>&lt;p&gt;This was the turning point.&lt;br&gt;
The moment &lt;strong&gt;Sandbox&lt;/strong&gt; stopped being &lt;strong&gt;“a dashboard idea”&lt;/strong&gt; and started feeling like an actual learning companion, something I could actually rely on.&lt;br&gt;
It happened when I started to build the Learning Tracker page.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F735u02rl9cgdqwalipsw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F735u02rl9cgdqwalipsw.png" alt=" " width="800" height="395"&gt;&lt;/a&gt;&lt;br&gt;
In my head, it sounded simple:&lt;br&gt;
A form inside a modal&lt;br&gt;
Log what I learned&lt;br&gt;
A table on the page to display the entries &lt;br&gt;
But from the first click, reality humbled me.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The First Challenge:&lt;/strong&gt; The Form and the Table Were Living in Two Different Worlds&lt;br&gt;
My layout looked like this:&lt;br&gt;
A button on the page&lt;br&gt;
A modal that opens the form&lt;br&gt;
A table that stays on the page&lt;br&gt;
And somehow these two needed to talk.&lt;br&gt;
The answer introduced me to my first real React communication pattern:&lt;br&gt;
Passing Data Through Props&lt;br&gt;
&lt;code&gt;onAddRecord()&lt;br&gt;
&amp;lt;MyForm onAddRecord={handleNewRecords} closeForm={closeLearningTrackerForm} /&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The form (child) talks to the page (parent)&lt;br&gt;
The child calls the function → the parent receives the data → the table updates.&lt;br&gt;
That was my first “Ahh… this is how real React apps communicate” moment.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmrwfh9ceoilcky1c87es.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmrwfh9ceoilcky1c87es.png" alt=" " width="800" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But Then… the Data Kept Disappearing&lt;/strong&gt;&lt;br&gt;
Everything worked until I navigated away.&lt;br&gt;
I’d add a new learning record &lt;br&gt;
The table updated…&lt;br&gt;
But when I refreshed or moved to another page?&lt;br&gt;
Gone.&lt;br&gt;
Clean slate.&lt;br&gt;
Fresh like nothing ever happened.&lt;br&gt;
That’s when it hit me:&lt;br&gt;
If the dashboard is supposed to track my growth, then the data must stay.&lt;br&gt;
So I added my first persistence layer: localStorage.&lt;br&gt;
&lt;code&gt;const [records, setRecords] = useLocalStorage("learnRecords", []);&lt;br&gt;
Then inside handleNewRecords, I saved updates straight into localStorage:&lt;br&gt;
localStorage.setItem("learnRecords", JSON.stringify(updatedRecords));&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;I saved every learning record:&lt;br&gt;
refresh? still there&lt;br&gt;
navigate? still there&lt;br&gt;
close browser? still there&lt;br&gt;
That was the moment Sandbox finally started acting like a proper “companion,” not just UI.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm1for31qnj4dx6ot7k60.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm1for31qnj4dx6ot7k60.png" alt=" " width="800" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Turning Point: Auto-Updating Stats&lt;/strong&gt;&lt;br&gt;
Once data persistence worked perfectly, a new question popped up:&lt;br&gt;
“If Sandbox is tracking my learning, why should I manually update stats?”&lt;br&gt;
&lt;em&gt;Exactly.&lt;/em&gt;&lt;br&gt;
Manual stats made no sense.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgh4lr5v5p4gq8fd0ui6i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgh4lr5v5p4gq8fd0ui6i.png" alt=" " width="800" height="379"&gt;&lt;/a&gt;&lt;br&gt;
So I switched to event-based updates:&lt;br&gt;
Every time a new learning record comes in → recalculate hours&lt;br&gt;
Every new concept added → update the count instantly&lt;br&gt;
So I made the stats update automatically whenever a new learning record is added, no extra buttons, no manual syncing.&lt;br&gt;
Now the dashboard responds instantly:&lt;br&gt;
Hours spent&lt;br&gt;
Concepts learned&lt;/p&gt;

&lt;p&gt;Later, I’ll refactor this with Context so the syncing becomes even cleaner, but for now, the dashboard updates itself the moment I log something new.&lt;br&gt;
And that feels surprisingly good&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I Learned&lt;/strong&gt; &lt;br&gt;
Data flow matters more than I thought&lt;br&gt;
Props → modal → parent page is a powerful pattern&lt;br&gt;
Persistence (localStorage) is the heart of any progress-based app&lt;br&gt;
Auto-syncing makes the dashboard feel alive&lt;br&gt;
This was the moment Sandbox stopped being an idea…&lt;br&gt;
and became something I trust.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>react</category>
      <category>software</category>
      <category>learning</category>
    </item>
    <item>
      <title>When One State Rules Them All</title>
      <dc:creator>Aisha Muhyiddeen Ahmad</dc:creator>
      <pubDate>Mon, 03 Nov 2025 10:28:20 +0000</pubDate>
      <link>https://dev.to/humairamuhyiddeen/when-one-state-rules-them-all-hbg</link>
      <guid>https://dev.to/humairamuhyiddeen/when-one-state-rules-them-all-hbg</guid>
      <description>&lt;p&gt;How I learned that structure decides behavior&lt;br&gt;
It started as a simple toggle, making the sidebar collapse.&lt;br&gt;
Turned into a full layout lesson in communication, structure, and shared state.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Challenge&lt;/strong&gt;&lt;br&gt;
The moment I added collapse behavior to my sidebar, everything else began to react like it had a mind of its own, the dashboard felt like it had lost its balance.&lt;br&gt;
At first, I thought the issue was styling. Maybe I needed better width control or transition effects.&lt;br&gt;
But the problem ran deeper. The sidebar knew when it was open or closed, but the layout didn’t.&lt;br&gt;
Each component was living in its own little world.&lt;br&gt;
That’s when I realized the problem wasn’t in the sidebar’s logic…&lt;br&gt;
 …it was where the logic lived.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4pqi8eh1zny11hlirere.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4pqi8eh1zny11hlirere.png" alt=" " width="800" height="393"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Behind the Build&lt;/strong&gt;&lt;br&gt;
At first, I placed my&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;useState
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;directly inside the Sidebar component. It made sense at the time. That’s where the toggle button lived, that’s where the action happened.&lt;br&gt;
A simple&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;useState
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;to manage open and close.&lt;br&gt;
But soon I noticed a problem:&lt;br&gt;
When the sidebar collapsed, the rest of the layout didn’t know what just happened. The header shifted, the content, and everything felt out of sync.&lt;/p&gt;

&lt;p&gt;So I lifted the state up to the Layout , the real parent of everything.&lt;br&gt;
That single change made all the difference:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const [isOpen, setIsOpen] = useState(true);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then I passed it down as props:&lt;br&gt;
To the Sidebar, to toggle it.&lt;br&gt;
To the Header, to adjust spacing and visibility.&lt;br&gt;
To the Main Content, to respond smoothly to layout shifts.&lt;br&gt;
Once I passed isOpen to the Header, everything finally aligned.&lt;/p&gt;

&lt;p&gt;The icons on the header when the sidebar isOpen stopped disappearing.&lt;br&gt;
The layout adjusted perfectly. And the dashboard started behaving as one connected system.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reflection&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Building my dashboard is like debugging my own thinking.&lt;br&gt;
It’s easy to focus on one part of the interface and forget the bigger picture it belongs to.&lt;/p&gt;

&lt;p&gt;That’s the quiet beauty of React, how a single shared state can bring scattered pieces into sync.&lt;br&gt;
And maybe, it’s not just a lesson in code but in connection too.&lt;br&gt;
When one truth is shared clearly, everything starts to align.&lt;br&gt;
Building my dashboard is like debugging my own thinking.&lt;br&gt;
It’s easy to focus on one part of the interface and forget the bigger picture it belongs to.&lt;br&gt;
Sometimes, it’s not the component that needs fixing,  it’s the structure that defines how everything connects.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk2zbt4byfvbegjynzxw2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk2zbt4byfvbegjynzxw2.png" alt=" " width="800" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A single truth made the layout consistent.&lt;br&gt;
And in a way, that’s what leadership and design share&lt;br&gt;
In React, that shared understanding is state lifting.&lt;br&gt;
When communication is clear, behavior becomes predictable.&lt;/p&gt;

</description>
      <category>buildinpublic</category>
      <category>devjournal</category>
      <category>developer</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>Giving My Dashboard a Voice</title>
      <dc:creator>Aisha Muhyiddeen Ahmad</dc:creator>
      <pubDate>Tue, 28 Oct 2025 10:35:01 +0000</pubDate>
      <link>https://dev.to/humairamuhyiddeen/giving-my-dashboard-a-voice-hnn</link>
      <guid>https://dev.to/humairamuhyiddeen/giving-my-dashboard-a-voice-hnn</guid>
      <description>&lt;p&gt;After building the base of my dashboard a space that grows as I grow.&lt;br&gt;
I wanted to give it something more than just structure “A Voice”&lt;br&gt;
A way to guide me, respond to my clicks, and reflect where I am in my little learning world.&lt;br&gt;
So, I started working on the Sidebar and Header, the parts that make a dashboard feel alive.&lt;/p&gt;

&lt;p&gt;It started with navigation.&lt;br&gt;
I was learning how to connect pages and how to make the flow using React Router.&lt;br&gt;
I learned how to define routes, switch between pages, and (my favorite part) how I can display the current page name dynamically on the header.&lt;br&gt;
It felt like giving my dashboard awareness. It felt like my code was whispering, “I see you. You’re here.”&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flr8rujxvmcwgll8pej7r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flr8rujxvmcwgll8pej7r.png" alt=" " width="800" height="387"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Active State and Layout Wrapping&lt;/strong&gt;&lt;br&gt;
Next, I discovered how to highlight the active page.&lt;br&gt;
It wasn’t just static links anymore; it was reactive, present.&lt;br&gt;
Then came the layout component, the quiet architecture that wraps everything together, the sidebar, header, and content together and each piece had to align. It taught me a bigger lesson about structure: even in code, everything needs a “home” that ties the pieces together.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mapping Links&lt;/strong&gt;&lt;br&gt;
Instead of manually typing every link, I learned to map over an array to render multiple links.&lt;br&gt;
It felt like finding a new shortcut  cleaner, smarter, and scalable.&lt;br&gt;
Each link now lives in an array, easy to edit, easy to extend.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Mystery of the Vanished Styles&lt;/strong&gt;&lt;br&gt;
Then came one of those classic developer moments.&lt;br&gt;
Suddenly, my Tailwind styles stopped working, everything disappeared.&lt;br&gt;
The colors. The spacing. My layout turned into plain HTML.&lt;br&gt;
I stared at my config, rewrote paths, and restarted. Nothing worked. After almost an hour of debugging I noticed I had accidentally removed &lt;code&gt;index.css&lt;/code&gt;from &lt;code&gt;main.jsx&lt;/code&gt; while setting up routes.&lt;br&gt;
Just one missing import.&lt;br&gt;
One tiny mistake that silenced everything.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd8euncgaeez46reatob2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd8euncgaeez46reatob2.png" alt=" " width="800" height="368"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When It Finally Worked&lt;/strong&gt;&lt;br&gt;
When I fixed it and refreshed the page, my dashboard came back  brighter, organized, and present.&lt;br&gt;
The sidebar lit up as I clicked through links. The header whispered my location.&lt;br&gt;
Everything felt... connected.&lt;br&gt;
And I realized something: this dashboard isn’t just learning how to work.&lt;br&gt;
&lt;strong&gt;It’s learning how to speak.&lt;/strong&gt;&lt;br&gt;
To respond, to guide, to mirror how I move through my own learning journey still a little messy, but slowly finding rhythm.&lt;br&gt;
&lt;strong&gt;Quietly Building, Boldly Innovating&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>frontend</category>
      <category>learning</category>
      <category>programming</category>
    </item>
    <item>
      <title>A Dashboard That Grows With Me</title>
      <dc:creator>Aisha Muhyiddeen Ahmad</dc:creator>
      <pubDate>Fri, 24 Oct 2025 20:17:57 +0000</pubDate>
      <link>https://dev.to/humairamuhyiddeen/a-dashboard-that-grows-with-me-40hk</link>
      <guid>https://dev.to/humairamuhyiddeen/a-dashboard-that-grows-with-me-40hk</guid>
      <description>&lt;p&gt;I call it the SandBox, a dashboard that grows as I grow.&lt;/p&gt;

&lt;p&gt;Here’s the idea&lt;br&gt;
Instead of building a “complete” project at once, I learn one concept, practice it, and then bring it into my dashboard. Each card, widget, or feature becomes proof of what I’ve learned, something I truly understand.&lt;/p&gt;

&lt;p&gt;SandBox isn’t just another project. It’s my playground to experiment with what I’m learning in real-time from React components, navigation, and state management.&lt;br&gt;
Step 1: The Messy Lab - Here is where I learn new concepts, I get to try, fail, debug.&lt;/p&gt;

&lt;p&gt;Step 2: SandBox - Once I understand the concept, I rebuild it in my Sandbox as a feature with a little bit of UX thinking.&lt;br&gt;
This way, it becomes more than just a static showcase. It’s a living record of my learning journey, a space where every new concept has a purpose.&lt;/p&gt;

&lt;p&gt;No pressure to know everything at once. No need to learn features for the sake of completing a project. Just steady growth one step, one feature, one lesson at a time.&lt;br&gt;
Quietly Building, Boldly Innovating&lt;/p&gt;

</description>
      <category>buildinpublic</category>
      <category>devjournal</category>
      <category>developer</category>
      <category>react</category>
    </item>
  </channel>
</rss>
