<?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: roynick365</title>
    <description>The latest articles on DEV Community by roynick365 (@roynick365).</description>
    <link>https://dev.to/roynick365</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%2F3891137%2F7338dee2-c714-47bb-954f-15c12133ab18.png</url>
      <title>DEV Community: roynick365</title>
      <link>https://dev.to/roynick365</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/roynick365"/>
    <language>en</language>
    <item>
      <title>Your UI Has Problems You Cannot See Until It Is Too Late</title>
      <dc:creator>roynick365</dc:creator>
      <pubDate>Fri, 01 May 2026 18:19:15 +0000</pubDate>
      <link>https://dev.to/roynick365/your-ui-has-problems-you-cannot-see-until-it-is-too-late-5940</link>
      <guid>https://dev.to/roynick365/your-ui-has-problems-you-cannot-see-until-it-is-too-late-5940</guid>
      <description>&lt;p&gt;You ship a component. It looks fine. Users struggle with it anyway.&lt;br&gt;
Not because of a bug. Because the button said "Go" instead of "Get Started". Because the empty state said "No data" instead of something a human would actually understand. Because the form had five fields when it needed three.&lt;/p&gt;

&lt;p&gt;Small things. The kind you do not notice until someone else points them out.&lt;/p&gt;

&lt;p&gt;I built a tool that points them out before you ship. And this week I made it a lot harder to ignore.&lt;/p&gt;

&lt;p&gt;What changed&lt;/p&gt;

&lt;p&gt;I added three things to Fix My UI, and one of them might save you from a review that comes back as "output too complex to be reliable" — which is a frustrating thing to find out after you have already waited for the result.&lt;/p&gt;

&lt;p&gt;You now know before you run whether your component is going to get a good review.&lt;/p&gt;

&lt;p&gt;A complexity indicator sits below the input and reads your HTML in real time. It counts your lines, counts your tags, and tells you whether what you have pasted is simple, medium, or complex. If it is complex, it tells you to split it before running.&lt;/p&gt;

&lt;p&gt;Sounds obvious. I did not have it before. I was pasting full dashboard sections, getting weak reviews, wondering why, and only later realizing the component was too large. Now I know before I click the button.&lt;br&gt;
You can now get the raw data out.&lt;/p&gt;

&lt;p&gt;The Markdown export I shipped in the last version is good for PR comments and tickets. But sometimes you want the structured JSON — the scores, the issue array, the full machine-readable output. Maybe you want to store it, compare it across versions, or pipe it somewhere else.&lt;/p&gt;

&lt;p&gt;JSON export is now a second button next to the Markdown one. One click, clean structured file, includes metadata.&lt;/p&gt;

&lt;p&gt;You can now use the tool in the light. Dark mode only was a choice I made for myself and forced on everyone else. There is a toggle in the top-right corner now. It works.&lt;/p&gt;

&lt;p&gt;The thing I keep learning building this&lt;br&gt;
Every version I want to add ten things. Every version I add three. The discipline of asking "did I actually hit this problem or am I just adding features" is the only reason the tool still does one thing well.&lt;/p&gt;

&lt;p&gt;The complexity indicator almost did not make it. I thought it was too small. But it is the kind of quiet improvement that makes every single interaction slightly less frustrating, and those compound.&lt;/p&gt;

&lt;p&gt;What is coming next&lt;br&gt;
The roadmap has three items and the third one is the interesting one.&lt;br&gt;
Before and after rendered preview is coming — see the original and improved component side by side as actual rendered HTML, not just code.&lt;br&gt;
CSS analysis alongside HTML is coming — right now the tool only sees your markup, not your styles.&lt;/p&gt;

&lt;p&gt;And then there is screenshot input. Paste an image of a component, skip writing the HTML entirely, get a review based on what it actually looks like. I am still figuring out the right approach. It is the feature I am most curious about and least certain how to build well.&lt;/p&gt;

