<?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: Paras Garg</title>
    <description>The latest articles on DEV Community by Paras Garg (@parasgarg2k).</description>
    <link>https://dev.to/parasgarg2k</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F99mvlsfu5tfj9m7ku25d.png</url>
      <title>DEV Community: Paras Garg</title>
      <link>https://dev.to/parasgarg2k</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/parasgarg2k"/>
    <language>en</language>
    <item>
      <title>Invisible Neighbors: An AI Field Notebook for the Sounds Around Us</title>
      <dc:creator>Paras Garg</dc:creator>
      <pubDate>Tue, 06 Oct 2026 12:39:05 +0000</pubDate>
      <link>https://dev.to/parasgarg2k/invisible-neighbors-an-ai-field-notebook-for-the-sounds-around-us-256d</link>
      <guid>https://dev.to/parasgarg2k/invisible-neighbors-an-ai-field-notebook-for-the-sounds-around-us-256d</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week1-2026-10-05"&gt;Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;A familiar walk can become background noise. Invisible Neighbors starts with a different question: &lt;strong&gt;who might be sharing this neighborhood, even when we cannot see them?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I built a sound field notebook for curious walkers and beginner birders. The idea is simple: go outside, pause somewhere, collect a short recording, and return to it with fresh ears. BirdNET suggests possible birds, and each suggestion links back to the moment in the recording that produced it.&lt;/p&gt;

&lt;p&gt;There is no chatbot to keep talking to and no feed to keep scrolling. The recording happens outdoors; the closer examination can happen afterward.&lt;/p&gt;

&lt;p&gt;The application has three pages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Notebook:&lt;/strong&gt; record with the microphone or import audio and video from a walk.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Listening stop:&lt;/strong&gt; play the original media, analyze its audio, and add a place and field notes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sound passport:&lt;/strong&gt; collect possible neighbors across stops and export a report with the original recordings.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A video recorded on a phone can be useful too: the app analyzes its soundtrack, while the original video remains available for playback. It does not identify animals visually.&lt;/p&gt;

