<?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: Ibad ur Rehman</title>
    <description>The latest articles on DEV Community by Ibad ur Rehman (@ibaurr).</description>
    <link>https://dev.to/ibaurr</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%2F2572167%2F9a3f412c-0013-4a0a-a293-359119d9ca4e.png</url>
      <title>DEV Community: Ibad ur Rehman</title>
      <link>https://dev.to/ibaurr</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ibaurr"/>
    <language>en</language>
    <item>
      <title>I built an open-source Chrome extension to track how much time I actually spend learning to code</title>
      <dc:creator>Ibad ur Rehman</dc:creator>
      <pubDate>Thu, 22 Oct 2026 09:37:28 +0000</pubDate>
      <link>https://dev.to/ibaurr/i-built-an-open-source-chrome-extension-to-track-how-much-time-i-actually-spend-learning-to-code-3fph</link>
      <guid>https://dev.to/ibaurr/i-built-an-open-source-chrome-extension-to-track-how-much-time-i-actually-spend-learning-to-code-3fph</guid>
      <description>&lt;p&gt;Completing a lesson tells you where you are in a course. It doesn’t tell you how much time you spent working through it.&lt;/p&gt;

&lt;p&gt;I use Scrimba to learn programming, and I wanted to make that effort more visible, without remembering to start and stop a timer every session.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;ScrimTrack&lt;/strong&gt;, a free, open-source Chrome extension for Scrimba learners.&lt;/p&gt;

&lt;h3&gt;
  
  
  What should count as learning time?
&lt;/h3&gt;

&lt;p&gt;This was the most interesting question behind the project.&lt;/p&gt;

&lt;p&gt;Having a learning platform open doesn’t necessarily mean you’re studying. But typing and clicking aren’t the only signs of learning either. You might be watching an explanation and following the code without touching your keyboard.&lt;/p&gt;

&lt;p&gt;ScrimTrack automatically tracks focused learning time. It also counts lesson playback while Scrimba stays visible and focused, so following a lesson counts even when you aren’t actively interacting.&lt;/p&gt;

&lt;p&gt;That distinction matters for a platform like Scrimba, where a session can involve moving between watching an explanation and editing code.&lt;/p&gt;

&lt;p&gt;It’s still a measure of time, rather than proof of understanding. But it gives you another way to see the effort you’re putting in alongside completed lessons.&lt;/p&gt;

&lt;h3&gt;
  
  
  Daily goals without managing another timer
&lt;/h3&gt;

&lt;p&gt;ScrimTrack lets you set a daily learning goal and see your tracked time against it.&lt;/p&gt;

&lt;p&gt;I wanted the routine to stay simple: open Scrimba, learn, and see the time you put in. Tracking shouldn’t become another task you have to manage.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why a short session still counts
&lt;/h3&gt;

&lt;p&gt;Learning streaks count consecutive days with tracked learning activity. You don’t have to complete your daily goal for the day to count.&lt;/p&gt;

&lt;p&gt;If your goal is an hour but you only manage 20 minutes, you still showed up. I wanted the streak to reflect that.&lt;/p&gt;

&lt;p&gt;The daily goal and streak answer different questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Daily goal:&lt;/strong&gt; Did I put in the amount of time I intended?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Streak:&lt;/strong&gt; Have I been showing up consistently?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  A small tool for a specific workflow
&lt;/h3&gt;

&lt;p&gt;ScrimTrack focuses on Scrimba because that’s the learning workflow I wanted to improve.&lt;/p&gt;

&lt;p&gt;It’s also a project that connects what I’m learning with something I can use myself, and now share with other learners.&lt;/p&gt;

&lt;p&gt;This is my first time sharing it on DEV, and I’d love feedback.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You can find ScrimTrack here: &lt;a href="https://scrimtrack.xyz" rel="noopener noreferrer"&gt;https://scrimtrack.xyz&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you use Scrimba, does this solve a problem you’ve had? And if you’ve built an activity tracker, how do you think about the difference between interaction, attention, and time spent?&lt;/p&gt;

</description>
      <category>chromeextension</category>
      <category>showdev</category>
      <category>opensource</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Conventional Commits: a beginner’s guide to writing useful commit messages</title>
      <dc:creator>Ibad ur Rehman</dc:creator>
      <pubDate>Wed, 21 Oct 2026 18:00:37 +0000</pubDate>
      <link>https://dev.to/ibaurr/conventional-commits-a-beginners-guide-to-writing-useful-commit-messages-49ml</link>
      <guid>https://dev.to/ibaurr/conventional-commits-a-beginners-guide-to-writing-useful-commit-messages-49ml</guid>
      <description>&lt;p&gt;A commit message is a small note to whoever reads your code history next. Sometimes, that person is you, three months later, trying to understand why something changed.&lt;/p&gt;

