<?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: gulnur</title>
    <description>The latest articles on DEV Community by gulnur (@glnurltn).</description>
    <link>https://dev.to/glnurltn</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%2F1711188%2F3fba60f1-f1be-4d0f-b569-b0c37d3e3899.jpg</url>
      <title>DEV Community: gulnur</title>
      <link>https://dev.to/glnurltn</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/glnurltn"/>
    <language>en</language>
    <item>
      <title>GitHub Issues Explained: When Should You Open One in Open Source?</title>
      <dc:creator>gulnur</dc:creator>
      <pubDate>Tue, 13 Oct 2026 07:40:14 +0000</pubDate>
      <link>https://dev.to/glnurltn/github-issues-explained-when-should-you-open-one-in-open-source-4bm6</link>
      <guid>https://dev.to/glnurltn/github-issues-explained-when-should-you-open-one-in-open-source-4bm6</guid>
      <description>&lt;p&gt;When you first start exploring open-source projects on GitHub, you might notice something: almost every active repository has an &lt;strong&gt;Issues&lt;/strong&gt; tab.&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%2F0chtglkqvmknb99v1kw6.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0chtglkqvmknb99v1kw6.png" alt=" " width="799" height="196"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But what is it actually for? Should you open an issue whenever you find a bug? What if you have an idea for a new feature? And if you already know how to fix something, should you open an issue first or go straight to a pull request?&lt;/p&gt;

&lt;p&gt;I used to think that GitHub Issues were solely for project owners to track their own tasks 🫣, but I learned that anyone can open an issue to report a bug, suggest a feature etc..&lt;/p&gt;

&lt;p&gt;Let's break it down.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is a GitHub Issue?
&lt;/h2&gt;

&lt;p&gt;A GitHub Issue is a place to report problems, suggest improvements, ask questions about a project, or discuss work that needs to be done.&lt;/p&gt;

&lt;p&gt;Think of it as a shared record of something that needs attention. Instead of keeping ideas in your head or discussing problems in scattered messages, you create a place where contributors and maintainers can understand the context and discuss possible solutions.&lt;/p&gt;

&lt;p&gt;I think issues are useful for more than bug reports. They can also help maintainers organize work, collect feedback, prioritize features, and coordinate contributions.&lt;/p&gt;

&lt;h2&gt;
  
  
  When should you open an issue?
&lt;/h2&gt;

&lt;p&gt;There are a few common situations where opening an issue makes sense.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. You found a bug 🐛
&lt;/h3&gt;

&lt;p&gt;Suppose you are using an open-source application and notice that a button stops working after a particular action.&lt;/p&gt;

&lt;p&gt;Before reporting it, try to reproduce the problem and check whether it has already been reported.&lt;/p&gt;

&lt;p&gt;A useful bug report should explain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What you were trying to do.&lt;/li&gt;
&lt;li&gt;The steps needed to reproduce the problem.&lt;/li&gt;
&lt;li&gt;What you expected to happen.&lt;/li&gt;
&lt;li&gt;What actually happened.&lt;/li&gt;
&lt;li&gt;Any relevant error messages or screenshots.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, instead of writing:&lt;/p&gt;

&lt;p&gt;"This button is broken."&lt;/p&gt;

&lt;p&gt;You could write:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Title:&lt;/strong&gt; Analyze button remains disabled after recording stops&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Steps to reproduce:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Start recording audio.&lt;/li&gt;
&lt;li&gt;Stop the recording.&lt;/li&gt;
&lt;li&gt;Observe the Analyze button.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Expected behavior:&lt;/strong&gt; The Analyze button becomes available once recording has finished.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Actual behavior:&lt;/strong&gt; The button remains disabled, preventing the user from analyzing the recorded audio.&lt;/p&gt;

&lt;p&gt;This gives maintainers something concrete to investigate.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. You have an idea for a new feature
&lt;/h3&gt;

&lt;p&gt;You don't need to find a bug to open an issue. Maybe you are using a library and think it would be useful if it supported a new configuration option. Or perhaps you are contributing to a project and see an opportunity to improve the user experience.&lt;/p&gt;

&lt;p&gt;An issue lets you explain the idea before anyone spends time implementing it.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Title:&lt;/strong&gt; Add a sound discovery card to display classification results&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It would be useful to display each sound classification result in a dedicated discovery card.&lt;/p&gt;

&lt;p&gt;The card could show the predicted sound label, confidence score, and a short explanation of the result.&lt;/p&gt;

&lt;p&gt;This could make the classification output easier to understand and give users a more engaging way to explore their recordings.&lt;/p&gt;

&lt;p&gt;Would this feature fit the project's current direction?&lt;/p&gt;

&lt;p&gt;Notice that this is a proposal, not a demand. The maintainers may suggest a different approach, ask for more details, or decide that the feature doesn't fit the project's goals. That's part of open-source collaboration.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. The documentation needs improvement
&lt;/h3&gt;

&lt;p&gt;Sometimes the code works perfectly, but the documentation doesn't.&lt;/p&gt;

&lt;p&gt;You might find an outdated installation command, a broken link, a missing explanation, or an example that no longer works.&lt;/p&gt;

&lt;p&gt;These are valid things to report, too.&lt;/p&gt;

&lt;p&gt;For small, obvious documentation fixes, you may be able to submit a pull request directly. For larger changes or unclear expectations, opening an issue first can help you understand what the maintainers want.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. You want to discuss an approach before writing code
&lt;/h3&gt;

&lt;p&gt;Imagine that you want to add a feature, but there are several possible implementations.&lt;/p&gt;

&lt;p&gt;Should you introduce a new dependency? Should the feature be handled by an existing module? Would the change make the project harder to maintain?&lt;/p&gt;

&lt;p&gt;This is a good time to discuss the idea before implementing it, especially if the change is substantial.&lt;/p&gt;

&lt;p&gt;A short conversation with maintainers can prevent you from spending hours building something that doesn't fit the project's architecture or priorities.&lt;/p&gt;

&lt;h2&gt;
  
  
  Issue vs. Pull Request vs. Discussion
&lt;/h2&gt;

&lt;p&gt;These three GitHub features are related, but they serve different purposes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Issue:&lt;/strong&gt; Describes a problem, task, or proposal that needs attention.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pull Request (PR):&lt;/strong&gt; Proposes code or other repository changes for review and merging.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Discussion:&lt;/strong&gt; Provides a space for open-ended questions, ideas, and community conversations when the project has GitHub Discussions enabled.&lt;/p&gt;

&lt;p&gt;A simple way to remember the difference:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I found a problem → consider opening an issue.&lt;/li&gt;
&lt;li&gt;I have an idea that needs feedback → consider an issue or discussion, depending on the project's conventions.&lt;/li&gt;
&lt;li&gt;I have a proposed change ready for review → open a pull request.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These aren't strict rules for every project. Some projects prefer discussions for feature proposals, while others use issues for almost everything. Always check the repository's guidelines.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Should you always open an issue before making a change&lt;/strong&gt;?&lt;/p&gt;

&lt;p&gt;No.&lt;/p&gt;

&lt;p&gt;If you find a typo or a broken link and the fix is obvious, you may be able to submit a small pull request directly. However, for a significant feature, architectural change, or improvement that could affect the project's direction, discussing it first is often a better approach.&lt;/p&gt;

&lt;p&gt;Before opening an issue or starting work, take a few minutes to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Read the README and look for a &lt;code&gt;CONTRIBUTING.md&lt;/code&gt; file.&lt;/li&gt;
&lt;li&gt;Search existing issues, including closed ones.&lt;/li&gt;
&lt;li&gt;Check whether the project uses issue templates or specific labels.&lt;/li&gt;
&lt;li&gt;Look at the project's contribution guidelines.&lt;/li&gt;
&lt;li&gt;Explain your idea clearly and ask for feedback when needed.&lt;/li&gt;
&lt;/ol&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%2Frl09dfd6nvaz7s1wi8z0.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frl09dfd6nvaz7s1wi8z0.png" alt=" " width="800" height="298"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;sample c. guideline&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This helps prevent duplicate reports and unnecessary work.&lt;/p&gt;

