<?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: Dipanshu Vishwakarma</title>
    <description>The latest articles on DEV Community by Dipanshu Vishwakarma (@dipanshu_vishwakarma).</description>
    <link>https://dev.to/dipanshu_vishwakarma</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%2F4164073%2Fb5cb0558-2058-42ab-84a6-5fdeabaec2a0.png</url>
      <title>DEV Community: Dipanshu Vishwakarma</title>
      <link>https://dev.to/dipanshu_vishwakarma</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dipanshu_vishwakarma"/>
    <language>en</language>
    <item>
      <title>GhostShell 👻: A Haunted AI Terminal for Hacktoberfest 2026</title>
      <dc:creator>Dipanshu Vishwakarma</dc:creator>
      <pubDate>Wed, 28 Oct 2026 14:21:29 +0000</pubDate>
      <link>https://dev.to/dipanshu_vishwakarma/ghostshell-a-haunted-ai-terminal-for-hacktoberfest-2026-33hg</link>
      <guid>https://dev.to/dipanshu_vishwakarma/ghostshell-a-haunted-ai-terminal-for-hacktoberfest-2026-33hg</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week4-2026-10-26"&gt;Hacktoberfest Open-Source AI Challenge Week 4: Ghost in the Machine&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;Meet &lt;strong&gt;GhostShell 👻&lt;/strong&gt;, a spooky terminal companion designed to make working with shell commands more interesting and less confusing.&lt;/p&gt;

&lt;p&gt;Have you ever found a command online and wondered what it actually does? Or worried about running a command that might delete files or change your system?&lt;/p&gt;

&lt;p&gt;GhostShell is designed to help with that.&lt;/p&gt;

&lt;p&gt;The idea is to create a haunted terminal experience where a ghost-like AI companion explains commands in simple language, highlights potential risks, and responds with spooky commentary.&lt;/p&gt;

&lt;p&gt;Instead of just showing technical output, GhostShell makes command analysis feel like a conversation with a mysterious entity living inside your computer.&lt;/p&gt;

&lt;p&gt;The goal is to combine a fun Halloween-inspired experience with a genuinely useful developer tool.&lt;/p&gt;

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

&lt;p&gt;👻 &lt;strong&gt;Live Demo:&lt;/strong&gt; &lt;a href="https://ghostshell-fawn.vercel.app/" rel="noopener noreferrer"&gt;https://ghostshell-fawn.vercel.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;💻 &lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/unknowdeepanshu/GhostShell" rel="noopener noreferrer"&gt;https://github.com/unknowdeepanshu/GhostShell&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Explore the interface and repository to see the project.&lt;/p&gt;

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

&lt;p&gt;I built GhostShell around the idea of combining a haunted terminal interface with open-source AI.&lt;/p&gt;

&lt;p&gt;The planned technology stack includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;React + TypeScript&lt;/strong&gt; for the user interface.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tauri&lt;/strong&gt; for the desktop application.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tailwind CSS&lt;/strong&gt; for styling.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rust&lt;/strong&gt; for desktop-side functionality and controlled system access.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open-weight AI&lt;/strong&gt; for generating command explanations and ghostly responses.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local storage&lt;/strong&gt; for keeping user preferences and command history on the device.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One important design decision is that GhostShell should analyze commands rather than execute them. The AI should not have unrestricted access to the user's terminal.&lt;/p&gt;

&lt;p&gt;A separate rules-based analyzer can identify potentially dangerous command patterns, while AI can help explain unfamiliar syntax in beginner-friendly language.&lt;/p&gt;

&lt;p&gt;The goal is to keep the application useful even when the AI model is unavailable.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The exact model, local inference setup, and implemented features should be documented in the repository as they are verified.&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;For me, open innovation is about giving developers more control over the tools they use.&lt;/p&gt;

&lt;p&gt;A closed AI API can be convenient, but it may require an internet connection, send prompts to an external service, and introduce usage costs.&lt;/p&gt;