&lt;p&gt;Try it: &lt;a href="https://dev.tourl"&gt;roynick365.github.io/fix-my-ui&lt;/a&gt;&lt;br&gt;
GitHub: &lt;a href="https://dev.tourl"&gt;github.com/roynick365/fix-my-ui&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you paste a component and the review misses something obvious, open an issue. That is the most useful thing you can do right now.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>ui</category>
      <category>uidesign</category>
    </item>
    <item>
      <title>Three Small Things I Added to Fix My UI That Made It Actually Useful in Real Work</title>
      <dc:creator>roynick365</dc:creator>
      <pubDate>Sun, 26 Apr 2026 13:44:27 +0000</pubDate>
      <link>https://dev.to/roynick365/three-small-things-i-added-to-fix-my-ui-that-made-it-actually-useful-in-real-work-5c8a</link>
      <guid>https://dev.to/roynick365/three-small-things-i-added-to-fix-my-ui-that-made-it-actually-useful-in-real-work-5c8a</guid>
      <description>&lt;p&gt;A few days ago I shipped Fix My UI, a browser tool that reviews HTML components and tells you what is wrong. The core idea was simple: paste HTML, get structured feedback, move on.&lt;br&gt;
It worked. But after using it myself for a couple of weeks I kept hitting the same friction points. So I fixed them.&lt;/p&gt;

&lt;p&gt;The friction points and what I did about each one&lt;br&gt;
Too many issues at once.&lt;br&gt;
When I reviewed a complex component I would sometimes get nine or ten issues back. I did not want to see all of them at the same time. I wanted to handle the critical ones first and come back to suggestions later.&lt;br&gt;
I added a severity filter. After a review runs, you can toggle critical, warning, and suggestion on and off independently. It sits in a thin bar below the result tabs and stays out of the way until you need it.&lt;br&gt;
Re-pasting the same HTML over and over.&lt;br&gt;
When I was iterating on a component, fixing one issue, then reviewing again, I kept copying and pasting the same HTML back into the input. On the third or fourth pass it got annoying.&lt;br&gt;
I added session history. The last five reviewed components are stored in memory during the session. Each entry shows the first line of the HTML and the overall score. Click it to load the HTML back into the input instantly. Nothing is stored after you close the tab.&lt;br&gt;
Sharing the review was awkward.&lt;br&gt;
The review output lives across four tabs. When I wanted to share it with someone else, copying tab by tab and pasting into a message was clunky.&lt;br&gt;
I added a Markdown export. One button downloads the complete review as a .md file: issues, improved code, quick fixes, and UX reasoning all in one clean document. I paste it straight into PR comments now.&lt;/p&gt;

&lt;p&gt;None of these changed what the tool does&lt;br&gt;
It still does one thing. You paste a component, you get a structured review. These three additions just made the workflow around that less frustrating.&lt;br&gt;
Demo: roynick365.github.io/fix-my-ui&lt;br&gt;
GitHub: github.com/roynick365/fix-my-ui&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>opensource</category>
    </item>
    <item>
      <title>I got tired of fixing the same UI problems… so I built a small tool</title>
      <dc:creator>roynick365</dc:creator>
      <pubDate>Thu, 23 Apr 2026 16:59:45 +0000</pubDate>
      <link>https://dev.to/roynick365/i-got-tired-of-fixing-the-same-ui-problems-so-i-built-a-small-tool-6a</link>
      <guid>https://dev.to/roynick365/i-got-tired-of-fixing-the-same-ui-problems-so-i-built-a-small-tool-6a</guid>
      <description>&lt;p&gt;Every project I work on has the same kind of issues.&lt;/p&gt;

&lt;p&gt;Not big problems.&lt;br&gt;
Small ones.&lt;/p&gt;

&lt;p&gt;A button that says “Go” instead of something meaningful&lt;br&gt;
Spacing that feels slightly off&lt;br&gt;
A layout that works… but doesn’t feel clear&lt;br&gt;
Empty states that look like placeholders&lt;/p&gt;

