<?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: Manas Mishra</title>
    <description>The latest articles on Forem by Manas Mishra (@manascodes13).</description>
    <link>https://forem.com/manascodes13</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%2F913507%2F836830b9-a9a7-4a49-9570-fd16698a53c3.jpg</url>
      <title>Forem: Manas Mishra</title>
      <link>https://forem.com/manascodes13</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/manascodes13"/>
    <language>en</language>
    <item>
      <title>I Built a Token Compressor That Cuts LLM Context Size by 60%</title>
      <dc:creator>Manas Mishra</dc:creator>
      <pubDate>Fri, 27 Mar 2026 12:37:01 +0000</pubDate>
      <link>https://forem.com/manascodes13/i-built-a-token-compressor-that-cuts-llm-context-size-by-60-14ff</link>
      <guid>https://forem.com/manascodes13/i-built-a-token-compressor-that-cuts-llm-context-size-by-60-14ff</guid>
      <description>&lt;p&gt;Every token you send to an LLM costs money and eats into your context window. If you're stuffing structured data - JSON arrays, database records, API responses - into your prompts, you're probably wasting more than half your tokens on repeated keys, redundant values, and verbose formatting.&lt;/p&gt;

&lt;p&gt;I built ctx-compressor( &lt;a href="https://www.npmjs.com/package/ctx-compressor" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/ctx-compressor&lt;/a&gt; ) to fix that.&lt;/p&gt;

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

&lt;p&gt;Say you have 100 user records that look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  {
    "name": "Adeel Solangi",
    "language": "Sindhi",
    "id": "V59OF92YF627HFY0",
    "bio": "Donec lobortis eleifend condimentum...",
    "version": 6.1
  },
  {
    "name": "Afzal Ghaffar",
    "language": "Sindhi",
    "id": "ENTOCR13RSCLZ6KU",
    "bio": "...",
    "version": 3.2
  }
  // ... 98 more records
]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That JSON blob eats up 19,338 tokens and 63,732 characters when you feed it to a model. Every single object repeats "name", "language", "id", "bio", "version" - that's pure waste.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Solution
&lt;/h2&gt;

&lt;p&gt;ctx-compressor analyzes your data, extracts a schema, deduplicates repeated values, and encodes everything into a compact format that LLMs can still understand:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CTX/2
$name:s|language:s|id:s|bio:t|version:n2
&amp;amp;0=Sindhi
&amp;amp;1=Uyghur
&amp;amp;2=Galician
&amp;amp;3=Maltese
&amp;amp;4=Sesotho sa Leboa
&amp;amp;5=isiZulu
&amp;amp;6=Icelandic
Adeel Solangi|&amp;amp;0|V59OF92YF627HFY0|Donec lobortis...|6.1
Afzal Ghaffar|&amp;amp;0|ENTOCR13RSCLZ6KU|...|3.2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The same data compresses down to 7,442 tokens and 13,746 characters.&lt;/p&gt;

&lt;p&gt;That's a 61.5% reduction in tokens and a 78.4% reduction in characters.&lt;/p&gt;

&lt;h2&gt;
  
  
  How It Works
&lt;/h2&gt;

&lt;p&gt;The compression relies on a few key ideas:&lt;/p&gt;

&lt;p&gt;Schema extraction: Instead of repeating key names in every object, define them once at the top with type hints (s for string, n for number, t for text, etc.).&lt;/p&gt;

&lt;p&gt;Value deduplication: Values that appear frequently (like "Sindhi" across many records) get assigned short aliases (&amp;amp;0, &amp;amp;1, ...) and referenced by alias instead of repeated in full.&lt;/p&gt;

&lt;p&gt;Pipe-delimited rows: Each record becomes a single line with values separated by |, positionally mapped to the schema. No braces, no quotes, no colons.&lt;/p&gt;

&lt;p&gt;The result is a format that's dense for the tokenizer but still perfectly readable by the LLM.&lt;/p&gt;

&lt;h2&gt;
  
  
  Usage
&lt;/h2&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;ctx-compressor
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;compress&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;decompress&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;ctx-compressor&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Adeel Solangi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;language&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Sindhi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;V59OF92YF627HFY0&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;bio&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;6.1&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="c1"&gt;// ... more records&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;compressed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;compress&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="c1"&gt;// Send `compressed` to your LLM instead of JSON.stringify(data)&lt;/span&gt;

&lt;span class="c1"&gt;// Need the original structure back?&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;original&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;decompress&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;compressed&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  When To Use This
&lt;/h2&gt;

&lt;p&gt;ctx-compressor shines when you're sending arrays of similarly-shaped objects to an LLM, think database query results, API responses, CSV-style data, user lists, product catalogs, log entries, etc.&lt;/p&gt;

&lt;p&gt;It's particularly effective when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your data has repeated field names across many objects&lt;/li&gt;
&lt;li&gt;Certain field values repeat frequently (categories, statuses, languages)&lt;/li&gt;
&lt;li&gt;You're hitting context window limits or trying to reduce API costs&lt;/li&gt;
&lt;li&gt;You're doing RAG and want to pack more retrieved documents into context&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Benchmark Results
&lt;/h2&gt;

&lt;p&gt;Tested on a dataset of 100 user records with name, language, ID, and version fields:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Raw JSON: 19,338 tokens&lt;/li&gt;
&lt;li&gt;ctx-compressor: 7,442 tokens&lt;/li&gt;
&lt;li&gt;Savings: 61.5%&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  LLM Compatibility
&lt;/h2&gt;

&lt;p&gt;The compressed format includes the schema definition and alias table right in the output, so the LLM has everything it needs to interpret the data. In my testing, models handle it well; you can ask questions about the data, filter, aggregate, and reason over it just like you would with raw JSON.&lt;/p&gt;

&lt;p&gt;You can also include a brief instruction in your system prompt, like: "The following data is in CTX/2 compressed format. The schema and alias definitions are included at the top." - though most modern models figure it out without any extra prompting.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;I'm actively working on this and would love feedback. Some directions I'm exploring:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Nested object support&lt;/li&gt;
&lt;li&gt;Streaming compression for large datasets&lt;/li&gt;
&lt;li&gt;Built-in integrations with popular LLM SDKs&lt;/li&gt;
&lt;li&gt;A CLI tool for quick compression from the terminal&lt;/li&gt;
&lt;li&gt;Handling text prompt compression&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Check out the package on npm and let me know what you think. If you're spending too much on tokens for structured data, give it a try; that 60% savings adds up fast&lt;/p&gt;




&lt;p&gt;&lt;em&gt;If you found this useful, consider giving the repo a star, as it helps more people discover the project.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>ai</category>
      <category>node</category>
      <category>typescript</category>
    </item>
    <item>
      <title>Quantum Computing Might Change AI More Than GPUs Did</title>
      <dc:creator>Manas Mishra</dc:creator>
      <pubDate>Sun, 15 Mar 2026 05:51:21 +0000</pubDate>
      <link>https://forem.com/manascodes13/quantum-computing-might-change-ai-more-than-gpus-did-1hj2</link>
      <guid>https://forem.com/manascodes13/quantum-computing-might-change-ai-more-than-gpus-did-1hj2</guid>
      <description>&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%2Ftmhgg8y33j9cb5ayjaz1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftmhgg8y33j9cb5ayjaz1.png" alt="Quantum Computer" width="736" height="1103"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  A Moment That Changed Computing
&lt;/h2&gt;

&lt;p&gt;In 2019, a quantum computer completed a calculation in &lt;strong&gt;200 seconds&lt;/strong&gt; that researchers estimated would take one of the world's most powerful supercomputers &lt;strong&gt;thousands of years&lt;/strong&gt; to finish.&lt;/p&gt;

&lt;p&gt;The experiment was conducted by Google using a quantum processor called &lt;strong&gt;Sycamore&lt;/strong&gt;. At the time, the result sparked debate across the scientific community. Critics argued that the task had little real-world value, while supporters saw it as something much bigger.&lt;/p&gt;

&lt;p&gt;For the first time, a machine built on the principles of &lt;strong&gt;quantum mechanics&lt;/strong&gt; had demonstrated that it could outperform classical computers on a specific task.&lt;/p&gt;

&lt;p&gt;The moment was called &lt;strong&gt;quantum supremacy&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For years after that announcement, many people still believed quantum computing was something that belonged in research labs and physics departments - impressive, but far from practical.&lt;/p&gt;

&lt;p&gt;But the last few years have changed that narrative.&lt;/p&gt;

&lt;p&gt;By &lt;strong&gt;2026&lt;/strong&gt;, quantum computing is quietly transitioning from an experimental technology into a tool designed to solve some of the &lt;strong&gt;most complex computational problems humanity faces&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;To understand why this shift matters, we first need to understand what makes quantum computers fundamentally different from the computers we use today.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Difference Between Bits and Qubits
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F79qs5uef59tnrgxyl91x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F79qs5uef59tnrgxyl91x.png" alt="Bits vs Qubits" width="540" height="540"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Every computer we use today, from smartphones to supercomputers is built on a simple foundation: &lt;strong&gt;bits&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A bit can hold one of two values: &lt;strong&gt;0 or 1&lt;/strong&gt;. All modern software, algorithms, and digital systems ultimately rely on this binary representation.&lt;/p&gt;

&lt;p&gt;Quantum computers operate differently.&lt;/p&gt;

&lt;p&gt;Instead of bits, they use &lt;strong&gt;quantum bits&lt;/strong&gt;, or &lt;strong&gt;qubits&lt;/strong&gt;. A qubit uses the strange behavior of subatomic particles to exist in multiple states at once through a phenomenon known as &lt;strong&gt;superposition&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In simple terms, while a classical bit must be either &lt;strong&gt;0 or 1&lt;/strong&gt;, a qubit can be &lt;strong&gt;both at the same time&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This single property dramatically changes how computation works.&lt;/p&gt;