&lt;h2&gt;
  
  
  What makes a good issue?
&lt;/h2&gt;

&lt;p&gt;A good issue makes it easy for someone else to understand what needs attention.&lt;/p&gt;

&lt;p&gt;Here are a few principles I try to keep in mind:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Be specific.&lt;/strong&gt; Describe one problem or proposal clearly rather than combining several unrelated topics.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Provide context.&lt;/strong&gt; Explain why the issue matters and what you were trying to achieve.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Show what you tried.&lt;/strong&gt; For bugs, include reproduction steps and relevant errors. For feature requests, explain the use case.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Keep it concise.&lt;/strong&gt; Include the information needed to understand the issue without adding unrelated details.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Be open to feedback.&lt;/strong&gt; An issue starts a conversation. It doesn't guarantee that a feature will be implemented exactly as proposed.&lt;/p&gt;

&lt;p&gt;Also, avoid opening duplicate issues. If someone has already reported the same problem, adding useful information to the existing conversation is usually more helpful.&lt;/p&gt;

&lt;h2&gt;
  
  
  What happens after you open an issue?
&lt;/h2&gt;

&lt;p&gt;Opening an issue is the beginning, not the end.&lt;/p&gt;

&lt;p&gt;A maintainer might ask for more information, label it, assign it to a milestone, invite contributors to work on it, or close it if it is a duplicate or falls outside the project's scope.&lt;/p&gt;

&lt;p&gt;Sometimes an issue leads to a pull request. Sometimes the discussion reveals that the proposed feature isn't needed. And sometimes the issue simply documents a problem for future reference.&lt;/p&gt;

&lt;p&gt;If you solve the problem yourself after opening the issue, share the solution and update or close the issue when appropriate.Not every issue needs to become code to be useful.&lt;/p&gt;

&lt;p&gt;One thing that confused me at first was why some issues remain visible even after the problem has been fixed. I learned that fixing a problem doesn't automatically remove its issue from GitHub. The issue usually needs to be closed by someone with the appropriate permissions, often after the related pull request is merged or the fix is verified. Closed issues remain in the repository's history, so people can still refer to them later.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A small but important part of open source&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A well-written issue can save maintainers time, help another contributor find their first task, and turn a vague idea into a concrete improvement.&lt;/p&gt;

&lt;p&gt;So the next time you notice something that could be better in an open-source project, don't immediately jump into the code.&lt;/p&gt;

&lt;p&gt;Take a moment to understand the problem, check whether it has already been discussed, and decide whether an issue is the right next step.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resources&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.github.com/en/issues/tracking-your-work-with-issues/learning-about-issues/about-issues" rel="noopener noreferrer"&gt;GitHub Docs: About Issues&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.github.com/en/issues/tracking-your-work-with-issues/using-issues/creating-an-issue" rel="noopener noreferrer"&gt;GitHub Docs: Creating an Issue&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/github/opensource.guide/blob/main/_articles/how-to-contribute.md" rel="noopener noreferrer"&gt;GitHub: How to Contribute to Open Source&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>github</category>
      <category>opensource</category>
    </item>
    <item>
      <title>EchoQuest: Touch Grass, Listen Closer, Discover More 🌱</title>
      <dc:creator>gulnur</dc:creator>
      <pubDate>Sun, 11 Oct 2026 19:26:00 +0000</pubDate>
      <link>https://dev.to/glnurltn/echoquest-touch-grass-listen-closer-discover-more-42go</link>
      <guid>https://dev.to/glnurltn/echoquest-touch-grass-listen-closer-discover-more-42go</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week1-2026-10-05"&gt;Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;EchoQuest is an AI-powered nature sound discovery app designed to encourage people to step outside, listen more carefully, and reconnect with the natural world.&lt;/p&gt;

&lt;p&gt;We spend so much time looking at screens that we sometimes forget to pay attention to what's happening around us.I wanted to explore how AI could make outdoor exploration more engaging instead of giving people another reason to stay online.&lt;/p&gt;

&lt;p&gt;The idea is simple: go outside, listen to the world, and turn what you hear into a discovery.&lt;/p&gt;

&lt;p&gt;With EchoQuest, users can record sounds around them and analyze them using an AI audio classification model. The app displays the model's predictions alongside nature-focused insights, turning an ordinary walk into a small exploration mission.&lt;/p&gt;

&lt;p&gt;To make the experience more engaging, I added a few lightweight gamification features:&lt;/p&gt;

&lt;p&gt;🌱 Sound Discovery: Record an outdoor sound and explore the model's predictions.&lt;/p&gt;

&lt;p&gt;✨ XP Points: Earn points for supported nature discoveries.&lt;/p&gt;

&lt;p&gt;📖 Nature Journal: Review previous discoveries and track your progress.&lt;/p&gt;

&lt;p&gt;🏅 Achievement Badges: Unlock milestones as you continue exploring.&lt;/p&gt;

&lt;p&gt;EchoQuest is built for curious people, students, nature lovers, and anyone who could use a little motivation to take a break from their screen.&lt;/p&gt;

&lt;p&gt;The goal is simple: step outside, listen closer, and explore. 🌿&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;See EchoQuest in Action&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1.Sound Prediction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Start by recording a sound from your surroundings. EchoQuest processes the recording and displays the model's predictions.&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%2Fj3pzlcj8vryhpcg7cmgd.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj3pzlcj8vryhpcg7cmgd.png" alt=" " width="799" height="440"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once the analysis is complete, users can explore the results and see whether the sound offers an interesting nature discovery.&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%2F3czh2siljubo7bj3bihb.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3czh2siljubo7bj3bihb.png" alt=" " width="800" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Nature Journal and Badges&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Discoveries can become part of an ongoing journey. The journal keeps track of previous results, while XP points and achievement badges add a sense of progress.&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%2Fxxwhwnbdvgoo3stcq3y6.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxxwhwnbdvgoo3stcq3y6.png" alt=" " width="800" height="374"&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmy5uwtwyo80ihoo6d5cm.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmy5uwtwyo80ihoo6d5cm.png" alt=" " width="799" height="178"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Visit the Demo &amp;amp; Try It Yourself&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;🔗 Live demo: &lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://echoquest-qk1i.onrender.com/" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;echoquest-qk1i.onrender.com&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;🎥 Video demo: &lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://www.canva.com/design/DAHXutPL0GY/iMdMn7nbwxOt2r4lTQHlcQ/edit?utm_content=DAHXutPL0GY&amp;amp;utm_campaign=designshare&amp;amp;utm_medium=link2&amp;amp;utm_source=sharebutton" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;canva.com&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;💻 GitHub repository: &lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Gulnur-Altan" rel="noopener noreferrer"&gt;
        Gulnur-Altan
      &lt;/a&gt; / &lt;a href="https://github.com/Gulnur-Altan/echoquest" rel="noopener noreferrer"&gt;
        echoquest
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      🌿 An AI-powered nature sound discovery app that turns outdoor walks into quests with audio classification
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;🌿 EchoQuest — Touch Grass, One Sound at a Time&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;
  &lt;strong&gt;Turn your next walk into an AI-powered nature discovery quest.&lt;/strong&gt;
&lt;/p&gt;

&lt;p&gt;
  🎙️ Audio Classification · 🌱 Nature Discovery · ✨ Gamification
&lt;/p&gt;

&lt;p&gt;
  &lt;em&gt;Built for Hacktoberfest Open-Source AI Challenge — Week 1: Touch Grass&lt;/em&gt;
&lt;/p&gt;




&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🌎 About&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;EchoQuest&lt;/strong&gt; is an AI-powered web application that encourages people to step away from their screens and reconnect with nature through sound.&lt;/p&gt;

