<?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>Forem: James Hurtado</title>
    <description>The latest articles on Forem by James Hurtado (@jamesrhurtado).</description>
    <link>https://forem.com/jamesrhurtado</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%2F632533%2Fc5856c44-f61c-4633-9854-0b41b454fe78.jpg</url>
      <title>Forem: James Hurtado</title>
      <link>https://forem.com/jamesrhurtado</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/jamesrhurtado"/>
    <language>en</language>
    <item>
      <title>I Built Locked In: A Browser Extension to Stay Focused and Break the Dopamine Loop</title>
      <dc:creator>James Hurtado</dc:creator>
      <pubDate>Mon, 16 Feb 2026 02:09:58 +0000</pubDate>
      <link>https://forem.com/jamesrhurtado/i-built-locked-in-a-browser-extension-to-stay-focused-and-break-the-dopamine-loop-52en</link>
      <guid>https://forem.com/jamesrhurtado/i-built-locked-in-a-browser-extension-to-stay-focused-and-break-the-dopamine-loop-52en</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/github-2026-01-21"&gt;GitHub Copilot CLI Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I built Locked In, a Chrome extension that forces you to define your intention before entering distracting websites. Before you scroll, before you consume, before the algorithm grabs you, it asks a simple question: &lt;strong&gt;What are you locked in for?&lt;/strong&gt;&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.amazonaws.com%2Fuploads%2Farticles%2Fmz1xym9d22m7vm4hdqow.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%2Fmz1xym9d22m7vm4hdqow.png" alt=" " width="800" height="389"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You define your goal. You can optionally set a time limit. And while you are on the site, a floating widget reminds you why you are there.&lt;/p&gt;

&lt;p&gt;It does not block the site. It just holds you accountable to your own intention.&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.amazonaws.com%2Fuploads%2Farticles%2F0278b0rkwvpoc3iyu4w4.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%2F0278b0rkwvpoc3iyu4w4.png" alt=" " width="800" height="538"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Why did I build this?
&lt;/h3&gt;

&lt;p&gt;As someone who struggles with ADHD, I get distracted way too easily, especially by social media. And I’m pretty sure I’m not alone here.&lt;/p&gt;

&lt;p&gt;I also work a lot with communities, events, tech content, and social media. So I have to open LinkedIn, YouTube, Twitter, Instagram almost every day. But the problem is not opening them. The problem is this pattern:&lt;/p&gt;

&lt;p&gt;I go in to reply to one message. Or post something quickly. And then somehow 30 minutes disappear.&lt;/p&gt;

&lt;p&gt;I watched 12 random things. Read 4 hot takes. Scrolled through content I did not even care about. And I completely forgot what I originally went there to do.&lt;/p&gt;

&lt;p&gt;YouTube is the worst. I open it for a 6 minute tutorial and suddenly I am deep into startup documentaries or productivity videos that ironically make me less productive.&lt;/p&gt;

&lt;p&gt;I did not build this as a random side project to forget in two weeks but because I wanted something I would actually use daily.&lt;/p&gt;

&lt;p&gt;And now I do.&lt;/p&gt;

&lt;p&gt;A couple of friends who also struggle with focus are using it too.  I genuinely believe the best products start there. Solve your own frustration first.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;First of all, here's the &lt;a href="https://github.com/jamesrhurtado/task-reminder-extension" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Right now the extension is installed locally from the GitHub Releases tab. I have not published it to the Chrome Web Store yet because of the fee, so for now it is developer mode only.&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.amazonaws.com%2Fuploads%2Farticles%2Felvrpoxh1y5ye0fstygq.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%2Felvrpoxh1y5ye0fstygq.png" alt=" " width="800" height="348"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You just need to download the zip and load it as an unpacked extension.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open Chrome and go to chrome://extensions/&lt;/li&gt;
&lt;li&gt;Enable "Developer mode" (toggle in top-right corner)&lt;/li&gt;
&lt;li&gt;Click "Load unpacked"&lt;/li&gt;
&lt;/ul&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%2Ftezbjytle4jdbttcj21g.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%2Ftezbjytle4jdbttcj21g.png" alt=" " width="800" height="496"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once installed, when you click the extension icon you see two tabs. One is &lt;strong&gt;Lock In&lt;/strong&gt; and the other is &lt;strong&gt;Auto Prompt Sites.&lt;/strong&gt;&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.amazonaws.com%2Fuploads%2Farticles%2Fauo3iyjg026ax5cjleel.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%2Fauo3iyjg026ax5cjleel.png" alt=" " width="750" height="678"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Lock In
&lt;/h3&gt;