&lt;p&gt;A classical computer evaluates possibilities one after another. A quantum computer can explore &lt;strong&gt;many possibilities simultaneously&lt;/strong&gt;, making it uniquely suited for problems that grow exponentially in complexity.&lt;/p&gt;

&lt;p&gt;That is why &lt;strong&gt;quantum computing harnesses the power of quantum mechanics to overcome the limitations that classical computing increasingly faces.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Quantum Computing Is Suddenly Back in the Spotlight
&lt;/h2&gt;

&lt;p&gt;For decades, quantum computing research progressed slowly. The technology faced enormous challenges: fragile qubits, high error rates, and extremely complex hardware requirements.&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%2F9q2cwzn93xp4x2rt9fjr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9q2cwzn93xp4x2rt9fjr.png" alt="Noise Quibits" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The machines were fascinating from a physics perspective, but impractical for real-world use.&lt;/p&gt;

&lt;p&gt;Then the field entered what researchers called the &lt;strong&gt;NISQ era&lt;/strong&gt; : the age of &lt;strong&gt;Noisy Intermediate-Scale Quantum devices&lt;/strong&gt;. These machines had limited capabilities but allowed scientists to experiment with real quantum hardware.&lt;/p&gt;

&lt;p&gt;Now, something important is happening.&lt;/p&gt;

&lt;p&gt;The industry is beginning to move &lt;strong&gt;beyond NISQ systems toward early fault-tolerant quantum computers&lt;/strong&gt;, where errors can be corrected as systems scale.&lt;/p&gt;

&lt;p&gt;This transition is widely considered the &lt;strong&gt;tipping point&lt;/strong&gt; for practical quantum computing.&lt;/p&gt;

&lt;p&gt;The reason is simple: many of the problems quantum computers aim to solve, from molecular simulation to complex optimization, become &lt;strong&gt;exponentially harder&lt;/strong&gt; for classical computers as systems grow larger.&lt;/p&gt;

&lt;p&gt;Quantum computers approach these problems differently. Instead of approximating quantum behavior with massive computational resources, they &lt;strong&gt;map the problem directly onto quantum hardware&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Economic Stakes Are Growing
&lt;/h2&gt;

&lt;p&gt;As the technology matures, the economic interest surrounding quantum computing has grown dramatically.&lt;/p&gt;

&lt;p&gt;According to &lt;strong&gt;McKinsey&lt;/strong&gt;, the global quantum computing market could reach &lt;strong&gt;$80 billion by 2035–2040&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Industries most likely to benefit include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;cryptography and cybersecurity&lt;/li&gt;
&lt;li&gt;pharmaceutical research and drug discovery&lt;/li&gt;
&lt;li&gt;logistics and optimization&lt;/li&gt;
&lt;li&gt;financial modeling&lt;/li&gt;
&lt;li&gt;large-scale data analysis&lt;/li&gt;
&lt;li&gt;artificial intelligence&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The reason these industries are paying attention is simple: they all rely on solving &lt;strong&gt;computationally expensive problems&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And that’s exactly where quantum computing shines.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Breakthroughs That Changed the Conversation (2024–2026)
&lt;/h2&gt;

&lt;p&gt;Over the last few years, quantum computing has seen a wave of breakthroughs across &lt;strong&gt;hardware, algorithms, and commercial adoption&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Suddenly, what once looked like distant research is starting to resemble a new computing platform.&lt;/p&gt;

&lt;h3&gt;
  
  
  Hardware Is Finally Catching Up
&lt;/h3&gt;

&lt;p&gt;Several major technology companies have recently announced significant advances in quantum processors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Google’s “Willow” chip&lt;/strong&gt;, introduced in late 2024 and further benchmarked in 2025, contains &lt;strong&gt;105 qubits&lt;/strong&gt; and demonstrated something researchers had struggled with for years: &lt;strong&gt;below-threshold error correction&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F022vr273mxe71ml9v75l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F022vr273mxe71ml9v75l.png" alt="Google Willow Chip" width="800" height="439"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In practical terms, this means that &lt;strong&gt;adding more qubits actually reduces overall system errors&lt;/strong&gt;, a milestone many scientists thought was still years away.&lt;/p&gt;

&lt;p&gt;Around the same time, &lt;strong&gt;Microsoft unveiled the “Majorana 1” processor&lt;/strong&gt;, built using &lt;strong&gt;topological qubits&lt;/strong&gt; derived from a new state of matter called &lt;strong&gt;topoconductors&lt;/strong&gt;. These qubits are inherently more stable and may allow quantum chips to scale toward &lt;strong&gt;millions of qubits on a single device&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fehhy0o05aiis7gpp8xjd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fehhy0o05aiis7gpp8xjd.png" alt="Microsoft Majorana 1" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Meanwhile, &lt;strong&gt;IBM continued advancing its quantum roadmap&lt;/strong&gt; with the &lt;strong&gt;Loon and Heron processors&lt;/strong&gt;. The Heron chip has already been used to simulate complex molecular structures that challenge even advanced classical computing methods.&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%2Fwq1wfzytf24nivzbopm9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwq1wfzytf24nivzbopm9.png" alt="IBM Loon and Heron Processors" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Researchers at &lt;strong&gt;Caltech also demonstrated a system containing over 6,100 neutral-atom qubits&lt;/strong&gt;, showing that large-scale quantum systems may be achievable with entirely different hardware architectures.&lt;/p&gt;

&lt;p&gt;China also released their open source Quantum OS,named Origin Pilot, and its world's first Open Source Quantum OS&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%2F42my3iyajn5mzkbg311n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F42my3iyajn5mzkbg311n.png" alt="Origin Pilot" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In other words, the race toward scalable quantum hardware is accelerating.&lt;/p&gt;




&lt;h2&gt;
  
  
  When Quantum Algorithms Started Showing Real Advantage
&lt;/h2&gt;

&lt;p&gt;Hardware alone is not enough. Quantum computers become meaningful only when they run algorithms that outperform classical ones.&lt;/p&gt;

&lt;p&gt;In &lt;strong&gt;October 2025&lt;/strong&gt;, Google introduced an algorithm called &lt;strong&gt;Quantum Echoes&lt;/strong&gt;, which ran &lt;strong&gt;13,000 times faster&lt;/strong&gt; on the Willow processor than the best known classical algorithm running on a supercomputer.&lt;/p&gt;

&lt;p&gt;Unlike earlier demonstrations of quantum supremacy, this result was &lt;strong&gt;verifiable and reproducible&lt;/strong&gt;, which made the breakthrough far more convincing to the scientific community.&lt;/p&gt;

&lt;p&gt;Researchers are now using this approach as a &lt;strong&gt;“molecular ruler”&lt;/strong&gt;, allowing them to measure atomic interactions with extraordinary precision.&lt;/p&gt;




&lt;h2&gt;
  
  
  Quantum Computing Is Already Entering the Real World
&lt;/h2&gt;

&lt;p&gt;The technology is also beginning to move beyond research labs.&lt;/p&gt;

&lt;p&gt;In &lt;strong&gt;March 2026&lt;/strong&gt;, the Bengaluru startup &lt;strong&gt;QpiAI&lt;/strong&gt; launched &lt;strong&gt;QpiAI-Indus&lt;/strong&gt;, India’s first full-stack quantum computer. The 25-qubit system is designed specifically for &lt;strong&gt;hybrid AI-quantum workloads&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7pussod3ahmlroeefkxx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7pussod3ahmlroeefkxx.png" alt="QpiAI-Indus" width="800" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Financial institutions are experimenting as well. In 2025, &lt;strong&gt;HSBC reported a 34% improvement in bond trading predictions&lt;/strong&gt; by using IBM’s Heron processor to extract hidden signals from complex financial data.&lt;/p&gt;

&lt;p&gt;Investment in quantum startups is also surging. In &lt;strong&gt;2025 alone, funding for quantum companies reached nearly $3.8 billion within the first nine months&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Next Big Frontier: Quantum AI
&lt;/h2&gt;

&lt;p&gt;One of the most exciting developments is the intersection of &lt;strong&gt;quantum computing and artificial intelligence&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Rather than replacing classical AI systems, quantum computers are increasingly being used as &lt;strong&gt;accelerators for specific parts of AI workflows&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Because quantum systems evaluate multiple solution paths simultaneously, they could significantly reduce the time required to train large neural networks.&lt;/p&gt;

&lt;p&gt;Researchers are also exploring &lt;strong&gt;quantum word embeddings&lt;/strong&gt;, where language representations are mapped directly into quantum circuits.&lt;/p&gt;

&lt;p&gt;This could allow AI models to capture the &lt;strong&gt;probabilistic structure of human language&lt;/strong&gt; more naturally than classical architectures.&lt;/p&gt;

&lt;p&gt;Early experiments suggest that quantum techniques could improve tasks such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;causal inference&lt;/li&gt;
&lt;li&gt;complex optimization&lt;/li&gt;
&lt;li&gt;ambiguity resolution in language models&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;While the field is still young, the idea of &lt;strong&gt;Quantum AI&lt;/strong&gt; is rapidly gaining attention.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Beginning of a New Computing Era
&lt;/h2&gt;

&lt;p&gt;Quantum computers will not replace classical computers anytime soon. Your laptop, phone, and cloud servers will still rely on traditional computing architectures for everyday tasks.&lt;/p&gt;

&lt;p&gt;But quantum machines are emerging as &lt;strong&gt;specialized accelerators for problems that classical computers struggle to solve&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;After decades of slow progress, the field has finally reached a moment where breakthroughs in &lt;strong&gt;hardware, algorithms, and software ecosystems&lt;/strong&gt; are beginning to align.&lt;/p&gt;

&lt;p&gt;The result is something that once sounded like science fiction:&lt;/p&gt;

