<?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: Pakeeza</title>
    <description>The latest articles on DEV Community by Pakeeza (@pz_khalid).</description>
    <link>https://dev.to/pz_khalid</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%2F3747848%2F50f7f386-9dbe-48d7-a1c0-0f03ed55912c.jpg</url>
      <title>DEV Community: Pakeeza</title>
      <link>https://dev.to/pz_khalid</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pz_khalid"/>
    <language>en</language>
    <item>
      <title>Focus Feed: A GitHub CLI Extension for Intentional Learning</title>
      <dc:creator>Pakeeza</dc:creator>
      <pubDate>Sun, 15 Feb 2026 17:09:08 +0000</pubDate>
      <link>https://dev.to/pz_khalid/focus-feed-a-github-cli-extension-for-intentional-learning-3852</link>
      <guid>https://dev.to/pz_khalid/focus-feed-a-github-cli-extension-for-intentional-learning-3852</guid>
      <description>&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;We’ve all been there. You open YouTube to watch a 10-minute tutorial on Docker or React, but the algorithm has other plans. You get hit by a "Short," then a trending trailer, and suddenly, two hours are gone. Your focus is shattered, and you never even watched the tutorial.&lt;/p&gt;

&lt;p&gt;I built gh-focus to reclaim that lost time. It is a distraction-free YouTube client that lives entirely in your terminal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Problem&lt;/strong&gt;: &lt;br&gt;
&lt;strong&gt;The "Algorithmic Trap"&lt;/strong&gt;&lt;br&gt;
Standard YouTube is designed to keep you watching anything, not necessarily what you need. For developers, this is the ultimate productivity killer.&lt;br&gt;
&lt;strong&gt;The Solution:&lt;/strong&gt; &lt;br&gt;
&lt;strong&gt;Intentional Learning&lt;/strong&gt;&lt;br&gt;
gh-focus turns YouTube into a curated "Focus Feed." It bypasses the homepage, the ads, the comments, and the recommendations.&lt;br&gt;
 &lt;strong&gt;let's see how it works&lt;/strong&gt;&lt;br&gt;
Cover Image&lt;br&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%2Fjwcr1ph8unkz80ncmhrr.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%2Fjwcr1ph8unkz80ncmhrr.png" alt="Cover Image" width="778" height="384"&gt;&lt;/a&gt;&lt;br&gt;
Hero Section / Home Page&lt;br&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%2Fcheta8ialo3wwazr2qzz.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%2Fcheta8ialo3wwazr2qzz.png" alt="Hero Section / Home Page" width="800" height="211"&gt;&lt;/a&gt;&lt;br&gt;
All categories listed + Top learned content also adds up&lt;br&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%2Fhf9zfr9bo5v0z8w2k55s.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%2Fhf9zfr9bo5v0z8w2k55s.png" alt="All categories listed + Top learned content also adds up" width="697" height="383"&gt;&lt;/a&gt;&lt;br&gt;
Available categories listed&lt;br&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%2F5i0z1iiabiwxhelh9o3f.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%2F5i0z1iiabiwxhelh9o3f.png" alt="Available categories listed" width="566" height="385"&gt;&lt;/a&gt;&lt;br&gt;
Select your category you want to learn, select the video and choose at action tab&lt;br&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%2F2vriuivysk8rj5owesj9.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%2F2vriuivysk8rj5owesj9.png" alt="Select your category you want to learn, select the video and choose at action tab" width="800" height="262"&gt;&lt;/a&gt;&lt;br&gt;
Video launched correctly at MVP no ads, comments, distraction&lt;br&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%2Fprodz23mnuk711djsx6a.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%2Fprodz23mnuk711djsx6a.png" alt="Video launched correctly at MVP no ads, comments, distraction" width="800" height="356"&gt;&lt;/a&gt;&lt;br&gt;
Video added to github gist automatically&lt;br&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%2F7wef6pvlecw3qo9j8eo8.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%2F7wef6pvlecw3qo9j8eo8.png" alt="Video added to github gist automatically" width="791" height="182"&gt;&lt;/a&gt;&lt;br&gt;
A beautifully formatted Markdown learning log, automatically updated on my GitHub Gist after every focus session.&lt;br&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%2Fswgcz0al7swlojt90uv2.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%2Fswgcz0al7swlojt90uv2.png" alt="A beautifully formatted Markdown learning log, automatically updated on my GitHub Gist after every focus session." width="800" height="383"&gt;&lt;/a&gt;&lt;br&gt;
New Channel added successfully&lt;br&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%2Fqnrl8cn8kj9y9rhyxf32.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%2Fqnrl8cn8kj9y9rhyxf32.png" alt="New Channel added successfully" width="744" height="196"&gt;&lt;/a&gt;&lt;br&gt;
Removing any channel or category is easy and not prone to error&lt;br&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%2Fhmoh6rzskv2bo2579hhp.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%2Fhmoh6rzskv2bo2579hhp.png" alt="Removing any channel or category is easy and not prone to error" width="506" height="323"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Want to use...&lt;/strong&gt;&lt;br&gt;
Visit on github repository follow the guide at Readme.md file and you can run it locally in your system too. &lt;/p&gt;