&lt;p&gt;Record the sounds around you, explore AI-generated audio predictions, collect discovery points, unlock achievement badges, and build your own nature journal.&lt;/p&gt;

&lt;p&gt;The idea is simple: &lt;strong&gt;use AI to inspire people to experience the real world, not spend more time staring at a screen.&lt;/strong&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;✨ Features&lt;/h2&gt;
&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;🎙️ &lt;strong&gt;Record Nature Sounds&lt;/strong&gt; — Capture environmental audio directly in your browser.&lt;/li&gt;
&lt;li&gt;🤖 &lt;strong&gt;AI Audio Classification&lt;/strong&gt; — Analyze recordings with a pretrained audio classification model.&lt;/li&gt;
&lt;li&gt;🍃 &lt;strong&gt;Nature Insights&lt;/strong&gt; — Explore nature-focused information based on recognized sound categories.&lt;/li&gt;
&lt;li&gt;⭐ &lt;strong&gt;Experience Points (XP)&lt;/strong&gt;…&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Gulnur-Altan/echoquest" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;The project source code is available on GitHub. Contributions, suggestions, and bug reports are welcome!&lt;/p&gt;
&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;EchoQuest is built with Next.js, React, TypeScript, and Transformers.js.&lt;/p&gt;

&lt;p&gt;For audio classification, I use the pretrained Xenova/ast-finetuned-audioset-10-10-0.4593 model. The application records audio through the browser, preprocesses the recording for inference, and displays the model's top predictions. Rather than sending recordings to a paid, hosted inference API, EchoQuest runs the classification pipeline in the user's browser.&lt;/p&gt;

&lt;p&gt;The main technical components include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Audio recording: The browser's MediaRecorder API captures audio.&lt;/li&gt;
&lt;li&gt;Audio preprocessing: The recording is decoded and resampled to the model's expected 16 kHz sample rate.&lt;/li&gt;
&lt;li&gt;AI inference: Transformers.js runs the pretrained audio classification model.&lt;/li&gt;
&lt;li&gt;Nature-focused interpretation: The app uses model predictions to provide relevant exploratory insights.&lt;/li&gt;
&lt;li&gt;Progress tracking: Browser local storage persists the nature journal.&lt;/li&gt;
&lt;li&gt;Gamification: XP points and achievement badges encourage continued exploration.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One important design decision was to keep the core inference process in the browser rather than depend on a paid, hosted AI inference API. This reduces reliance on external inference services and keeps the audio processing on the client side.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note: The model is a general audio-event classifier, not a dedicated wildlife species identification system. Its predictions are exploratory hints, not definitive scientific identifications.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;Open innovation was important to this project because it made experimentation with AI more accessible.&lt;/p&gt;

&lt;p&gt;By using a pretrained model and the JavaScript machine learning ecosystem, I could focus on integrating audio classification into a web application and designing an experience around it, without having to train a model from scratch or depend on a proprietary inference API.&lt;/p&gt;

&lt;p&gt;I also wanted to explore how open tools can help developers turn an idea into something people can actually use.&lt;/p&gt;

&lt;p&gt;EchoQuest could grow through contributions from other developers. Possible areas for improvement include sound classification evaluation, accessibility, testing, nature-focused insights, and the overall discovery experience.&lt;/p&gt;

&lt;p&gt;For me, the interesting part is not just getting an AI model to produce a prediction. It's exploring how that prediction can become part of a useful, engaging experience.&lt;/p&gt;

&lt;p&gt;For a project about reconnecting people with nature, I like the idea that the technology behind it can also be explored, inspected, and improved by a community.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I Learned and What's Next&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For me, the most challenging part of EchoQuest wasn't integrating the AI model or writing the code. It was turning the model's predictions into a meaningful game experience. Designing the XP system, badges, and Nature Journal meant finding ways to reward real nature discoveries without treating every AI prediction as a valid discovery.&lt;/p&gt;

&lt;p&gt;Ironically, the biggest challenge was actually getting outside and listening to different sounds! 😃&lt;/p&gt;

&lt;p&gt;I learned that building an AI-powered app isn't just about making a model work; it's also about creating an engaging experience that encourages people to spend more time outdoors and notice the world around them.&lt;/p&gt;

&lt;p&gt;Next, I'd like to make discoveries more meaningful and improve the reward system.. 🌿&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>DocTrace: Investigating Angular Migrations with Sanity Context MCP</title>
      <dc:creator>gulnur</dc:creator>
      <pubDate>Sun, 04 Oct 2026 20:23:42 +0000</pubDate>
      <link>https://dev.to/glnurltn/doctrace-investigating-angular-migrations-with-sanity-context-mcp-125m</link>
      <guid>https://dev.to/glnurltn/doctrace-investigating-angular-migrations-with-sanity-context-mcp-125m</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/sanity-2026-09-16"&gt;Sanity Challenge, Path One: Ship an Agent That Queries Real Content&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I have worked with production systems where version upgrades need to be planned carefully. In a live environment, an update is not just about running a command. As developers, we need to understand breaking changes, compatibility concerns, configuration updates, and potential impact before making the change.&lt;/p&gt;

&lt;p&gt;I have often found myself going back to documentation or looking for additional guidance before making these decisions. Relevant information can be spread across multiple documentation pages, making the investigation process time-consuming.&lt;/p&gt;

&lt;p&gt;That experience inspired me to build &lt;strong&gt;DocTrace&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I wanted to explore whether an AI agent could make this process more focused: instead of asking a general-purpose chatbot about a migration, give it a structured, curated documentation source and let it investigate the relevant information before answering.&lt;/p&gt;

&lt;p&gt;DocTrace is an AI documentation investigation agent focused on Angular 20 → Angular 21 migration.&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%2F9zdybkw6zgwt94dvn2uc.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9zdybkw6zgwt94dvn2uc.png" alt=" " width="800" height="429"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;For this challenge, I intentionally kept the initial Knowledge Base focused on Angular 20 → 21. The same architecture can be extended to future Angular versions by adding the relevant documentation to Sanity and updating the Knowledge Base.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Migration questions often require checking several pieces of documentation: breaking changes, configuration changes, testing updates, and version-specific behavior. DocTrace turns this into a focused investigation workflow.&lt;/p&gt;

&lt;p&gt;The documentation is stored as structured content in Sanity, organized into a Knowledge Base, and exposed to the agent through Sanity Context MCP.&lt;/p&gt;

&lt;p&gt;A user can ask a question such as:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What are the main breaking changes I should consider when migrating from Angular 20 to Angular 21?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;DocTrace retrieves relevant documentation from the connected Sanity Knowledge Base ..&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%2Fjp2h28ucvltzolnu7ga8.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjp2h28ucvltzolnu7ga8.png" alt=" " width="800" height="272"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;..and uses that context to generate the investigation result&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%2Fcw6fc093o4iyglgrflxq.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcw6fc093o4iyglgrflxq.png" alt=" " width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The agent is intentionally scoped to Angular 20 → 21 migration rather than being a general-purpose chatbot. This makes it possible to curate a small but meaningful documentation set and evaluate how an agent works with structured content.&lt;/p&gt;

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


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://doctrace-nine.vercel.app/" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;doctrace-nine.vercel.app&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;The deployed application provides a simple interface where users can ask Angular migration questions and receive an investigation based on the connected Sanity documentation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Gulnur-Altan" rel="noopener noreferrer"&gt;
        Gulnur-Altan
      &lt;/a&gt; / &lt;a href="https://github.com/Gulnur-Altan/doctrace" rel="noopener noreferrer"&gt;
        doctrace
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;DocTrace&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;AI documentation investigation agent for Angular 20 → Angular 21 migration.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;DocTrace helps developers investigate Angular migration questions by querying structured technical documentation stored in Sanity.&lt;/p&gt;
&lt;p&gt;Instead of relying only on the language model's general knowledge, DocTrace retrieves relevant documentation from a Sanity Knowledge Base through &lt;strong&gt;Sanity Context MCP&lt;/strong&gt; and uses that context to formulate its answer.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Demo&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Live Demo:&lt;/strong&gt; &lt;a href="https://doctrace-nine.vercel.app/" rel="nofollow noopener noreferrer"&gt;https://doctrace-nine.vercel.app/&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;What I Built&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;DocTrace is a focused documentation investigation agent for one specific technical problem:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What should I know when migrating an Angular 20 application to Angular 21?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The agent can investigate topics such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Breaking changes&lt;/li&gt;
&lt;li&gt;Migration steps&lt;/li&gt;
&lt;li&gt;Zoneless change detection&lt;/li&gt;
&lt;li&gt;Testing configuration&lt;/li&gt;
&lt;li&gt;Compatibility considerations&lt;/li&gt;
&lt;li&gt;Angular 20 → 21 migration checklists&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The project intentionally keeps the scope narrow so that the agent can provide grounded answers from a curated documentation set.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Architecture&lt;/h2&gt;

