<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Pawan Eswaran</title>
    <description>The latest articles on DEV Community by Pawan Eswaran (@pawan_19012006).</description>
    <link>https://dev.to/pawan_19012006</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3839273%2F9cfd47f4-4d56-49b1-9d4f-907aa71bcd9e.png</url>
      <title>DEV Community: Pawan Eswaran</title>
      <link>https://dev.to/pawan_19012006</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pawan_19012006"/>
    <language>en</language>
    <item>
      <title>100+ Users, Free API Keys and ₹0 Cloud Budget: How I Built Kairos</title>
      <dc:creator>Pawan Eswaran</dc:creator>
      <pubDate>Sun, 13 Sep 2026 21:54:29 +0000</pubDate>
      <link>https://dev.to/pawan_19012006/100-users-free-api-keys-and-0-cloud-budget-how-i-built-kairos-25k5</link>
      <guid>https://dev.to/pawan_19012006/100-users-free-api-keys-and-0-cloud-budget-how-i-built-kairos-25k5</guid>
      <description>&lt;p&gt;I wanted to build a simple RAG system.&lt;/p&gt;

&lt;p&gt;That sentence aged badly.&lt;/p&gt;

&lt;p&gt;The original problem was actually pretty simple.&lt;/p&gt;

&lt;p&gt;We were organizing a departmental event called &lt;strong&gt;Kairos&lt;/strong&gt;, where participants had to study company information and create pitch decks.&lt;/p&gt;

&lt;p&gt;The organizers had a lot of company reports.&lt;/p&gt;

&lt;p&gt;The participants had to read them.&lt;/p&gt;

&lt;p&gt;And the obvious solution was:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Print everything.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Except there was one tiny problem.&lt;/p&gt;

&lt;p&gt;There were &lt;strong&gt;a lot of pages.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And there were &lt;strong&gt;a lot of participants.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Printing enough copies for everyone wasn't exactly friendly to the budget.&lt;/p&gt;

&lt;p&gt;So I had a stupidly simple thought:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Why don't we just put all the documents into an AI system and let participants ask questions?&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And that's how I accidentally created a much bigger problem for myself.&lt;/p&gt;




&lt;h2&gt;
  
  
  Problem #1: "Just build a RAG"
&lt;/h2&gt;

&lt;p&gt;If you've built RAG systems before, you know how innocent that sentence sounds.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Upload PDFs → chunk them → embed them → retrieve relevant chunks → send them to an LLM.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Easy.&lt;/p&gt;

&lt;p&gt;Until you actually try to make people use it.&lt;/p&gt;

&lt;p&gt;I needed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PDF ingestion&lt;/li&gt;
&lt;li&gt;embeddings&lt;/li&gt;
&lt;li&gt;vector search&lt;/li&gt;
&lt;li&gt;retrieval&lt;/li&gt;
&lt;li&gt;reranking&lt;/li&gt;
&lt;li&gt;LLM generation&lt;/li&gt;
&lt;li&gt;citations&lt;/li&gt;
&lt;li&gt;a frontend&lt;/li&gt;
&lt;li&gt;a backend&lt;/li&gt;
&lt;li&gt;authentication&lt;/li&gt;
&lt;li&gt;rate limiting&lt;/li&gt;
&lt;li&gt;logging&lt;/li&gt;
&lt;li&gt;an admin dashboard&lt;/li&gt;
&lt;li&gt;and eventually, somehow, &lt;strong&gt;100+ people using it at the same time&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And I had one major constraint:&lt;/p&gt;

&lt;h3&gt;
  
  
  I didn't have a budget.
&lt;/h3&gt;

&lt;p&gt;Not "small startup budget."&lt;/p&gt;

&lt;p&gt;I mean &lt;strong&gt;₹0 infrastructure budget&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Problem #2: The LLM was going to bankrupt my imaginary company
&lt;/h2&gt;

&lt;p&gt;The next question was obvious:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which LLM should I use?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Paid APIs?&lt;/p&gt;

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

&lt;p&gt;I didn't have money for that.&lt;/p&gt;

&lt;p&gt;So I started looking at free API tiers.&lt;/p&gt;

&lt;p&gt;I ended up using &lt;strong&gt;Gemini&lt;/strong&gt; as the primary model and &lt;strong&gt;OpenRouter/Nemotron&lt;/strong&gt; as a fallback.&lt;/p&gt;

&lt;p&gt;Problem solved?&lt;/p&gt;

&lt;p&gt;Absolutely not.&lt;/p&gt;

&lt;p&gt;Free APIs have limits.&lt;/p&gt;