&lt;p&gt;With a suitable open-weight model and a properly implemented local runtime, GhostShell can work toward a different approach:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Privacy:&lt;/strong&gt; command text can stay on the user's machine instead of being sent to a cloud AI provider.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Control:&lt;/strong&gt; developers can experiment with compatible models and customize prompts and behavior.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accessibility:&lt;/strong&gt; users can explore AI-powered command explanations without depending on a paid API for every request.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Independence:&lt;/strong&gt; after the required model files are downloaded, local inference may work without an internet connection.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These benefits depend on the actual implementation. Local processing, offline support, and model licensing must be verified rather than assumed.&lt;/p&gt;

&lt;p&gt;I also like that open models make experimentation possible. I can learn how inference works, compare models, and improve the application without building everything around a single closed service.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Spirit of It 👻
&lt;/h2&gt;

&lt;p&gt;Halloween is a great excuse to build something unusual, but I wanted GhostShell to be more than a spooky visual experiment.&lt;/p&gt;

&lt;p&gt;The terminal is already a place where small mistakes can have big consequences. A mysterious companion that explains commands before you use them is a fun way to make that experience less intimidating.&lt;/p&gt;

&lt;p&gt;Imagine entering a potentially destructive command and having the ghost whisper:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;“Careful, developer. Some things cannot be brought back from the dead.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That is the spirit of GhostShell: a little mystery, a little humor, and a useful reminder to understand a command before running it.&lt;/p&gt;

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

&lt;p&gt;Some improvements I want to explore include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Better explanations for complex shell commands.&lt;/li&gt;
&lt;li&gt;More reliable warnings for destructive operations.&lt;/li&gt;
&lt;li&gt;Customizable ghost personalities.&lt;/li&gt;
&lt;li&gt;A searchable local command journal.&lt;/li&gt;
&lt;li&gt;A small local AI model optimized for modest hardware.&lt;/li&gt;
&lt;li&gt;Improved offline support and privacy controls.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm building this as part of Hacktoberfest 2026, and I hope it can become a useful little companion for developers who enjoy experimenting with open-source AI.&lt;/p&gt;

&lt;p&gt;If you like the idea, check out the repository, explore the project, and share your feedback!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/unknowdeepanshu/GhostShell" rel="noopener noreferrer"&gt;https://github.com/unknowdeepanshu/GhostShell&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live Demo:&lt;/strong&gt; &lt;a href="https://ghostshell-fawn.vercel.app/" rel="noopener noreferrer"&gt;https://ghostshell-fawn.vercel.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks for checking out GhostShell. Stay curious, understand your commands, and beware of the ghost in the machine. 👻&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>opensource</category>
      <category>ai</category>
    </item>
    <item>
      <title>SellCraft AI: Local-First Product Listings for Independent Sellers</title>
      <dc:creator>Dipanshu Vishwakarma</dc:creator>
      <pubDate>Fri, 16 Oct 2026 13:16:33 +0000</pubDate>
      <link>https://dev.to/dipanshu_vishwakarma/sellcraft-ai-local-first-product-listings-for-independent-sellers-4j77</link>
      <guid>https://dev.to/dipanshu_vishwakarma/sellcraft-ai-local-first-product-listings-for-independent-sellers-4j77</guid>
      <description>&lt;p&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week2-2026-10-12"&gt;Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle&lt;/a&gt;.&lt;/p&gt;

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

&lt;p&gt;SellCraft AI is a local-first product listing studio for independent sellers.&lt;/p&gt;

&lt;p&gt;It turns confirmed product details into editable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Titles&lt;/li&gt;
&lt;li&gt;Descriptions&lt;/li&gt;
&lt;li&gt;Features&lt;/li&gt;
&lt;li&gt;Keywords and tags&lt;/li&gt;
&lt;li&gt;Social captions&lt;/li&gt;
&lt;li&gt;FAQs&lt;/li&gt;
&lt;li&gt;Markdown, text, and CSV exports&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is designed for sellers who want help writing listings without sending product information to a paid cloud AI API.&lt;/p&gt;

