<?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: Dejan Kostevski</title>
    <description>The latest articles on Forem by Dejan Kostevski (@dekigk).</description>
    <link>https://forem.com/dekigk</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%2F3410613%2F0805c157-df57-4a7b-bcfb-4c91f4a67f8d.jpg</url>
      <title>Forem: Dejan Kostevski</title>
      <link>https://forem.com/dekigk</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/dekigk"/>
    <language>en</language>
    <item>
      <title>Quick and easy Next.js boilerplate with TypeScript to jumpstart your project</title>
      <dc:creator>Dejan Kostevski</dc:creator>
      <pubDate>Sun, 15 Mar 2026 11:00:00 +0000</pubDate>
      <link>https://forem.com/dekigk/quick-and-easy-nextjs-boilerplate-with-typescript-to-jumpstart-your-project-2lkn</link>
      <guid>https://forem.com/dekigk/quick-and-easy-nextjs-boilerplate-with-typescript-to-jumpstart-your-project-2lkn</guid>
      <description>&lt;p&gt;When starting a new React project, I want to get working on the features as soon as possible. The last thing any developer wants to do is spend time configuring the tools. This is why I created this comprehensive Next.js TypeScript boilerplate that comes pre-configured with Styled Components for CSS-in-JS styling, ESLint and Prettier for code quality, and Jest for unit testing - everything you need for a production-ready React development environment.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's Included in This Next.js Starter Template
&lt;/h2&gt;

&lt;p&gt;When I started building this React boilerplate, I had specific requirements for a modern frontend development setup.&lt;/p&gt;

&lt;p&gt;The foundation of this starter kit is a &lt;a href="https://reactjs.org/" rel="noopener noreferrer"&gt;React&lt;/a&gt; framework with server-side rendering (SSR) capabilities. &lt;a href="https://nextjs.org/" rel="noopener noreferrer"&gt;Next.js&lt;/a&gt; was the obvious choice for creating a high-performance SSR React application with an excellent developer experience.&lt;/p&gt;

&lt;p&gt;For type safety and improved development experience, I integrated &lt;a href="https://www.typescriptlang.org/" rel="noopener noreferrer"&gt;TypeScript&lt;/a&gt; into the Next.js setup. TypeScript provides powerful static typing that helps catch errors during development rather than at runtime, which is essential for any serious React project setup.&lt;/p&gt;

&lt;p&gt;For styling, this boilerplate implements a modern CSS-in-JS approach. &lt;a href="https://styled-components.com/" rel="noopener noreferrer"&gt;Styled Components&lt;/a&gt; provides a seamless integration with React components and enables dynamic styling based on props, theming support, and automatic vendor prefixing - all critical features for a robust frontend project template.&lt;/p&gt;

&lt;p&gt;For test-driven development, I included &lt;a href="https://jestjs.io/" rel="noopener noreferrer"&gt;Jest&lt;/a&gt; as the testing framework from day one. Having unit testing capabilities integrated into your Next.js development environment ensures you can build with confidence and maintain code quality throughout your project lifecycle.&lt;/p&gt;

&lt;p&gt;To complete the React development tools setup, I configured &lt;a href="https://eslint.org/" rel="noopener noreferrer"&gt;ESLint&lt;/a&gt; and &lt;a href="https://prettier.io/" rel="noopener noreferrer"&gt;Prettier&lt;/a&gt; for code quality enforcement and consistent formatting. These tools are essential for any Next.js TypeScript project to maintain high code standards, especially in team environments.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started with This Next.js Boilerplate
&lt;/h2&gt;

&lt;p&gt;I've published this complete Next.js setup in a GitHub repository &lt;a href="https://github.com/DekiGk/boilerplate-next-js" rel="noopener noreferrer"&gt;here&lt;/a&gt;. The repo includes several pre-configured NPM scripts to streamline your development workflow. To set up your development environment, first install the dependencies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm i
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As a standard in any JavaScript (and TypeScript) repo these days, you have:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run dev // runs development environment
npm run lint // runs the linter
npm run &lt;span class="nb"&gt;test&lt;/span&gt; // runs the tests
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Beyond these basic commands, this Next.js TypeScript boilerplate includes several additional scripts to enhance your development workflow:&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;test&lt;/span&gt;:coverage // runs tests with coverage report
npm run build // creates production build
npm start // runs the production build
npm run start:prod // builds and starts &lt;span class="k"&gt;in &lt;/span&gt;one &lt;span class="nb"&gt;command &lt;/span&gt;&lt;span class="k"&gt;for &lt;/span&gt;CI/CD pipelines
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These commands facilitate a complete development workflow from local development to testing and deployment, making this starter kit particularly suitable for both rapid prototyping and production-ready applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  Future Enhancements for This React Starter Template
&lt;/h2&gt;

&lt;p&gt;This Next.js development environment provides everything needed for a bare-bones project to start building features quickly. With this setup, you can have a new project up and running in about a minute (depending on your internet connection speed for the &lt;code&gt;npm i&lt;/code&gt; command).&lt;/p&gt;

&lt;p&gt;As I continue evolving this SSR React framework boilerplate, I plan to incorporate:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://testing-library.com/docs/react-testing-library/intro/" rel="noopener noreferrer"&gt;React Testing Library&lt;/a&gt; for more comprehensive component testing&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.cypress.io/" rel="noopener noreferrer"&gt;Cypress&lt;/a&gt; for end-to-end (E2E) testing&lt;/li&gt;
&lt;li&gt;Pre-configured state management solutions (Redux/Context API)&lt;/li&gt;
&lt;li&gt;Enhanced accessibility features&lt;/li&gt;
&lt;li&gt;Performance optimization templates&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These additions will make this starter kit even more valuable for developers looking to build production-ready Next.js applications with TypeScript.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion: A Complete Next.js TypeScript Development Setup
&lt;/h2&gt;

&lt;p&gt;This lightweight React boilerplate removes the hassle of tooling configuration while providing all essential features for modern web development. This Next.js starter template with TypeScript is designed specifically for developers who want to "install and start coding right away" without compromising on development best practices or build performance.&lt;/p&gt;

&lt;p&gt;Key benefits of this boilerplate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Development speed&lt;/strong&gt;: Get past configuration and start building features immediately&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Type safety&lt;/strong&gt;: Built-in TypeScript for robust code quality&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Modern styling&lt;/strong&gt;: CSS-in-JS with Styled Components&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Code quality&lt;/strong&gt;: Pre-configured ESLint and Prettier&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Testing ready&lt;/strong&gt;: Jest setup for TDD approach&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;SSR capabilities&lt;/strong&gt;: Next.js for improved performance and SEO&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is included in this Next.js boilerplate?
&lt;/h3&gt;

&lt;p&gt;This boilerplate includes Next.js with TypeScript, Styled Components for styling, ESLint and Prettier for code quality, and Jest for testing. It's a complete setup for modern React development with server-side rendering capabilities.&lt;/p&gt;

&lt;h3&gt;
  
  
  How long does it take to set up a new project with this template?
&lt;/h3&gt;

&lt;p&gt;The setup takes about a minute, depending on your internet connection speed for installing dependencies with &lt;code&gt;npm i&lt;/code&gt;. After that, you can immediately start coding your features.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is this Next.js starter template suitable for production applications?
&lt;/h3&gt;

&lt;p&gt;Yes, this boilerplate is designed for both quick prototyping and production-ready applications. It includes testing capabilities, linting, and optimized build processes suitable for real-world projects.&lt;/p&gt;

&lt;h3&gt;
  
  
  How does this compare to Create React App?
&lt;/h3&gt;