&lt;p&gt;And when you have one user asking a question, rate limits are someone else's problem.&lt;/p&gt;

&lt;p&gt;When you have 100+ users asking questions...&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Congratulations. You have invented a distributed systems problem.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Problem #3: "What if we just use multiple API keys?"
&lt;/h2&gt;

&lt;p&gt;This was probably my favourite hack.&lt;/p&gt;

&lt;p&gt;Instead of relying on one API key, I created multiple API lanes.&lt;/p&gt;

&lt;p&gt;Something roughly like:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;         Incoming Request
                |
                v
         LLM Gateway
                |
    +-----------+-----------+
    |                       |
Gemini lanes          OpenRouter lanes
 G01...G10               N01...N10
    |                       |
    +-----------+-----------+
                |
                v
             Response
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;I ended up with &lt;strong&gt;20 lanes&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;10 Gemini lanes&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;10 OpenRouter/Nemotron fallback lanes&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each lane had its own quota and concurrency control. The backend could distribute requests across them instead of hammering a single API key until it died. And because multiple users could hit the system simultaneously, I used PostgreSQL-based locking to coordinate access.&lt;/p&gt;

&lt;p&gt;Was this the most elegant infrastructure ever created? No. Was it considerably cheaper than paying for a giant API bill? Yes.&lt;/p&gt;




&lt;h3&gt;
  
  
  Problem #4: Now I needed a server
&lt;/h3&gt;

&lt;p&gt;At this point I had an AI system. Now I needed somewhere to run it.&lt;/p&gt;

&lt;p&gt;I looked at cloud hosting. Then I looked at the prices. Then I looked at my budget. Then I looked back at my laptop. &lt;/p&gt;

&lt;p&gt;We reached an agreement. &lt;strong&gt;My laptop was now the cloud.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I ran the application locally and exposed it through ngrok&lt;/p&gt;

&lt;p&gt;At some point I stopped calling it a laptop and started calling it &lt;em&gt;production infrastructure&lt;/em&gt;. It made me feel better.&lt;/p&gt;




&lt;h3&gt;
  
  
  Problem #5: What if everyone asks questions at once?
&lt;/h3&gt;

&lt;p&gt;The system wasn't being built for me. It wasn't: &lt;em&gt;"Look, here's my RAG demo."&lt;/em&gt; People were actually going to use it. Potentially 100+ people. And I didn't want the first question on event day to be: &lt;em&gt;"Why is the website down?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;So I added:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Per-team question quotas&lt;/li&gt;
&lt;li&gt;Request logging &amp;amp; rate limiting&lt;/li&gt;
&lt;li&gt;API key routing &amp;amp; fallback handling&lt;/li&gt;
&lt;li&gt;Concurrency controls &amp;amp; event timers&lt;/li&gt;
&lt;li&gt;Monitoring/admin views&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I limited each team to 10 questions. This wasn't only about saving API calls—it also made the event more interesting because we could later look at the prompts participants were asking and evaluate how they were using the system.&lt;/p&gt;




&lt;h3&gt;
  
  
  Problem #6: RAG started lying to me
&lt;/h3&gt;

&lt;p&gt;This was where the project became more interesting technically. I didn't just want: &lt;em&gt;"Here are some chunks that look relevant."&lt;/em&gt; I wanted the system to actually reason about what kind of information it needed to retrieve.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Two-Stage Retrieval:&lt;/strong&gt; The first stage interpreted the question and created a retrieval plan. The second stage actually searched the company knowledge base.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Permission Boundaries:&lt;/strong&gt; I kept the internal instruction knowledge separate from the company documents that participants were allowed to access.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Page-Level Citations:&lt;/strong&gt; Instead of &lt;em&gt;"According to the document..."&lt;/em&gt;, the system pointed participants toward the exact page containing the information.&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  Event Day
&lt;/h3&gt;

&lt;p&gt;The system was running on my laptop. The laptop was connected to the internet. ngrok was exposing it. The APIs were running through free quotas. PostgreSQL was handling state. Qdrant was handling vector search. The RAG pipeline was running.&lt;/p&gt;

&lt;p&gt;And then... people started using it. Questions came in. Answers came back. People were actually using the system to search through the company information.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;And it worked.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No paid cloud infrastructure. No expensive LLM subscription. No giant GPU server. No fancy production cluster. Just a lot of engineering, questionable financial decisions, and one laptop that was working much harder than it deserved to.&lt;/p&gt;




&lt;h3&gt;
  
  
  What I Actually Learned
&lt;/h3&gt;