&lt;/div&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;
&lt;pre class="notranslate"&gt;&lt;code&gt;                    ┌─────────────────────┐
                    │      DocTrace UI     │
                    │      Next.js         │
                    └──────────┬──────────┘
                               │
                               ▼
                    ┌─────────────────────┐
                    │   Next.js API&lt;/code&gt;&lt;/pre&gt;…&lt;/div&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Gulnur-Altan/doctrace" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  How I Used Sanity
&lt;/h2&gt;

&lt;p&gt;Sanity is the documentation source and structured content layer behind the agent.&lt;/p&gt;

&lt;p&gt;I created a custom documentation schema with fields including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;title&lt;/li&gt;
&lt;li&gt;technology&lt;/li&gt;
&lt;li&gt;version&lt;/li&gt;
&lt;li&gt;type&lt;/li&gt;
&lt;li&gt;summary&lt;/li&gt;
&lt;li&gt;content&lt;/li&gt;
&lt;li&gt;sourceUrl&lt;/li&gt;
&lt;li&gt;publishedAt&lt;/li&gt;
&lt;li&gt;relatedVersions&lt;/li&gt;
&lt;li&gt;breakingChanges&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I then created structured documentation entries focused on Angular 20 → Angular 21:&lt;/p&gt;

&lt;p&gt;Angular 21 Migration Guide&lt;br&gt;
Angular 20 to 21 Migration Guide&lt;br&gt;
Angular 21 Zoneless Change Detection&lt;br&gt;
Angular 21 Testing with Vitest&lt;br&gt;
Angular 20 vs Angular 21 Migration Checklist&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%2F5ota03b3awi7kpmsb9k4.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5ota03b3awi7kpmsb9k4.png" alt=" " width="800" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These documents were added to a Sanity Knowledge Base.&lt;/p&gt;

&lt;p&gt;Then i created a Sanity Context MCP endpoint connected to that Knowledge Base.&lt;/p&gt;

&lt;p&gt;The agent connects to the MCP endpoint from the server side and uses the available Context tools to investigate the documentation before generating its response.&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%2Flpf1udqz8thr88rs5urt.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flpf1udqz8thr88rs5urt.png" alt=" " width="800" height="352"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The agent is instructed to:&lt;/p&gt;

&lt;p&gt;Use the Sanity Knowledge Base for Angular migration questions.&lt;br&gt;
Prefer retrieved Sanity content over unsupported general knowledge.&lt;br&gt;
Use multiple investigation steps when necessary.&lt;br&gt;
Avoid inventing information that is not supported by the available documentation.&lt;br&gt;
State when the available documentation is insufficient.&lt;/p&gt;

&lt;p&gt;The resulting architecture is:&lt;br&gt;
&lt;/p&gt;

&lt;pre data-lang="mermaid"&gt;&lt;code&gt;---
config:
  theme: base
  themeVariables:
    fontFamily: '"Public Sans", system-ui, sans-serif'
    fontSize: 20px

    cScale0: "#f3d6d8"
    cScaleLabel0: "#69444a"
    cScaleInv0: "#c98f97"

    cScale1: "#f3dfc1"
    cScaleLabel1: "#715b38"
    cScaleInv1: "#d0a866"

    cScale2: "#d8e5d2"
    cScaleLabel2: "#4c6047"
    cScaleInv2: "#9bb78f"
---

flowchart LR

    A["💬 User Question"]
        --&amp;gt; B["🖥️ DocTrace UI&amp;lt;br/&amp;gt;Next.js"]

    B --&amp;gt; C["⚙️ API Route&amp;lt;br/&amp;gt;AI SDK"]

    C --&amp;gt; D["🤖 Gemini&amp;lt;br/&amp;gt;AI Agent"]

    D --&amp;gt; E["🔌 Sanity Context&amp;lt;br/&amp;gt;MCP"]

    E --&amp;gt; F["📚 Sanity&amp;lt;br/&amp;gt;Knowledge Base"]

    F --&amp;gt; G["📄 Structured&amp;lt;br/&amp;gt;Angular Documentation"]

    D --&amp;gt; H["✅ Investigation&amp;lt;br/&amp;gt;Result"]

    classDef user fill:#f3d6d8,stroke:#c98f97,color:#69444a,stroke-width:2px
    classDef app fill:#f3dfc1,stroke:#d0a866,color:#715b38,stroke-width:2px
    classDef sanity fill:#d8e5d2,stroke:#9bb78f,color:#4c6047,stroke-width:2px

    class A,H user
    class B,C,D app
    class E,F,G sanity&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;This allowed me to use Sanity as an actual knowledge source for the agent rather than simply using Sanity as a database for the frontend.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sanity Project Details
&lt;/h2&gt;

&lt;p&gt;Sanity -&amp;gt; &lt;a href="https://www.sanity.io/" rel="noopener noreferrer"&gt;https://www.sanity.io/&lt;/a&gt;&lt;br&gt;
Sanity Project ID: 3fv91nvs&lt;/p&gt;

&lt;p&gt;The project contains the structured Angular documentation used by the DocTrace Knowledge Base.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>sanitychallenge</category>
      <category>sanity</category>
      <category>ai</category>
    </item>
    <item>
      <title>Should You Add Projects to Your CV?</title>
      <dc:creator>gulnur</dc:creator>
      <pubDate>Fri, 25 Sep 2026 07:28:09 +0000</pubDate>
      <link>https://dev.to/glnurltn/should-you-add-projects-to-your-cv-2iak</link>
      <guid>https://dev.to/glnurltn/should-you-add-projects-to-your-cv-2iak</guid>
      <description>&lt;p&gt;&lt;em&gt;cover image is from-&amp;gt;&lt;/em&gt;&lt;a href="&lt;br&gt;%0A"&gt;Image by tirachardz on Magnific&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  1. The Problem
&lt;/h2&gt;

&lt;p&gt;I was reviewing for software engineering roles, and at some point I noticed something uncomfortable: &lt;strong&gt;my CV had almost no personal projects.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I had professional experience, but there wasn't much I could point to and say, "I built this."&lt;/p&gt;

&lt;p&gt;That made me think about whether adding personal projects to a CV is actually important.I also think projects can help fill some gaps in your resume, especially because recruiters often spend only a short amount of time reviewing a resume.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Why Work Experience Isn't Always Enough
&lt;/h2&gt;

&lt;p&gt;Professional experience shows that you can work in a team, contribute to a real product, and work with production systems.&lt;/p&gt;

&lt;p&gt;But a personal project can show something different: &lt;strong&gt;how you approach a problem and build something independently.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There is also another problem. Most developers work with private repos at their jobs. Their contributions, architecture decisions, and day-to-day work aren't publicly visible.&lt;/p&gt;

&lt;p&gt;So even if you have several years of professional experience, a recruiter looking at your GitHub might not see much.&lt;/p&gt;