&lt;p&gt;A new type of computer that doesn’t just process information faster —&lt;br&gt;
but &lt;strong&gt;processes it in an entirely different way&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And if current progress continues, quantum computing may become one of the &lt;strong&gt;most transformative technologies of the 21st century&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  References &amp;amp; Further Reading
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Quantum Supremacy (Google Sycamore)
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Arute, F. et al. (2019). &lt;strong&gt;Quantum supremacy using a programmable superconducting processor.&lt;/strong&gt; Nature.&lt;br&gt;&lt;br&gt;
&lt;a href="https://www.nature.com/articles/s41586-019-1666-5" rel="noopener noreferrer"&gt;https://www.nature.com/articles/s41586-019-1666-5&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Google AI Quantum. &lt;strong&gt;Quantum Supremacy using a Programmable Superconducting Processor.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://ai.googleblog.com/2019/10/quantum-supremacy-using-programmable.html" rel="noopener noreferrer"&gt;https://ai.googleblog.com/2019/10/quantum-supremacy-using-programmable.html&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Core Concepts of Quantum Computing
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Nielsen, M., &amp;amp; Chuang, I. (2010). &lt;strong&gt;Quantum Computation and Quantum Information.&lt;/strong&gt; Cambridge University Press.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Preskill, J. (2018). &lt;strong&gt;Quantum Computing in the NISQ Era and Beyond.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://arxiv.org/abs/1801.00862" rel="noopener noreferrer"&gt;https://arxiv.org/abs/1801.00862&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  NISQ Era
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Preskill, J. (2018). &lt;strong&gt;Quantum Computing in the NISQ era and beyond.&lt;/strong&gt;
&lt;a href="https://arxiv.org/abs/1801.00862" rel="noopener noreferrer"&gt;https://arxiv.org/abs/1801.00862&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Google Willow Quantum Processor
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Google Quantum AI. &lt;strong&gt;Meet Willow, our state-of-the-art quantum chip.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://blog.google/innovation-and-ai/technology/research/google-willow-quantum-chip/" rel="noopener noreferrer"&gt;https://blog.google/innovation-and-ai/technology/research/google-willow-quantum-chip/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Acharya, R. et al. (2024). &lt;strong&gt;Quantum error correction below the surface code threshold.&lt;/strong&gt; Nature.&lt;br&gt;&lt;br&gt;
&lt;a href="https://www.nature.com/articles/s41586-024-08449-y" rel="noopener noreferrer"&gt;https://www.nature.com/articles/s41586-024-08449-y&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Castelvecchi, D. (2024). &lt;strong&gt;Google’s new quantum chip achieves accuracy milestone.&lt;/strong&gt; Nature News.&lt;br&gt;&lt;br&gt;
&lt;a href="https://www.nature.com/articles/d41586-024-04028-3" rel="noopener noreferrer"&gt;https://www.nature.com/articles/d41586-024-04028-3&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Google Quantum AI. &lt;strong&gt;Willow processor specification sheet.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://quantumai.google/static/site-assets/downloads/willow-spec-sheet.pdf" rel="noopener noreferrer"&gt;https://quantumai.google/static/site-assets/downloads/willow-spec-sheet.pdf&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Microsoft Topological Qubits / Majorana Research
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Microsoft Quantum. &lt;strong&gt;Topological qubits and Majorana zero modes.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://learn.microsoft.com/en-us/azure/quantum/concepts-topological-qubits" rel="noopener noreferrer"&gt;https://learn.microsoft.com/en-us/azure/quantum/concepts-topological-qubits&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Aasen, D. et al. (2016). &lt;strong&gt;Milestones Toward Majorana-Based Quantum Computing.&lt;/strong&gt; Physical Review X.&lt;br&gt;&lt;br&gt;
&lt;a href="https://journals.aps.org/prx/abstract/10.1103/PhysRevX.6.031016" rel="noopener noreferrer"&gt;https://journals.aps.org/prx/abstract/10.1103/PhysRevX.6.031016&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  IBM Quantum Processors
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;IBM Quantum. &lt;strong&gt;IBM Quantum Roadmap.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://www.ibm.com/quantum/roadmap" rel="noopener noreferrer"&gt;https://www.ibm.com/quantum/roadmap&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;IBM Research. &lt;strong&gt;Heron Quantum Processor Architecture.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://www.ibm.com/quantum/blog/quantum-roadmap-2033" rel="noopener noreferrer"&gt;https://www.ibm.com/quantum/blog/quantum-roadmap-2033&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Quantum Finance Experiment (HSBC)
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;HSBC. &lt;strong&gt;HSBC demonstrates quantum-enabled algorithmic bond trading with IBM.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://www.hsbc.com/news-and-views/news/media-releases/2025/hsbc-demonstrates-worlds-first-known-quantum-enabled-algorithmic-trading-with-ibm" rel="noopener noreferrer"&gt;https://www.hsbc.com/news-and-views/news/media-releases/2025/hsbc-demonstrates-worlds-first-known-quantum-enabled-algorithmic-trading-with-ibm&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ciceri, A. et al. (2025). &lt;strong&gt;Enhanced fill probability estimates in institutional algorithmic bond trading using quantum computers.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://arxiv.org/abs/2509.17715" rel="noopener noreferrer"&gt;https://arxiv.org/abs/2509.17715&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Quantum Market Forecast
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;McKinsey &amp;amp; Company. &lt;strong&gt;The Year of Quantum: From Concept to Reality (2025).&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://www.mckinsey.com/capabilities/tech-and-ai/our-insights/the-year-of-quantum-from-concept-to-reality-in-2025" rel="noopener noreferrer"&gt;https://www.mckinsey.com/capabilities/tech-and-ai/our-insights/the-year-of-quantum-from-concept-to-reality-in-2025&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;McKinsey. &lt;strong&gt;Quantum computing use cases are getting real.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://www.mckinsey.com/capabilities/quantumblack/our-insights/quantum-computing-use-cases" rel="noopener noreferrer"&gt;https://www.mckinsey.com/capabilities/quantumblack/our-insights/quantum-computing-use-cases&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  China Quantum Operating System (Origin Pilot)
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Origin Quantum. &lt;strong&gt;Origin Pilot – Quantum Operating System.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://qcloud.originqc.com.cn/en/programming/pilotos" rel="noopener noreferrer"&gt;https://qcloud.originqc.com.cn/en/programming/pilotos&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Origin Quantum. &lt;strong&gt;Origin Pilot Whitepaper.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://arxiv.org/abs/2105.10730" rel="noopener noreferrer"&gt;https://arxiv.org/abs/2105.10730&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Neutral Atom Quantum Systems
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Ebadi, S. et al. (2021). &lt;strong&gt;Quantum phases of matter on a programmable quantum simulator.&lt;/strong&gt; Nature.
&lt;a href="https://www.nature.com/articles/s41586-021-03582-4" rel="noopener noreferrer"&gt;https://www.nature.com/articles/s41586-021-03582-4&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Quantum AI / Quantum Machine Learning
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Biamonte, J. et al. (2017). &lt;strong&gt;Quantum Machine Learning.&lt;/strong&gt; Nature.&lt;br&gt;&lt;br&gt;
&lt;a href="https://www.nature.com/articles/nature23474" rel="noopener noreferrer"&gt;https://www.nature.com/articles/nature23474&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Schuld, M., Sinayskiy, I., &amp;amp; Petruccione, F. (2015). &lt;strong&gt;An introduction to quantum machine learning.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://arxiv.org/abs/1409.3097" rel="noopener noreferrer"&gt;https://arxiv.org/abs/1409.3097&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Additional Resources
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;National Institute of Standards and Technology (NIST). &lt;strong&gt;Post-Quantum Cryptography Standardization.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://www.nist.gov/pqcrypto" rel="noopener noreferrer"&gt;https://www.nist.gov/pqcrypto&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;IBM Quantum Network.&lt;br&gt;&lt;br&gt;
&lt;a href="https://www.ibm.com/quantum" rel="noopener noreferrer"&gt;https://www.ibm.com/quantum&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>ai</category>
      <category>quantumcomputing</category>
      <category>opensource</category>
      <category>discuss</category>
    </item>
    <item>
      <title>AI Can Write Code. But It Can’t Build Products.</title>
      <dc:creator>Manas Mishra</dc:creator>
      <pubDate>Sat, 28 Feb 2026 17:09:51 +0000</pubDate>
      <link>https://forem.com/manascodes13/building-for-ai-not-with-ai--29e0</link>
      <guid>https://forem.com/manascodes13/building-for-ai-not-with-ai--29e0</guid>
      <description>&lt;p&gt;It's been 2 years since I started doing AI development, but there is one thing that was lacking when AI hype started, and it's still lacking now.&lt;/p&gt;

&lt;p&gt;Its decision-making, context awareness, and context longevity.&lt;/p&gt;

&lt;p&gt;You may have already heard that Claude made a C compiler, Cloudflare made their own Next.js app, etc., but it's only possible when the person behind it was giving very clear instructions.&lt;/p&gt;

&lt;p&gt;I saw multiple founders being stuck in a loop, where they have a good idea, but not technical, try to build using Google AI Studio or Replit, lovable, etc., but it's a sinkhole for them. They start well, but are never able to finalize it. They always need a developer who can do the final refinement or solve the issues that AI made for them.&lt;/p&gt;

&lt;p&gt;The first problem I am talking about is that AI can start things in a good way, but as you start building a product with vibe coding, then AI falls back, because it lacks the long-term context awareness, or you can say, memory. It doesn't have a long term memory.&lt;/p&gt;

&lt;p&gt;The second problem is that AI can write code, but it's not correctly structured, and it's bad. Ihave beenm seeing it for 2 years. The structure of the code used to be very bad before (it's improved a little, but not as much as it's hyped ). I literally told AI to create a React project from the start, and instead of running a command, it literally started creating files one by one, which eventually ran, but it's not what I meant when I said to create a React project ( I meant Vite create ).&lt;/p&gt;

