<?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: ming ming</title>
    <description>The latest articles on DEV Community by ming ming (@ming_ming_11212cd04685643).</description>
    <link>https://dev.to/ming_ming_11212cd04685643</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4031228%2F5a83520f-39b9-4de2-be86-9397091b3f2d.png</url>
      <title>DEV Community: ming ming</title>
      <link>https://dev.to/ming_ming_11212cd04685643</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ming_ming_11212cd04685643"/>
    <language>en</language>
    <item>
      <title>I Got Tired of Explaining UI Bugs With Screenshots</title>
      <dc:creator>ming ming</dc:creator>
      <pubDate>Thu, 16 Jul 2026 03:40:11 +0000</pubDate>
      <link>https://dev.to/ming_ming_11212cd04685643/i-got-tired-of-explaining-ui-bugs-with-screenshots-2199</link>
      <guid>https://dev.to/ming_ming_11212cd04685643/i-got-tired-of-explaining-ui-bugs-with-screenshots-2199</guid>
      <description>&lt;p&gt;A lot of UI bug reports start with a screenshot and one sentence:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The dropdown is broken on mobile.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then someone asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What did you click before that?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then someone else asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Can you send a recording?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And now the bug report has become a conversation about the bug report.&lt;/p&gt;

&lt;p&gt;The screenshot shows the result, but not the interaction that caused it. A screen recording solves that part, but then you have a video file that is too large to casually paste into an issue or a chat. So the usual next step is to find a GIF converter, upload the video, trim it, add a note somewhere, export the GIF, then compress it because the GIF is now too large.&lt;/p&gt;

&lt;p&gt;I got tired of doing that.&lt;/p&gt;

&lt;p&gt;Not because any one of those tools is difficult to use. The annoying part is moving the same file through several tools just to explain one small UI problem.&lt;/p&gt;

&lt;p&gt;So I built &lt;a href="https://gif-master.com/en/tools/screen-recorder?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=ui-bug-reports" rel="noopener noreferrer"&gt;GIF Master&lt;/a&gt;, a browser-only workflow for turning a recording into a small annotated GIF.&lt;/p&gt;

&lt;p&gt;The idea is simple, put all the steps into single window, no more file downloads and uploads:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://gif-master.com/en/tools/screen-recorder?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=ui-bug-reports" rel="noopener noreferrer"&gt;&lt;strong&gt;Record the issue&lt;/strong&gt;&lt;/a&gt;. &lt;br&gt;
Then&lt;br&gt;
&lt;a href="https://gif-master.com/en/tools/video-to-gif?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=ui-bug-reports" rel="noopener noreferrer"&gt;&lt;strong&gt;Mark the issue&lt;/strong&gt;&lt;/a&gt;. &lt;br&gt;
Then&lt;br&gt;
&lt;a href="https://gif-master.com/en/tools/gif-compressor?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=ui-bug-reports" rel="noopener noreferrer"&gt;&lt;strong&gt;Make it small enough to share&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The kind of bug this is for
&lt;/h2&gt;

&lt;p&gt;Take a common example: a dropdown menu covers the submit button on a narrow screen.&lt;/p&gt;

&lt;p&gt;A ticket that says &lt;em&gt;“dropdown is broken on mobile”&lt;/em&gt; is technically true, but it leaves a lot open:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which page?&lt;/li&gt;
&lt;li&gt;Which viewport?&lt;/li&gt;
&lt;li&gt;Does it happen before or after opening another panel?&lt;/li&gt;
&lt;li&gt;Is the button hidden, moved, or just unclickable?&lt;/li&gt;
&lt;li&gt;What should the expected layout look like?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A short GIF can answer all of that without turning the issue into a wall of text.&lt;/p&gt;

&lt;p&gt;The useful version of that report is usually only a few seconds long:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open the settings panel.&lt;/li&gt;
&lt;li&gt;Switch to a narrow viewport.&lt;/li&gt;
&lt;li&gt;Open the dropdown.&lt;/li&gt;
&lt;li&gt;Show the menu covering the button.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Then add a red rectangle around the collision, an arrow pointing to the dropdown, and one sentence:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Expected: the menu should stay above the form.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is enough. The person reading the issue knows what happened, where to look, and what the expected behavior is.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftr38or3op0ovvd1kkgm4.gif" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftr38or3op0ovvd1kkgm4.gif" alt="operations recorded by gif-master.com" width="480" height="326"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  I did not want another “all-in-one dashboard”
&lt;/h2&gt;

&lt;p&gt;The workflow I wanted was deliberately boring.&lt;/p&gt;

&lt;p&gt;Start with a screen recording. Keep only the useful part. Add text, arrows, rectangles, emoji, or a small image when they help explain the issue. Export a GIF. Compress it. Download it.&lt;/p&gt;

&lt;p&gt;No new browser window. No sending the recording to a server first. No exporting a video just so another tool can ask you to upload that same video again.&lt;/p&gt;

&lt;p&gt;The tools are connected because the task is connected:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A recording gives the bug report context.&lt;/li&gt;
&lt;li&gt;A short GIF makes the context easy to consume.&lt;/li&gt;
&lt;li&gt;An annotation removes ambiguity.&lt;/li&gt;
&lt;li&gt;Compression makes the result practical to paste into GitHub, Slack, Linear, Notion, or a pull request.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last part matters more than it sounds.&lt;/p&gt;

&lt;p&gt;A GIF that is clear but too large to send is still inconvenient. A GIF that is tiny but unreadable is not useful either. The goal is to reduce the size enough for quick sharing while keeping the UI details and annotations legible.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I kept the files in the browser
&lt;/h2&gt;

&lt;p&gt;Bug recordings can be awkward.&lt;/p&gt;

&lt;p&gt;They may contain a staging environment, an internal admin page, customer data, unfinished features, or an account that should not be uploaded to a random service.&lt;/p&gt;

&lt;p&gt;GIF Master processes the recording, editing, GIF generation, and compression in the browser. The file stays on the device unless you decide to export and share it.&lt;/p&gt;

&lt;p&gt;That does not make every recording safe by default. You still need to be careful about what is visible on screen. But it removes one unnecessary step from the workflow: uploading a bug recording before you have even decided where it should go.&lt;/p&gt;

&lt;h2&gt;
  
  
  A GIF is not the whole bug report
&lt;/h2&gt;

&lt;p&gt;I still want the usual details in a good issue:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Steps to reproduce&lt;/li&gt;
&lt;li&gt;Expected behavior&lt;/li&gt;
&lt;li&gt;Actual behavior&lt;/li&gt;
&lt;li&gt;Browser, device, or viewport details&lt;/li&gt;
&lt;li&gt;Console errors when relevant&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The GIF is there to make the visual part obvious.&lt;/p&gt;

&lt;p&gt;It is especially useful for things that are annoying to describe precisely: a layout shift, a hover state that disappears too early, a modal that closes unexpectedly, a button that becomes covered by another layer, or an animation that ends in the wrong&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>testing</category>
      <category>productivity</category>
      <category>frontend</category>
    </item>
  </channel>
</rss>