&lt;p&gt;A personal project gives them something concrete to look at:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub repository&lt;/strong&gt; → How do you write and organize code?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;README&lt;/strong&gt; → Can you explain what you built?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Live demo&lt;/strong&gt; → Can you take an idea and turn it into something usable?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tests / Git history&lt;/strong&gt; → How did you develop and maintain it?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Of course, a project doesn't replace professional experience. But it can give recruiters and hiring managers another way to understand your technical skills.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. What Makes a Project Worth Adding to a CV?
&lt;/h2&gt;

&lt;p&gt;I don't think every project belongs on a CV.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Tutorial clone ❌&lt;/li&gt;
&lt;li&gt;Calculator/weather app with no additional value ❌&lt;/li&gt;
&lt;li&gt;Abandoned repository ❌&lt;/li&gt;
&lt;li&gt;A project copied entirely from an AI tool ❌&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead, I'd look for a few things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Solves a real problem&lt;/strong&gt; ✅&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Has a clear README&lt;/strong&gt; ✅&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Has a live demo, if possible&lt;/strong&gt; ✅&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Demonstrates relevant technologies&lt;/strong&gt; ✅&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Has meaningful Git history, issues, or tests&lt;/strong&gt; ✅&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I think the main purpose is to have &lt;strong&gt;something worth showing.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And that's where I found myself asking another question:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What should I actually build?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;To be continued...&lt;/em&gt;&lt;/p&gt;

</description>
      <category>cv</category>
      <category>career</category>
      <category>sideprojects</category>
    </item>
    <item>
      <title>What If Every Act of Kindness Could Create Another One?</title>
      <dc:creator>gulnur</dc:creator>
      <pubDate>Mon, 07 Sep 2026 09:24:43 +0000</pubDate>
      <link>https://dev.to/glnurltn/openimpact-l24</link>
      <guid>https://dev.to/glnurltn/openimpact-l24</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/weekend-2026-09-03"&gt;Weekend Challenge: Generosity Edition&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;In celebration of the &lt;strong&gt;UN International Day of Charity (September 5)&lt;/strong&gt;, I built &lt;strong&gt;OpenImpact&lt;/strong&gt; — a transparent grassroots giving platform and generosity ledger designed to eliminate donor skepticism and celebrate the contagious nature of community kindness.&lt;/p&gt;

