<?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: Samuel Fialho</title>
    <description>The latest articles on DEV Community by Samuel Fialho (@semisse).</description>
    <link>https://dev.to/semisse</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%2F197922%2F0eaf66cc-e4ae-47a8-a994-c954c995bb04.jpeg</url>
      <title>DEV Community: Samuel Fialho</title>
      <link>https://dev.to/semisse</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/semisse"/>
    <language>en</language>
    <item>
      <title>🚀 I shipped on a Friday and turned my side project into a dashboard</title>
      <dc:creator>Samuel Fialho</dc:creator>
      <pubDate>Fri, 10 Apr 2026 21:00:35 +0000</pubDate>
      <link>https://dev.to/semisse/i-shipped-on-a-friday-and-turned-my-side-project-into-a-dashboard-1eb4</link>
      <guid>https://dev.to/semisse/i-shipped-on-a-friday-and-turned-my-side-project-into-a-dashboard-1eb4</guid>
      <description>&lt;p&gt;“Never merge on a Friday.”&lt;/p&gt;

&lt;p&gt;If you’ve been around software long enough, you’ve heard it.&lt;br&gt;
And honestly… it’s good advice.&lt;/p&gt;

&lt;p&gt;But today, I just ignored it.&lt;/p&gt;

&lt;p&gt;Not recklessly — this is a pet project, after all — but still knowingly. And that merge turned into something bigger than expected: a new version of SubCat, now evolving from a simple CI watcher into a full dashboard experience.&lt;/p&gt;

&lt;p&gt;Let me show you what changed 👇&lt;/p&gt;

&lt;h2&gt;
  
  
  🐱 What is SubCat?
&lt;/h2&gt;

&lt;p&gt;SubCat is a desktop app that helps you monitor your CI pipelines and flaky tests without constantly refreshing GitHub.&lt;/p&gt;

&lt;p&gt;It started simple: watch workflows, get notified, stay sane.&lt;/p&gt;

&lt;p&gt;But over time, I realized something:&lt;br&gt;
I didn’t just want notifications, I also wanted visibility.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧭 From watcher to dashboard
&lt;/h2&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%2F7u2hmtsmn7preziynv3h.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%2F7u2hmtsmn7preziynv3h.png" alt=" " width="800" height="556"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The biggest change in v1.1.1 is the introduction of a Dashboard.&lt;/p&gt;

&lt;p&gt;Instead of jumping between views, you now land on a central screen that gives you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run statistics&lt;/li&gt;
&lt;li&gt;Recent activity&lt;/li&gt;
&lt;li&gt;Quick actions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s a small shift in UX, but a big shift in mindset: SubCat is no longer just reactive, it’s informational.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧪 Going deeper into PRs
&lt;/h2&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%2Fy96zgbnn7nc5xgjpzhok.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%2Fy96zgbnn7nc5xgjpzhok.png" alt=" " width="800" height="556"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Working with pull requests got a lot more powerful.&lt;/p&gt;

&lt;p&gt;I introduced a 3-level drill-down navigation:&lt;/p&gt;

&lt;p&gt;My PRs → PR Checks → Workflow Runs&lt;/p&gt;

&lt;p&gt;This makes it much easier to go from a high-level overview to the exact failing job without losing context.&lt;/p&gt;

&lt;p&gt;On top of that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can now see PR review status alongside CI checks&lt;/li&gt;
&lt;li&gt;You can rerun only failed jobs instead of the whole workflow&lt;/li&gt;
&lt;li&gt;You can even cancel running workflows directly from the app&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Less clicking. Less waiting. More control.&lt;/p&gt;

&lt;h2&gt;
  
  
  📊 Flaky tests, but make it actionable
&lt;/h2&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%2Fgd4mfqsazj0tb77i0ivt.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%2Fgd4mfqsazj0tb77i0ivt.png" alt=" " width="800" height="556"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Flaky tests are one of the main reasons I built SubCat. So I doubled down on that.&lt;/p&gt;

&lt;p&gt;You can now generate a Flakiness Report:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Exported as Markdown&lt;/li&gt;
&lt;li&gt;Includes pass/fail counts&lt;/li&gt;
&lt;li&gt;Lists failed test names per attempt&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s simple, but incredibly useful for debugging patterns and sharing with your team.&lt;/p&gt;

&lt;h2&gt;
  
  
  📌 More control, less friction
&lt;/h2&gt;

&lt;p&gt;A few features that made the day-to-day experience smoother:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pin workflows to the sidebar and track their latest status&lt;/li&gt;
&lt;li&gt;Set a repeat count when watching a run&lt;/li&gt;
&lt;li&gt;Pending reruns are resumed automatically when reopening the app&lt;/li&gt;
&lt;li&gt;New Notification Center with unread badges and history&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are the kinds of features you don’t notice individually, but together they make the app feel much more “alive”.&lt;/p&gt;

&lt;h2&gt;
  
  
  🐧 Linux support (finally)
&lt;/h2&gt;

&lt;p&gt;This was a big one. SubCat now runs on Linux.&lt;/p&gt;

&lt;p&gt;And since not all environments have a keychain available, token storage now falls back to:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;~/.config&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;It’s not glamorous work, but it matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  🎨 Polishing the experience
&lt;/h2&gt;

&lt;p&gt;This release also includes a bunch of UX improvements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sections renamed to My PRs, Runs, and Workflows&lt;/li&gt;
&lt;li&gt;Status text humanized (in_progress → Running, etc.)&lt;/li&gt;
&lt;li&gt;Cleaner UI (less visual noise on secondary actions)&lt;/li&gt;
&lt;li&gt;+ Watch Run simplified to + Watch&lt;/li&gt;
&lt;li&gt;New loading animations (yes, there’s a cat 🐱)&lt;/li&gt;
&lt;li&gt;Keyboard shortcut (⌘N) to quickly open the watch form&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ⚠️ About that Friday merge
&lt;/h2&gt;