&lt;h3&gt;
  
  
  Quick Start
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Install the extension:&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;gh extension install Pakeeza1508/gh-focus&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;Run it:&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;gh focus&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Features include:&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;🧠 Curated Categories:&lt;/strong&gt; Organize your learning into custom categories like Coding, DevOps, or Deep Work.&lt;br&gt;
&lt;strong&gt;⚡ Zero-Distraction Playback:&lt;/strong&gt; Videos launch in MPV, a lightweight, ad-free player. No sidebar, no comments, no rabbit holes.&lt;br&gt;
&lt;strong&gt;🛠️ The "Hacker" Fetcher:&lt;/strong&gt; A custom engine that uses RSS feeds and parallel scraping. No YouTube API keys required.&lt;br&gt;
**🔄 GitHub Gist Sync: **Automatically sync your watch history to a public GitHub Gist to build a learning portfolio.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters to me?&lt;/strong&gt;&lt;br&gt;
As a developer, my most valuable asset is my Focus. I wanted to build a tool that treats YouTube as a library, not a casino. By integrating it with the GitHub CLI, I’ve turned "watching a video" into a professional "commit" to my personal growth.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Demo&lt;/strong&gt;&lt;br&gt;
Extension Repo link : &lt;a href="https://github.com/Pakeeza1508/gh-focus" rel="noopener noreferrer"&gt;https://github.com/Pakeeza1508/gh-focus&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Watch the gh-focus walkthrough here&lt;/strong&gt;&lt;br&gt;
Youtube link: &lt;a href="https://youtu.be/Sz9DY1g3fl8?si=mCjftMO_oQ4MSQu2" rel="noopener noreferrer"&gt;https://youtu.be/Sz9DY1g3fl8?si=mCjftMO_oQ4MSQu2&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;My Experience with GitHub Copilot CLI&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Developing a terminal-based video manager came with some unique hurdles. GitHub Copilot CLI wasn't just a code generator; it was my Architect and Debugger&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The URL Resolution Engine:&lt;/strong&gt; YouTube URLs come in four different formats (handles, custom IDs, raw IDs, etc.). I described the complexity to Copilot, and it generated the robust Regex patterns that allow gh-focus to resolve any YouTube link instantly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Concurrency at Scale:&lt;/strong&gt; I wanted the feed to load instantly. Copilot helped me implement a Parallel ThreadPoolExecutor to fetch data from 20+ RSS feeds simultaneously. What would have been a 10-second wait now happens in less than one second.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cross-Platform Shell Wrappers:&lt;/strong&gt; Ensuring this worked as a native gh extension on Windows, Mac, and Linux was tricky. Copilot helped me write the .cmd and .sh wrappers that manage the Python virtual environment automatically for the user.&lt;/p&gt;