&lt;p&gt;SellCraft can help someone selling handmade goods, clothing, electronics, collectibles, or other products create a stronger first draft faster. The seller remains responsible for reviewing every claim before publishing.&lt;/p&gt;

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

&lt;p&gt;SellCraft runs 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;p&gt;Open:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://127.0.0.1:5173
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The model can be downloaded from the Settings page or installed with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run setup:model
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After setup, generation works without an internet connection as long as the local SellCraft service remains running.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Public repository:&lt;/strong&gt; &lt;a href="https://github.com/unknowdeepanshu/SellCraft-AI" rel="noopener noreferrer"&gt;View SellCraft AI on GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The project is organized around a small local Node service and a React frontend.&lt;/p&gt;

&lt;p&gt;Important areas include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;App.tsx&lt;/code&gt; for the listing workflow and editor&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;listings&lt;/code&gt; for prompts and output normalization&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;model-manager&lt;/code&gt; for model setup and verification&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;model-store.ts&lt;/code&gt; for project-local model storage&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;engine.ts&lt;/code&gt; for local inference&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;storage&lt;/code&gt; for IndexedDB persistence&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;listing.ts&lt;/code&gt; for warnings and exports&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The model files are stored inside the project’s &lt;code&gt;models&lt;/code&gt; directory and are not committed to Git.&lt;/p&gt;

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

&lt;p&gt;SellCraft uses the open-weight &lt;strong&gt;SmolLM2 360M Instruct&lt;/strong&gt; model in quantized ONNX format.&lt;/p&gt;

&lt;p&gt;The model runs locally through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Transformers.js&lt;/li&gt;
&lt;li&gt;ONNX Runtime&lt;/li&gt;
&lt;li&gt;A Node.js worker thread&lt;/li&gt;
&lt;li&gt;A loopback HTTP service&lt;/li&gt;
&lt;li&gt;A React and Vite frontend&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The application does not use Ollama, a cloud generation fallback, a global model cache, or a paid AI API.&lt;/p&gt;

&lt;p&gt;The model is downloaded only when explicitly requested. Every model artifact has a pinned size and SHA-256 checksum. Invalid or incomplete files are rejected.&lt;/p&gt;

&lt;p&gt;The application asks the model to generate one listing section at a time. This keeps the response format simple and allows individual sections to be regenerated without replacing the rest of the listing.&lt;/p&gt;

&lt;p&gt;Generated output is normalized before it reaches the editor. For example, feature responses wrapped in JSON are converted into plain editable feature lines.&lt;/p&gt;

&lt;h2&gt;
  
  
  Measured Results
&lt;/h2&gt;

&lt;p&gt;The project was tested on Windows with Node.js 24.14.0 and Google Chrome.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Model setup passed using the existing verified local files.&lt;/li&gt;
&lt;li&gt;Unit tests: &lt;code&gt;15/15&lt;/code&gt; passed.&lt;/li&gt;
&lt;li&gt;End-to-end tests: &lt;code&gt;9/9&lt;/code&gt; passed.&lt;/li&gt;
&lt;li&gt;Production build passed.&lt;/li&gt;
&lt;li&gt;Model load time: approximately &lt;code&gt;2.12 seconds&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Sample generation time: approximately &lt;code&gt;13.0–22.9 seconds&lt;/code&gt; per listing section set.&lt;/li&gt;
&lt;li&gt;Section-only regeneration preserved unrelated listing sections.&lt;/li&gt;
&lt;li&gt;Saved listings remained available with external network requests blocked.&lt;/li&gt;
&lt;li&gt;Markdown, plain text, and CSV exports were tested.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The compact model is useful for creating first drafts, but it is not perfect. Real model evaluation showed that it can sometimes repeat text, produce prompt-like filler, omit FAQs, or invent unsupported compatibility and benefit claims.&lt;/p&gt;