&lt;p&gt;Nothing is broken. But something feels unfinished.&lt;/p&gt;

&lt;p&gt;And the worst part?&lt;/p&gt;

&lt;p&gt;You notice it. But explaining what’s wrong takes longer than fixing it.&lt;/p&gt;

&lt;p&gt;The real problem&lt;/p&gt;

&lt;p&gt;UI problems are rarely technical.&lt;/p&gt;

&lt;p&gt;They’re small decisions:&lt;/p&gt;

&lt;p&gt;wording&lt;br&gt;
hierarchy&lt;br&gt;
spacing&lt;br&gt;
clarity&lt;/p&gt;

&lt;p&gt;And they keep repeating across projects.&lt;/p&gt;

&lt;p&gt;Most of the time, we fix them:&lt;/p&gt;

&lt;p&gt;late&lt;br&gt;
quickly&lt;br&gt;
inconsistently&lt;/p&gt;

&lt;p&gt;There’s no simple way to review a component and say:&lt;/p&gt;

&lt;p&gt;“Here’s exactly what’s wrong, and here’s how to improve it.”&lt;/p&gt;

&lt;p&gt;So I built something simple&lt;/p&gt;

&lt;p&gt;I made a small tool called FixMyUI.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/roynick365/fix-my-ui" rel="noopener noreferrer"&gt;https://github.com/roynick365/fix-my-ui&lt;/a&gt;&lt;br&gt;
👉 &lt;a href="https://roynick365.github.io/fix-my-ui" rel="noopener noreferrer"&gt;https://roynick365.github.io/fix-my-ui&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You paste an HTML component, and it gives you:&lt;/p&gt;

&lt;p&gt;issues ranked by severity&lt;br&gt;
an improved version&lt;br&gt;
before-and-after changes&lt;br&gt;
reasoning for each fix&lt;/p&gt;

&lt;p&gt;That’s it.&lt;/p&gt;

&lt;p&gt;Example&lt;br&gt;
Go&lt;/p&gt;

&lt;p&gt;Becomes:&lt;/p&gt;

&lt;p&gt;Get Started&lt;/p&gt;

&lt;p&gt;With explanation:&lt;/p&gt;

&lt;p&gt;“Go” is unclear. A more specific label improves usability.&lt;/p&gt;

&lt;p&gt;What makes this different&lt;/p&gt;

&lt;p&gt;This is not a UI generator.&lt;/p&gt;

&lt;p&gt;It doesn’t try to replace your UI.&lt;/p&gt;

&lt;p&gt;It helps you improve what you already have.&lt;/p&gt;

&lt;p&gt;Why I kept it simple&lt;/p&gt;

&lt;p&gt;I didn’t want another tool that does everything.&lt;/p&gt;

&lt;p&gt;I wanted something I could use during development:&lt;/p&gt;

&lt;p&gt;Paste component&lt;br&gt;
Review issues&lt;br&gt;
Apply fixes&lt;br&gt;
Continue working&lt;/p&gt;

&lt;p&gt;No setup. No learning curve.&lt;/p&gt;

&lt;p&gt;It’s still early&lt;/p&gt;

&lt;p&gt;I’m working on:&lt;/p&gt;

&lt;p&gt;better analysis for edge cases&lt;br&gt;
before/after preview&lt;br&gt;
improving output quality&lt;br&gt;
If this sounds useful&lt;/p&gt;

&lt;p&gt;Try it, break it, suggest improvements.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/roynick365/fix-my-ui" rel="noopener noreferrer"&gt;https://github.com/roynick365/fix-my-ui&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you’ve ever looked at your UI and thought&lt;br&gt;
“something feels off, but I don’t know what” - this tool is for that moment.&lt;/p&gt;