&lt;p&gt;This is the manual mode. This is for when you are already on a website. You click the extension. You define your task.&lt;/p&gt;

&lt;p&gt;You enter a short description of what you are about to do. It can be something simple like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reply to John about the event.&lt;/li&gt;
&lt;li&gt;Watch React tutorial on Zustand.&lt;/li&gt;
&lt;li&gt;Post recap from hackathon.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can also set a time limit. Five, fifteen, thirty minutes or a custom value.&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.amazonaws.com%2Fuploads%2Farticles%2Fnm8mgpl2294wpghm27fb.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%2Fnm8mgpl2294wpghm27fb.png" alt=" " width="732" height="684"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you lock in, a floating widget appears in the bottom right corner of the page. It shows your goal and a live countdown timer.&lt;/p&gt;

&lt;p&gt;It is visible enough to remind you, but not annoying. We'll go back to what happens when the time is up.&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.amazonaws.com%2Fuploads%2Farticles%2Fhd4jjfmxmhflunbwdet2.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%2Fhd4jjfmxmhflunbwdet2.png" alt=" " width="800" height="490"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Auto Prompt Sites
&lt;/h3&gt;

&lt;p&gt;This is one of the killers features. You can configure domains like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;linkedin.com&lt;/li&gt;
&lt;li&gt;youtube.com&lt;/li&gt;
&lt;li&gt;facebook.com&lt;/li&gt;
&lt;/ul&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%2Fa5f4ab75uqqkvvw37mnb.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%2Fa5f4ab75uqqkvvw37mnb.png" alt=" " width="744" height="572"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you visit one of those sites, instead of immediately seeing the feed, the extension intercepts you and asks:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What are you locked in for?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So let’s say I go to LinkedIn to reply to a message from someone about a university workshop. I write that as my goal. Then I enter the site.&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.amazonaws.com%2Fuploads%2Farticles%2Fqw9obdy6cj8n4rb0immz.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%2Fqw9obdy6cj8n4rb0immz.png" alt=" " width="800" height="490"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now if I start drifting into random posts, that floating widget keeps reminding me why I am there.&lt;/p&gt;

&lt;p&gt;And there is a progress bar that changes color as time passes.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Green when you still have more than half of your time.&lt;/li&gt;
&lt;li&gt;Orange when you are getting close.&lt;/li&gt;
&lt;li&gt;Red when you are almost out.&lt;/li&gt;
&lt;/ul&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%2F11yfumsif6tgfefsac4a.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%2F11yfumsif6tgfefsac4a.png" alt=" " width="800" height="490"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There is also an 80 percent warning that gives you a small nudge. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;In this demo, the timer is set to 1 minute, so the 80 percent warning kicks in at 12 seconds remaining.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When time runs out, you can either mark the task complete or extend it. The goal is not to restrict you. It is to make you conscious.&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.amazonaws.com%2Fuploads%2Farticles%2Fnzqlntz9mb34i53vflvm.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%2Fnzqlntz9mb34i53vflvm.png" alt=" " width="800" height="490"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;This project was ambitious for me.&lt;/p&gt;

&lt;p&gt;I had never built a browser extension before. Not once. But instead of just vibecoding and hoping it worked, I used GitHub Copilot CLI as my pair programmer and to understand how an extension works under the hood.&lt;/p&gt;

&lt;p&gt;There were definitely moments where things broke. The extension would not build. The service worker would not run. Messages were not being received.&lt;/p&gt;

&lt;p&gt;But instead of being stuck for hours, I could ask something like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Explain why this background script is not triggering. And get a structured explanation that pointed me in the right direction.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Honestly I feel good that I did not just copy paste. I kept asking why. I would select a file and ask Copilot to explain what it does, how it fits into the bigger picture, and why it is necessary.&lt;/p&gt;

&lt;p&gt;It felt less like AI replacing thinking and more like AI accelerating understanding.&lt;/p&gt;

&lt;h4&gt;
  
  
  UX &amp;amp; Design Help (a.k.a. things I wouldn’t have done alone)
&lt;/h4&gt;

&lt;p&gt;I’m not a design expert. Left to myself, this extension would’ve worked… but looked boring.&lt;/p&gt;

&lt;p&gt;Copilot helped me push the UX further by suggesting dynamic, visual feedback—like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An animated progress bar showing remaining time&lt;/li&gt;
&lt;li&gt;Smart color coding and smooth CSS transitions updating every second. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Would I have built that on my own? Probably not. Am I glad I did? Absolutely.&lt;/p&gt;