&lt;p&gt;Traditional charity platforms often suffer from the "black-box" dilemma: donors contribute to nebulous general funds without ever knowing what their money bought, while small community initiatives lack the marketing muscle to tell their stories transparently.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OpenImpact&lt;/strong&gt; solves this through four core pillars:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Concrete Unit Economics &amp;amp; Visual Impact Calculator&lt;/strong&gt;: Instead of throwing money into an abstract pool, donors use an interactive slider with dynamic &lt;strong&gt;Recharts bar charts&lt;/strong&gt; to see exactly how their contribution translates into tangible units (e.g., &lt;em&gt;$18 = 1 Solar Desk Lantern replacing toxic kerosene smoke&lt;/em&gt;, &lt;em&gt;$12 = 24 lbs of rescued fresh produce&lt;/em&gt;, or &lt;em&gt;2 hours = 1 youth coding mentorship kit&lt;/em&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI-Powered Field Storyteller (Google Gemini)&lt;/strong&gt;: Small nonprofits often don't have PR teams. Changemakers simply upload raw field notes or receipt summaries, and Gemini transforms them into audit-ready, authentic field dispatches and ready-to-publish Dev.to Markdown posts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Generosity Ripple Engine&lt;/strong&gt;: Generosity is contagious. OpenImpact maps out connected chains of giving, proving that every act of kindness inspires subsequent pledges (tracking real-time ripple multipliers).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Radical Transparency &amp;amp; Busters of the "Overhead Myth"&lt;/strong&gt;: The platform publishes itemized accounting, open receipts, and downloadable CSV audits, proving that ethical compensation for local workers creates sustainable impact.&lt;/li&gt;
&lt;/ol&gt;




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

&lt;ul&gt;
&lt;li&gt;🌐 &lt;strong&gt;Live Web Application&lt;/strong&gt;: &lt;a href="https://ais-pre-v6doubo5sgghaqj3xobxme-881807471570.europe-west2.run.app" rel="noopener noreferrer"&gt;OpenImpact Live Demo&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📊 &lt;strong&gt;Interactive Features to Try&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Open any cause and click &lt;strong&gt;"Simulate &amp;amp; Pledge"&lt;/strong&gt; to see the real-time Recharts bar chart calculator and trigger the confetti celebration.&lt;/li&gt;
&lt;li&gt;Navigate to &lt;strong&gt;"Field Storyteller"&lt;/strong&gt; and click &lt;strong&gt;"Generate Dispatch with Gemini"&lt;/strong&gt; to test raw field note conversion into transparent community dispatches.&lt;/li&gt;
&lt;li&gt;Visit the &lt;strong&gt;"Generosity Ripple"&lt;/strong&gt; tab to see how acts of giving propagate across donors.&lt;/li&gt;
&lt;li&gt;Check the &lt;strong&gt;"Open Audit"&lt;/strong&gt; tab to inspect itemized budget allocations and download the open CSV ledger.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Gulnur-Altan" rel="noopener noreferrer"&gt;
        Gulnur-Altan
      &lt;/a&gt; / &lt;a href="https://github.com/Gulnur-Altan/OpenImpact" rel="noopener noreferrer"&gt;
        OpenImpact
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
       A transparent grassroots giving and storytelling platform crafted specifically for the DEV.to International Day of Charity Challenge.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;🌱 OpenImpact&lt;/h1&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What if every act of kindness could create another one?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;OpenImpact is an open-source generosity platform focused on &lt;strong&gt;transparency, measurable impact, and the ripple effect of giving&lt;/strong&gt;.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;✨ Features&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;💰 &lt;strong&gt;Impact Calculator&lt;/strong&gt; — See what a contribution can achieve through interactive charts.&lt;/li&gt;
&lt;li&gt;🤖 &lt;strong&gt;AI Field Storyteller&lt;/strong&gt; — Turn raw field notes into authentic impact stories with Google Gemini.&lt;/li&gt;
&lt;li&gt;🌊 &lt;strong&gt;Generosity Ripple&lt;/strong&gt; — Visualize how one act of generosity inspires another.&lt;/li&gt;
&lt;li&gt;🔎 &lt;strong&gt;Open Audit&lt;/strong&gt; — Explore itemized budgets and download the public CSV ledger.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🛠️ Tech Stack&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;Recharts&lt;/li&gt;
&lt;li&gt;Google Gemini&lt;/li&gt;
&lt;li&gt;JavaScript&lt;/li&gt;
&lt;li&gt;CSS&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🚀 Demo&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://ais-pre-v6doubo5sgghaqj3xobxme-881807471570.europe-west2.run.app/" rel="nofollow noopener noreferrer"&gt;OpenImpact Live Demo&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Try &lt;strong&gt;Simulate &amp;amp; Pledge&lt;/strong&gt;, &lt;strong&gt;Field Storyteller&lt;/strong&gt;, &lt;strong&gt;Generosity Ripple&lt;/strong&gt;, and &lt;strong&gt;Open Audit&lt;/strong&gt;.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🤝 Contributing&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Contributions are welcome! Fork the repository, create a feature branch, make your changes, and open a Pull Request.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;📄 License&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;This project is licensed under the &lt;strong&gt;MIT License&lt;/strong&gt;.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🏆 DEV Community Challenge&lt;/h2&gt;…&lt;/div&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Gulnur-Altan/OpenImpact" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;





&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Tech Stack:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend&lt;/strong&gt;: React 19, TypeScript, Tailwind CSS, Recharts (for dynamic unit yield charts), Lucide Icons, Canvas Confetti.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend&lt;/strong&gt;: Node.js, Express, tsx, esbuild.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI &amp;amp; Intelligence&lt;/strong&gt;: Google Gemini 3.8 Flash via the &lt;code&gt;@google/genai&lt;/code&gt; TypeScript SDK.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Technical Architecture &amp;amp; Decisions:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Server-Side API Proxy for Gemini Security&lt;/strong&gt;: All interactions with Google Gemini run via secured Express routes (&lt;code&gt;/api/generate-dispatch&lt;/code&gt; and &lt;code&gt;/api/simulate-impact&lt;/code&gt;), ensuring API credentials are never exposed client-side.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auditing Prompt Engineering&lt;/strong&gt;: The Gemini prompt explicitly enforces ethical storytelling rules: rejecting corporate marketing buzzwords ("supercharge", "synergy"), emphasizing dignity and concrete metrics, and formatting verified receipts into structured JSON and clean Markdown.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resilient AI Fallback Engine&lt;/strong&gt;: Built an intelligent local synthesizer fallback so that if external rate limits or transient spikes occur, the user experience never breaks or crashes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accessible Visualization&lt;/strong&gt;: Designed horizontal Recharts bars with custom tooltips displaying division formulas (e.g., &lt;code&gt;$90 ÷ $18/unit = 5.0 lanterns&lt;/code&gt;) so every calculation is auditable.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🏆 Best Use of Google AI
&lt;/h3&gt;

&lt;p&gt;OpenImpact leverages &lt;strong&gt;Google Gemini 3.8 Flash&lt;/strong&gt; via the official &lt;code&gt;@google/genai&lt;/code&gt; SDK to solve real pain points in charitable giving:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Democratizing Non-Profit Communication&lt;/strong&gt;: Grassroots leaders often have field evidence but lack copywriters. Gemini ingests unpolished bullet points and receipts, extracting verified outcomes, human quotes, and itemized ledger tables without corporate fluff.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contextual Impact Simulation&lt;/strong&gt;: When donors pledge volunteer hours or micro-funds, Gemini projects contextual community ripple effects on the fly.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
    </item>
    <item>
      <title>Tomato soup for the Soul</title>
      <dc:creator>gulnur</dc:creator>
      <pubDate>Sat, 15 Aug 2026 17:54:09 +0000</pubDate>
      <link>https://dev.to/glnurltn/tomato-soup-for-the-soul-3657</link>
      <guid>https://dev.to/glnurltn/tomato-soup-for-the-soul-3657</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/frontend-2026-07-29"&gt;Frontend Challenge - Comfort Food Edition, CSS Art&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Inspiration
&lt;/h2&gt;

&lt;p&gt;Inspired by the warmth of a classic bowl of tomato soup, I wanted to create a small piece of comfort using nothing but CSS.&lt;/p&gt;

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

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/editor/G-lnur-ALTAN/embed/019fb7b6-422e-7e14-bf04-9f2c0d8489db?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Journey
&lt;/h2&gt;

&lt;p&gt;I created the bowl, soup, cream swirl, basil leaves, steam, shadows, and table texture entirely with CSS. I experimented with gradients, border-radius, pseudo-elements, shadows, and simple animations to make the soup feel warm and alive.&lt;/p&gt;

&lt;p&gt;I especially enjoyed creating the steam and soup ripple effects without using images or SVGs. Next, I'd like to add more small details and interactions to make the scene feel even more like a cozy kitchen moment.&lt;/p&gt;

</description>
      <category>frontendchallenge</category>
      <category>devchallenge</category>
      <category>css</category>
    </item>
    <item>
      <title>I Want to Become an Open Source Contributor, But I Don't Know Where to Start</title>
      <dc:creator>gulnur</dc:creator>
      <pubDate>Wed, 15 Jul 2026 10:18:42 +0000</pubDate>
      <link>https://dev.to/glnurltn/i-want-to-become-an-open-source-contributor-but-i-dont-know-where-to-start-p60</link>
      <guid>https://dev.to/glnurltn/i-want-to-become-an-open-source-contributor-but-i-dont-know-where-to-start-p60</guid>
      <description>&lt;p&gt;&lt;em&gt;Cover image is from-&amp;gt;&lt;/em&gt; &lt;a href="https://www.magnific.com/free-photo/programming-background-with-person-working-with-codes-computer_38669459.htm" rel="noopener noreferrer"&gt;Image by magnific&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I've always admired people who contribute to open source.&lt;/p&gt;

&lt;p&gt;Every time I use a library, read its documentation, or find a solution on GitHub, I've realized that someone took the time to build it, improve it, and share it with the community.&lt;/p&gt;

&lt;p&gt;The truth is, I honestly don't know where to begin. 🧐&lt;/p&gt;

&lt;p&gt;It's not that I'm afraid of writing code. I've spent years building web applications, fixing bugs, and learning new technologies as a software engineer. But open source feels like a different world.&lt;/p&gt;

&lt;p&gt;Questions keep coming to mind:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How do people choose their first project?&lt;/li&gt;
&lt;li&gt;Is improving documentation enough for a first contribution?&lt;/li&gt;
&lt;li&gt;How do you avoid breaking someone else's project?&lt;/li&gt;
&lt;li&gt;What's the proper etiquette when opening an issue or a pull request?&lt;/li&gt;
&lt;li&gt;How do I figure out what a project actually needs?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The more I think about it, the easier it becomes to postpone taking that first step. So instead of waiting until I have everything figured out, I've decided to make this one of my goals.&lt;/p&gt;

&lt;h3&gt;
  
  
  My Open Source 101 plan 📅
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Find a project I actually use.&lt;/li&gt;
&lt;li&gt;Read its documentation, issues, and commit history.&lt;/li&gt;
&lt;li&gt;Look for beginner-friendly issues.&lt;/li&gt;
&lt;li&gt;Submit my first pull request, even if it's just a documentation improvement.&lt;/li&gt;
&lt;li&gt;Learn from the review process instead of trying to be perfect.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I know my first contribution won't be groundbreaking 😃, and that's okay. Every experienced open source contributor started with a first pull request, right?&lt;/p&gt;

&lt;p&gt;If you've been contributing to open source for a while, I'd love to hear your advice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What was the first project you contributed to, and what helped you get started?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And if you're in the same position as me, maybe this is the sign that we should both stop waiting and start contributing..&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note: My goal is to submit my first open source pull request before the end of this month. I'll come back and share what I learned whether it succeeds or fails.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>developer</category>
      <category>programming</category>
    </item>
    <item>
      <title>Why My Angular 21 Upgrade Failed 👀</title>
      <dc:creator>gulnur</dc:creator>
      <pubDate>Thu, 09 Jul 2026 09:48:39 +0000</pubDate>
      <link>https://dev.to/glnurltn/why-my-angular-21-upgrade-failed-mef</link>
      <guid>https://dev.to/glnurltn/why-my-angular-21-upgrade-failed-mef</guid>
      <description>&lt;p&gt;I believe Angular upgrades have become much smoother these days. Most of the time, a simple &lt;code&gt;ng update&lt;/code&gt;is enough to move to the latest version.&lt;/p&gt;

&lt;p&gt;Instead, I spent hours chasing errors that looked completely unrelated to the real problem 😭&lt;/p&gt;

&lt;p&gt;After upgrading the project to Angular 21, I started seeing errors like these:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Cannot find module '@angular/material/chips'
Cannot find module '@angular/material/dialog'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2F2kw41ob2gru10afgrie4.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2kw41ob2gru10afgrie4.png" alt=" " width="800" height="193"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then another one appeared:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Error: The current version of "@angular/build" supports Angular ^19...
but detected Angular version 21.x instead.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At first, it looked like Angular Material wasn't installed correctly but i think the actual issue was a version mismatch inside the project.&lt;/p&gt;

&lt;p&gt;Some packages had already been upgraded to Angular 21:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;@angular/core&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@angular/common&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@angular/material&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But the build system was still using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@angular-devkit/build-angular@19
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Since Angular's build tools are tightly coupled with the framework version, the compiler started producing misleading errors.&lt;/p&gt;

&lt;p&gt;The build pipeline was the problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Commands That Helped
&lt;/h2&gt;

&lt;p&gt;I used these commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;ls&lt;/span&gt; @angular-devkit/build-angular
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm explain @angular-devkit/build-angular
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;They showed that my project was still resolving Angular 19's build package. That was the clue I needed and than I verified that every Angular package was using the same major version.&lt;/p&gt;

&lt;p&gt;Then I cleaned the project completely:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; node_modules
&lt;span class="nb"&gt;rm &lt;/span&gt;package-lock.json
npm cache clean &lt;span class="nt"&gt;--force&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It takes time usually.(and I did it several times cause Im failed 😃)&lt;/p&gt;

&lt;p&gt;Finally, I confirmed that all Angular packages were aligned before building again. &lt;/p&gt;

</description>
      <category>angular</category>
      <category>upgrade</category>
      <category>webdev</category>
    </item>
    <item>
      <title>the Last Sunset</title>
      <dc:creator>gulnur</dc:creator>
      <pubDate>Sun, 21 Jun 2026 09:03:11 +0000</pubDate>
      <link>https://dev.to/glnurltn/the-last-sunset-3g3e</link>
      <guid>https://dev.to/glnurltn/the-last-sunset-3g3e</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/june-game-jam-2026-06-03"&gt;June Solstice Game Jam&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;The Last Sunset is a browser-based narrative survival game inspired by the June Solstice theme.&lt;/p&gt;

&lt;p&gt;The concept explores a world where time itself is collapsing. Each day becomes shorter than the last, and the sun is gradually fading from existence. The player controls an autonomous AI archival unit tasked with preserving fragments of human civilization before the final sunset.&lt;/p&gt;

&lt;p&gt;Instead of traditional combat or scoring systems, the game focuses on knowledge preservation. Players collect “data capsules” containing remnants of human history such as scientific discoveries, space exploration missions, and digital archives.&lt;/p&gt;

&lt;p&gt;As the game progresses, the environment becomes increasingly unstable, reflecting the collapse of both time and memory.&lt;/p&gt;

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


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://www.canva.com/design/DAHNMbqtxmk/kFkw08zzfSyu4qOhEgU_Dw/edit?utm_content=DAHNMbqtxmk&amp;amp;utm_campaign=designshare&amp;amp;utm_medium=link2&amp;amp;utm_source=sharebutton" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;canva.com&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Codepen:&lt;br&gt;
&lt;iframe height="600" src="https://codepen.io/G-lnur-ALTAN/embed/EaNMjJV?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;The project is built using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Vanilla JavaScript (no frameworks)&lt;/li&gt;
&lt;li&gt;HTML5 Canvas API for rendering&lt;/li&gt;
&lt;li&gt;Custom game loop with time scaling&lt;/li&gt;
&lt;li&gt;Procedural particle system for feedback effects&lt;/li&gt;
&lt;li&gt;Dynamic day/night cycle with a shrinking sun mechanic&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🔗 GitHub Repository:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Gulnur-Altan" rel="noopener noreferrer"&gt;
        Gulnur-Altan
      &lt;/a&gt; / &lt;a href="https://github.com/Gulnur-Altan/theLastSunset" rel="noopener noreferrer"&gt;
        theLastSunset
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A narrative survival game built for the June Solstice Game Jam
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;🌅 The Last Sunset&lt;/h1&gt;

&lt;/div&gt;
&lt;p&gt;A small narrative browser game inspired by the June Solstice.&lt;/p&gt;
&lt;p&gt;In a world where the sun is slowly fading away, you play as an AI archive unit collecting fragments of human knowledge before the final sunset.&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/assets/banner.jpeg"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fassets%2Fbanner.jpeg" alt="The Last Sunset Banner"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🎮 Features&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Dynamic day cycle&lt;/li&gt;
&lt;li&gt;Shrinking sun mechanic&lt;/li&gt;
&lt;li&gt;Knowledge capsule collection&lt;/li&gt;
&lt;li&gt;Collapse Mode after Day 7&lt;/li&gt;
&lt;li&gt;Multiple endings based on progress&lt;/li&gt;
&lt;li&gt;Built with HTML5 Canvas and Vanilla JavaScript&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🕹 Controls&lt;/h2&gt;

&lt;/div&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Key&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Move Left&lt;/td&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Move Right&lt;/td&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Jump&lt;/td&gt;
&lt;td&gt;Space&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🚀 Run Locally&lt;/h2&gt;

&lt;/div&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;git clone https://github.com/yourusername/the-last-sunset.git
&lt;span class="pl-c1"&gt;cd&lt;/span&gt; the-last-sunset&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Start a local server:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;python -m http.server&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Then open:&lt;/p&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;http://localhost:8000
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🛠 Tech Stack&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;HTML5&lt;/li&gt;
&lt;li&gt;CSS3&lt;/li&gt;
&lt;li&gt;JavaScript&lt;/li&gt;
&lt;li&gt;Canvas API&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🏆 Challenge&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Created for the June Solstice Game Jam.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Preserve humanity's knowledge before the last sunset.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;



&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Gulnur-Altan/theLastSunset" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;Key systems include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Collision detection (AABB)&lt;/li&gt;
&lt;li&gt;Particle burst system for interactions&lt;/li&gt;
&lt;li&gt;Screen shake and slow-motion effects&lt;/li&gt;
&lt;li&gt;Narrative memory synthesis system&lt;/li&gt;
&lt;li&gt;Collapse mode visual degradation system&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;I started with a simple canvas-based platformer and gradually evolved it into a narrative-driven experience.&lt;/p&gt;

&lt;p&gt;The core design decision was to avoid traditional “win/lose” mechanics and instead focus on emergent storytelling through systems.&lt;/p&gt;

&lt;p&gt;Key implementation steps:&lt;/p&gt;

&lt;p&gt;Built a physics-based movement system (A/D + jump)&lt;br&gt;
Added procedural spawning of “knowledge capsules”&lt;br&gt;
Designed a dynamic time system where each day becomes shorter&lt;br&gt;
Implemented a shrinking sun to visually represent entropy&lt;br&gt;
Introduced a “collapse mode” after Day 7 where visual glitches and terminal corruption begin&lt;br&gt;
Created a memory synthesis system that generates a final narrative based on collected data&lt;/p&gt;

&lt;p&gt;To improve game feel, I added several “juice” effects:&lt;/p&gt;

&lt;p&gt;Particle bursts on pickup&lt;br&gt;
Camera shake on interaction&lt;br&gt;
Slow-motion moment during collection&lt;br&gt;
Terminal-style archival feedback&lt;/p&gt;

&lt;p&gt;These small additions significantly improved immersion and emotional feedback.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Category
&lt;/h2&gt;

&lt;p&gt;🧠 Best Ode to Alan Turing&lt;/p&gt;

&lt;p&gt;The game’s narrative structure is inspired by computational memory and symbolic reconstruction of information — concepts closely aligned with Alan Turing’s legacy.&lt;/p&gt;

&lt;p&gt;The “memory synthesis system” at the end of the game reconstructs a final narrative from fragmented data, similar to how an intelligent system interprets incomplete information.&lt;/p&gt;

&lt;p&gt;🤖 Best Google AI Usage&lt;/p&gt;

&lt;p&gt;The concept of emergent storytelling and memory reconstruction was designed with AI-inspired thinking in mind.&lt;/p&gt;

&lt;p&gt;The final system behaves like a simplified symbolic model that reconstructs meaning from partial inputs, similar to how modern AI systems generate coherent narratives from fragmented context.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>gamechallenge</category>
      <category>gamedev</category>
    </item>
    <item>
      <title>What Happens When Companies Stop Hiring Juniors?</title>
      <dc:creator>gulnur</dc:creator>
      <pubDate>Thu, 18 Jun 2026 07:35:04 +0000</pubDate>
      <link>https://dev.to/glnurltn/what-happens-when-companies-stop-hiring-juniors-1al7</link>
      <guid>https://dev.to/glnurltn/what-happens-when-companies-stop-hiring-juniors-1al7</guid>
      <description>&lt;p&gt;&lt;em&gt;cover image is from-&amp;gt;&lt;a href="https://wingassistant.com/blog/junior-developer-101/" rel="noopener noreferrer"&gt;https://wingassistant.com/blog/junior-developer-101/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Over the last few months, I've noticed a common trend in job postings: everyone seems to be looking for mid-level and senior engineers. On the surface, this makes sense. Experienced developers require less onboarding, can contribute faster, and often need less supervision.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;But what happens when an industry collectively reduces junior hiring?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The first consequence may be that new graduates and career changers struggle to enter the field. Companies ask for experience, but gaining experience is difficult without a first opportunity. Also, I have many friends who have been searching for jobs for months despite actively improving their skills.&lt;/p&gt;

&lt;p&gt;Today's seniors were once juniors. If fewer junior developers enter the industry now, the future talent pipeline becomes smaller. Eventually, companies may find themselves competing for the same limited pool of experienced engineers.&lt;/p&gt;

&lt;p&gt;There is also a knowledge transfer problem. Strong engineering cultures are built when experienced developers mentor less experienced ones. If junior hiring continues to decline, opportunities for mentorship and long-term team development may decrease as well.&lt;/p&gt;

&lt;p&gt;AI tools may change how entry-level work is performed, but they do not eliminate the need for new engineers. Every senior engineer started somewhere.&lt;/p&gt;

&lt;p&gt;Perhaps companies should be asking, "How can we help junior developers become productive faster?"&lt;/p&gt;

&lt;p&gt;Because an industry that stops investing in beginners may eventually run short of experts.&lt;/p&gt;

&lt;p&gt;Related writings:&lt;br&gt;
&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://daily.dev/posts/why-ai-is-replacing-junior-developers-and-how-mid-level-engineers-can-survive-g2yxkxqjj" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fapi.daily.dev%2Fog%2Fposts%2FG2YxKXQjJ.png" height="420" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://daily.dev/posts/why-ai-is-replacing-junior-developers-and-how-mid-level-engineers-can-survive-g2yxkxqjj" rel="noopener noreferrer" class="c-link"&gt;
            Why AI is Replacing Junior Developers and How Mid-Level...
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            AI tools like Claude Code are displacing junior developers by handling boilerplate and basic tasks, while simultaneously flooding codebases with unoptimized,...
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdaily.dev%2Ffavicon-32x32.png" width="32" height="32"&gt;
          daily.dev
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;



&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://wingassistant.com/blog/junior-developer-101/" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwingassistant.com%2Fwp-content%2Fuploads%2F2023%2F03%2Fwb104-storychief-cover_0ec496e5eebeaa8b6ccf8083049ac474_2000.png" height="450" class="m-0" width="750"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://wingassistant.com/blog/junior-developer-101/" rel="noopener noreferrer" class="c-link"&gt;
            Why You Should Hire a Junior Developer
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Wondering whether a junior developer is the best fit for your software needs? What are a junior dev's responsibilities Read our article to help you decide!
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwingassistant.com%2Fwp-content%2Fuploads%2F2021%2F10%2Ffavicon.png" width="38" height="38"&gt;
          wingassistant.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>developers</category>
      <category>career</category>
      <category>ai</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Anthropic released new FREE AI courses</title>
      <dc:creator>gulnur</dc:creator>
      <pubDate>Tue, 09 Jun 2026 13:57:01 +0000</pubDate>
      <link>https://dev.to/glnurltn/anthropic-released-new-free-ai-courses-gj</link>
      <guid>https://dev.to/glnurltn/anthropic-released-new-free-ai-courses-gj</guid>
      <description>&lt;p&gt;Anthropic has released FREE courses on its Skills platform. You can now earn free certificates in Skills, MCP, Subagents, Claude Code, and other AI-related topics directly from Anthropic.&lt;/p&gt;

&lt;p&gt;I've already enrolled and will be reviewing the courses over the next few days.&lt;/p&gt;

&lt;p&gt;If you'd like to check them out:&lt;br&gt;
&lt;a href="https://anthropic.skilljar.com/" rel="noopener noreferrer"&gt;https://anthropic.skilljar.com/&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%2Fwkmu8ocoi735007x3dln.jpg" 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%2Fwkmu8ocoi735007x3dln.jpg" alt=" " width="800" height="571"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can read:&lt;br&gt;
&lt;a href="https://app.daily.dev/posts/anthropic-just-released-new-free-ai-courses-vhinyl3gs" rel="noopener noreferrer"&gt;https://app.daily.dev/posts/anthropic-just-released-new-free-ai-courses-vhinyl3gs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Image source:&lt;br&gt;
&lt;a href="https://media.daily.dev/image/upload/s--jdHyrLn2--/f_auto/v1780938861/posts/vHinyL3Gs?_a=BAMAMiWQ0" rel="noopener noreferrer"&gt;https://media.daily.dev/image/upload/s--jdHyrLn2--/f_auto/v1780938861/posts/vHinyL3Gs?_a=BAMAMiWQ0&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>resources</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Giving a Forgotten Side Project a Second Chance</title>
      <dc:creator>gulnur</dc:creator>
      <pubDate>Sun, 07 Jun 2026 10:30:21 +0000</pubDate>
      <link>https://dev.to/glnurltn/finishing-up-an-abondoned-app-21n5</link>
      <guid>https://dev.to/glnurltn/finishing-up-an-abondoned-app-21n5</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/github-2026-05-21"&gt;GitHub Finish-Up-A-Thon Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Deploy Friday&lt;/strong&gt;  ☄️&lt;/p&gt;

&lt;p&gt;Deploy Friday is a small browser game inspired by the chaos of software development and Scrum teams. Players must survive a sprint by completing tasks, handling production incidents, and managing their stress level.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;HTML&lt;/li&gt;
&lt;li&gt;CSS&lt;/li&gt;
&lt;li&gt;Vanilla JavaScript&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No frameworks or external dependencies. The game is powered by a few simple state variables:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;stress&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;score&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;sprintTime&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;gameEnded&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Tasks are generated dynamically and random incidents keep the sprint unpredictable. If stress reaches 100%, the sprint fails.&lt;/p&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%2F2tjd9xbhxkwqynasvg8n.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%2F2tjd9xbhxkwqynasvg8n.png" alt=" " width="800" height="687"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://gulnur-altan.github.io/deploy-friday/" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;gulnur-altan.github.io&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;



&lt;h2&gt;
  
  
  The Comeback Story
&lt;/h2&gt;

&lt;p&gt;This project started as a Scrum Quiz application with multiple-choice questions and score tracking. Although it worked, I lost interest and never finished it🥲&lt;/p&gt;

&lt;p&gt;When I found this challenge, I revisited the project and realized it didn't need more quiz questions maybe it needed a new idea.&lt;/p&gt;

&lt;p&gt;Instead of finishing the quiz, I transformed it into Deploy Friday, a sprint survival game inspired by real developer experiences such as production incidents, urgent meetings, and Friday deployments.&lt;/p&gt;

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

&lt;p&gt;GitHub Copilot helped me generate repetitive UI code, prototype gameplay ideas, and refactor JavaScript more quickly.&lt;/p&gt;

&lt;p&gt;The biggest benefit was shortening the gap between having an idea and testing it in the browser, allowing me to focus on the game itself rather than boilerplate code.&lt;/p&gt;

&lt;p&gt;This challenge reminded me that sometimes unfinished projects don't need more features,they may need a fresh direction 🧐&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
      <category>scrum</category>
    </item>
  </channel>
</rss>