&lt;p&gt;SellCraft treats AI output as a draft rather than a source of truth. Sellers must verify every generated claim.&lt;/p&gt;

&lt;h2&gt;
  
  
  Offline Behavior
&lt;/h2&gt;

&lt;p&gt;Initial installation and model setup require internet access.&lt;/p&gt;

&lt;p&gt;After that:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Start the local service with &lt;code&gt;npm run dev&lt;/code&gt; or &lt;code&gt;npm start&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Keep the local service running.&lt;/li&gt;
&lt;li&gt;Disconnect from the internet if desired.&lt;/li&gt;
&lt;li&gt;Continue generating listings and opening saved products locally.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Saved listings are stored in browser IndexedDB. They are not synchronized or encrypted, so important work should also be exported.&lt;/p&gt;

&lt;p&gt;Photos remain local references. The text model does not analyze or upload them.&lt;/p&gt;

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

&lt;p&gt;Open innovation made it possible to build a private, local workflow without depending on a paid AI provider.&lt;/p&gt;

&lt;p&gt;Using an open-weight model means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Product details stay on the seller’s device.&lt;/li&gt;
&lt;li&gt;There is no per-request API fee.&lt;/li&gt;
&lt;li&gt;The model can be inspected, replaced, or customized.&lt;/li&gt;
&lt;li&gt;The application can continue working without internet after setup.&lt;/li&gt;
&lt;li&gt;The project does not depend on a single commercial AI platform.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The trade-off is that local inference requires CPU, memory, disk space, and human review. A small open model can be practical, but it cannot replace seller knowledge or factual verification.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;SellCraft AI is built around a simple idea: AI should help sellers get past the blank page without taking control of their product data.&lt;/p&gt;

&lt;p&gt;The model writes the first draft. The seller decides what is true.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>BirdLens AI: Identify Birds Locally, Explore Nature Offline</title>
      <dc:creator>Dipanshu Vishwakarma</dc:creator>
      <pubDate>Sun, 11 Oct 2026 06:29:13 +0000</pubDate>
      <link>https://dev.to/dipanshu_vishwakarma/birdlens-ai-identify-birds-in-your-browser-then-get-back-outside-5ei1</link>
      <guid>https://dev.to/dipanshu_vishwakarma/birdlens-ai-identify-birds-in-your-browser-then-get-back-outside-5ei1</guid>
      <description>&lt;h1&gt;
  
  
  BirdLens AI — An Open-Source AI Bird Identification Companion
&lt;/h1&gt;

&lt;p&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;/p&gt;

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

&lt;p&gt;I built &lt;strong&gt;BirdLens AI&lt;/strong&gt;, a browser-based bird-identification companion for beginner birdwatchers, curious walkers, and anyone who wants to learn more about the wildlife around them.&lt;/p&gt;

&lt;p&gt;My approach to “Touch Grass” is simple: &lt;strong&gt;use technology to support an outdoor experience, not replace it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The intended flow is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Go outside → Notice a bird → Take a photograph → Get a suggested identification → Return to observing.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;BirdLens AI lets users:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Upload a bird photograph and identify it locally using an open-weight model.&lt;/li&gt;
&lt;li&gt;Review the top five predictions rather than trusting a single answer.&lt;/li&gt;
&lt;li&gt;Read sourced information about the suggested species.&lt;/li&gt;
&lt;li&gt;Save photographs and results in a local discovery journal.&lt;/li&gt;
&lt;li&gt;Track simple outdoor observation challenges.&lt;/li&gt;
&lt;li&gt;Revisit saved discoveries and identify photographs offline after the required assets and model have been cached.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The journal turns individual sightings into a personal record of exploration. The challenges give users a reason to notice more of their surroundings.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The goal is to make the screen the shortest part of the experience.&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Live project:&lt;/strong&gt; &lt;a href="https://birdlens-ai.vercel.app/#home" rel="noopener noreferrer"&gt;Try BirdLens AI&lt;/a&gt;&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Try It Yourself
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Open the app and choose &lt;strong&gt;Identify a bird&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Upload a clear photograph of a bird.&lt;/li&gt;
&lt;li&gt;Wait for the model to load and run inference.&lt;/li&gt;
&lt;li&gt;Review the suggested species, model score, and alternative predictions.&lt;/li&gt;
&lt;li&gt;Save the result and explore &lt;strong&gt;My discoveries&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The first identification downloads the model. Later identifications can work offline once the production application and model have been successfully cached, provided the browser retains that storage.&lt;/p&gt;