&lt;p&gt;Another thing I really appreciated: Copilot helped me learn, not just ship.&lt;/p&gt;

&lt;p&gt;It also helped brainstorm future ideas for the extension, which I’ll probably explore next.&lt;/p&gt;

&lt;h3&gt;
  
  
  Final Thoughts
&lt;/h3&gt;

&lt;p&gt;I had been thinking about building something like this for a long time.&lt;/p&gt;

&lt;p&gt;But like many ideas, it stayed in my notes.&lt;/p&gt;

&lt;p&gt;This challenge gave me the push to actually sit down and build it properly. Not just something to push to GitHub and forget. Something I would use every single day.&lt;/p&gt;

&lt;p&gt;And now I do.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Locked In&lt;/strong&gt; is already part of my workflow. It helps me stay intentional when I open platforms that are literally designed to steal attention.&lt;/p&gt;

&lt;p&gt;This one improved mine. And that is enough for me.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
      <category>cli</category>
      <category>githubcopilot</category>
    </item>
    <item>
      <title>I Built Clasez: An AI Study Copilot That Changes How Students Use Lecture Recordings with the GitHub Copilot SDK</title>
      <dc:creator>James Hurtado</dc:creator>
      <pubDate>Sun, 15 Feb 2026 22:23:02 +0000</pubDate>
      <link>https://forem.com/jamesrhurtado/i-built-clasez-an-ai-study-copilot-that-changes-how-students-use-lecture-recordings-with-the-43id</link>
      <guid>https://forem.com/jamesrhurtado/i-built-clasez-an-ai-study-copilot-that-changes-how-students-use-lecture-recordings-with-the-43id</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/github-2026-01-21"&gt;GitHub Copilot CLI Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I built Clasez, an AI powered CLI tool that transforms lecture transcripts into structured summaries, contextual key concepts, important takeaways, and searchable timestamped answers using the GitHub Copilot SDK.&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.amazonaws.com%2Fuploads%2Farticles%2F10ufxyvc8sdto403l9il.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%2F10ufxyvc8sdto403l9il.png" alt="Clasez Banner" width="800" height="347"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  But... why?
&lt;/h3&gt;

&lt;p&gt;As a student balancing internships, community work, and university lectures, I kept running into the same situation. I would miss a class because I had to be somewhere else. Or I would sit down before finals ready to review, open a two hour recording, and realize I had no idea where the important explanation was. I would drag the timeline back and forth trying to find the exact moment the professor explained one concept that I knew would show up on the exam.&lt;/p&gt;

&lt;p&gt;And yes, tools like this already exist. There are transcript summarizers that can help you break down recordings. But most of them either limit how much you can upload or hide the useful features behind subscriptions that many students simply cannot justify paying for every month (That is exactly the gap the GitHub Student Developer Pack helps close)&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.amazonaws.com%2Fuploads%2Farticles%2Fnhx7xwsxk0ck9q63rqph.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%2Fnhx7xwsxk0ck9q63rqph.png" alt="Developer Pack" width="800" height="311"&gt;&lt;/a&gt;&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.amazonaws.com%2Fuploads%2Farticles%2F8yth3gfqydtwlwqkly3r.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%2F8yth3gfqydtwlwqkly3r.png" alt="Copilot" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then I realized something. I already had access to Copilot Pro through the GitHub Student Developer Pack. I had access to powerful models. There was also the GitHub Copilot SDK, so instead of looking for a tool, I could build one.&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.amazonaws.com%2Fuploads%2Farticles%2Fw1wc9od2u9c5e8lulgcb.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%2Fw1wc9od2u9c5e8lulgcb.png" alt="Copilot SDK" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Clasez was born there. It is not just a summary generator. It is a study copilot that helps you focus on what actually matters in a lecture.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Tool
&lt;/h3&gt;

&lt;p&gt;If your university allows you to download lecture transcripts, even better if they include timestamps, that is all you need. At least in my case, recordings usually come with a .txt or .srt file.&lt;/p&gt;

&lt;p&gt;With Clasez, you provide the transcript and it transforms that raw text into structured, usable study material. Here is what that actually looks like in practice.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;h4&gt;
  
  
  Structured Lecture Summary
&lt;/h4&gt;

&lt;p&gt;Clasez generates a concise but meaningful summary of the entire lecture. This is not just a short paragraph to skim but the kind of overview you would read the night before an exam.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h4&gt;
  
  
  Contextual Key Concepts