&lt;p&gt;The biggest lesson wasn't about RAG. It was about &lt;strong&gt;constraints&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;When you have unlimited resources, the solution is often:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;"Just use a bigger server."&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;"Just use the paid API."&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;"Just scale horizontally."&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When you have ₹0, you can't say that. You have to ask: &lt;strong&gt;"Okay. What can I change instead?"&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Free API limits became an API-routing problem.&lt;/li&gt;
&lt;li&gt;No cloud budget became a deployment problem.&lt;/li&gt;
&lt;li&gt;Too many users became a concurrency problem.&lt;/li&gt;
&lt;li&gt;Large documents became a retrieval problem.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And eventually, all those little problems became an actual system. That's probably the part of the project I'm most proud of.&lt;/p&gt;




&lt;h3&gt;
  
  
  The Final Stack
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Technologies&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Frontend&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;React, Vite, TypeScript, Tailwind, PDF.js&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Backend&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;FastAPI, Uvicorn, Async REST APIs, SSE streaming&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AI &amp;amp; Retrieval&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Gemini, OpenRouter / Nemotron, SentenceTransformers (&lt;code&gt;BAAI/bge-small-en-v1.5&lt;/code&gt;), Two-stage retrieval, Reranking, Adaptive response depth&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data &amp;amp; Storage&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;PostgreSQL, SQLAlchemy, Qdrant&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Infrastructure&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Docker, Docker Compose, ngrok (and my laptop)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  🔗 GitHub Repository
&lt;/h3&gt;

&lt;p&gt;The complete project is open source:&lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/Pawan-19012006/Kairos-RAG-System" rel="noopener noreferrer"&gt;https://github.com/Pawan-19012006/Kairos-RAG-System&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  One Thing I'd Do Differently
&lt;/h3&gt;

&lt;p&gt;If I rebuilt this today, I'd spend much more time designing the &lt;strong&gt;evaluation and observability layer&lt;/strong&gt; from the beginning. &lt;/p&gt;

&lt;p&gt;Getting a RAG system to answer is relatively easy. Getting it to answer correctly, consistently, with the right evidence, under real usage constraints is where the interesting engineering begins.&lt;/p&gt;

&lt;p&gt;And that's where this project stopped being &lt;em&gt;"I built a chatbot"&lt;/em&gt; and became &lt;strong&gt;"I built a system that had to survive actual users."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's a much more fun problem.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;P.S.&lt;/strong&gt; If you're building something similar and you're worried because you don't have a huge cloud budget: Don't let the lack of money decide whether the project is possible. Sometimes the most interesting engineering happens when you have no other option. &lt;/p&gt;

&lt;p&gt;And sometimes... your laptop becomes the cloud. 😅&lt;/p&gt;




</description>
      <category>ai</category>
      <category>programming</category>
      <category>architecture</category>
      <category>productivity</category>
    </item>
    <item>
      <title>#DevWatch — Turning GNOME into a Developer-Aware OS</title>
      <dc:creator>Pawan Eswaran</dc:creator>
      <pubDate>Mon, 23 Mar 2026 05:55:36 +0000</pubDate>
      <link>https://dev.to/pawan_19012006/devwatch-turning-gnome-into-a-developer-aware-os-ep9</link>
      <guid>https://dev.to/pawan_19012006/devwatch-turning-gnome-into-a-developer-aware-os-ep9</guid>
      <description>&lt;p&gt;Most developer tools on Linux are &lt;strong&gt;process-centric&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;But we don’t think in processes.&lt;/p&gt;

&lt;p&gt;We think in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;projects&lt;/li&gt;
&lt;li&gt;services&lt;/li&gt;
&lt;li&gt;ports&lt;/li&gt;
&lt;li&gt;builds&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So i built &lt;strong&gt;DevWatch&lt;/strong&gt; — a GNOME Shell extension that makes your desktop &lt;em&gt;understand your development workflow&lt;/em&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 What is DevWatch?
&lt;/h2&gt;

&lt;p&gt;DevWatch transforms GNOME from a generic desktop into a &lt;strong&gt;developer-aware operating layer&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Instead of showing random PIDs and CPU usage, it tells you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;👉 &lt;em&gt;Which project is running what&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;👉 &lt;em&gt;Which port belongs to which service&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;👉 &lt;em&gt;What your dev environment is
actually doing&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  The DevWatch Panel
&lt;/h3&gt;

&lt;p&gt;When you click the &lt;strong&gt;DevWatch button&lt;/strong&gt; in your GNOME panel, the dropdown gives you a complete, real-time view of your development environment.&lt;/p&gt;

&lt;h3&gt;
  
  
  🧾 Header Bar
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Live stats showing:

&lt;ul&gt;
&lt;li&gt;number of active projects&lt;/li&gt;
&lt;li&gt;number of open ports&lt;/li&gt;
&lt;li&gt;total RAM usage&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Stop All Projects&lt;/strong&gt; — instantly kills all running dev processes&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Settings&lt;/strong&gt; — opens the preferences window&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmjfscibyielefcji0qn6.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%2Fmjfscibyielefcji0qn6.png" alt=" " width="421" height="103"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  🔍 Running Projects
&lt;/h3&gt;

&lt;p&gt;Each project is shown as an &lt;strong&gt;expandable card&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Service-oriented view
👉 shows &lt;em&gt;"Python Server"&lt;/em&gt; instead of raw &lt;code&gt;python3.12&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stop Project&lt;/strong&gt; — kills all processes in that project&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open Terminal&lt;/strong&gt; — opens &lt;code&gt;gnome-terminal&lt;/code&gt; at the project’s git root&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhmdf3zgy59u2t0k4o4zj.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%2Fhmdf3zgy59u2t0k4o4zj.png" alt="Running Projects" width="431" height="503"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  🌐 Open Ports
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Highlights dev ports (3000, 5173, 8080, etc.) with colored dots
&lt;/li&gt;
&lt;li&gt;Shows &lt;strong&gt;project name&lt;/strong&gt; linked to each port
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stop button&lt;/strong&gt; kills the process using that port
&lt;/li&gt;
&lt;li&gt;Displays &lt;strong&gt;runtime&lt;/strong&gt; (how long the port has been active)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1weqfwn2lpho32mew1yj.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%2F1weqfwn2lpho32mew1yj.png" alt="Open Ports" width="426" height="200"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  📷 Sessions
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Save&lt;/strong&gt; — name and store your current workspace
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Last Workspace&lt;/strong&gt; — auto-saved every refresh (persists across reboots)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resume&lt;/strong&gt; — restores terminals, services, and editors
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Delete&lt;/strong&gt; — remove saved sessions
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fly5kqamclj1afaqvpfm3.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%2Fly5kqamclj1afaqvpfm3.png" alt=" " width="426" height="284"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  ⚡ Build Activity
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Shows &lt;strong&gt;live builds&lt;/strong&gt; with:

&lt;ul&gt;
&lt;li&gt;elapsed time
&lt;/li&gt;
&lt;li&gt;CPU usage
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Recent Builds&lt;/strong&gt; — collapsible history with:

&lt;ul&gt;
&lt;li&gt;duration
&lt;/li&gt;
&lt;li&gt;peak CPU usage
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Detects builds from:

&lt;ul&gt;
&lt;li&gt;npm, cargo, make, go build, gradle, webpack, vite, tsc, gcc, and more
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Build history persists across reboots
&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw6rst5p6ffnia4jd9dvi.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%2Fw6rst5p6ffnia4jd9dvi.png" alt=" " width="423" height="414"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  ⚠ Problems (Conditional Section)
&lt;/h3&gt;

&lt;p&gt;Appears only when issues are detected:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;⚠ trackitte using 3.2 GB RAM
&lt;/li&gt;
&lt;li&gt;⚠ backend CPU at 92%&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧠 Why I Built This
&lt;/h2&gt;

&lt;p&gt;As a developer, I kept doing things like:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;lsof -i :3000&lt;br&gt;
ps aux | grep node&lt;br&gt;
kill -9 &amp;lt;pid&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;And I realized:&lt;/p&gt;

&lt;p&gt;Why is my OS not aware of my projects?&lt;/p&gt;

&lt;p&gt;DevWatch is my attempt to fix that.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I Need From You
&lt;/h2&gt;

&lt;p&gt;I’d love honest feedback from developers:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Specifically&lt;/strong&gt;:&lt;br&gt;
    • Does this solve a real problem for you?&lt;br&gt;
    • What feature would you actually use daily?&lt;br&gt;
    • What feels unnecessary?&lt;br&gt;
    • What would make you install this instantly?&lt;/p&gt;




&lt;h2&gt;
  
  
  Try It Out !!!
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;👉 GitHub:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://github.com/Adithya-Balan/DevWatch" rel="noopener noreferrer"&gt;https://github.com/Adithya-Balan/DevWatch&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(Installation steps are in the README)&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;🙌 Feedback Welcome&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is still evolving — and I want to shape it around real developer workflows, not assumptions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;👉 Drop your thoughts, critiques, or feature ideas below in the comments.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Even harsh feedback is welcome — that’s how this gets better 🚀&lt;/p&gt;

</description>
      <category>linux</category>
      <category>opensource</category>
      <category>productivity</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
