The Day I Stopped Fighting My Own UI
There's a specific kind of frustration that only happens when you're both the designer and the developer.
You know exactly what it should look like. You can see it in your head — the spacing, the weight, the way elements breathe. And then you open the code and it just... doesn't match.
That was me and FlashBee's dashboard. For weeks.
## The Problem With Good Enough
The old layout worked. Cards in a grid, icons everywhere, lots of visual hierarchy. It wasn't broken. But every time I opened the app I felt a small, dull irritation I couldn't quite name.
It took me a while to realize: the UI was lying to me. It looked busy and feature-rich, but when I actually used it, most of that visual noise was just... decoration. I was designing for screenshots, not for use.
The dashboard had a hero section with drop shadows and gradient blobs. Stats cards with big numbers and colorful borders. Quick-action buttons styled like floating pills.
It looked like an app. It felt like a costume.
## What I Actually Changed
I didn't add anything. I just stopped apologizing.
The hero section: smaller padding, smaller text, no decorative blobs. The streak counter doesn't need to be text-xl font-black. It just needs to be readable.
The stats cards: horizontal layout instead of vertical stacking. Icon on the left, number and label on the right. Half the height. The information is still there — it's just not performing.
The deck list: no more grid. Just a clean vertical list — thumbnail, name, card count. One line per deck. Scroll when you need to.
The quick-action buttons: fixed a subtle alignment bug that had been bothering me for weeks. The center button was slightly off. Not broken. Just slightly wrong. I switched from flex to a CSS grid with equal columns and it snapped into place.
It's a small thing. But small things accumulate.
## What I Noticed
After the redesign, I opened the app and felt... nothing. Not in a bad way. In the way you feel nothing when a door opens smoothly — you just walk through it.
That's the goal, actually. UI should disappear. When design is working, you stop noticing it.
## Shared Decks Have a Different Feel
One thing I hadn't anticipated: the new variant="saved" card style for decks shared by other users. It shows the creator's name and a star rating. Small detail. But it changes the texture of the experience.
Your own decks feel like yours — clean, minimal, just the name and count. Saved decks feel like borrowed things — slightly warmer, slightly more social. The design is doing a tiny bit of storytelling without saying anything.
I didn't plan that. It emerged from just following the logic of the data.
## The Part That Doesn't Show
There's a version of this post where I talk about component architecture and prop design and the tradeoffs between showActions and variant.
But that's not really what happened. What happened is that I sat with a UI that was quietly wrong for a long time, and then one evening I just started simplifying. And each thing I removed made the next thing clearer.
Design is subtraction. I keep forgetting that. I keep adding.
The redesign took a few hours. The weeks before it — learning to see what was actually wrong — that's where the real time went.
FlashBee is a flashcard app for Vietnamese kids learning English. I'm building it solo, one evening at a time.