&lt;/h4&gt;

&lt;p&gt;Instead of pulling generic definitions, Clasez extracts the key concepts as they were explained in class. &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h4&gt;
  
  
  Important Takeaways and Action Items
&lt;/h4&gt;

&lt;p&gt;This is where it becomes practical. Clasez identifies moments where the professor hints at exam relevance, suggests exercises, assigns homework, or emphasizes something as important.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h4&gt;
  
  
  Q&amp;amp;A with Timestamps
&lt;/h4&gt;

&lt;p&gt;And last but not least, the interactive Q and A mode. You can ask specific questions about the lecture, and if timestamps are available, Clasez returns the exact minute references. Instead of rewatching everything, you go straight to what matters. And during finals week, that difference is huge.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Demo
&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%2Faqyy4na441edk58d80lv.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%2Faqyy4na441edk58d80lv.png" alt="Demo" width="542" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;First of all, here's the &lt;a href="https://github.com/jamesrhurtado/clasez-cli" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For the demo, I wanted something that anyone in the tech industry could recognize. So I used a transcript from CS50, specifically a Data Structures lecture. It is one of the most popular programming courses in the world, and it felt like the perfect example.&lt;/p&gt;

&lt;p&gt;After installing the CLI, you simply run:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;clasez&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You are greeted with a clean terminal interface and a simple interactive menu. One thing I really wanted was for this to feel like a real product, not just a script that prints text (I took the idea from the GitHub Copilot Banner).&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.amazonaws.com%2Fuploads%2Farticles%2Fhk90hgpvqsv20mckrbya.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%2Fhk90hgpvqsv20mckrbya.png" alt="Demo" width="800" height="538"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you can see, you need to be authenticated with your GitHub Copilot subscription to access Pro models, or use a token.&lt;/p&gt;

&lt;p&gt;Before loading a transcript, you can head into settings and choose which model you want to use. Through GitHub Copilot, you can switch between models from Anthropic and Open AI. As a student, being able to select a powerful model through your GitHub Copilot subscription to analyze your own lectures is honestly mind blowing. Let's go with the popular Opus 4.6 for this.&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.amazonaws.com%2Fuploads%2Farticles%2Fojiin0rf8fpen3bdp59b.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%2Fojiin0rf8fpen3bdp59b.png" alt="Demo" width="800" height="508"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Loading the Transcript
&lt;/h4&gt;

&lt;p&gt;For this example, I downloaded the .srt transcript of the CS50 lecture so timestamps would be included. Once loaded, Clasez analyzes the file and displays useful metadata.&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.amazonaws.com%2Fuploads%2Farticles%2Fba0v9jd16wffufgatc0z.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%2Fba0v9jd16wffufgatc0z.png" alt="Demo" width="800" height="431"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Seeing twenty seven thousand words and over one hundred minutes of lecture time immediately shows the scale of what you are about to process.&lt;/p&gt;

&lt;h4&gt;
  
  
  Generating Insights
&lt;/h4&gt;

&lt;p&gt;From the main menu, you can choose what you want to generate. You can run everything at once or select specific features depending on what you need.&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.amazonaws.com%2Fuploads%2Farticles%2F2pxjl4z9s4xzo1b5apy9.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%2F2pxjl4z9s4xzo1b5apy9.png" alt="Demo" width="800" height="303"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For the demo, I generated the full analysis. The summary is streamed in real time inside the terminal.&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.amazonaws.com%2Fuploads%2Farticles%2F0i01wbjah3v34dre18bz.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%2F0i01wbjah3v34dre18bz.png" alt="Demo" width="800" height="594"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, the key concepts are generated. For this lecture, it identified things like trees, tries, arrays, hash tables, and memory management concepts. But what makes it useful is that the explanations are grounded in how they were discussed during class.&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.amazonaws.com%2Fuploads%2Farticles%2Fk1rek4kqgjojmk1tygoo.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%2Fk1rek4kqgjojmk1tygoo.png" alt="Demo" width="800" height="413"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then come the important takeaways. This is where Clasez surfaces exam hints, practical exercises, and emphasized topics. For example, it highlighted as important topic: "Linked lists allow dynamic memory allocation but require extra space for pointers; search is O(n), but prepending can be O(1)" and as Action Item: "Transition to Python programming language coming next week, which will abstract away manual memory management"&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.amazonaws.com%2Fuploads%2Farticles%2Fmbjwdlc1ululqy3bea0t.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%2Fmbjwdlc1ululqy3bea0t.png" alt="Demo" width="800" height="208"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Those are exactly the kinds of details that tend to show up later in problem sets or exams.&lt;/p&gt;