&lt;p&gt;The third problem is decision-making. For example, I want to create a website like Uber, and I said the same to AI, and it will create a plan for me. But, is it going to plan the whole architecture? iIsit going to consider the number of users I am targeting? Is it going to consider the database, which will be good for the target user? Is it going to decide the cloud architecture for me? No, iit'snot. It can pretend to do all of that, if you ask AI to do it, but with a simple prompt like "Build me a uber like website,, it's not.&lt;/p&gt;




&lt;p&gt;Now, the solution.&lt;br&gt;
I want to build a website that does all of that. Which means that not everyone is a good prompt engineer ( including me ), and I don't want to spend my time refining prompts word by word, so that AI can understand me better. I want to give the power to AI, where it can make decisions, plan exactly what you want ( and take confirmation before doing anything ), and do everything that a senior developer, project manager, or architect is able to do. Provide you complete picture of what's going on. Let you intervene, and be a decision maker ( if you want to be ), otherwise, make a decision for you, and be able to understand the point of the product you want to build, and don't lose context.&lt;/p&gt;

&lt;p&gt;I understand that all of the above that I want to build is already possible, but is it possible for you?&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>ai</category>
      <category>showdev</category>
      <category>startup</category>
    </item>
    <item>
      <title>Docker done better</title>
      <dc:creator>Manas Mishra</dc:creator>
      <pubDate>Sat, 28 Feb 2026 07:29:18 +0000</pubDate>
      <link>https://forem.com/manascodes13/docker-done-better-424b</link>
      <guid>https://forem.com/manascodes13/docker-done-better-424b</guid>
      <description>&lt;h2&gt;
  
  
  Chapter 1: What I did
&lt;/h2&gt;

&lt;p&gt;I have been building my own project for 3-4 weeks now, and I just realized something after I launched my website. &lt;/p&gt;

&lt;p&gt;The tech stack is built on Next.js, Node.js, Strapi, OpenAI, MongoDB, etc., and I am using Docker to containerize it. &lt;/p&gt;

&lt;p&gt;Initially, I didn't pay much attention as I wanted to launch it ASAP, but now, when I am focusing on the storage consumption of the Docker images, then its off the charts. &lt;/p&gt;

&lt;p&gt;My Next.JS Docker image is of size &lt;strong&gt;3.01 GB&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fno2qo0wkywnbrnsdil4i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fno2qo0wkywnbrnsdil4i.png" alt="docker-image-size-3gb" width="800" height="66"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Yes, it's hilarious. Because I am doing it the wrong way. &lt;/p&gt;