&lt;p&gt;New online species references may still need an internet connection.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Please observe birds from a respectful distance. An identification app is not a reason to approach or disturb wildlife.&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;p&gt;&lt;strong&gt;Public repository:&lt;/strong&gt; &lt;a href="https://github.com/unknowdeepanshu/birdlens-ai" rel="noopener noreferrer"&gt;View BirdLens AI on GitHub&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Technology Stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;React and TypeScript&lt;/strong&gt; — Interface and application logic&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vite&lt;/strong&gt; — Development and production builds&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tailwind CSS&lt;/strong&gt; — Styling&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ONNX Runtime Web&lt;/strong&gt; — Browser-based inference&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IndexedDB&lt;/strong&gt; — Local discovery journal&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Service Worker and Cache Storage&lt;/strong&gt; — Production offline support&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is no application backend, user account requirement, or paid AI inference API.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  An Open-Weight Model Is the Core, Not an Extra Feature
&lt;/h3&gt;

&lt;p&gt;BirdLens AI uses the &lt;a href="https://huggingface.co/chriamue/bird-species-classifier" rel="noopener noreferrer"&gt;chriamue/bird-species-classifier&lt;/a&gt;, an EfficientNet-B2 model with 525 output classes.&lt;/p&gt;

&lt;p&gt;The publisher declares the model MIT-licensed. Its weights are loaded in ONNX format and executed through ONNX Runtime Web.&lt;/p&gt;

&lt;p&gt;Without that model and the local inference runtime, the application's main identification feature would not work. &lt;strong&gt;Open AI is therefore central to the project.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Running Inference in the Browser
&lt;/h3&gt;

&lt;p&gt;The inference pipeline works as follows:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Decode the uploaded photograph.&lt;/li&gt;
&lt;li&gt;Resize and normalize it for the model.&lt;/li&gt;
&lt;li&gt;Run the ONNX classifier using WebAssembly inside a worker.&lt;/li&gt;
&lt;li&gt;Convert the output into ranked model probabilities.&lt;/li&gt;
&lt;li&gt;Display the top five predictions.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Running inference in a worker keeps it separate from the main interface.&lt;/p&gt;

&lt;p&gt;Photographs are not sent to a remote AI service for identification. The application does download model assets and may fetch online species references, but image inference happens on the user's device.&lt;/p&gt;

&lt;h3&gt;
  
  
  Showing Uncertainty Honestly
&lt;/h3&gt;

&lt;p&gt;A model prediction is not a confirmed sighting.&lt;/p&gt;

&lt;p&gt;BirdLens AI uses score and prediction-margin heuristics to mark uncertain results as tentative. It also shows alternative candidates so users can compare possibilities.&lt;/p&gt;

&lt;p&gt;There are important limitations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The model is a closed-set classifier, not a bird detector.&lt;/li&gt;
&lt;li&gt;Unsupported species and non-bird images can produce misleading predictions.&lt;/li&gt;
&lt;li&gt;Poor lighting, small subjects, and similar-looking species can confuse it.&lt;/li&gt;
&lt;li&gt;Model probabilities are not calibrated identification confidence.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Scientifically important observations should be independently verified.&lt;/p&gt;

&lt;h3&gt;
  
  
  A Local Journal and Conditional Offline Support
&lt;/h3&gt;