</description>
      <category>design</category>
      <category>showdev</category>
      <category>ui</category>
      <category>ux</category>
    </item>
    <item>
      <title>I built a small CSS library for UI states (because I kept rewriting the same thing)</title>
      <dc:creator>roynick365</dc:creator>
      <pubDate>Tue, 21 Apr 2026 18:07:01 +0000</pubDate>
      <link>https://dev.to/roynick365/i-built-a-small-css-library-for-ui-states-because-i-kept-rewriting-the-same-thing-27ib</link>
      <guid>https://dev.to/roynick365/i-built-a-small-css-library-for-ui-states-because-i-kept-rewriting-the-same-thing-27ib</guid>
      <description>&lt;h1&gt;
  
  
  I built a small CSS library for UI states (because I kept rewriting the same thing)
&lt;/h1&gt;

&lt;p&gt;Most UI libraries focus on buttons, forms, and layouts.&lt;/p&gt;

&lt;p&gt;But in real projects, a lot of time goes into something else:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;empty screens&lt;/li&gt;
&lt;li&gt;loading states&lt;/li&gt;
&lt;li&gt;error messages&lt;/li&gt;
&lt;li&gt;first-time user experiences&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And somehow, these are always built last.&lt;/p&gt;




&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;I noticed a pattern in almost every project I worked on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Empty states were inconsistent&lt;/li&gt;
&lt;li&gt;Loading states were rushed&lt;/li&gt;
&lt;li&gt;Error messages felt generic&lt;/li&gt;
&lt;li&gt;Onboarding screens were overthought&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nothing was technically hard — just repetitive and easy to ignore until the end.&lt;/p&gt;




&lt;h2&gt;
  
  
  So I built something small
&lt;/h2&gt;

&lt;p&gt;I created &lt;strong&gt;StateKit&lt;/strong&gt; — a lightweight CSS library focused only on UI states.&lt;/p&gt;

&lt;p&gt;No framework. No setup.&lt;/p&gt;

&lt;p&gt;Just copy and use.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/roynick365/statekit" rel="noopener noreferrer"&gt;https://github.com/roynick365/statekit&lt;/a&gt;&lt;br&gt;
👉 &lt;a href="https://roynick365.github.io/statekit/" rel="noopener noreferrer"&gt;https://roynick365.github.io/statekit/&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What it includes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Empty state&lt;/li&gt;
&lt;li&gt;Empty search&lt;/li&gt;
&lt;li&gt;Error state&lt;/li&gt;
&lt;li&gt;404 page&lt;/li&gt;
&lt;li&gt;Success state&lt;/li&gt;
&lt;li&gt;Loading spinner&lt;/li&gt;
&lt;li&gt;Loading skeleton&lt;/li&gt;
&lt;li&gt;Onboarding state&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each component is plain HTML + CSS and can be dropped into any project.&lt;/p&gt;




&lt;h2&gt;
  
  
  Example
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"sk-empty"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;h3&amp;gt;&lt;/span&gt;No data available&lt;span class="nt"&gt;&amp;lt;/h3&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Create your first item to get started.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"sk-btn"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Create&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Why this exists
&lt;/h2&gt;

&lt;p&gt;I didn’t want another UI framework.&lt;/p&gt;

&lt;p&gt;I just wanted something to handle the parts that usually get rushed or overlooked.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I learned building this
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Simple tools are harder than they look&lt;/li&gt;
&lt;li&gt;Consistency matters more than complexity&lt;/li&gt;
&lt;li&gt;Most “UI problems” are actually small decisions repeated many times&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What’s next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;More variants for each state&lt;/li&gt;
&lt;li&gt;Dark mode&lt;/li&gt;
&lt;li&gt;Accessibility improvements&lt;/li&gt;
&lt;li&gt;Possibly React wrappers&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Feedback welcome
&lt;/h2&gt;

&lt;p&gt;If you have suggestions or want to contribute:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/roynick365/statekit" rel="noopener noreferrer"&gt;https://github.com/roynick365/statekit&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;If you’ve ever rebuilt the same empty or loading state more than once, this might help.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>frontend</category>
      <category>css</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