&lt;p&gt;The important word is &lt;strong&gt;possible&lt;/strong&gt;. These are acoustic matches, not confirmed sightings. The app shows model scores and timestamped evidence so the user can listen and make their own judgment.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Demo video:&lt;/strong&gt; &lt;a href="https://github.com/ParasGarg2k/invisible-neighbors/blob/main/demo/demo.mp4" rel="noopener noreferrer"&gt;Watch or download the browser walkthrough&lt;/a&gt; (also available at &lt;a href="//./demo/demo.mp4"&gt;&lt;code&gt;demo/demo.mp4&lt;/code&gt;&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;This screen recording demonstrates the application in a browser. It is a product walkthrough, not an outdoor field trial or evidence of confirmed bird identifications. The application can be run locally using the setup instructions in the repository README.&lt;/p&gt;

&lt;p&gt;The walkthrough is intended to show:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Importing a short outdoor recording or a video with an audio track.&lt;/li&gt;
&lt;li&gt;Opening its listening-stop page and requesting analysis.&lt;/li&gt;
&lt;li&gt;BirdNET downloading at runtime, followed by local inference.&lt;/li&gt;
&lt;li&gt;Playing timestamped evidence and adjusting the minimum score.&lt;/li&gt;
&lt;li&gt;Adding field notes and exporting a sound passport.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The application runs locally at &lt;code&gt;http://127.0.0.1:5175/&lt;/code&gt; during development. That address is not a public demo link.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Repository:&lt;/strong&gt; &lt;a href="https://github.com/ParasGarg2k/invisible-neighbors" rel="noopener noreferrer"&gt;https://github.com/ParasGarg2k/invisible-neighbors&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The application code is MIT licensed. Model weights are not included in the repository or bundled into the application; they retain their separate upstream license.&lt;/p&gt;

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

&lt;p&gt;The AI core is &lt;a href="https://doi.org/10.5281/zenodo.15050749" rel="noopener noreferrer"&gt;BirdNET v2.4&lt;/a&gt;, developed by the Cornell Lab of Ornithology and Chemnitz University of Technology. Its TensorFlow.js release makes browser inference possible without an inference server.&lt;/p&gt;

&lt;p&gt;The interface uses React and Vite, with React Router connecting the three pages. Notebook data stays shared during navigation and is saved locally in IndexedDB.&lt;/p&gt;

&lt;p&gt;When someone requests analysis, the browser fetches the official model archive from Zenodo. TensorFlow.js runs inference in a worker, keeping the work separate from the interface. There are no API keys and no media-upload endpoint.&lt;/p&gt;

&lt;p&gt;Mediabunny reads the recording's audio locally. The app renders mono audio at 48 kHz, splits it into three-second clips, and analyzes the first 60 seconds. Short trailing clips are padded, while their evidence timestamps preserve the actual recording length.&lt;/p&gt;

&lt;p&gt;The app retains the top five predictions per clip and groups species using their highest segment score. Changing the score threshold filters the saved results rather than rerunning the model. It does not estimate how many birds were present or claim to measure ecosystem health.&lt;/p&gt;

&lt;p&gt;Export creates a ZIP containing original recordings, a readable HTML report, and structured JSON. That makes the passport something the user can take away, rather than a result trapped inside an account.&lt;/p&gt;

&lt;p&gt;One practical boundary: cached weights are not the same as a fully offline application. The first model download requires internet, browser storage can be evicted, and the app is not an offline PWA. Google Fonts also creates a network request; local inference does not mean zero network activity.&lt;/p&gt;

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

&lt;p&gt;For this project, access to the model changes the architecture.&lt;/p&gt;

&lt;p&gt;I can bring the model to the recording instead of sending the recording to a service. A closed hosted API could analyze sound, but it would introduce an external processing dependency; here, inference takes place on the user's device.&lt;/p&gt;

&lt;p&gt;That matters for recordings made near homes or conversations. The app does not need precise GPS, an account, or a server holding someone's media. Users decide whether to share anything by exporting it.&lt;/p&gt;

&lt;p&gt;The model release also makes the processing inspectable. Its input format, preprocessing, scores, and evidence windows are part of the implementation rather than hidden behind an API response. Developers can examine the pipeline and improve it within the applicable license terms.&lt;/p&gt;

&lt;p&gt;There are no paid inference API calls. Local processing still uses bandwidth for the initial download and the device's own compute resources.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The licensing distinction matters:&lt;/strong&gt; BirdNET-Analyzer's code is MIT licensed, but its repository describes the models as CC BY-NC-SA 4.0. The Zenodo record has differing license metadata. This is a freely available model with noncommercial restrictions, not an unrestricted model license. My application does not relicense or redistribute the weights. Contest-use permission and the metadata discrepancy remain matters to clarify with the maintainers and organizers.&lt;/p&gt;

&lt;p&gt;Open innovation made this local, evidence-linked workflow possible. It did not remove the responsibility to respect licenses or explain the model's limitations.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of GitHub Copilot:&lt;/strong&gt; Copilot's agent mode in VS Code was used to implement and refine the application. Copilot assisted development; BirdNET is the model used by the application at runtime.&lt;/li&gt;
&lt;/ul&gt;




</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
    <item>
      <title>I built my friend a private interview coach that runs in the browser</title>
      <dc:creator>Paras Garg</dc:creator>
      <pubDate>Sun, 04 Oct 2026 20:14:53 +0000</pubDate>
      <link>https://dev.to/parasgarg2k/i-built-my-friend-a-private-interview-coach-that-runs-in-the-browser-41hj</link>
      <guid>https://dev.to/parasgarg2k/i-built-my-friend-a-private-interview-coach-that-runs-in-the-browser-41hj</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;This is a submission for the&lt;br&gt;
&lt;a href="https://dev.to/challenges/hacktoberfest-weekend-2026-10-01"&gt;Hacktoberfest Weekend Challenge: Build for a Friend&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;p&gt;My friend &lt;strong&gt;Aarav&lt;/strong&gt; is preparing for a &lt;strong&gt;Frontend Engineer&lt;/strong&gt; role. He knows his&lt;br&gt;
work, but he often freezes when someone asks for a clear, structured answer&lt;br&gt;
without a script in front of him.&lt;/p&gt;

&lt;p&gt;I built &lt;strong&gt;Interview Espresso&lt;/strong&gt;, a focused practice app that turns a candidate's&lt;br&gt;
background and a real job description into a six-question interview round. The&lt;br&gt;
candidate writes answers in their own words, then a small open model gives&lt;br&gt;
specific coaching about the evidence they used, what needs sharpening, and what&lt;br&gt;
to practice next.&lt;/p&gt;

&lt;p&gt;The important constraint is privacy: résumés and interview answers can contain&lt;br&gt;
personal career history and employer details. The model runs inside a Web Worker&lt;br&gt;
in the browser. There is no account, API key, application backend, analytics&lt;br&gt;
script, or transcript database.&lt;/p&gt;
&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Video:&lt;/strong&gt; &lt;a href="https://github.com/ParasGarg2k/Interview-Espresso/blob/main/demo-recording/submission.mp4" rel="noopener noreferrer"&gt;https://github.com/ParasGarg2k/Interview-Espresso/blob/main/demo-recording/submission.mp4&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The shortest useful demo is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Add a target role, candidate background, and a few job requirements.&lt;/li&gt;
&lt;li&gt;Generate a tailored practice round.&lt;/li&gt;
&lt;li&gt;Answer at least one question.&lt;/li&gt;
&lt;li&gt;Generate a coaching card.&lt;/li&gt;
&lt;li&gt;Show the real-user feedback capture.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Repository:&lt;/strong&gt; &lt;a href="https://github.com/ParasGarg2k/Interview-Espresso" rel="noopener noreferrer"&gt;https://github.com/ParasGarg2k/Interview-Espresso&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Run it locally:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



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

&lt;p&gt;The UI uses React and Vite. Inference is isolated in a module Web Worker so&lt;br&gt;
model loading and generation do not freeze the main interface.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Candidate input
     │
     ▼
React interface ──postMessage──▶ Web Worker
     │                              │
     │                              ▼
     │                    Transformers.js + SmolLM2
     │                              │
     ◀──────── generated text ──────┘
     │
     ▼
Practice transcript and coaching (memory only)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The open core is &lt;strong&gt;SmolLM2 360M Instruct&lt;/strong&gt;, loaded in quantized form with&lt;br&gt;
Transformers.js and run through portable browser WASM. The model files are&lt;br&gt;
cached after the first download, but candidate input and answers remain in React&lt;br&gt;
state and disappear on refresh.&lt;/p&gt;

&lt;p&gt;Small models do not always obey formatting instructions. Rather than hide that,&lt;br&gt;
the app extracts valid questions and fills a short round with transparent,&lt;br&gt;
role-aware backup prompts when needed. If the model cannot load at all, the UI&lt;br&gt;
falls back gracefully instead of pretending AI ran successfully.&lt;/p&gt;

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

&lt;p&gt;For this project, "open" changes what is possible rather than decorating the&lt;br&gt;
stack.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Privacy:&lt;/strong&gt; interview content does not need to cross an application server.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inspectability:&lt;/strong&gt; anyone can inspect the prompt, worker boundary, and exact model.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Replaceability:&lt;/strong&gt; the app is not coupled to one closed provider or pricing plan.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resilience:&lt;/strong&gt; after the browser cache is warm, practice does not depend on an inference API being available.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The trade-off is honest too: a 360M-parameter model is compact enough for the&lt;br&gt;
browser, but its coaching can be less nuanced than a large hosted model. I&lt;br&gt;
designed the app around one narrow task, bounded inputs, and evidence-based&lt;br&gt;
feedback instead of asking the model to be a general career oracle.&lt;/p&gt;

&lt;h2&gt;
  
  
  What my friend said
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Usefulness rating: &lt;strong&gt;4.5/5&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Their words: &lt;strong&gt;"This felt like a real practice run, not a generic AI chatbot. I liked that it pushed me to explain my work with examples and results."&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;What I changed after watching them use it: &lt;strong&gt;I shortened the onboarding flow and made the answer prompts more specific so they could answer in a more natural, interview-like voice.&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;The first model I tested technically worked, but generated an unusable question.&lt;br&gt;
I replaced it with an instruction-tuned model and kept a deterministic fallback.&lt;br&gt;
That was a useful reminder that a successful inference call is not the same as&lt;br&gt;
a useful product.&lt;/p&gt;

&lt;p&gt;I also learned to treat the write-up and user test as part of the build. The&lt;br&gt;
most persuasive evidence is not a long feature list; it is one person completing&lt;br&gt;
one useful practice round and telling me what should improve.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Agent Session
&lt;/h2&gt;

&lt;p&gt;I used a Copilot-style coding session to iterate quickly on the UI flow,&lt;br&gt;
troubleshoot model-loading timeouts, and tighten the fallback behavior. The final&lt;br&gt;
product was reviewed for privacy, usability, and interview usefulness before&lt;br&gt;
submission.&lt;/p&gt;

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

&lt;p&gt;No partner category is claimed. Interview Espresso is entered for the overall&lt;br&gt;
challenge because open-source AI is central to the product.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>hf26challenge</category>
    </item>
  </channel>
</rss>