&lt;p&gt;Saved discoveries are stored in IndexedDB, including the photograph and identification results.&lt;/p&gt;

&lt;p&gt;In production, a service worker caches application assets. The model is cached after loading, enabling subsequent offline identification.&lt;/p&gt;

&lt;p&gt;This is not &lt;strong&gt;offline immediately&lt;/strong&gt;. The application and model must first be loaded and cached. Clearing browser data or storage eviction can remove cached assets and saved discoveries.&lt;/p&gt;

&lt;h3&gt;
  
  
  Development with an AI Coding Assistant
&lt;/h3&gt;

&lt;p&gt;I used an AI coding assistant to help develop the project. The finished application runs a real open-weight classifier locally rather than using mocked predictions or a hosted AI API.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deploying on Vercel
&lt;/h2&gt;

&lt;p&gt;Because BirdLens AI runs in the browser, I deployed it on Vercel without building a backend.&lt;/p&gt;

&lt;p&gt;My deployment settings are:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Setting&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Framework preset&lt;/td&gt;
&lt;td&gt;Vite&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Build command&lt;/td&gt;
&lt;td&gt;&lt;code&gt;npm run model:download &amp;amp;&amp;amp; npm run build&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Output directory&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dist&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Install command&lt;/td&gt;
&lt;td&gt;&lt;code&gt;npm ci&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The model-download step is essential.&lt;/p&gt;

&lt;p&gt;The model weights are ignored by Git. During deployment, &lt;code&gt;npm run model:download&lt;/code&gt; retrieves a pinned model revision and verifies its checksum before saving it to &lt;code&gt;public/models/birds.onnx&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The build then includes that model in the deployment so the browser can load it for identification.&lt;/p&gt;

&lt;p&gt;No backend environment variables or AI API keys are required.&lt;/p&gt;

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

&lt;p&gt;For BirdLens AI, openness makes privacy, offline use, and model control practical.&lt;/p&gt;

&lt;p&gt;A hosted-only AI API would require sending photographs to a remote service and maintaining a connection for each identification. A redistributable model lets the user's browser perform that work locally.&lt;/p&gt;

&lt;p&gt;That makes several things possible.&lt;/p&gt;

&lt;h3&gt;
  
  
  Keep Image Inference on the Device
&lt;/h3&gt;

&lt;p&gt;Users do not need to upload their photographs to a third-party AI service to get a prediction.&lt;/p&gt;

&lt;h3&gt;
  
  
  Continue Without a Signal After Setup
&lt;/h3&gt;

&lt;p&gt;Once the necessary application assets and model are cached, identification can work without an internet connection.&lt;/p&gt;

&lt;p&gt;That is useful for a nature-focused application, where connectivity is not always available.&lt;/p&gt;

&lt;h3&gt;
  
  
  Avoid Per-Request AI Fees
&lt;/h3&gt;

&lt;p&gt;Local inference does not require paid API calls or credentials. Hosting and initial downloads still consume resources, but each identification does not depend on a billable inference request.&lt;/p&gt;

&lt;h3&gt;
  
  
  Inspect and Improve the Implementation
&lt;/h3&gt;

&lt;p&gt;Developers can review the labels, preprocessing, model revision, and output handling.&lt;/p&gt;

&lt;p&gt;They can also evaluate a different model and adapt the application without depending on a closed provider's inference endpoint.&lt;/p&gt;

&lt;p&gt;Open weights do not automatically make a model accurate. What they provide here is control over where inference happens and how the system can be inspected, tested, and changed.&lt;/p&gt;

&lt;p&gt;That is the kind of open innovation I wanted to build around: &lt;strong&gt;a small tool that helps people understand the world outside without making them dependent on a remote AI service.&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;I used an AI coding assistant during development, but I do not currently have a shareable DevRelay recording of the build session.&lt;/p&gt;

&lt;p&gt;I am sharing the implementation through the source repository instead.&lt;/p&gt;

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