&lt;h4&gt;
  
  
  Q&amp;amp;A Mode
&lt;/h4&gt;

&lt;p&gt;Finally, I entered Q&amp;amp;A mode.&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.amazonaws.com%2Fuploads%2Farticles%2Fozyi70bdwlna51f6mq2s.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%2Fozyi70bdwlna51f6mq2s.png" alt="Demo" width="800" height="168"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I asked Clasez, "At what time did Professor Malan explain tries?". And instead of a vague answer, Clasez returned specific timestamps for the introduction, insertion examples, constant time lookups, and even the discussion about space trade offs.&lt;/p&gt;

&lt;p&gt;That means you can go directly to minute 01:54:03 instead of scrubbing randomly through a two hour recording.&lt;/p&gt;

&lt;p&gt;And if you need to revisit previous questions, the conversation history is accessible from the menu.&lt;/p&gt;

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

&lt;p&gt;GitHub Copilot CLI was key for Clasez development.&lt;/p&gt;

&lt;p&gt;The moment that pushed me to build this was watching James Montemagno use the GitHub Copilot SDK &lt;a href="https://github.com/jamesmontemagno/podcast-metadata-generator/tree/main" rel="noopener noreferrer"&gt;to build a podcast generator&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;At the beginning, I did not fully understand how the GitHub Copilot SDK worked under the hood. My background is stronger in Python, and some of the examples I explored were structured differently than what I was used to.&lt;/p&gt;

&lt;p&gt;So I did something simple. I used Copilot CLI to understand Copilot SDK.&lt;/p&gt;

&lt;p&gt;I started by using the web_fetch tool to explore the SDK documentation, understand how requests were structured, and see how streaming responses were handled.&lt;/p&gt;

&lt;p&gt;Then I switched to plan mode.&lt;/p&gt;

&lt;p&gt;Plan mode was probably the most important feature during the early stage. I used it with a premium model to define my MVP clearly. What features should be included in version one. How transcript parsing should be handled. How to structure the CLI menus. What should be separated into layers so the project would not become messy later.&lt;/p&gt;

&lt;p&gt;Instead of jumping straight into code, I had a phased plan.&lt;/p&gt;

&lt;p&gt;After that, I went into the popular vibecoding mode. I used slash commands inside the CLI to generate boilerplate, refactor functions, and iterate quickly. I asked it to scaffold the transcript parser. I refined prompt templates for summary generation. I improved how timestamps were extracted and formatted.&lt;/p&gt;

&lt;p&gt;Of course, it did not work perfectly at first.&lt;/p&gt;

&lt;p&gt;The first time I tested the full flow, something broke. Then came debugging.&lt;/p&gt;

&lt;p&gt;This is where Copilot really felt like a pair programmer. I pasted error traces, asked it to analyze edge cases, and walked through the logic step by step. It helped me identify issues in how transcripts were being parsed and how prompts were structured for longer inputs.&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.amazonaws.com%2Fuploads%2Farticles%2F0ncj3gheb0q6w30lvden.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%2F0ncj3gheb0q6w30lvden.png" alt="Demo" width="800" height="310"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I also used it to fetch and summarize documentation, especially because the Copilot SDK is still relatively new. Instead of guessing how something behaved, I would ask Copilot to clarify expected behavior or suggest a cleaner approach.&lt;/p&gt;

&lt;p&gt;Instead of feeling limited by time or complexity, I felt like I could experiment more. Try new features. Refactor confidently. Explore ideas I would normally postpone.&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.amazonaws.com%2Fuploads%2Farticles%2Fhl5mw01z5qhx8dt7tcu5.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%2Fhl5mw01z5qhx8dt7tcu5.png" alt="Demo" width="649" height="589"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Clasez started as an idea to save time during finals. But building it changed the way I see what students can actually create. &lt;strong&gt;Because once students realize they can build tools like this, the Student Developer Pack stops being just a benefit and starts becoming a launchpad.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is something that I will start mentioning when I talk about the GitHub Student Developer Pack in student communities.&lt;/p&gt;

&lt;p&gt;GitHub Repository: &lt;a href="https://github.com/jamesrhurtado/clasez-cli" rel="noopener noreferrer"&gt;jamesrhurtado/clasez-cli&lt;/a&gt;&lt;/p&gt;

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