&lt;p&gt;Without Copilot, I would have spent days on the "plumbing" of the app. Instead, I was able to focus on the User Experience and the Gist Integration.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;When I Failed (And why I pivoted)&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Initially, I planned to build this using the Official YouTube Data API. It seemed like the "right" way to do it. However, I quickly hit a major wall: The Quota System.&lt;br&gt;
YouTube's API limits are extremely restrictive for a free tool. If a user has 20+ channels in their feed, the API quota would be exhausted in just a few refreshes. Furthermore, I didn't want users to have to go through the "hell" of creating a Google Cloud Project just to get an API key.&lt;br&gt;
&lt;strong&gt;The Pivot:&lt;/strong&gt;&lt;br&gt;
I decided to go "Old School." I realized that every YouTube channel still provides an RSS feed.&lt;br&gt;
The Problem: RSS feeds only show the last 15 videos and don't include all metadata.&lt;br&gt;
&lt;strong&gt;The Solution:&lt;/strong&gt; I used GitHub Copilot to help me build a "Hybrid Fetcher." It uses RSS feeds for speed and no-key access, and falls back to yt-dlp scraping for channels that have RSS disabled.&lt;br&gt;
This pivot turned gh-focus into a "Zero-Config" tool. You install it, and it just works. No keys, no quotas, no barriers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Contributors&lt;/strong&gt;&lt;br&gt;
&lt;a class="mentioned-user" href="https://dev.to/pz_khalid"&gt;@pz_khalid&lt;/a&gt;  [&lt;a href="https://github.com/Pakeeza1508" rel="noopener noreferrer"&gt;https://github.com/Pakeeza1508&lt;/a&gt;]&lt;br&gt;
&lt;a class="mentioned-user" href="https://dev.to/minhal-zubair"&gt;@minhal-zubair&lt;/a&gt; [&lt;a href="https://github.com/Minhal-Zubair" rel="noopener noreferrer"&gt;https://github.com/Minhal-Zubair&lt;/a&gt;]&lt;br&gt;
&lt;a class="mentioned-user" href="https://dev.to/babar_khan_406006f06fa416"&gt;@babar_khan_406006f06fa416&lt;/a&gt; [&lt;a href="https://github.com/babar0081" rel="noopener noreferrer"&gt;https://github.com/babar0081&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Final Thoughts&lt;/strong&gt;&lt;br&gt;
This project started as a silly idea to stop my own doomscrolling, but it turned into a deep dive into terminal UI design and the GitHub CLI ecosystem. Using GitHub Copilot CLI felt like having a senior engineer sitting next to me—helping me bridge the gap between "I have an idea" and "I have a working tool."&lt;br&gt;
In a world full of algorithms fighting for our attention, gh-focus is my way of taking that power back.&lt;/p&gt;

&lt;p&gt;May your terminal be productive and your focus be sharp!&lt;/p&gt;

&lt;h3&gt;
  
  
  ❤️ Special Thanks
&lt;/h3&gt;

&lt;p&gt;A huge thank you to the organizers and moderators of the &lt;strong&gt;#githubchallenge&lt;/strong&gt; for hosting such an inspiring event and fostering a creative space for developers to build.&lt;/p&gt;

&lt;p&gt;Special shoutout to &lt;a class="mentioned-user" href="https://dev.to/ben"&gt;@ben&lt;/a&gt; (&lt;a href="https://dev.to/ben"&gt;https://dev.to/ben&lt;/a&gt;), &lt;a class="mentioned-user" href="https://dev.to/jess"&gt;@jess&lt;/a&gt; (&lt;a href="https://dev.to/jess"&gt;https://dev.to/jess&lt;/a&gt;), and &lt;a class="mentioned-user" href="https://dev.to/peter"&gt;@peter&lt;/a&gt; (&lt;a href="https://dev.to/peter"&gt;https://dev.to/peter&lt;/a&gt;) for their work in making this challenge possible! 🚀&lt;/p&gt;

</description>
      <category>cli</category>
      <category>python</category>
      <category>githubcopilot</category>
      <category>devchallenge</category>
    </item>
  </channel>
</rss>