&lt;p&gt;Everything went well.&lt;/p&gt;

&lt;p&gt;But while waiting for CI to pass, I was reminded why the rule exists: a bug on Friday evening is just… different.&lt;/p&gt;

&lt;p&gt;Still, this time it worked out.&lt;/p&gt;

&lt;h2&gt;
  
  
  📦 Try it out
&lt;/h2&gt;

&lt;p&gt;SubCat v1.1.1 is now available for free:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://subcat.todaywedream.com/" rel="noopener noreferrer"&gt;https://subcat.todaywedream.com/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🛠️ What’s next?
&lt;/h2&gt;

&lt;p&gt;This release was about depth and visibility.&lt;/p&gt;

&lt;p&gt;The next step? Probably insights.&lt;/p&gt;

&lt;p&gt;Because once you can see everything clearly…&lt;br&gt;
you start wanting the system to tell you what matters.&lt;/p&gt;

&lt;p&gt;If you’re building tools in public, working with CI daily, or fighting flaky tests, I’d love your feedback.&lt;/p&gt;

</description>
      <category>cicd</category>
      <category>monitoring</category>
      <category>showdev</category>
      <category>sideprojects</category>
    </item>
    <item>
      <title>Tired of babysitting your pipelines?</title>
      <dc:creator>Samuel Fialho</dc:creator>
      <pubDate>Mon, 06 Apr 2026 20:02:56 +0000</pubDate>
      <link>https://dev.to/semisse/tired-of-babysitting-your-pipelines-412i</link>
      <guid>https://dev.to/semisse/tired-of-babysitting-your-pipelines-412i</guid>
      <description>&lt;p&gt;There’s a specific kind of failure every engineer working with CI knows:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A test fails.&lt;/li&gt;
&lt;li&gt;You rerun it.&lt;/li&gt;
&lt;li&gt;It passes. &lt;/li&gt;
&lt;li&gt;You rerun again. &lt;/li&gt;
&lt;li&gt;It fails.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Now you're not debugging anymore, you're dealing with non-deterministic failures. And trying to answer a simple question: is this actually broken, or just flaky?&lt;/p&gt;

&lt;p&gt;So you start the loop: you rerun the CI; you open GitHub Actions url; you wait; you check again; when it finishes, you rerun it again; you repeat it. Not because you want to, but because you need signal.&lt;/p&gt;

&lt;p&gt;Meanwhile, your attention is split. You can’t fully go back to coding because part of your brain is still waiting for the result. That’s the problem I wanted to solve. So I built SubCat.&lt;/p&gt;

&lt;h2&gt;
  
  
  What SubCat is
&lt;/h2&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%2F5hhumprh6uomg799l0fm.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%2F5hhumprh6uomg799l0fm.png" alt=" " width="800" height="388"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A small macOS app. You paste a GitHub Actions run URL, go back to work, and get a native notification when it finishes. You click it and it opens the run. No tabs. No babysitting.&lt;/p&gt;

&lt;h2&gt;
  
  
  Repeat mode: turning guesswork into signal
&lt;/h2&gt;

&lt;p&gt;This is the core idea. Instead of manually rerunning a flaky test over and over, SubCat does it for you and gives you a simple report in Markdown format. &lt;/p&gt;

&lt;p&gt;It’s not full-blown observability. It’s point-in-time investigation. Tools like BuildPulse or Trunk are great, but they require setup and are built for long-term analysis.&lt;/p&gt;

&lt;p&gt;SubCat is intentionally different:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;local;&lt;/li&gt;
&lt;li&gt;zero setup;&lt;/li&gt;
&lt;li&gt;focused on “I need to understand this failure now”&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;This started as a productivity problem, but it turned out to be a signal vs noise problem in CI. The time cost isn’t the reruns themselves, it’s the constant context switching while waiting for answers. SubCat removes that loop.&lt;/p&gt;

&lt;h2&gt;
  
  
  Technical notes (for those who care)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Built with Electron (pragmatism &amp;gt; purity)&lt;/li&gt;
&lt;li&gt;Native notifications + Keychain via safeStorage&lt;/li&gt;
&lt;li&gt;GitHub OAuth Device Flow (no PAT copy/paste)&lt;/li&gt;
&lt;li&gt;SQLite (better-sqlite3) with a test-time swap to node:sqlite&lt;/li&gt;
&lt;li&gt;Polling extracted into a decoupled PollManager (event-driven, fully testable)&lt;/li&gt;
&lt;li&gt;CI/CD with code signing + notarization + auto-update via GitHub Releases&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal wasn’t to build the “perfect” stack but I wanted to optimize for iteration speed and real-world usefulness. &lt;/p&gt;

&lt;h2&gt;
  
  
  Why I’m sharing this
&lt;/h2&gt;

&lt;p&gt;SubCat is open source and free, but this is also the kind of project I value most as a developer. It started as a personal project (a problem I hit in my day-to-day work) but I approached it with the same standards I’d expect in a production system:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;clear architecture;&lt;/li&gt;
&lt;li&gt;explicit tradeoffs;&lt;/li&gt;
&lt;li&gt;testable components;&lt;/li&gt;
&lt;li&gt;end-to-end ownership (from idea to CI to distribution).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If flaky tests are part of your daily life, this might help: &lt;a href="https://subcat.todaywedream.com/" rel="noopener noreferrer"&gt;https://subcat.todaywedream.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Curious how others deal with flaky tests. Reruns, quarantine, retries in CI, or something else? Let me know. Cheers.&lt;/p&gt;

</description>
      <category>ci</category>
      <category>e2e</category>
      <category>testing</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