&lt;h2&gt;
  
  
  The real culprit (it's me, I guess ):
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;My initial Dockerfile of Next.js looks like this&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="c"&gt;# Use official Node image&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; node:22&lt;/span&gt;

&lt;span class="c"&gt;# Create app directory&lt;/span&gt;
&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;

&lt;span class="c"&gt;# Copy package files first&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; package*.json ./&lt;/span&gt;

&lt;span class="c"&gt;# Install dependencies&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt;

&lt;span class="c"&gt;# Copy the rest of the project&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; . .&lt;/span&gt;

&lt;span class="c"&gt;# Build the Next.js app&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;npm run build

&lt;span class="c"&gt;# Expose port&lt;/span&gt;
&lt;span class="k"&gt;EXPOSE&lt;/span&gt;&lt;span class="s"&gt; 3000&lt;/span&gt;

&lt;span class="c"&gt;# Start the app&lt;/span&gt;
&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["npm", "start"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can clearly see the issue here:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The default node:22 image is Debian-based and large (~1GB+).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;RUN npm install&lt;/code&gt; installs dependencies and devDependencies in production, and you don't need devDependencies in prod. &lt;/li&gt;
&lt;li&gt;
&lt;code&gt;RUN npm run build&lt;/code&gt; is building and running in the same container.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  How does it matter in production
&lt;/h3&gt;

&lt;p&gt;It matters because the container image size directly affects speed, cost, security, and scalability - especially for real SaaS apps like the ones I am building.&lt;/p&gt;

&lt;p&gt;Every time I push to GitHub, CI builds a Docker image, pushes to ECR, EC2/Lambda pulls the image&lt;/p&gt;

&lt;p&gt;The entire image must be transferred.&lt;/p&gt;

&lt;p&gt;If the image is 1GB+, then it means slow push + slow pull&lt;br&gt;
And in production, that means Slower releases, longer downtime during deploy, and slower blue/green swaps&lt;/p&gt;

&lt;p&gt;With this image size (3 GB), if I try to scale to 10 containers in the future, that means 30GB of pull. &lt;/p&gt;

&lt;p&gt;Huh, it's expensive.&lt;/p&gt;


&lt;h2&gt;
  
  
  The Solution
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvm6iqfvw1p1girhyw5el.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvm6iqfvw1p1girhyw5el.png" alt="Docker image size 219MB" width="800" height="66"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Yeah, its same Next.js app, no code changes, nothing else, just the change of Dockerfile, and the image size is reduced to &lt;strong&gt;219 MB&lt;/strong&gt; from 3.1 GB. &lt;/p&gt;

&lt;p&gt;The real solution is this&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="c"&gt;# -------- Base Image --------&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;node:20-alpine&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;base&lt;/span&gt;
&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;

&lt;span class="c"&gt;# Install dependencies needed for some npm packages&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;apk add &lt;span class="nt"&gt;--no-cache&lt;/span&gt; libc6-compat

&lt;span class="c"&gt;# -------- Dependencies Stage --------&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;base&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;deps&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; package.json package-lock.json* ./&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;npm ci

&lt;span class="c"&gt;# -------- Builder Stage --------&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;base&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;builder&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; --from=deps /app/node_modules ./node_modules&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; . .&lt;/span&gt;

&lt;span class="c"&gt;# Build Next.js app&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;npm run build

&lt;span class="c"&gt;# -------- Production Stage --------&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;node:20-alpine&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;runner&lt;/span&gt;
&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;

&lt;span class="k"&gt;ENV&lt;/span&gt;&lt;span class="s"&gt; NODE_ENV=production&lt;/span&gt;

&lt;span class="c"&gt;# Create non-root user&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;addgroup &lt;span class="nt"&gt;-S&lt;/span&gt; nextjs &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; adduser &lt;span class="nt"&gt;-S&lt;/span&gt; nextjs &lt;span class="nt"&gt;-G&lt;/span&gt; nextjs

&lt;span class="c"&gt;# Copy standalone build&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; --from=builder /app/.next/standalone ./&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; --from=builder /app/.next/static ./.next/static&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; --from=builder /app/public ./public&lt;/span&gt;

&lt;span class="k"&gt;USER&lt;/span&gt;&lt;span class="s"&gt; nextjs&lt;/span&gt;

&lt;span class="k"&gt;EXPOSE&lt;/span&gt;&lt;span class="s"&gt; 3000&lt;/span&gt;

&lt;span class="k"&gt;ENV&lt;/span&gt;&lt;span class="s"&gt; PORT=3000&lt;/span&gt;

&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["node", "server.js"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Smaller Base image &lt;code&gt;FROM node:20-alpine&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Multi-stage build, because I separated the dependencies stage, the builder stage, and the production stage, which means that build tools will never reach the production image. &lt;/li&gt;
&lt;li&gt;
&lt;code&gt;COPY --from=builder /app/.next/standalone ./&lt;/code&gt; This is HUGE, standalone contains only required runtime files, only required production dependencies, which removed unused packages, devDependecies and even unnecessary Node modules&lt;/li&gt;
&lt;li&gt;For security, I used `RUN addgroup -S nextjs &amp;amp;&amp;amp; adduser -S nextjs -G nextjs
USER nextjs. The old Dockerfile was running as root, but the new one runs as a limited user. So, if someone eill exploits your app, they don't get root access. &lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Real impact in Production
&lt;/h2&gt;

&lt;p&gt;If traffic spike, the old Docker will spin up the container slowly, while the new one will be faster. &lt;br&gt;
The old Docker had more CVE's, but the new one has fewer. &lt;/p&gt;




&lt;p&gt;Let me know if you have used a different approach for docker. &lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>docker</category>
      <category>devops</category>
    </item>
    <item>
      <title>Top 5 Mistakes Engineers Make While Building RAG Systems</title>
      <dc:creator>Manas Mishra</dc:creator>
      <pubDate>Tue, 24 Feb 2026 06:44:18 +0000</pubDate>
      <link>https://forem.com/manascodes13/top-5-mistakes-engineers-make-while-building-rag-systems-51md</link>
      <guid>https://forem.com/manascodes13/top-5-mistakes-engineers-make-while-building-rag-systems-51md</guid>
      <description>&lt;h2&gt;
  
  
  Story Time 😁
&lt;/h2&gt;

&lt;p&gt;I was working on a project that is highly dependent on RAG. User can be able to upload any document ( pdf, Word, PPT, ppt etc ), and AI can be able to answer any type of question from it. &lt;/p&gt;

&lt;p&gt;When I started building the project, the first choice was always RAG, but the way I handled it broke a lot of things. &lt;/p&gt;

&lt;p&gt;I uploaded the document regarding a security protocol of a school, it was 100 page pdf, and I asked a question, "Tell me which protocols to follow," and it answered beautifully. &lt;/p&gt;

&lt;p&gt;But then the second question was, "Summarize the document." It's not able to consider everything in the document. Then the third question was "how many pages does this document have?" It's not able to answer that either. &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%2Ff713bggm4omvhj8tls6l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff713bggm4omvhj8tls6l.png" alt=" " width="500" height="283"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Retrieval-Augmented Generation (RAG) looks simple on a whiteboard:&lt;/p&gt;

&lt;p&gt;Embed → Store → Retrieve → Prompt → Generate.&lt;/p&gt;

&lt;p&gt;In production, it’s rarely that clean.&lt;/p&gt;

&lt;p&gt;After building and testing multiple RAG pipelines, I’ve noticed the same engineering mistakes repeated.&lt;/p&gt;

&lt;p&gt;Here are the top 5.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Using Default Chunk Size Without Thinking
&lt;/h2&gt;

&lt;p&gt;Most of you will pick:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;500 tokens&lt;/li&gt;
&lt;li&gt;1000 tokens&lt;/li&gt;
&lt;li&gt;Or whatever the framework defaults to&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Chunking is not about token count - it’s about &lt;strong&gt;semantic boundaries&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Bad chunking causes Context fragmentation, Low retrieval precision, and Hallucinated stitching between unrelated paragraphs&lt;/p&gt;

&lt;p&gt;The better approach that I used in my production RAGs is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chunk by section headers&lt;/li&gt;
&lt;li&gt;Preserve semantic completeness&lt;/li&gt;
&lt;li&gt;Use overlap strategically (not blindly)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Chunking quality directly impacts retrieval quality, so you can't ignore it.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Ignoring Metadata Filtering
&lt;/h2&gt;

&lt;p&gt;Many systems store embeddings like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{ vector, text }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That’s not enough.&lt;/p&gt;

&lt;p&gt;In production, you need structured metadata:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  vector,
  text,
  source,
  document_type,
  timestamp,
  user_id,
  version
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you don't focus on metadata filtering, then retrieval becomes noisy, results mix unrelated documents, and also the multi-tenant systems break&lt;/p&gt;

&lt;p&gt;Metadata filtering dramatically improves precision before semantic ranking even starts.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Not Evaluating Retrieval Quality
&lt;/h2&gt;

&lt;p&gt;Most teams evaluate only the final LLM output.&lt;/p&gt;

&lt;p&gt;You must evaluate the following 4 too:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Precision@k&lt;/li&gt;
&lt;li&gt;Recall@k&lt;/li&gt;
&lt;li&gt;MRR (Mean Reciprocal Rank)&lt;/li&gt;
&lt;li&gt;Context relevance score&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If retrieval is wrong, generation doesn’t matter.&lt;/p&gt;

&lt;p&gt;RAG is a retrieval problem first, a generation problem second.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. No Reranking Layer
&lt;/h2&gt;

&lt;p&gt;A typical pipeline:&lt;/p&gt;

&lt;p&gt;Vector Search → Top 5 → Send to LLM&lt;/p&gt;

&lt;p&gt;And this is incomplete.&lt;/p&gt;

&lt;p&gt;Dense retrieval optimizes for similarity - not relevance.&lt;/p&gt;

&lt;p&gt;You should add a cross-encoder reranker&lt;/p&gt;

&lt;p&gt;Yes, it adds latency.&lt;br&gt;
But in high-value systems, accuracy &amp;gt; milliseconds.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Storing Raw PDFs Blindly
&lt;/h2&gt;

&lt;p&gt;PDFs are messy:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Headers&lt;/li&gt;
&lt;li&gt;Footers&lt;/li&gt;
&lt;li&gt;Page numbers&lt;/li&gt;
&lt;li&gt;Tables split across pages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You should do the preprocessing first, as it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Remove boilerplate&lt;/li&gt;
&lt;li&gt;Normalize structure&lt;/li&gt;
&lt;li&gt;Clean tables&lt;/li&gt;
&lt;li&gt;Remove repeated artifacts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Garbage in → garbage retrieval → hallucinated output.&lt;/p&gt;




&lt;p&gt;RAG is not just:&lt;br&gt;
"Add a vector database and call it a day."&lt;/p&gt;

&lt;p&gt;It’s an &lt;strong&gt;information retrieval system&lt;/strong&gt; wrapped around a generative model.&lt;/p&gt;

&lt;p&gt;If retrieval is weak, the entire architecture collapses.&lt;/p&gt;




</description>
      <category>ai</category>
      <category>programming</category>
      <category>webdev</category>
      <category>opensource</category>
    </item>
    <item>
      <title>The database that AI uses</title>
      <dc:creator>Manas Mishra</dc:creator>
      <pubDate>Sun, 22 Feb 2026 13:14:43 +0000</pubDate>
      <link>https://forem.com/manascodes13/the-database-that-ai-uses-loi</link>
      <guid>https://forem.com/manascodes13/the-database-that-ai-uses-loi</guid>
      <description>&lt;p&gt;Imagine you have a huge toy box&lt;/p&gt;

&lt;p&gt;Inside it are thousands of toys — cars, dolls, robots, animals.&lt;/p&gt;

&lt;p&gt;Now suppose I ask you:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Can you find toys that are similar to this red racing car?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You wouldn’t look for toys with the same name.&lt;br&gt;
You’d look for toys that feel similar - maybe other cars, maybe fast-looking toys, maybe red ones.&lt;/p&gt;

&lt;p&gt;That’s how a vector database works.&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%2Fd91trn1rz5zcs6vo79pm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd91trn1rz5zcs6vo79pm.png" alt=" " width="800" height="275"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Turning Things into Numbers
&lt;/h2&gt;

&lt;p&gt;Computers don’t understand toys, pictures, or sentences the way humans do, so they convert everything into numbers. These special lists of numbers are called vectors. For example, a picture of a cat, a sentence like “I love pizza”, or even a voice recording can all be transformed into long lists of numbers such as &lt;br&gt;
&lt;code&gt;[0.21, 0.88, 0.03, 0.77, ...]&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;That list of numbers is called a vector.&lt;/p&gt;

&lt;h2&gt;
  
  
  Storing the Vectors
&lt;/h2&gt;

&lt;p&gt;A vector database is just a special toy box. But instead of toys, it stores those number lists (vectors).&lt;/p&gt;

&lt;p&gt;It doesn’t organize them alphabetically. Instead, it organizes them by how similar they are.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding Similar Things
&lt;/h2&gt;

&lt;p&gt;If you show it a new sentence: "Pizza is my favorite food". It turns that sentence into numbers too.&lt;/p&gt;

&lt;p&gt;Then it looks inside the database and asks:&lt;br&gt;
 "Which stored number list is most similar to this one?"&lt;/p&gt;

&lt;p&gt;Even if the words are different, they can understand that the meaning is close. That’s why AI chatbots can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Find similar documents&lt;/li&gt;
&lt;li&gt;Answer questions from your files&lt;/li&gt;
&lt;li&gt;Recognize similar images&lt;/li&gt;
&lt;li&gt;Recommend products&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Simple Example
&lt;/h2&gt;

&lt;p&gt;Think of it like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Normal database: Finds exact matches (same name).&lt;/li&gt;
&lt;li&gt;Vector database: Finds similar matches (same meaning or feeling).&lt;/li&gt;
&lt;/ul&gt;




</description>
      <category>ai</category>
      <category>database</category>
      <category>programming</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Stop Writing Documentation Manually. I’m Trying Something Different.</title>
      <dc:creator>Manas Mishra</dc:creator>
      <pubDate>Thu, 19 Feb 2026 09:17:20 +0000</pubDate>
      <link>https://forem.com/manascodes13/stop-writing-documentation-manually-im-trying-something-different-57p6</link>
      <guid>https://forem.com/manascodes13/stop-writing-documentation-manually-im-trying-something-different-57p6</guid>
      <description>&lt;p&gt;&lt;strong&gt;Documentation always starts strong.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We write a clean README.&lt;br&gt;
We add architecture notes.&lt;br&gt;
We promise ourselves we’ll “keep docs updated.”&lt;/p&gt;

&lt;p&gt;Then reality hits.&lt;/p&gt;

&lt;p&gt;Features ship quickly.&lt;br&gt;
Refactors happen.&lt;br&gt;
Dead code disappears.&lt;/p&gt;

&lt;p&gt;And documentation slowly becomes fiction.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Real Problem
&lt;/h2&gt;

&lt;p&gt;Documentation doesn’t fail because developers are lazy.&lt;/p&gt;

&lt;p&gt;It fails because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It’s manual.&lt;/li&gt;
&lt;li&gt;It’s disconnected from code.&lt;/li&gt;
&lt;li&gt;It doesn’t evolve automatically.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In fast-moving teams, code is the source of truth.&lt;/p&gt;

&lt;p&gt;Docs should evolve with it.&lt;/p&gt;

&lt;p&gt;But they don’t.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I’m Building
&lt;/h2&gt;

&lt;p&gt;I’m experimenting with a tool called DocFlow.&lt;/p&gt;

&lt;p&gt;The idea is simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Connect your GitHub repo&lt;/li&gt;
&lt;li&gt;Analyze the structure of your codebase&lt;/li&gt;
&lt;li&gt;Generate structured documentation automatically&lt;/li&gt;
&lt;li&gt;Keep documentation updated as the code changes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of writing docs manually, they’re derived from the actual codebase.&lt;/p&gt;

&lt;h2&gt;
  
  
  Still Early
&lt;/h2&gt;

&lt;p&gt;Right now, this is in the validation stage.&lt;/p&gt;

&lt;p&gt;I’ve put up a simple waitlist while building the core engine:&lt;br&gt;
👉 &lt;a href="https://docflow.mmopro.in/" rel="noopener noreferrer"&gt;https://docflow.mmopro.in/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’m trying to answer a few questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Would you trust AI-generated documentation?&lt;/li&gt;
&lt;li&gt;What would make this genuinely useful?&lt;/li&gt;
&lt;li&gt;Should this be a SaaS platform or GitHub Action first?&lt;/li&gt;
&lt;li&gt;What language support is essential at launch?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why I’m Sharing Early
&lt;/h2&gt;

&lt;p&gt;Because I’d rather validate the problem deeply before building too much.&lt;/p&gt;

&lt;p&gt;If documentation drift has ever annoyed you, I’d love your honest thoughts.&lt;/p&gt;

&lt;p&gt;Even if it’s:&lt;br&gt;
“This won’t work.”&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>saas</category>
      <category>ai</category>
    </item>
    <item>
      <title>Graph RAG: Why Vector Search Alone Is Not Enough for Serious Backend Systems</title>
      <dc:creator>Manas Mishra</dc:creator>
      <pubDate>Wed, 24 Dec 2025 09:56:48 +0000</pubDate>
      <link>https://forem.com/manascodes13/graph-rag-why-vector-search-alone-is-not-enough-for-serious-backend-systems-156n</link>
      <guid>https://forem.com/manascodes13/graph-rag-why-vector-search-alone-is-not-enough-for-serious-backend-systems-156n</guid>
      <description>&lt;p&gt;Most Retrieval-Augmented Generation (RAG) systems look impressive in demos and quietly fail in production&lt;/p&gt;

&lt;p&gt;They retrieve &lt;em&gt;something&lt;/em&gt;, generate &lt;em&gt;something&lt;/em&gt;, and hope users trust it.&lt;/p&gt;

&lt;p&gt;This article is about Graph RAG, not as an AI buzzword, but as a server-side architectural evolution that fixes fundamental problems in vector-only RAG systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem With “Standard” RAG
&lt;/h2&gt;

&lt;p&gt;Classic RAG architecture is deceptively simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Chunk documents&lt;/li&gt;
&lt;li&gt;Generate embeddings&lt;/li&gt;
&lt;li&gt;Store in a vector database&lt;/li&gt;
&lt;li&gt;Retrieve top-K chunks&lt;/li&gt;
&lt;li&gt;Inject into prompt&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This works well only when:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Data is flat&lt;/li&gt;
&lt;li&gt;Context is local&lt;/li&gt;
&lt;li&gt;Relationships don’t matter&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Where Vector RAG Breaks Down
&lt;/h2&gt;

&lt;p&gt;As systems grow, vector-only RAG fails in predictable ways:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Loss of relational context&lt;br&gt;
Vector search retrieves similar text, not related facts.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Inconsistent answers&lt;br&gt;
Two queries with the same intent return different chunks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Poor explainability&lt;br&gt;
You cannot answer why a piece of information was retrieved.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Hallucinations from missing edges&lt;br&gt;
The model fills gaps where relationships were never retrieved.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is not an LLM problem.&lt;br&gt;
This is a data modeling problem&lt;/p&gt;

&lt;h2&gt;
  
  
  Graph RAG: Treat Knowledge Like an Engineer Would
&lt;/h2&gt;

&lt;p&gt;Graph RAG introduces something backend engineers already respect:&lt;br&gt;
explicit structure.&lt;/p&gt;

&lt;p&gt;Instead of treating knowledge as disconnected text blobs, we model it as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Nodes: entities, concepts, documents, users, features&lt;/li&gt;
&lt;li&gt;Edges: relationships, dependencies, references, ownership&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The graph becomes the source of truth, while vectors become a search accelerator, not the core model.&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%2Ftnvpfgeuj0jw0vwsnmmc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftnvpfgeuj0jw0vwsnmmc.png" alt=" " width="800" height="474"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How Graph RAG Actually Works
&lt;/h2&gt;

&lt;p&gt;A production-grade Graph RAG pipeline usually looks like this:&lt;/p&gt;

&lt;h4&gt;
  
  
  Knowledge Ingestion
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Documents are parsed&lt;/li&gt;
&lt;li&gt;Entities are extracted&lt;/li&gt;
&lt;li&gt;Relationships are inferred or explicitly defined&lt;/li&gt;
&lt;li&gt;Nodes and edges are created&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is schema design, not prompt engineering.&lt;/p&gt;

&lt;h4&gt;
  
  
  Hybrid Retrieval
&lt;/h4&gt;

&lt;p&gt;At query time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Vector search finds relevant entry points&lt;/li&gt;
&lt;li&gt;Graph traversal expands contextual neighborhood&lt;/li&gt;
&lt;li&gt;Backend logic controls depth, filters, and constraints&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Context Assembly
&lt;/h4&gt;

&lt;p&gt;Instead of dumping top-K chunks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rank nodes by relevance&lt;/li&gt;
&lt;li&gt;Remove redundant paths&lt;/li&gt;
&lt;li&gt;Preserve relational order&lt;/li&gt;
&lt;li&gt;Attach provenance metadata&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Generation With Guardrails
&lt;/h4&gt;

&lt;p&gt;The LLM is no longer "figuring things out".&lt;br&gt;
It summarizes structured knowledge.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example: Why Graph RAG Beats Vector RAG
&lt;/h2&gt;

&lt;h3&gt;
  
  
  User Query:
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Why was feature X deprecated, and what replaced it?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Vector RAG:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Retrieves feature X documentation&lt;/li&gt;
&lt;li&gt;Misses internal decision context&lt;/li&gt;
&lt;li&gt;Hallucinates the reason&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Graph RAG:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Node: Feature X&lt;/li&gt;
&lt;li&gt;Edge: deprecated_by → ADR-42&lt;/li&gt;
&lt;li&gt;Edge: replaced_by → Feature Y&lt;/li&gt;
&lt;li&gt;Edge: owned_by → Platform Team&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The answer is now deterministic, not probabilistic.&lt;/p&gt;

&lt;h2&gt;
  
  
  Operational Advantages
&lt;/h2&gt;

&lt;h4&gt;
  
  
  Debuggability
&lt;/h4&gt;

&lt;p&gt;You can answer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which nodes were retrieved?&lt;/li&gt;
&lt;li&gt;Which edges were traversed?&lt;/li&gt;
&lt;li&gt;Why this answer was generated?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This matters in audits, enterprise clients, and regulated systems.&lt;/p&gt;

&lt;h4&gt;
  
  
  Controlled Hallucination Surface
&lt;/h4&gt;

&lt;p&gt;Graph RAG limits what the model can invent because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Missing edges mean missing context&lt;/li&gt;
&lt;li&gt;The model cannot “assume” relationships&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Performance Predictability
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Vector-only RAG scales unpredictably.&lt;/li&gt;
&lt;li&gt;Graph traversal cost is bounded and measurable.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Cost Control
&lt;/h4&gt;

&lt;p&gt;You retrieve:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Smaller, richer context&lt;/li&gt;
&lt;li&gt;Fewer redundant tokens&lt;/li&gt;
&lt;li&gt;More reusable subgraphs&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  When NOT to Use Graph RAG
&lt;/h2&gt;

&lt;p&gt;Graph RAG is not free.&lt;/p&gt;

&lt;p&gt;Avoid it if:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Data is small and static&lt;/li&gt;
&lt;li&gt;No real relationships exist&lt;/li&gt;
&lt;li&gt;You only need a semantic search&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Graph RAG adds engineering overhead, not magic.&lt;/p&gt;




&lt;p&gt;Graph RAG works not because models are smarter-but because backend systems are.&lt;/p&gt;

</description>
      <category>rag</category>
      <category>ai</category>
      <category>backend</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Caddy: Free SSL over server</title>
      <dc:creator>Manas Mishra</dc:creator>
      <pubDate>Wed, 30 Oct 2024 09:54:22 +0000</pubDate>
      <link>https://forem.com/manascodes13/caddy-free-ssl-over-server-107f</link>
      <guid>https://forem.com/manascodes13/caddy-free-ssl-over-server-107f</guid>
      <description>&lt;p&gt;I have always been a fan of Nginx, but with Nginx, I always have to buy SSL for the domain configuration, with HTTPS. And, when it comes to Wildcard SSL, it costs more than the normal SSL. &lt;/p&gt;

&lt;p&gt;Recently, I have been working with a server architect, and I came to know about &lt;strong&gt;Caddy - The Ultimate Server&lt;/strong&gt;, and it's fascinating to see how it can obtain and renew the SSL certificates, automatically. &lt;/p&gt;

&lt;p&gt;It provides the same features as Nginx but with fewer configurations and security has been added automatically too. &lt;/p&gt;

&lt;p&gt;It supports Compression, Virtual file systems, TLS configurations, etc.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to configure it in AWS: EC2
&lt;/h2&gt;

&lt;p&gt;I created an EC2 instance, with AMI ( Amazon Linux v3 ) as an image. &lt;/p&gt;

&lt;p&gt;After creating an instance, you can connect it either via SSH or directly through the EC2, and then you have to enter the following commands to install it&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo yum -y install yum-plugin-copr
sudo yum -y copr enable @caddy/caddy epel-8-$(arch)
sudo yum -y install caddy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will install the caddy server in the EC2 instance. &lt;/p&gt;

&lt;h2&gt;
  
  
  Creating the CaddyFile
&lt;/h2&gt;

&lt;p&gt;After installing the caddy in your EC2 instance, you have to create a Caddyfile, in /etc/caddy folder. &lt;/p&gt;

&lt;p&gt;To create the Caddyfile, you have to enter the below command.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo nano /etc/caddy/Caddyfile
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And, after creating the file, you have to enter the following configuration&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;domain_name {
    reverse_proxy Ip_address:port 
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For example, I have deployed the frontend and backend code in the EC2 and now I want to configure the caddy for the frontend and backend, by attaching the domain name to it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;app.aceinterview.co {
    reverse_proxy 3.24.60.134:3000
}

api.aceinterview.co {
    reverse_proxy 3.24.60.145:8000
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As you can see in the example, I configured two different domains, one for the frontend and the other for the backend. &lt;/p&gt;

&lt;h2&gt;
  
  
  Run the caddy server
&lt;/h2&gt;

&lt;p&gt;First, you have to enable the caddy server.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo systemctl enable caddy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The above step will create the symlink of the caddy. &lt;/p&gt;

&lt;p&gt;Then, you have to start the caddy&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo systemctl start caddy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hurray!. Your caddy server configuration is completed. Now, you got reverse proxy, SSL configuration, etc. &lt;/p&gt;

&lt;h1&gt;
  
  
  More commands to handle caddy in EC2.
&lt;/h1&gt;

&lt;p&gt;To stop the caddy server&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo systemctl stop caddy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you change something in &lt;code&gt;Caddyfile&lt;/code&gt;, then you have to restart it to take effect.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo systemctl restart caddy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Today I have highlighted the basic setup of caddy, and this setup will do the most of the job. For more information, you can directly checkout the caddy server website &lt;a href="https://caddyserver.com/" rel="noopener noreferrer"&gt;https://caddyserver.com/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>opensource</category>
      <category>linux</category>
    </item>
    <item>
      <title>A new way to create desktop applications: Tauri + React</title>
      <dc:creator>Manas Mishra</dc:creator>
      <pubDate>Wed, 28 Aug 2024 12:25:13 +0000</pubDate>
      <link>https://forem.com/manascodes13/a-new-way-to-create-desktop-applications-tauri-react-59bp</link>
      <guid>https://forem.com/manascodes13/a-new-way-to-create-desktop-applications-tauri-react-59bp</guid>
      <description>&lt;p&gt;Welcome to this article. If you a programmer, you must have heard about electron.js, by using which, whatsapp, slack, skype, discord desktop application has been created. But, then why am I saying that Tauri is a new way to create desktop applications ? Let's look into some of the pros and cons of it. &lt;/p&gt;

&lt;h2&gt;
  
  
  Electron vs Tauri:
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Performance
&lt;/h3&gt;

&lt;p&gt;Tauri is designed to be more lightweight and faster than Electron, as it uses less memory and CPU resources&lt;/p&gt;

&lt;h3&gt;
  
  
  Security
&lt;/h3&gt;

&lt;p&gt;Tauri is built with security in mind and aims to be more secure than Electron by using a Rust-based native layer instead of a JavaScript-based layer&lt;/p&gt;

&lt;h3&gt;
  
  
  Size
&lt;/h3&gt;

&lt;p&gt;Tauri apps have smaller binary sizes than Electron apps because it’s using rust instead of javascript and other web technologies&lt;/p&gt;

&lt;h3&gt;
  
  
  Access to native APIs
&lt;/h3&gt;

&lt;p&gt;Tauri apps have access to more system-level APIs than Electron apps, because of the use of rust&lt;/p&gt;

&lt;p&gt;You can have a look at the below table, to compare Tauri and Electron Completely.&lt;br&gt;
&lt;a href="https://media.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%2Fp0fmiivovvpaekk2lf5e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fp0fmiivovvpaekk2lf5e.png" alt="Comparison Table"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But, comparison doesn't make sense, till we jump to the code. So, let's create a basic todo app in both Electron and Tauri in React, and then we can see the comparison in between. &lt;/p&gt;

&lt;h2&gt;
  
  
  Electron App
&lt;/h2&gt;

&lt;p&gt;To create electron app, use the below command and steps to create the electron app in react.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="nx"&gt;yarn&lt;/span&gt; &lt;span class="nx"&gt;create&lt;/span&gt; &lt;span class="nx"&gt;vite&lt;/span&gt;

&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="nx"&gt;Project&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;project&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="nx"&gt;Select&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="nx"&gt;framework&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;select&lt;/span&gt; &lt;span class="nx"&gt;Others&lt;/span&gt;
&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="nx"&gt;Select&lt;/span&gt; &lt;span class="nx"&gt;create&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;electron&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;vite&lt;/span&gt;
&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="nx"&gt;Project&lt;/span&gt; &lt;span class="nx"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;



&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Move into the electron project and you can open it in VSCode, and install all the packages&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

yarn install 
yarn add jotai


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;NOTE: We are using jotai for state management. &lt;/p&gt;

&lt;p&gt;You can start the electron app using the below command&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

yarn dev


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;And, you can view an app something like this, &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fjekljxad09zty0wixb17.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fjekljxad09zty0wixb17.png" alt="Electron Demo App"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: As I am using Linux, so headers of the app and the icon are a little different. It will look different for Windows and Mac. &lt;/p&gt;

&lt;p&gt;I cleaned everything in the &lt;code&gt;App.tsx&lt;/code&gt;, &lt;code&gt;App.css&lt;/code&gt; and &lt;code&gt;index.css&lt;/code&gt; files, and the application will be blank for me. &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./App.css&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;App&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="o"&gt;&amp;lt;&amp;gt;&lt;/span&gt;

    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&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="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;App&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Now, Let's start creating the Todo Application. &lt;/p&gt;

&lt;p&gt;I created a &lt;code&gt;Components&lt;/code&gt; folder and &lt;code&gt;store&lt;/code&gt; in the &lt;code&gt;src&lt;/code&gt; folder and created two files, one inside the Components folder and one in the store folder. &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

src
|-- Components
    |-- Input.tsx
    |-- TodoList.tsx
|-- store
    |-- store.ts


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Input.tsx&lt;/strong&gt;: The input component is for the input box where we can type the todo app. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TodoList.tsx&lt;/strong&gt;: This component will be used to show the list of the todos. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;store.ts&lt;/strong&gt;: This file is being handled to create the global store. &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="c1"&gt;//store.ts&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;atom&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="s2"&gt;jotai&lt;/span&gt;&lt;span class="dl"&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;inputDataStore&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;atom&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nb"&gt;String&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Here, we are initializing the store using jotai Atom and giving it a type of Array of strings. &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="c1"&gt;// Input.tsx&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;useAtom&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="s2"&gt;jotai&lt;/span&gt;&lt;span class="dl"&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;inputDataStore&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="s2"&gt;../store/store&lt;/span&gt;&lt;span class="dl"&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;useState&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="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Input&lt;/span&gt; &lt;span class="o"&gt;=&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="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setData&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useAtom&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;inputDataStore&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;inputData&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setInputData&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&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="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;input-container&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;onChange&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{(&lt;/span&gt;&lt;span class="nx"&gt;e&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="nf"&gt;setInputData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;}}&lt;/span&gt; &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt; &lt;span class="nx"&gt;onClick&lt;/span&gt;&lt;span class="o"&gt;=&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="nf"&gt;setData&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;el&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="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;inputData&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
        &lt;span class="p"&gt;}}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="nx"&gt;Add&lt;/span&gt; &lt;span class="nx"&gt;Todo&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/button&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&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="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;Input&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;As you can see, in the above code, I created an input box, and a button to add the entered value in the input box to move to the global todo list array. &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="c1"&gt;// TodoList.tsx&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;useAtom&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;jotai&lt;/span&gt;&lt;span class="dl"&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;inputDataStore&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;../store/store&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;TodoList&lt;/span&gt; &lt;span class="o"&gt;=&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="kd"&gt;const&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;=&lt;/span&gt; &lt;span class="nf"&gt;useAtom&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;inputDataStore&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="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;ul&lt;/span&gt;&lt;span class="o"&gt;&amp;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="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&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="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;li&lt;/span&gt; &lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;index&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="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
                &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/li&lt;/span&gt;&lt;span class="err"&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="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/ul&lt;/span&gt;&lt;span class="err"&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="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;TodoList&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The above code represents the list of the todo, which has been entered in the Input.tsx file. &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="c1"&gt;// App.tsx&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./App.css&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Input&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;./Components/Input&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;TodoList&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;./Components/TodoList&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;App&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="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;app-container&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Input&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;TodoList&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&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="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;App&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Finally, all the components are combined and added to the &lt;code&gt;App.tsx&lt;/code&gt; file. &lt;/p&gt;

&lt;h2&gt;
  
  
  Build the Electron App
&lt;/h2&gt;

&lt;p&gt;To build the electron app, please run the below command. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;yarn build&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The above command will build the code and also create a folder named, &lt;code&gt;release&lt;/code&gt; which has the build of the app to run on a desktop, according to your OS. &lt;/p&gt;

&lt;p&gt;As I am running Linux, it created an AppImage for me, for 102.2 MB. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fr25h0hw4p6we8vq00prg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fr25h0hw4p6we8vq00prg.png" alt="Electron AppImage"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Tauri App
&lt;/h2&gt;

&lt;p&gt;To create the Tauri app, use the below command and steps to create the Tauri app in React.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

yarn create tauri-app

1. Project name: &amp;lt;name of the project&amp;gt;
2. Identifier: &amp;lt;project identifier&amp;gt;
3. Choose language: Typescript / Javascript
4. Choose Package Manager: yarn
5. Choose UI template: React
6. Choose UI flavour: Typescript


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Now, You can &lt;code&gt;cd&lt;/code&gt; into the tauri app, depending on what name you gave to your project. &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

cd &amp;lt;project_name&amp;gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Install all the packages and add jotai as a package for state management. &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

yarn install
yarn add jotai


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The folder structure will be the same as the React project, and codebase too. &lt;/p&gt;

&lt;p&gt;To run the project locally, please use the below command&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

yarn tauri dev


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;And, it will run the desktop application on your OS. &lt;/p&gt;

&lt;p&gt;To build the desktop application, please run the below command. &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

yarn tauri build


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Considering the tauri app with the same codebase and same packages to be used, the tauri size is only 30.8 KB&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2F4ulu8c4wpejs7cmold9s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2F4ulu8c4wpejs7cmold9s.png" alt="Tauri AppImage Properties"&gt;&lt;/a&gt;&lt;/p&gt;




</description>
      <category>javascript</category>
      <category>react</category>
      <category>opensource</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Stop Using dotenv package</title>
      <dc:creator>Manas Mishra</dc:creator>
      <pubDate>Thu, 22 Aug 2024 05:54:41 +0000</pubDate>
      <link>https://forem.com/manascodes13/stop-using-dotenv-file-7ei</link>
      <guid>https://forem.com/manascodes13/stop-using-dotenv-file-7ei</guid>
      <description>&lt;p&gt;Whenever it comes to securing the API keys or something that we don't want to be exposed to the public for our Open Source Project, we always tend towards the .env file, and every week, 29k+ developers download a trendy package, dotenv.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fwu9tjw9m5p7ehkjkfmf3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fwu9tjw9m5p7ehkjkfmf3.png" alt="dotenvpopularitychart"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Why is the filename only .env?
&lt;/h1&gt;

&lt;p&gt;It's a myth, that the filename can only start with .env. You can name it anything and it will still be working fine with node.js. &lt;/p&gt;

&lt;p&gt;For example, this is my folder structure to test this feature, and as you can see, instead of .env, I added my name as a filename. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fh0166maryc2ijwnorxyv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fh0166maryc2ijwnorxyv.png" alt="Folder Structure"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This file contains a PORT, which I want to print in my main file&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fr71quyaw1vrilwlea8xs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fr71quyaw1vrilwlea8xs.png" alt="Defining PORT"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fgmnsu1mebfm8hg4sumig.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fgmnsu1mebfm8hg4sumig.png" alt="Calling PORT in the main file"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And, as you can see, the PORT is being printed in the console. &lt;a href="https://media.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%2Fhvgl6bi7q4vziyscu2zq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fhvgl6bi7q4vziyscu2zq.png" alt="Result of the PORT"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Why we should be using dot( . ), in front of the environment file ?
&lt;/h1&gt;

&lt;p&gt;When it comes to environment files, it's considered good to use a dot ( . ), in front of the filename, because adding a dot in front of any file name, makes it a hidden file or folder. &lt;/p&gt;

&lt;p&gt;That's why there are multiple folders in your OS, that are hidden and can only be accessed via CLI, For example, .ssh, .github, .vscode, etc. &lt;/p&gt;

&lt;h1&gt;
  
  
  How to access the environment file without using dotenv?
&lt;/h1&gt;

&lt;p&gt;Instead of using dotenv to read environment files, you can use the node.js inbuilt method to read them, which is &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="nx"&gt;node&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;file&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;js&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Here, instead of using .env as a file name, you can use any file name that is in your root folder. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2F7z1p9tpdelvw6akp7kxx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2F7z1p9tpdelvw6akp7kxx.png" alt="package.json"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>node</category>
      <category>programming</category>
    </item>
    <item>
      <title>Better Way To Docker</title>
      <dc:creator>Manas Mishra</dc:creator>
      <pubDate>Wed, 11 Oct 2023 11:43:19 +0000</pubDate>
      <link>https://forem.com/manascodes13/better-way-to-docker-37e6</link>
      <guid>https://forem.com/manascodes13/better-way-to-docker-37e6</guid>
      <description>&lt;p&gt;Did you ever use docker in any of your project. I prefer to run the docker in production, and combining it with the Kubernetes to handle the scaling of the user base. Docker shows us a new way of handling the very basic "But, it works on my system", issue. &lt;/p&gt;

&lt;p&gt;At the end, We can't give our PC to every user, so, we have to use docker in production to stop this issue. &lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisite
&lt;/h2&gt;

&lt;p&gt;Before anything, you need to have the docker desktop installed in your system or either the docker CLI, and then you will be able to good to go with docker. &lt;/p&gt;

&lt;p&gt;I am making this tutorial for a node.js project. But, you can use the same for any of the project you wanted with some tweaks. &lt;/p&gt;

&lt;h3&gt;
  
  
  Check for the open containers
&lt;/h3&gt;

&lt;p&gt;The first step of setting up the docker in your project is to find out, if you have any containers already running that you don't want to have currently. &lt;/p&gt;

&lt;p&gt;And for that, you can use the following docker command to run list all the running docker containers&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker ps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PYbQc5yw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v3c66m6xgojuegtvww5i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PYbQc5yw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v3c66m6xgojuegtvww5i.png" alt="docker ps" width="741" height="235"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you can see in the above image, currently, I dont have any running containers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Delete all the unused data
&lt;/h3&gt;

&lt;p&gt;After listing the container with &lt;code&gt;docker ps&lt;/code&gt;, if you find any containers, and you dont want any of them or caches, networks, volumes, or images that you want right now and wanted to delete every unsused data, then you can use the below command to do it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker system prune --all
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WslJv0F7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n5ykwpcv37vke9rfow8l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WslJv0F7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n5ykwpcv37vke9rfow8l.png" alt="docker prune all" width="745" height="312"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As, you can see, that docker system prune command deleted one of my unused network. &lt;/p&gt;

&lt;h3&gt;
  
  
  Creating the Dockerfile
&lt;/h3&gt;

&lt;p&gt;Now, the second step of setting up the docker in your project is creating the dockerfile, which is also the most important of them all. &lt;/p&gt;

&lt;p&gt;In this step, at first you have to create a Dockerfile in the root of your project, and this file will contain all the commands that you want to run over the docker.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FROM node:18

WORKDIR /app

COPY package*.json ./

RUN npm install

COPY . .

ENV PORT=8080

EXPOSE 8080

CMD ["npm", "start"]

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;FROM node:18&lt;/code&gt;: This command install the image, on which you want to run the project. Here, node is the image and 18 is the version of the node. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;WORKDIR /app&lt;/code&gt;: With this command, you define the base directory of your OS, which is /app and your whole project will be in this directory. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;COPY package*.json ./&lt;/code&gt;: This command will copy the package.json and package-lock.json file from the local project to the docker. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;RUN npm install&lt;/code&gt;: This command will run the npm install command over the server and install everything that has been specified under package.json and create a node_modules file over the docker. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;COPY . .&lt;/code&gt;: This command will copy all of the other project code to its base directory, &lt;strong&gt;/app&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;ENV PORT=8080&lt;/code&gt;: With this command, you can define the port that you want to expose to the local environment, as you may have using the .env. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;EXPOSE 8080&lt;/code&gt;: This command will expose the same 8080 port defined before to the local codebase. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;CMD ["npm", "start"]&lt;/code&gt;: This command will combine npm start and run it the docker, to run the project. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--c4sN5wjp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gmm6v7s0lsyzue31edoz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--c4sN5wjp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gmm6v7s0lsyzue31edoz.png" alt="docker" width="800" height="260"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Build The DockerFile
&lt;/h3&gt;

&lt;p&gt;After creating the dockerfile, you have to build the dockerfile, so that you can use it to publish later, to be used by other users.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker build -t &amp;lt;name&amp;gt;:&amp;lt;version&amp;gt; .
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The above command specifies: &lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker build&lt;/code&gt;: This part of the command instructs Docker to build an image.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;-t &amp;lt;name&amp;gt;:&amp;lt;version&amp;gt;&lt;/code&gt;: This is the -t (or --tag) option, which is used to specify a name and optionally a version tag for the Docker image. Here's what each part means:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;name&amp;gt;&lt;/code&gt;: This should be replaced with the desired name for your Docker image. The name is typically in lowercase and can consist of letters, numbers, hyphens, and underscores. It is used to identify your image.&lt;br&gt;
&lt;code&gt;&amp;lt;version&amp;gt;&lt;/code&gt;: This should be replaced with a version tag for your Docker image. The version tag is optional and is used to differentiate different versions or releases of the same image. It's common to use a version number or a version name (e.g., 1.0, latest, or a date) for this field.&lt;br&gt;
&lt;code&gt;.&lt;/code&gt;: The period (.) at the end of the command specifies the build context, which is the directory where the Dockerfile and any related files for building the image are located. In this case, it tells Docker to use the current directory as the build context.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0HVIEV4E--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yraa57vbgemy1f3roffm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0HVIEV4E--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yraa57vbgemy1f3roffm.png" alt="docker" width="800" height="317"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Run the project over docker
&lt;/h3&gt;

&lt;p&gt;After the above command, you are able to see an image in the docker desktop, and either you can run the below command to check the list of images running&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker images
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3U6V4GA5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z5at642p84t010fllyor.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3U6V4GA5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z5at642p84t010fllyor.png" alt="docker desktop" width="800" height="454"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tM3dZKTs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o2h0poy3rf53bwypmb2t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tM3dZKTs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o2h0poy3rf53bwypmb2t.png" alt="docker images" width="689" height="193"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, you can copy this Image ID, and paste the Image ID with the below command to run the project in the docker server.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run -p 5000:8000 b4ccb712e301
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The command docker run -p 5000:8000 b4ccb712e301 is used to run a Docker container from the image with the image ID b4ccb712e301. Let's break down the command and its components:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker run&lt;/code&gt;: This is the command to run a Docker container.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;-p 5000:8000&lt;/code&gt;: The -p option is used to specify port mapping, allowing you to map ports on your host system to ports inside the container. In this case, it's mapping port 5000 on your host to port 8000 inside the container. This means that if the application inside the container listens on port 8000, you can access it from your host machine using port 5000.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;b4ccb712e301&lt;/code&gt;: This is the image ID of the Docker image from which you want to create a container. The image with this ID is used as the base for the container.&lt;/p&gt;

&lt;p&gt;So, when you run this command, Docker will create a new container based on the image with ID b4ccb712e301, and it will map port 5000 on your host to port 8000 inside the container. If the container contains a service or application that listens on port 8000, you can access that service on your host machine by connecting to &lt;a href="http://localhost:5000"&gt;http://localhost:5000&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For example, if you have a web application running inside the container on port 8000, you can access it from your web browser by going to &lt;a href="http://localhost:5000"&gt;http://localhost:5000&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Keep in mind that the image ID b4ccb712e301 should correspond to a valid Docker image that contains the application or service you want to run. If the image doesn't exist on your system, Docker will attempt to pull it from a Docker registry (like Docker Hub) if it's available there.&lt;/p&gt;




&lt;p&gt;With the help of the above commands and files, you will be able to run your project over docker. There are many things, that you still need to apply in your project with docker to make it more scalable, which will be discussed in later articles. &lt;/p&gt;

</description>
      <category>docker</category>
      <category>programming</category>
      <category>node</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