&lt;p&gt;Unlike Create React App, this Next.js boilerplate provides server-side rendering capabilities, which improves performance and SEO. It also comes pre-configured with TypeScript, Styled Components, and testing tools in a cohesive package.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I use this for both personal and commercial projects?
&lt;/h3&gt;

&lt;p&gt;Yes, the boilerplate is available on GitHub and can be used for both personal and commercial projects without restrictions.&lt;/p&gt;

&lt;p&gt;What do you think? Would you add any other features to make this Next.js TypeScript boilerplate even better?&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>boilerplate</category>
      <category>react</category>
      <category>typescript</category>
    </item>
    <item>
      <title>The Feynman Technique: Master Any Subject with This Proven Learning Method</title>
      <dc:creator>Dejan Kostevski</dc:creator>
      <pubDate>Sun, 01 Mar 2026 12:00:00 +0000</pubDate>
      <link>https://forem.com/dekigk/the-feynman-technique-master-any-subject-with-this-proven-learning-method-ojo</link>
      <guid>https://forem.com/dekigk/the-feynman-technique-master-any-subject-with-this-proven-learning-method-ojo</guid>
      <description>&lt;p&gt;I did not come up with the following ideas or definitions myself. It was always somewhere in between the lines of the blog posts I was reading. There is one specific thing I picked up over the years, and even put it as a tagline on this website. That is: "Explain things like I am five". Recently, I have found out that there is a name and a definition, hell, the whole technique for learning behind this simple saying. Let me introduce you to "The Feynman Technique" – perhaps the most effective learning method ever developed. This powerful learning strategy, used by Nobel Prize-winning physicist Richard Feynman, can dramatically improve how you learn and retain information.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Feynman Technique
&lt;/h2&gt;

&lt;p&gt;Richard Feynman was a very smart guy (source: &lt;a href="https://en.wikipedia.org/wiki/Richard_Feynman" rel="noopener noreferrer"&gt;Wikipedia&lt;/a&gt;):&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Richard Phillips Feynman (May 11, 1918 – February 15, 1988) was an American theoretical physicist, known for his work in the path integral formulation of quantum mechanics, the theory of quantum electrodynamics, the physics of the superfluidity of supercooled liquid helium, as well as his work in particle physics for which he proposed the parton model. For contributions to the development of quantum electrodynamics, Feynman received the Nobel Prize in Physics in 1965 jointly with Julian Schwinger and Shin'ichirō Tomonaga.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But, most of all, I like that he is known as "The Great Explainer". He developed a whole technique for explaining complex physics in plain and simple language. Take any field, and you will notice that it is very hard to explain complex technical terms and ideas to people who have no idea or knowledge about that field. That is why I am writing today about "The Feynman Technique".&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Feynman Technique&lt;/strong&gt; is a powerful learning framework designed to achieve deep, comprehensive understanding of any subject. Developed by physicist Richard Feynman (nicknamed "The Great Explainer"), this method revolutionizes how we learn by focusing on simplicity and clarity. Unlike traditional memorization-based learning, the Feynman method forces you to translate complex ideas into simple, accessible language – the ultimate test of whether you truly understand something.&lt;/p&gt;

&lt;p&gt;The core principle behind this effective learning strategy is that &lt;em&gt;true understanding enables simplification&lt;/em&gt;. When someone relies heavily on technical jargon and unnecessarily complex language, it often reveals a fundamental gap in their understanding. As Feynman himself demonstrated throughout his career, the ability to explain quantum physics to a complete novice is the hallmark of genuine mastery. This "explain like I'm five" approach isn't just about teaching others – it's about transforming how you learn.&lt;/p&gt;