&lt;p&gt;Messages like &lt;code&gt;update code&lt;/code&gt; or &lt;code&gt;fix stuff&lt;/code&gt; don’t leave much to work with.&lt;/p&gt;

&lt;p&gt;Conventional Commits gives those messages a simple, consistent structure. Here’s how it works, and where it helps.&lt;/p&gt;

&lt;h2&gt;
  
  
  The basic format
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;type(scope): description
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;feat(goals): add a daily learning target
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There are three parts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Type:&lt;/strong&gt; the kind of change.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scope:&lt;/strong&gt; the part of the project affected. This is optional.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; a short explanation of what changed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can also add a body when the change needs more context.&lt;/p&gt;

&lt;h2&gt;
  
  
  Types you’ll commonly see
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Typical use&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;feat&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A new feature&lt;/td&gt;
&lt;td&gt;&lt;code&gt;feat(dashboard): add weekly learning totals&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fix&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A bug fix&lt;/td&gt;
&lt;td&gt;&lt;code&gt;fix(timer): stop tracking when the tab loses focus&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;docs&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Documentation&lt;/td&gt;
&lt;td&gt;&lt;code&gt;docs: explain how to install the extension&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;refactor&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Restructuring without changing behavior&lt;/td&gt;
&lt;td&gt;&lt;code&gt;refactor(timer): extract session calculations&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;test&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Test changes&lt;/td&gt;
&lt;td&gt;&lt;code&gt;test(streaks): cover consecutive learning days&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;chore&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Maintenance&lt;/td&gt;
&lt;td&gt;&lt;code&gt;chore: update development dependencies&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The specification defines &lt;code&gt;feat&lt;/code&gt; and &lt;code&gt;fix&lt;/code&gt;; other types are allowed, so teams can agree on additional categories that suit their work.&lt;/p&gt;

&lt;p&gt;These are illustrative examples for a learning tracker, rather than a list of actual commits.&lt;/p&gt;

&lt;h2&gt;
  
  
  The description still does most of the work
&lt;/h2&gt;

&lt;p&gt;Compare:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;fix: fix timer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;fix(timer): exclude time spent in background tabs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Both follow the format. The second tells you what behavior changed.&lt;/p&gt;

&lt;p&gt;A useful question before committing is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Could someone understand the purpose of this change without opening the diff?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For changes involving a tradeoff or a surprising decision, add the reasoning in the body:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;fix(streaks): count learning days independently of daily goals

A learner can study without reaching their daily target.
Use tracked activity to determine whether the day contributes
to their streak.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That explanation preserves a product decision that the code alone might not make obvious.&lt;/p&gt;

&lt;h2&gt;
  
  
  What about breaking changes?
&lt;/h2&gt;

&lt;p&gt;A breaking change requires consumers to adapt their existing usage. You can mark it with &lt;code&gt;!&lt;/code&gt; before the colon and explain the migration in a footer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;feat(config)!: replace trackingInterval with trackingIntervalMs

BREAKING CHANGE: Rename trackingInterval to trackingIntervalMs
and provide its value in milliseconds instead of seconds.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Under the convention’s Semantic Versioning mapping, fixes correspond to patch releases, features to minor releases, and breaking changes to major releases. Release automation needs to be configured to apply those rules.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why use this?
&lt;/h2&gt;

&lt;p&gt;A consistent structure can help people scan project history. It also gives tools predictable information for generating changelogs and determining version bumps.&lt;/p&gt;

&lt;p&gt;You can start by writing messages manually. A commit-message linter or release pipeline can come later if it solves a problem in your workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the convention falls short
&lt;/h2&gt;

&lt;p&gt;A Hacker News discussion about Conventional Commits raised a useful concern: it’s possible to spend more effort categorizing a change than explaining it.&lt;/p&gt;

&lt;p&gt;Adding &lt;code&gt;fix:&lt;/code&gt; to an unclear message doesn’t make it informative. And a generated changelog may still need editing before it helps users understand a release.&lt;/p&gt;

&lt;p&gt;My takeaway is to keep the format simple and put care into the description and reasoning. The convention provides structure; the writer provides context.&lt;/p&gt;

&lt;p&gt;For your next commit, try:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;type: describe the specific change
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add a scope if it helps, and a body if there’s reasoning worth preserving.&lt;/p&gt;

&lt;p&gt;Do you use Conventional Commits in your projects? Has the structure helped you, or do you prefer another approach?&lt;/p&gt;

</description>
      <category>git</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
