Skip to main content

Command Palette

Search for a command to run...

What Fresh Bug Is This?

Published
3 min read
S

Software engineer focused on building reliable web applications and contributing to open source infrastructure. I work primarily with the JavaScript ecosystem (React, Next.js, Node.js, Express) and enjoy designing systems that are maintainable, testable, and production-ready.

I previously contributed to Eclipse Adoptium, where I worked on early adoption of SBOM tooling which integrated into the Temurin build pipeline. These days, I’m contributing to Eclipse Adoptium, building full stack projects, writing about engineering decisions, and exploring how software systems can support climate resilient communities and low resource environments.

I care about clean architecture, thoughtful debugging, and learning in public.

Episode 3: Plugins, Packets, and a Toddler’s Endless “Why”

Welcome to Episode 3 of “The Rocky Road to Clarity”, where I full-time parent, part-time debugger set out to bring location tracking to life... and end up tracking my own sanity instead.

This time, I thought:

“Let’s just build a simple login screen for my React Native app.”

Ha.
Haha.
😐

What followed was a glorious mess of:

  • 🔌 mysterious plugin errors,

  • 🌐 ghostly network issues,

  • 🔐 SecureStore tantrums,

  • and 👶 a toddler who thinks "Why?" is the only word in the dictionary.


The Tailwind Spiral

It all started with ambition:

“Let’s use Tailwind for mobile styling! It’ll be fast and elegant!”

So I installed nativewind, added the plugin in babel.config.js, hit save...

Boom.

pythonCopyEdit.plugins is not a valid Plugin property

Me:

“I… didn’t even touch plugins. Who touched plugins?!”

Turns out I either:

  • added the plugin wrong,

  • added it too early,

  • or summoned some ancient CSS curse.

After uninstalling, reinstalling, purging caches, and spiritually cleansing my project (basically an exorcism), I gave up.

  • Tailwind: ❌

  • Vanilla stylesheets: ✅

  • Sanity: 🤷‍♀️


The Case of the Disappearing Backend

Next: connect the mobile app to my Express backend for login.

Tried localhost:5000/api/auth/login.
Failed.
Tried 172.x.x.x.
❌ Failed.
Tried praying.
🙏 Still failed.

My phone was like:

“I don’t know where localhost is. Is it a tourist spot in Gilgit?”

Eventually realized: Expo Go can’t access localhost on your laptop.
It needs your actual IP address, like 192.168.1.20.

So I ran ipconfig, got the right IP, and finally connected.

Meanwhile, my toddler, noticing my increasing frustration, chimed in:

“Mama, why doesn’t your app work?”

Me: “Because… I used the wrong localhost.”
Her: “Why?”
I almost said, “Because Mama was dumb,” but figured I shouldn’t model low confidence in tech this early.
So I tried: “Because localhost only works on the same device. My phone isn’t my laptop.”
Her: “Why?”
Me: “Because… network interfaces, IP addresses, TCP routing, DNS something something…”
Her: “Why?”

By the end, I was muttering "why" not just to her, but to:

  • my backend,

  • my frontend,

  • Expo,

  • SecureStore,

  • and every life decision I’ve ever made.

SecureStore Isn’t That Secure… If You Don’t Use Strings

Finally, success! I received the token from backend after login.
Victory was near.

Then Expo hit me with this:

vbnetCopyEditInvalid value provided to SecureStore. Must be string.

Of course.
SecureStore only stores strings. I had given it an object. Or maybe undefined. Or maybe a half baked promise of success.

The fix:

tsCopyEditawait SecureStore.setItemAsync("refreshToken", JSON.stringify(token));

Moral of the story:
If you don’t stringify(), you’ll sufferify().

What I Learned (Again) 🧠

LessonTruth
💻 localhost ≠ your computer (on mobile devices)Use 192.168.x.x, obviously!
🔐 SecureStore only loves stringsNo strings, no love.
🪄 Tailwind is magic... until it misfiresMaybe use it later.
👶 Toddlers are living while-loopswhile (true) { ask("why"); }

✅ What Works Now:

  • ✅ Login screen

  • ✅ Talking to backend

  • ✅ Receiving & saving token

  • ✅ Redux state updated

  • ❓ Knowing where it breaks next... stay tuned.

Coming Up Next

🏠 Home screen,
📍 Location tracking,
📴 Offline support...

… if I don’t go offline myself first. ☕️

Until then,
Still debugging in pajamas, coffee in hand, toddler on lap.
👣