&lt;p&gt;The framework consists of four parts:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Identify and specify the topic you want to learn (not to teach, mind you)&lt;/li&gt;
&lt;li&gt;Teach (preferably to a small child, that is where the ELI5 (Explain Like I'm Five) concept comes from)&lt;/li&gt;
&lt;li&gt;Identify and fill in the knowledge gaps (this is where the deep learning happens 📖)&lt;/li&gt;
&lt;li&gt;Organize, review and simplify (this is where the magic happens 🧙‍♂️)&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  1. Select and Define Your Learning Target
&lt;/h2&gt;

&lt;p&gt;The first critical step in the Feynman learning method is choosing a specific concept or topic you want to master. Successful learning requires narrow focus rather than broad generalities. For instance, rather than attempting to "learn programming" (too broad), target specific concepts like "recursion in Python" or "factory design patterns in Java" (appropriately focused).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Practical Application:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Write down everything you currently know about your chosen topic&lt;/li&gt;
&lt;li&gt;Clearly identify knowledge gaps and areas of uncertainty&lt;/li&gt;
&lt;li&gt;Research the topic thoroughly, focusing on unclear areas&lt;/li&gt;
&lt;li&gt;Break complex ideas into fundamental components&lt;/li&gt;
&lt;li&gt;Document new insights using your own words, not copied terminology&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The key differentiator of the Feynman approach is that you must process information through your own understanding rather than memorizing someone else's explanations. After completing your research, step back to see the complete picture – how does this concept connect to practical applications? What real-world examples demonstrate this principle? This comprehensive approach builds a foundation for the next crucial step.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Teach to Reveal Understanding Gaps
&lt;/h2&gt;

&lt;p&gt;The second and most transformative step in the Feynman learning technique is teaching your subject to someone else – preferably someone without prior knowledge in that area. This is where the popular "Explain Like I'm Five" (ELI5) concept originates. Children make ideal audience members because they require genuine clarity and won't be satisfied with jargon or complexity that masks incomplete understanding.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Teaching Reveals Learning Gaps:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When forced to simplify, you expose areas where your understanding is weak&lt;/li&gt;
&lt;li&gt;Children ask direct, fundamental questions adults might avoid&lt;/li&gt;
&lt;li&gt;You can't rely on shared background knowledge or terminology&lt;/li&gt;
&lt;li&gt;The need to create accessible analogies tests your conceptual grasp&lt;/li&gt;
&lt;li&gt;Immediate feedback shows whether your explanation actually works&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Remember: &lt;strong&gt;teaching in the Feynman method isn't about demonstrating what you know – it's about discovering what you don't know&lt;/strong&gt;. During this process, eliminate all technical jargon, use concrete examples from everyday life, and create simple analogies that bridge the unfamiliar with the familiar. When you struggle to explain something simply, you've identified precisely where your understanding needs improvement.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Identify and Fill Knowledge Gaps Through Deep Learning
&lt;/h2&gt;

&lt;p&gt;The third phase of the Feynman learning technique is where transformative understanding happens. After attempting to teach your subject, you'll have clear evidence of what you don't fully comprehend. This critical reflection stage requires honest self-assessment about where your explanation faltered.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Signs of Knowledge Gaps to Address:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Points where you resorted to jargon or technical terms&lt;/li&gt;
&lt;li&gt;Areas that caused confusion in your listener&lt;/li&gt;
&lt;li&gt;Concepts you struggled to translate into simple language&lt;/li&gt;
&lt;li&gt;Places where you made unsupported assumptions&lt;/li&gt;
&lt;li&gt;Topics that generated unexpected questions you couldn't answer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This reflection process isn't about criticizing your teaching ability – it's about diagnosing specific learning targets. Return to your study materials with new focus, diving deeply into precisely the areas where your understanding proved incomplete. Unlike your initial learning phase, this targeted deep learning is laser-focused on filling identified gaps.&lt;/p&gt;

&lt;p&gt;The power of the Feynman method lies in this iterative cycle: attempt to explain, identify gaps, study those gaps specifically, then attempt to explain again. Each cycle brings you closer to genuine mastery of the subject matter. Don't rush this process – true understanding requires resolving every point of confusion until the entire concept becomes transparently clear.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Refine and Simplify for Ultimate Clarity
&lt;/h2&gt;

&lt;p&gt;The final step in mastering the Feynman learning technique is where elegance emerges from complexity. In this crucial phase, you'll organize and refine your understanding until you can explain the concept with remarkable clarity and simplicity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Simplification Process:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Reorganize your notes into a logical narrative flow&lt;/li&gt;
&lt;li&gt;Eliminate any remaining technical jargon or field-specific terminology&lt;/li&gt;
&lt;li&gt;Create a simple story that captures the essential concept&lt;/li&gt;
&lt;li&gt;Test your explanation with different audiences&lt;/li&gt;
&lt;li&gt;Refine based on questions and confusion points&lt;/li&gt;
&lt;li&gt;Continue simplifying until a complete novice can understand&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The hallmark of true understanding isn't complexity but rather elegant simplicity. As Einstein famously said, "If you can't explain it simply, you don't understand it well enough." This final stage transforms your learning from fragmented knowledge into cohesive understanding.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pro Tip:&lt;/strong&gt; Develop multiple metaphors and explanations for the same concept. Different people connect with different analogies, and having multiple approaches demonstrates flexibility in your understanding. The ability to pivot between various simplified explanations shows you've truly internalized the core principles rather than memorized a single explanation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the Feynman Technique Works: Key Benefits for Learners
&lt;/h2&gt;

&lt;p&gt;Implementing the Feynman learning method transforms not just what you know, but how you learn. This powerful technique offers numerous advantages that traditional study methods simply can't match:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Benefits of the Feynman Technique:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Deeper Understanding:&lt;/strong&gt; By forcing simplification, you process information more thoroughly&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Better Retention:&lt;/strong&gt; Teaching concepts embeds information more permanently than passive reading&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Versatile Application:&lt;/strong&gt; Works for any subject from physics to philosophy&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Efficient Learning:&lt;/strong&gt; Quickly identifies and targets specific knowledge gaps&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Metacognitive Awareness:&lt;/strong&gt; Helps you recognize when you don't understand something&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Practical Focus:&lt;/strong&gt; Emphasizes useful knowledge over mere memorization&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Communication Skills:&lt;/strong&gt; Improves your ability to explain complex ideas in any context&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As mentioned in the &lt;a href="https://kodeskills.com/about" rel="noopener noreferrer"&gt;about&lt;/a&gt; section of this website, this approach of "grasp the concept first, then go deeper" has been transformative for my own learning journey. I've found that every opportunity to teach others – whether formally or informally – becomes a valuable opportunity to deepen my own understanding. The Feynman Technique isn't just a study method; it's a mindset that transforms how you approach knowledge acquisition.&lt;/p&gt;

&lt;p&gt;What about you? Have you tried using simplified explanations to test your understanding? How do you approach teaching as a learning tool?&lt;/p&gt;

</description>
      <category>learning</category>
      <category>development</category>
      <category>mentorship</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Great Learning Resources for Programming, Frontend, and Web Development</title>
      <dc:creator>Dejan Kostevski</dc:creator>
      <pubDate>Sun, 15 Feb 2026 08:00:00 +0000</pubDate>
      <link>https://forem.com/dekigk/great-learning-resources-for-programming-frontend-and-web-development-4o2e</link>
      <guid>https://forem.com/dekigk/great-learning-resources-for-programming-frontend-and-web-development-4o2e</guid>
      <description>&lt;h2&gt;
  
  
  Learning resources
&lt;/h2&gt;

&lt;p&gt;Every now and then, I get a question from people: Where do I start learning programming? Which programming resources, coding tutorials, or web development courses should I use? Do you have a great learning resource for JavaScript, React, CSS, or TypeScript?&lt;/p&gt;

&lt;p&gt;These questions come from junior developers and people just starting out with programming, frontend development, or web development in general. I remember quite well how lost I felt at the beginning of my journey. It wasn't structured. I had to find the best resources for learning to code myself. I had no mentor in the beginning, so there was a lot of trial and error to discover what works for me.&lt;/p&gt;

&lt;p&gt;I want future generations of developers to avoid this confusion. That's why I created this curated list of the best learning resources for programming, frontend, and web development. I can wholeheartedly recommend all the resources in &lt;a href="https://github.com/DekiGk/great-learning-resources" rel="noopener noreferrer"&gt;this repo&lt;/a&gt;. It's my attempt to group all the top places you can learn the skills I know — JavaScript, React, CSS, TypeScript, and more. Most of these are free, but there are also some excellent paid options for those who want to go deeper.&lt;/p&gt;

&lt;h2&gt;
  
  
  My list
&lt;/h2&gt;

&lt;p&gt;The list contains pages with various different topics, like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  General&lt;/li&gt;
&lt;li&gt;  CSS&lt;/li&gt;
&lt;li&gt;  CleanCode&lt;/li&gt;
&lt;li&gt;  CodeEditor&lt;/li&gt;
&lt;li&gt;  TypeScript&lt;/li&gt;
&lt;li&gt;  JavaScript&lt;/li&gt;
&lt;li&gt;  NodeJs&lt;/li&gt;
&lt;li&gt;  React&lt;/li&gt;
&lt;li&gt;  OOP&lt;/li&gt;
&lt;li&gt;  Testing&lt;/li&gt;
&lt;li&gt;  GraphQL&lt;/li&gt;
&lt;li&gt;  Databases&lt;/li&gt;
&lt;li&gt;  Git&lt;/li&gt;
&lt;li&gt;  Linux&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each topic has its own set of recommended resources, tutorials, and guides. The grouping might not be perfect, but I am constantly adding to the list and will revise the structure as needed to keep it up to date with the latest and best developer resources.&lt;/p&gt;

&lt;p&gt;This resource list is incredibly handy and has already proven its worth in many situations. Whenever someone asks how to get better at JavaScript, React, CSS, or any other web development skill, I can simply share a link to the list. It's super convenient, useful, and saves time for both beginners and experienced developers looking for high-quality programming resources.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;With this post, I wanted to share what I've been working on for the past 10 months or so — a growing, curated collection of the best learning resources for programming, frontend development, and web development. This list will continue to expand over time as I discover new and valuable resources for JavaScript, React, CSS, TypeScript, and more. Hopefully, it can help some of you out there on your journey to becoming a better developer. 🤞&lt;/p&gt;

</description>
      <category>programming</category>
      <category>resources</category>
      <category>frontend</category>
      <category>mentorship</category>
    </item>
    <item>
      <title>How to create canonical URLs in Gatsby?</title>
      <dc:creator>Dejan Kostevski</dc:creator>
      <pubDate>Sun, 01 Feb 2026 08:30:00 +0000</pubDate>
      <link>https://forem.com/dekigk/how-to-create-canonical-urls-in-gatsby-1nd8</link>
      <guid>https://forem.com/dekigk/how-to-create-canonical-urls-in-gatsby-1nd8</guid>
      <description>&lt;p&gt;In one of my previous posts I have described what a canonical URL is. Now, let me show you how to implement this in Gatsby.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gatsby
&lt;/h2&gt;

&lt;p&gt;First of all, what is Gatsby?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Gatsby is a React-based open-source framework for creating websites and apps.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://www.gatsbyjs.com/docs/" rel="noopener noreferrer"&gt;Gatsby&lt;/a&gt; is a Static Site Generator tool based on React. It takes your React components and pre-renders them into (generates) HTML documents. It has its own way of dealing with page components, dynamic templates, as well as normal reusable components. There is a nice plugin ecosystem and a lively community. If you know React and you want to build fast websites this is a great tool.&lt;/p&gt;

&lt;p&gt;After Gatsby renders your components into HTML pages you can serve them as a static website on any hosting you want.&lt;/p&gt;

&lt;h2&gt;
  
  
  React Helmet
&lt;/h2&gt;

&lt;p&gt;What is React Helmet you might ask. &lt;a href="https://github.com/nfl/react-helmet" rel="noopener noreferrer"&gt;React Helmet&lt;/a&gt; is a reusable React component which you can use to manage all of your &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; tags in your Gatsby project.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This reusable React component will manage all of your changes to the document head.&lt;br&gt;
Helmet takes plain HTML tags and outputs plain HTML tags. It's dead simple, and React beginner friendly.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Of course, it is available from the NPM registry. You can use it like this (taken from the official repo for the React Helmet linked above):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Helmet&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react-helmet&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Application&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Component&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"application"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Helmet&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;meta&lt;/span&gt; &lt;span class="na"&gt;charSet&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"utf-8"&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
                    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;My Title&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;link&lt;/span&gt; &lt;span class="na"&gt;rel&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"canonical"&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"http://mysite.com/example"&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Helmet&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                ...
            &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once Gatsby renders the HTML you will get this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"utf-8"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;My Title&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"canonical"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"http://mysite.com/example"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To be able to use this, of course, you have to install some NPM packages:&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;install &lt;/span&gt;gatsby-plugin-react-helmet react-helmet
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The full installation guide can be found &lt;a href="https://www.gatsbyjs.com/docs/add-page-metadata/" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  gatsby-plugin-react-helmet-canonical-urls
&lt;/h2&gt;

&lt;p&gt;React Helmet is great, but it did not play well with another Gatsby plugin called &lt;code&gt;gatsby-plugin-canonical-urls&lt;/code&gt;. When using these two combined and you want to override a canonical URL you end up with two canonical meta tags.&lt;/p&gt;

&lt;p&gt;That is why the &lt;a href="https://nckweb.com.ar/gatsby-canonical-urls-react-helmet" rel="noopener noreferrer"&gt;gatsby-plugin-react-helmet-canonical-urls&lt;/a&gt; plugin has been created. It is a Gatsby plugin which gives you the possibility to have default canonical meta tags and override them when needed using the React Helmet API.&lt;/p&gt;

&lt;p&gt;This is how you use it:&lt;/p&gt;

&lt;p&gt;First, install a couple of Gatsby plugins&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;install&lt;/span&gt; &lt;span class="nt"&gt;--save&lt;/span&gt; gatsby-plugin-react-helmet gatsby-plugin-react-helmet-canonical-urls
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After that add this to your &lt;code&gt;gatsby-config.js&lt;/code&gt; (it is a configuration file for Gatsby)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;In&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;your&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;gatsby-config.js&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;plugins:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;`gatsby-plugin-react-helmet`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="err"&gt;resolve:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;`gatsby-plugin-react-helmet-canonical-urls`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="err"&gt;options:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="err"&gt;siteUrl:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://www.example.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There are of course some other options you could set up, see the full list of those &lt;a href="https://github.com/NickCis/gatsby-plugin-react-helmet-canonical-urls#how-to-use" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;And that's it. Now, you can use this in your website/application.&lt;/p&gt;

&lt;h2&gt;
  
  
  For static pages
&lt;/h2&gt;

&lt;p&gt;But, how do you actually use this?&lt;/p&gt;

&lt;p&gt;For static pages, you can use something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// in about.jsx for example&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default &lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;location&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Layout&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Helmet&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;`$&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;site&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;siteMetadata&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; - About`&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;link&lt;/span&gt;
                    &lt;span class="na"&gt;rel&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"canonical"&lt;/span&gt;
                    &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;site&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;siteMetadata&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;siteUrl&lt;/span&gt;&lt;span class="p"&gt;}${&lt;/span&gt;&lt;span class="nx"&gt;location&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pathname&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
                &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Helmet&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h2&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;About me&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h2&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Layout&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As Gatsby is using &lt;code&gt;GraphQL&lt;/code&gt; you can get that data object filled in while building your pages. Also, you can setup the &lt;code&gt;site&lt;/code&gt; data in your &lt;code&gt;gatsby-config.js&lt;/code&gt;, like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// gatsby-config.js&lt;/span&gt;

&lt;span class="kr"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;siteMetadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Kode Skills&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;siteUrl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://kodeskills.com/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And then you can access this data in your pages through &lt;code&gt;GraphQL&lt;/code&gt; query, like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;graphql&lt;/span&gt;&lt;span class="s2"&gt;`
    {
        site {
            siteMetadata {
                title
                siteUrl
            }
        }
    }
`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;a href="https://www.gatsbyjs.com/docs/location-data-from-props/" rel="noopener noreferrer"&gt;location&lt;/a&gt; prop is passed to your pages by Gatsby, and you can access useful data with it. In our case, we are using it to access the &lt;code&gt;pathname&lt;/code&gt;, so, basically everything in your URL after the domain name.&lt;/p&gt;

&lt;p&gt;For this page it would be &lt;code&gt;/how-to-create-canonical-urls-in-gatsby&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  For dynamic templates
&lt;/h2&gt;

&lt;p&gt;To use this technique for dynamic templates (blog post templates, tags or categories templates, etc...) where one component is reused for dynamic content you can use largely the same approach.&lt;/p&gt;

&lt;p&gt;One thing to be aware of is, that you can use data from the &lt;a href="https://www.gatsbyjs.com/docs/how-to/routing/adding-markdown-pages/#frontmatter-for-metadata-in-markdown-files" rel="noopener noreferrer"&gt;frontmatter&lt;/a&gt;. This is basically just metadata in your MD files (if you are using those) which you can use to create dynamic canonical URLs.&lt;/p&gt;

&lt;p&gt;So, you would have to set this up for your blog posts like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;// how-to-create-canonical-urls-in-gatsby.md

slug: 'how-to-create-canonical-urls-in-gatsby'
title: 'How to create canonical URLs in Gatsby?'
&lt;span class="p"&gt;
---
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then in your &lt;code&gt;GraphQL&lt;/code&gt; query for your blog post template:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;graphql&lt;/span&gt;&lt;span class="s2"&gt;`
    query BlogPostQuery($slug: String!) {
        site {
            siteMetadata {
                siteUrl
            }
        }
        markdownRemark(frontmatter: { slug: { eq: $slug } }) {
            frontmatter {
                slug
                title
            }
        }
    }
`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And, finally in your component:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// in blog-post.jsx template&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default &lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Layout&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Helmet&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;markdownRemark&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;frontmatter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;link&lt;/span&gt;
                    &lt;span class="na"&gt;rel&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"canonical"&lt;/span&gt;
                    &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;site&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;siteMetadata&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;siteUrl&lt;/span&gt;&lt;span class="p"&gt;}${&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;markdownRemark&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;frontmatter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;slug&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
                &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Helmet&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            ... the content of your blog post
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Layout&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  SEO component
&lt;/h2&gt;

&lt;p&gt;To be a bit more flexible and to be able to reuse components for both static and dynamic pages it is a great idea to create a reusable &lt;code&gt;&amp;lt;Seo /&amp;gt;&lt;/code&gt; component. Something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Seo.jsx&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Seo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;canonicalUrl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;siteTitle&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;title&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&amp;gt;&lt;/span&gt;
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Helmet&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;siteTitle&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; - &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
                &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;link&lt;/span&gt; &lt;span class="na"&gt;rel&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"canonical"&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;canonicalUrl&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Helmet&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;/&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And then you can use it in your templates like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// about.jsx - static page template&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default &lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;location&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Layout&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Seo&lt;/span&gt;
                &lt;span class="na"&gt;canonicalUrl&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;site&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;siteMetadata&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;siteUrl&lt;/span&gt;&lt;span class="p"&gt;}${&lt;/span&gt;&lt;span class="nx"&gt;location&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pathname&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
                &lt;span class="na"&gt;siteTitle&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;site&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;siteMetadata&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
                &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"About"&lt;/span&gt;
            &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Layout&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;graphql&lt;/span&gt;&lt;span class="s2"&gt;`
    {
        site {
            siteMetadata {
                title
                siteUrl
            }
        }
    }
`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or like this in your blog post templates with dynamic data:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// blog-post.jsx&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default &lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Layout&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Seo&lt;/span&gt;
                &lt;span class="na"&gt;canonicalUrl&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;site&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;siteMetadata&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;siteUrl&lt;/span&gt;&lt;span class="p"&gt;}${&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;markdownRemark&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;frontmatter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;slug&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
                &lt;span class="na"&gt;siteTitle&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;site&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;siteMetadata&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
                &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;markdownRemark&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;frontmatter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
            &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Layout&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;graphql&lt;/span&gt;&lt;span class="s2"&gt;`
    query BlogPostQuery($slug: String!) {
        site {
            siteMetadata {
                title
                siteUrl
            }
        }
        markdownRemark(frontmatter: { slug: { eq: $slug } }) {
            frontmatter {
                slug
                title
            }
        }
    }
`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Setting up canonical URLs is one of the first things SEO related to my website. It is an important thing to have if you plan to do content syndication, i.e. publishing same content on sites like medium, or dev.to, etc.&lt;/p&gt;

&lt;p&gt;I hope this article showed you how easy it is to set this up with a static site generator like Gatsby, which I am using for my website.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>gatsby</category>
      <category>canonicalurl</category>
      <category>react</category>
    </item>
    <item>
      <title>What is a canonical URL?</title>
      <dc:creator>Dejan Kostevski</dc:creator>
      <pubDate>Thu, 15 Jan 2026 08:30:00 +0000</pubDate>
      <link>https://forem.com/dekigk/what-is-a-canonical-url-26fn</link>
      <guid>https://forem.com/dekigk/what-is-a-canonical-url-26fn</guid>
      <description>&lt;h2&gt;
  
  
  What does canonical even mean?
&lt;/h2&gt;

&lt;p&gt;According to &lt;a href="https://en.wikipedia.org/wiki/Canonical" rel="noopener noreferrer"&gt;Wikipedia&lt;/a&gt;, it is a standard, a rule or primary source of authority. Basically, it means the source of truth.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“The adjective canonical is applied in many contexts to mean "according to the canon" – the standard, rule or primary source that is accepted as authoritative for the body of knowledge or literature in that context.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What is it technically?
&lt;/h2&gt;

&lt;p&gt;Canonical URLs are telling search engines that the page they are visiting is the original content (in the case of duplicate content). This can be done in two ways:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  As an HTML &lt;code&gt;&amp;lt;link&amp;gt;&lt;/code&gt; element put in the &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; of your webpage, like this:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"canonical"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://example.com"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Of course, you need to change example.com to your own domain.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Or as an HTTP header, like this:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;Link: &amp;lt;https://example.com&amp;gt;; rel="canonical"
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Canonical_link_element" rel="noopener noreferrer"&gt;Source&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you can see this is really not so complex. Most of the static site generators and content management systems nowadays have those features built in, or you can easily add those with plugins.&lt;/p&gt;

&lt;p&gt;As a developer you should know what those tags (or headers) are used for, why they are useful and why you should care.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is it used for?
&lt;/h2&gt;

&lt;p&gt;As you can see from the above, canonical URLs are super simple to set up, but why should you care about them on your website?&lt;/p&gt;

&lt;p&gt;If you are doing content syndication those can be super useful, at least when you are starting out. Content syndication means publishing your content on more than one domain (platform) at a time.&lt;/p&gt;

&lt;p&gt;So, let's say that you are writing a post on your website, but you also want to publish it on other platforms, like &lt;a href="https://medium.com/" rel="noopener noreferrer"&gt;medium.com&lt;/a&gt;, &lt;a href="https://dev.to/"&gt;dev.to&lt;/a&gt; or &lt;a href="https://hashnode.com/" rel="noopener noreferrer"&gt;hashnode.com&lt;/a&gt;. There is no way you can compete with these domains in terms of domain authority. This means that, to Google, they are more valid sources of content then your small and less visited website. However, you can leverage the reach that those platforms can give you and put your original post as a canonical URL on those platforms. This way you are telling Google (and other search engines) that the content is originally posted on your website. In this case Google will notice duplicate content, as you would actually publish the same content on various domains. But, the original source of content will always be your website, and therefore you would build up your domain authority.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;I hope I demystified the Canonical URLs a bit for you. For a long time I did not learn this properly. Now it is clear to me what they are and what they are used for. Next year I will eat my words and will start with the content syndication to try and leverage the reach that those external platforms can give me. Let’s see how it goes.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>seo</category>
      <category>canonicalurl</category>
      <category>bestpractice</category>
    </item>
    <item>
      <title>How Cleaning Up Projects Eliminates Technical Debt and Improves Developer Experience</title>
      <dc:creator>Dejan Kostevski</dc:creator>
      <pubDate>Mon, 05 Jan 2026 08:30:00 +0000</pubDate>
      <link>https://forem.com/dekigk/how-cleaning-up-projects-eliminates-technical-debt-and-improves-developer-experience-3e34</link>
      <guid>https://forem.com/dekigk/how-cleaning-up-projects-eliminates-technical-debt-and-improves-developer-experience-3e34</guid>
      <description>&lt;h2&gt;
  
  
  Intro
&lt;/h2&gt;

&lt;p&gt;As software developers, we often inherit projects with a lot of technical debt, legacy code, and poor developer experience. Sometimes, the sheer number of problems in a codebase makes it easy to accept the status quo and ignore the issues, but this only leads to more software maintenance headaches and lower code quality over time. For me, working in a messy project goes against everything I believe in as a developer and makes it harder to deliver value.&lt;/p&gt;

&lt;p&gt;This is a story of how I tackled a legacy project, cleaned up the codebase, reduced technical debt, and improved both the CI/CD pipeline and the overall developer experience. Here’s what I learned about project management and code quality along the way.&lt;/p&gt;

&lt;h2&gt;
  
  
  Legacy hell
&lt;/h2&gt;

&lt;p&gt;Recently, I worked on a legacy project that had been around for years, with multiple teams and developers leaving their mark on the codebase. The result was a patchwork of different coding styles, outdated documentation, and a lack of clear standards. Deploying even to the DEV environment took 30 minutes, and tools like SonarQube for code analysis were impossible to integrate. Linting rules conflicted, code formatting was inconsistent, and the Webpack configuration was overly complex. All of this made the project hard to maintain, difficult to update, and a prime example of technical debt and poor software maintenance.&lt;/p&gt;

&lt;p&gt;On top of these issues, the project suffered from legacy code bloat—about 90% of the code wasn’t even used for the current use cases. This added unnecessary cognitive complexity and made every change riskier. After forking the repository for my team, a code cleanup and refactoring effort became inevitable to restore code quality and improve developer experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  The cleanup
&lt;/h2&gt;

&lt;p&gt;I won’t go into the details of every change, but the main focus was deleting unused folders and files to reduce technical debt and improve codebase health. Here are the before/after numbers and the approach I used to ensure the application still worked after major code removal.&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%2F4ckdzaiwpih3qlhd6r96.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%2F4ckdzaiwpih3qlhd6r96.jpg" alt="Cleanup Numbers" width="800" height="338"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My cleanup strategy was iterative: first, I deleted large groups of obviously unused folders. Next, I removed individual files that were no longer needed. The third phase (which I skipped due to time constraints) would have targeted unused helper functions and dead code within the remaining files. This approach was inspired by &lt;a href="https://blog.code-cop.org/" rel="noopener noreferrer"&gt;Peter Kofler (aka Code Cop)&lt;/a&gt;, whose advice on code quality and refactoring was invaluable. I also relied on simple manual UI tests and NPM scripts after each deletion to confirm nothing was broken, followed by CI/CD pipeline runs to catch any issues between local and DEV environments.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lessons learned
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Don’t be afraid to break things.&lt;/strong&gt; When a project is weighed down by technical debt and legacy code, it’s almost impossible to make things worse. Sometimes, bold refactoring is the only way to restore code quality and maintainability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Just do it.&lt;/strong&gt; I knew a cleanup was needed soon after joining the project. Once I understood the codebase, it was clear that simplifying and removing technical debt would benefit everyone.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Remove code iteratively (folders, files, methods).&lt;/strong&gt; Don’t waste time making tiny changes and hoping nothing breaks. Remove large sections of unused code, then test and verify. This approach is more effective for improving codebase health and developer experience.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deploy often.&lt;/strong&gt; Frequent deployments and CI/CD pipeline runs after each cleanup step helped me catch issues early. Manual UI tests and NPM scripts were essential for validating changes. Thank goodness for Git and version control!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix the broken windows.&lt;/strong&gt; If you let small problems linger, they multiply. Whether it’s a broken window or a hole in your boat, ignoring code quality issues leads to bigger problems. Don’t let your standards slip — address technical debt and maintain clean code practices.&lt;/p&gt;

&lt;p&gt;Removing unused code didn’t solve every problem in this legacy project, but it made a huge difference. It also paved the way for further improvements, like updating dependencies, adding TypeScript, and using modern JavaScript features. My hope is that this story encourages you to tackle technical debt and prioritize code quality in your own projects. Developers should always advocate for maintainable, high-quality code, even when deadlines and priorities compete for attention.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;I’m not one to brag, but cutting CI/CD pipeline times in half just by removing unnecessary code and technical debt felt like a major win. No other performance optimizations were needed — just a focus on code quality and project cleanup.&lt;/p&gt;

&lt;p&gt;One big takeaway from this experience is how to quickly evaluate the health of a legacy codebase. Look at your CI/CD times, identify what’s outside your control, and spot the bottlenecks. Check for TODO comments, lint warnings, and console errors in both Node and the browser. Don’t forget to review outdated dependencies and see how old they are. These metrics are key indicators of technical debt and software maintenance needs.&lt;/p&gt;

&lt;p&gt;Have you ever had to clean up a legacy project or tackle technical debt? What was your approach? I’d love to hear your experiences — feel free to reach out and share your story.&lt;/p&gt;

</description>
      <category>cleancode</category>
      <category>techdebt</category>
      <category>softwaremaintenance</category>
      <category>dx</category>
    </item>
    <item>
      <title>What is a RSS feed</title>
      <dc:creator>Dejan Kostevski</dc:creator>
      <pubDate>Mon, 15 Dec 2025 08:30:00 +0000</pubDate>
      <link>https://forem.com/dekigk/what-is-a-rss-feed-41m0</link>
      <guid>https://forem.com/dekigk/what-is-a-rss-feed-41m0</guid>
      <description>&lt;p&gt;RSS is that term you hear and see a lot but never really bother to understand what it does. It is not a surprise, as it is a really easy concept to understand. Most people, like me, just briefly read about it on Wikipedia and do not go really deep into it. This article is aimed at people who want to learn more about it and see how they can utilize this simple technology.&lt;/p&gt;

&lt;p&gt;This article was originally published on &lt;a href="https://kodeskills.com/what-is-a-rss-feed" rel="noopener noreferrer"&gt;Kode Skills Blog&lt;/a&gt;. Head over there if you like this post and want to read others like it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is a RSS feed?
&lt;/h2&gt;

&lt;p&gt;Here is the definition from &lt;a href="https://en.wikipedia.org/wiki/RSS" rel="noopener noreferrer"&gt;Wikipedia&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"RSS (RDF Site Summary or Really Simple Syndication) is a web feed that allows users and applications to access updates to websites in a standardized, computer-readable format."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In simple terms, a RSS feed is just an XML document formatted according to the RSS standard. It can be served from any website, just like an HTML page or any other resource (images, PDFs, MP4, etc.).&lt;/p&gt;

&lt;p&gt;But what is it used for? Why is RSS still useful for blogs, news, and content creators? At its core, RSS is a broadcasting mechanism for your website’s content. It’s most commonly used for blogs, but you’ll also find RSS feeds for podcasts, news headlines, product updates, and even torrent trackers. An RSS feed can include metadata about your content — like author, publishing date, short descriptions (excerpts), or even the full article content. This is how you broadcast your latest content to the world, or at least to the people who are listening (subscribed) to your RSS feed.&lt;/p&gt;

&lt;p&gt;Think of an RSS feed as your own mini transmitter antenna for your website’s content. The RSS logo even symbolizes this idea. 📡&lt;/p&gt;

&lt;h2&gt;
  
  
  How does it look like?
&lt;/h2&gt;

&lt;p&gt;So I mentioned XML files and you might be wondering: what is XML? Or maybe you’re thinking, “Isn’t that a dead technology?” While XML is over 20 years old, it’s still the backbone of RSS and many other web feed formats. XML is a markup language, similar to HTML, but with stricter syntax. It’s designed to be both machine-readable and human-readable, making it perfect for structured data like RSS feeds.&lt;/p&gt;

&lt;p&gt;If you visited the Wikipedia article above you will see this example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;?xml version="1.0" encoding="UTF-8" ?&amp;gt;
&amp;lt;rss version="2.0"&amp;gt;
    &amp;lt;channel&amp;gt;
        &amp;lt;title&amp;gt;RSS Title&amp;lt;/title&amp;gt;
        &amp;lt;description&amp;gt;This is an example of an RSS feed&amp;lt;/description&amp;gt;
        &amp;lt;link&amp;gt;http://www.example.com/main.html&amp;lt;/link&amp;gt;
        &amp;lt;copyright&amp;gt;2020 Example.com All rights reserved&amp;lt;/copyright&amp;gt;
        &amp;lt;lastBuildDate&amp;gt;Mon, 06 Sep 2010 00:01:00 +0000 &amp;lt;/lastBuildDate&amp;gt;
        &amp;lt;pubDate&amp;gt;Sun, 06 Sep 2009 16:20:00 +0000&amp;lt;/pubDate&amp;gt;
        &amp;lt;ttl&amp;gt;1800&amp;lt;/ttl&amp;gt;
        &amp;lt;item&amp;gt;
            &amp;lt;title&amp;gt;Example entry&amp;lt;/title&amp;gt;
            &amp;lt;description&amp;gt;Here is some text containing an interesting description.&amp;lt;/description&amp;gt;
            &amp;lt;link&amp;gt;http://www.example.com/blog/post/1&amp;lt;/link&amp;gt;
            &amp;lt;guid isPermaLink="false"&amp;gt;7bd204c6-1655-4c27-aeee-53f933c5395f&amp;lt;/guid&amp;gt;
            &amp;lt;pubDate&amp;gt;Sun, 06 Sep 2009 16:20:00 +0000&amp;lt;/pubDate&amp;gt;
        &amp;lt;/item&amp;gt;
    &amp;lt;/channel&amp;gt;
&amp;lt;/rss&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That’s how a basic RSS feed looks. There’s not much else to it! Of course, you’ll want to generate an RSS feed that includes your own site’s metadata and content. Most modern blogging platforms and content management systems (like WordPress, Gatsby, or static site generators) can automatically generate RSS feeds for you.&lt;/p&gt;

&lt;p&gt;If you’re interested in the technical details or want to dive deeper into the RSS standard, check out the Wikipedia &lt;a href="https://en.wikipedia.org/wiki/RSS" rel="noopener noreferrer"&gt;article&lt;/a&gt; I mentioned earlier.&lt;/p&gt;

&lt;h2&gt;
  
  
  RSS readers
&lt;/h2&gt;

&lt;p&gt;As mentioned earlier, RSS is a web feed technology that lets you broadcast your content to anyone who wants to subscribe. This “listening” can happen from another website, an RSS reader app, or even a custom aggregator. With just your RSS feed URL, people can get your latest blog posts, news, or podcast episodes without ever visiting your site directly. This process is called web syndication, and it’s a powerful way to distribute your content.&lt;/p&gt;

&lt;p&gt;If you follow dozens of blogs or news sites, RSS feeds are the best way to get notifications when new content is published. RSS feed readers (also called news aggregators) are websites or apps where you can add the feeds you want to follow. They format the data for you, present it in a clean UI, and often offer extra features like search, tagging, and offline reading.&lt;/p&gt;

&lt;p&gt;RSS feed readers used to be very popular in a pre social media era of the Internet. Nowadays your Facebook or Twitter feed is THE "RSS" feed you use. Do not get me wrong. I think that there is a certain value of the Facebook pages and twitter accounts that aggregate, select and share interesting content. However, it is rarely of good quality, and there is also this problem that everyone is sharing the same "hot" thing. Also, it has the tendency to get lost pretty quickly in your social media feed.&lt;/p&gt;

&lt;p&gt;With RSS feed you do not have duplication and you can fully focus on just the content itself. I believe it is of great value NOT to be distracted by other non relevant stuff in this era of social media and creating content for the sake of creating content.&lt;/p&gt;

&lt;p&gt;Another alternative to social media are newsletters. They are very important, but I believe they are better suited for other purposes. Newsletters also have some downsides in terms of ease of use. Although you can automate the process of sending a bunch of emails as soon as you release a new post, it is much simpler to do this with RSS feeds. Again, I am not making a point against email newsletters. They are a very powerful marketing tool, but for content syndication I believe that RSS feed concept is the best. This is what they were created for in the first place. Of course, there are some other competing technologies to RSS (namely Atom and JSON feeds), but the concept is still the same.&lt;/p&gt;

&lt;p&gt;The 3 most popular RSS feed readers in my opinion are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Feedly&lt;/li&gt;
&lt;li&gt;Inoreader&lt;/li&gt;
&lt;li&gt;NewsBlur&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I am personally using Inoreader and I love it. It is simple and works as expected.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Whether you’re a blogger, developer, or just a content consumer, RSS feeds remain one of the best technologies for aggregating news, blog updates, and web content. While there are more sophisticated solutions out there, for simple use cases like blogs, podcasts, and news, RSS is still the gold standard for content syndication and web feeds. I recommend using RSS alongside social media and newsletters — RSS is perfect for your returning audience who want to stay updated with your latest posts.&lt;/p&gt;

&lt;p&gt;If you haven’t already, check out my &lt;a href="https://kodeskills.com/rss.xml" rel="noopener noreferrer"&gt;RSS feed&lt;/a&gt; and subscribe if you find my posts useful. Please help me reach a wider audience by sharing on your favorite social media platform. 😎 Thank you!&lt;/p&gt;

&lt;p&gt;What do you think about RSS feeds? Are you using them? Do you have another opinion on this topic? I’d love to hear from you — let me know what you think through my contact form below.&lt;/p&gt;

</description>
      <category>rss</category>
      <category>xml</category>
      <category>syndication</category>
      <category>webfeeds</category>
    </item>
    <item>
      <title>Leveling up as a programmer</title>
      <dc:creator>Dejan Kostevski</dc:creator>
      <pubDate>Mon, 04 Aug 2025 05:30:00 +0000</pubDate>
      <link>https://forem.com/dekigk/leveling-up-as-a-programmer-a07</link>
      <guid>https://forem.com/dekigk/leveling-up-as-a-programmer-a07</guid>
      <description>&lt;p&gt;Have you ever had that feeling like you know everything in programming and there is nothing you can not learn? I have. But, have you also had that feeling like you do not know anything and will never be able to learn the more advanced concepts and techniques? I have.&lt;/p&gt;

&lt;p&gt;This article was originally published on &lt;a href="https://kodeskills.com/levelling-up-as-a-programmer" rel="noopener noreferrer"&gt;Kode Skills Blog&lt;/a&gt;. Head over there if you like this post and want to read others like it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Learn the Tools, Frameworks, Programming Languages, and Environments
&lt;/h2&gt;

&lt;p&gt;This one is pretty obvious, but it’s what you’ll spend most of your early programming career doing. Immerse yourself in all kinds of topics — start with the basics and move on to more advanced software engineering concepts as your knowledge grows. Remember to improve your skills both vertically (deep expertise in one area) and horizontally (broad understanding across related fields). For example, if you’re on the frontend developer path, don’t just learn HTML, CSS, and JavaScript. Also learn enough backend, databases, and design to understand the bigger picture of web development.&lt;/p&gt;

&lt;p&gt;Having all of this in mind, you should really spend the time to learn or at least understand how the different tooling (in your chosen language) works. How to set it up, how to modify it, how to use it. You should be able to jump into a new project and detect all the tooling that is used and what is doing what. This has been a pain point for me, and it still is. Maybe I am not the only one who is struggling with this. That is why I am putting it high on the list as I think it is important for beginners to embrace this and learn as much as they can to understand the basics of tooling.&lt;/p&gt;

&lt;p&gt;Frameworks are a special kind of knowledge. Usually, if you learn one, you will quickly learn others as well. But, that is not always the case. All of them have some specifics and some things that they do in their own way. You should always try to use them the way they are intended to be used. Spending time to read through their documentation is usually a time well spent. Always be mindful that you are within a certain framework and that there probably is a better or more elegant way of doing things elsewhere.&lt;/p&gt;

&lt;p&gt;Which framework to learn? Well, that is a good question. But, one that cannot be answered without working with all of the frameworks for some time (couple of projects, or couple of months). And since nobody got time for that, I believe that it is a safe bet to go with what the community uses and what is popular. However, the mostly used, the most popular framework, does not mean that it is the best or the easiest to use (thank you Benjamin for teaching me this). The point I want to make here is, make sure you know your framework and you know the Pros and Cons of it. It will make you a better programmer.&lt;/p&gt;

&lt;p&gt;For the language part of this section, I think it is pretty straightforward. No framework, tutorial, or project will substitute or make learning the basics of your language irrelevant. In fact, you should probably stay away from major frameworks in first couple of years of your quest of becoming the ultimate programmer. You can use them, of course, most projects require them. But, you should be aware that they have a lot of abstractions, a lot of code that just works and gives you what you need. That is why they are so useful and widely used. It has the downside that you don't get to see how all of these problems are solved with the vanilla version of the language. For me, reading their source code does not really help. The way I suggest people learn bare bones programming language is just by trying things out without any framework, or build tools or anything like that. Just you, the editor and the browser.&lt;/p&gt;

&lt;p&gt;And now the browser, or the environment where you will run your code. Always be mindful of the environment you are in. For us Frontend Developers it is super important to know where you are and for what browsers you are building. Different browsers have different support for different features. Be mindful of that. On projects, one of the first questions I ask is: "What browser versions do we have to support?". Once you finish first several levels (finish your Junior year or two) you will see how versioning is important. I don't want to tell you how much time I have spent tracing bugs which were caused by incompatible versions of NPM packages. Make sure that you know what environment you are developing in/for and what versions of third party code you are using. This will also help you when you are searching for solutions. The rule of thumb is to try and always be up to date or somewhere close to that with your third party code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use the Tools, Frameworks, Languages, and Environments
&lt;/h2&gt;

&lt;p&gt;This will come naturally as you follow the previous advice, but there’s one important thing to remember: Try to produce more than you consume. I’m guilty of not following this advice myself—I still read articles and watch tutorials more than I experiment with code. But the real growth as a programmer comes from building things, not just learning passively. Build anything you can think of, and use online resources for project ideas if you’re stuck. Make time for hands-on coding every day. This is what will help you level up your coding skills, open new doors for employment, and accelerate your developer journey.&lt;/p&gt;

&lt;h2&gt;
  
  
  Learn to read the documentation
&lt;/h2&gt;

&lt;p&gt;In programming it is really important to have good documentation. Remember all the abstractions that frameworks are doing, being able to read their documentation is what makes you a better programmer. Knowing which function to use and why, makes you more ready for using that framework. But, reading documentation is not always that straightforward. I know I have struggled with understanding the documentation myself. The only tip I can give you here is to learn the basics of your language of choice. Most of the technical terms used in documentation can be understood if you learn the basics of the language. I figured out that exactly lack of this knowledge was the problem for me. Once I went back and relearned and solidified my knowledge of the basics I was able to start effectively reading the documentation of any language or framework.&lt;/p&gt;

&lt;h2&gt;
  
  
  Learn to use Debugging tools and Chrome dev tools
&lt;/h2&gt;

&lt;p&gt;One of the biggest improvements in being able to fix bugs is being able to debug and inspect your code. For any web developer out there, being able to use super useful Chrome dev tools (or any other browsers` dev tools) should be high on the priority list. This is one of those things that do not take a lot of time to learn, but have an enormous potential to help you, speed you up, or make you more aware of your code and its implications. I strongly recommend spending time to teach yourself at least the basics of using this super useful tool. The other thing, debugging tools, are strongly correlated with using the Chrome dev tools and can be learned in parallel so look out for that side quest 🧰.&lt;/p&gt;

&lt;h2&gt;
  
  
  Learn the basics of Networking
&lt;/h2&gt;

&lt;p&gt;I really wish I learned this before even starting as a Web Developer. This is so insanely powerful, yet super simple to understand. Of course, this is a big topic in itself, but the things you need to know as a Web Developer are quite small and isolated. Being able to know and understand what is going on when you try to access any website is making you aware of a whole bunch of potential issues and bugs you could figure out (and maybe even solve) in your project. Not to mention that it is one of the more popular interview questions. Those things are scratching a bit the surface of DevOps, but it is worth to have a wider picture. Spend the time and learn these things, it will make you a better programmer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Learn the basics of testing
&lt;/h2&gt;

&lt;p&gt;Testing has become a hot topic in recent years, and rightfully so. We all want to ship software without bugs, right? But, no one can write any code without bugs. They are sure to happen, just like night and day. Of course, this topic is also a big one, and becoming a master takes time and practise. You should, however, at least scratch the surface and be aware of what kind of problems it can solve, what can it give you in return, how to be confident with your tests. Writing and thinking about tests does not only make you ship software without bugs, it also makes you write more resilient code. It makes you think twice about your approach to solving the problem. Learning TDD is really helpful, but in my opinion, you should focus on the above things first before you jump into testing. It is an advanced topic and you should have a pretty good understanding of the core language before starting to write tests.&lt;/p&gt;

&lt;h2&gt;
  
  
  Linux
&lt;/h2&gt;

&lt;p&gt;Since I know a bit of PHP and was doing the backend and server tasks throughout my career, I lacked one essential skill. Linux. One of the most valuable things I learned for my own career is learning how Linux works and how to work with it. It will help you with a lot of stuff, and you can basically use any operating system you want (Mac, any Linux distribution, Windows). You can fix some common server issues, you can understand how servers are connected and lots lots more. Not to mention that it will boost your self-confidence as a Programmer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Always volunteer for the hard tasks
&lt;/h2&gt;

&lt;p&gt;Always volunteer for the hard tasks and always try to understand as deep as you can the problem you are facing. This is not always easy and not always possible. The need to ship features fast is high on the priority list of any company. One of the most important things that will be asked of you as a programmer, especially when you level up within the career ladder, is being able to ship features fast. But how do you do that, how do you get better at it? Not all of us are super good programmers that can draw up the solution in our head in an instant.&lt;/p&gt;

&lt;p&gt;The one way it has always worked for me is to take the time to understand the details. Sometimes you just have to stop, take a deep breath and dive deep into the topic at hand. This is not always easy or even feasible, but it is necessary for your own progress. Being able to dissect the issue into smaller parts takes time. To understand how everything works takes time. It also takes a lot of knowledge to be able to do that (read Debugging skills). But, it is also very powerful. Once you solve the problem you will gain so much experience that you will probably level up right there, right at that moment. Not only that, but it also gives you a perfect opportunity to work with more senior people. It gives you more time with your Team Lead. It gives you an opportunity to show how you work, which is not always so obvious. It gives you an opportunity to show that you actually care about the thing you are building. It can show persistence and resilience and not giving up to solve a bug.&lt;/p&gt;

&lt;p&gt;As a junior in this field you should always look for these opportunities. Of course, trying to not dive deeper than you should. With a good team, and a good Team Lead this is really easy and safe thing to do. Some will even assign these kind of issues to you without you even asking for it. Embrace it with both hands and try to learn as much as you can. Take the time to learn as much as you can.&lt;/p&gt;

&lt;p&gt;Once you finally solve it, take the time to reflect on it. Fill in any gaps in knowledge you might have. Read up about the topics that are not really clear to you. Ask the same question 10 times if necessary. Make sure you understand it. Because, the thing is, you will most likely face the same problem in the future. But, now, you should be able to take it head on by yourself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stay open minded and question everything
&lt;/h2&gt;

&lt;p&gt;This one is especially true when you are solving bugs. Do not trust anyone, or anything, even yourself. Double check the obvious things first. Did you add the correct path? Is the function name correct? Is the ID correct? Is it even being called? Debugging skills and experience can help here a lot.&lt;/p&gt;

&lt;p&gt;The last thing you want to do is to be self centric and stubborn. If you are sure about something, give proof of it. Otherwise, prove it. Make sure that the mistake is not there, not in your code. Triple check everything. Even if it is like that, and you think all is good from your side, stay humble. Stay open minded. It could happen that the mistake is not on your side. Do you really want to make your colleague feel miserable or do you want to fix the issue?&lt;/p&gt;

&lt;p&gt;I believe that this specific skill defines a team player and one that is hard to work with. It is what companies are looking for. You do not have to be the best programmer in the world, but you have to be a team player. Being open and questioning even your solutions will help you pinpoint the issue faster and fix the issue faster. Not only that, but it will make you a better programmer.&lt;/p&gt;

&lt;p&gt;There is always a logical explanation why something is not working. Try the system of elimination. Go one step above, and then one more, and then one more. That is why I am advocating to be aware of Backend, Databases, Servers, etc. You do not have to be an expert, but it helps if you know some basics. At the end of the day, what is important is that the work gets done. And for you personally, it should be that you learned something new today. You acquired a new skill.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Levelling up as a programmer is not always straightforward or easy, and it’s not always obvious when you’ve reached a new level. Hopefully, this article gives you some ideas on how to recognize those moments and how to optimize your developer growth. I’d love to dive deeper into each of these topics and explain them technically in future articles — this one is already long enough!&lt;/p&gt;

&lt;p&gt;Good luck and have fun on your next quest to advance your programming career and coding skills! ⚔️&lt;/p&gt;

</description>
      <category>career</category>
      <category>programming</category>
      <category>developer</category>
      <category>growth</category>
    </item>
  </channel>
</rss>
