<?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: VRUSHALI AOUNDHAKAR</title>
    <description>The latest articles on DEV Community by VRUSHALI AOUNDHAKAR (@vrushali_aoundhakar_b443c).</description>
    <link>https://dev.to/vrushali_aoundhakar_b443c</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%2F4165525%2F902786f4-e470-4bc6-87f3-21419e87680d.png</url>
      <title>DEV Community: VRUSHALI AOUNDHAKAR</title>
      <link>https://dev.to/vrushali_aoundhakar_b443c</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vrushali_aoundhakar_b443c"/>
    <language>en</language>
    <item>
      <title>🌿 WildSense: An Offline AI Nature Companion</title>
      <dc:creator>VRUSHALI AOUNDHAKAR</dc:creator>
      <pubDate>Sun, 11 Oct 2026 16:16:35 +0000</pubDate>
      <link>https://dev.to/vrushali_aoundhakar_b443c/wildsense-an-offline-ai-nature-companion-4kmp</link>
      <guid>https://dev.to/vrushali_aoundhakar_b443c/wildsense-an-offline-ai-nature-companion-4kmp</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;WildSense is a private, mobile-friendly companion for noticing more on everyday walks. It pairs small, locally curated nature quests with an optional in-browser image classifier and a field journal that stays on the user's device.&lt;/p&gt;

&lt;p&gt;The idea is to make technology a gentle nudge toward the outdoors—not another reason to stay on a screen. A person can follow a short prompt, take a digital-detox walk, record an observation, or use a photo to explore what they saw.&lt;/p&gt;

&lt;p&gt;The quests do not depend on AI or an internet connection. They are written to be approachable in ordinary places such as a garden, park, forest, or lakeside, and encourage observing without disturbing living things.&lt;/p&gt;

&lt;h2&gt;
  
  
  Screenshots
&lt;/h2&gt;

&lt;p&gt;These are captures of the running application. The filenames are retained from the original screenshots.&lt;/p&gt;

&lt;h3&gt;
  
  
  Home and daily nature prompt
&lt;/h3&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%2F5q70asa1r62bk84pfzln.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%2F5q70asa1r62bk84pfzln.png" alt="WildSense home screen with the daily nature prompt" width="799" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Short nature quests
&lt;/h3&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%2Fcypxfi5hod1fklf8ah19.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%2Fcypxfi5hod1fklf8ah19.png" alt="WildSense quest list with guided observation steps" width="800" height="378"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Choose a photo for on-device identification
&lt;/h3&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%2Feqo5zrjtpfihvbt65uyy.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%2Feqo5zrjtpfihvbt65uyy.png" alt="WildSense on-device photo identification  " width="800" height="387"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Image-classifier results
&lt;/h3&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%2F65oiosueoe98n5bclzur.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%2F65oiosueoe98n5bclzur.png" alt="WildSense local image-classifier predictions and field-note controls" width="800" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Built for Real-World Walks
&lt;/h2&gt;

&lt;p&gt;WildSense includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A rotating daily nature quest and a collection of short, optional activities.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Touch Grass Mode:&lt;/strong&gt; ten curated missions with simple instructions, a closer-look prompt, and an optional field note.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Digital Detox Walks:&lt;/strong&gt; 5-, 10-, and 20-minute timers with pause/resume and an optional reflection after completion.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nature Passport:&lt;/strong&gt; locally calculated activity totals, milestones, streaks, and a chronological record of discoveries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Weekly Nature Wrapped:&lt;/strong&gt; a recap calculated from activity saved during the current local calendar week.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Identify:&lt;/strong&gt; a user-selected photo is classified in the browser, with the top predictions available to save in the journal.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The app avoids accounts, location permissions, analytics, and hosted inference. A first-time image-model download does require an internet connection; the curated quests and previously saved local records do not.&lt;/p&gt;

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

&lt;p&gt;Live application: &lt;a href="https://wildsense-1.onrender.com/" rel="noopener noreferrer"&gt;https://wildsense-1.onrender.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Try exploring a nature quest, completing an outdoor activity, and recording your discoveries in the nature journal.&lt;/p&gt;

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

&lt;p&gt;GitHub repository: &lt;a href="https://github.com/Vrushali1977/WildSense" rel="noopener noreferrer"&gt;https://github.com/Vrushali1977/WildSense&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The repository contains the React and TypeScript frontend, browser-based image classification using Transformers.js, IndexedDB storage, nature quests, and PWA configuration.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Technology
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;UI:&lt;/strong&gt; React, TypeScript, and Vite.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Image classification:&lt;/strong&gt; Transformers.js with &lt;code&gt;Xenova/vit-base-patch16-224&lt;/code&gt;, using ONNX Runtime WebAssembly and 8-bit quantized weights.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local persistence:&lt;/strong&gt; IndexedDB for journal entries, selected image blobs, quest progress, mission rewards, and completed walks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Install/offline support:&lt;/strong&gt; a Vite PWA service worker precaches the app shell and uses a narrowly scoped runtime cache for successful model-file responses.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tests:&lt;/strong&gt; Vitest tests for classifier response handling, IndexedDB operations, quests, and gamification calculations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is no generative-AI quest pipeline or backend. Quest and mission content is curated in the app; deterministic client-side code rotates daily prompts and calculates progress. The AI feature is a general image classifier, not a nature-specific species identifier.&lt;/p&gt;

&lt;h3&gt;
  
  
  System Architecture
&lt;/h3&gt;



&lt;pre data-lang="mermaid"&gt;&lt;code&gt;flowchart LR
    Person[Person outdoors] --&amp;gt; UI[WildSense React app]

    subgraph Browser[User's browser]
        UI --&amp;gt; Content[Curated quests and missions]
        UI --&amp;gt; Walks[Walk timer and reflections]
        UI --&amp;gt; Journal[Journal and Nature Passport]
        Content --&amp;gt; Rules[Local date and progress calculations]
        Walks --&amp;gt; Rules
        Rules --&amp;gt; DB[(IndexedDB)]
        Journal --&amp;gt; DB

        UI --&amp;gt; Image[Selected image]
        Image --&amp;gt; Classifier[Transformers.js classifier]
        Classifier --&amp;gt; WASM[ONNX Runtime WebAssembly]
        WASM --&amp;gt; Predictions[Ranked label predictions]
        Predictions --&amp;gt; Journal

        SW[Service worker] --&amp;gt; Shell[Cached app shell]
        SW --&amp;gt; ModelCache[Scoped model-asset cache]
    end

    ModelHost[Hugging Face model files] --&amp;gt; Classifier
    ModelHost --&amp;gt; ModelCache&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;The selected photo and inference stay in the browser. On the first identification, the browser downloads the model assets from Hugging Face; successful model responses may be cached by the service worker. The app does not send the photo to a hosted inference API.&lt;/p&gt;

&lt;h3&gt;
  
  
  Image-Identification Flow
&lt;/h3&gt;



&lt;pre data-lang="mermaid"&gt;&lt;code&gt;sequenceDiagram
    actor User
    participant App as WildSense UI
    participant Classifier as Transformers.js
    participant Host as Hugging Face model host
    participant WASM as ONNX Runtime WebAssembly
    participant DB as IndexedDB

    User-&amp;gt;&amp;gt;App: Choose or capture an image
    App-&amp;gt;&amp;gt;App: Validate image and show preview
    User-&amp;gt;&amp;gt;App: Start identification
    App-&amp;gt;&amp;gt;Classifier: Classify selected image
    opt Model not already loaded or cached
        Classifier-&amp;gt;&amp;gt;Host: Fetch model/config assets
        Host--&amp;gt;&amp;gt;Classifier: Model assets
    end
    Classifier-&amp;gt;&amp;gt;WASM: Run image classification locally
    WASM--&amp;gt;&amp;gt;Classifier: Ranked predictions
    Classifier--&amp;gt;&amp;gt;App: Top predictions
    opt User saves the result
        App-&amp;gt;&amp;gt;DB: Store prediction, image, date, and notes
        DB--&amp;gt;&amp;gt;App: Save confirmation
    end&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;Predictions are ranked matches from a general ImageNet classifier. Their scores are not verified species identities or calibrated certainty; important observations should be checked against reliable references.&lt;/p&gt;

&lt;h3&gt;
  
  
  Local Activity and Storage
&lt;/h3&gt;



&lt;pre data-lang="mermaid"&gt;&lt;code&gt;flowchart TD
    Missions[Curated daily missions] --&amp;gt; Completion[Complete a mission]
    Walk[Finish a detox walk] --&amp;gt; Completion
    Photo[Save classifier result] --&amp;gt; Journal[Local field journal]
    Note[Save an observation] --&amp;gt; Journal
    Completion --&amp;gt; IndexedDB[(Browser IndexedDB)]
    Journal --&amp;gt; IndexedDB
    IndexedDB --&amp;gt; Stats[XP, streaks, badges, and weekly recap]
    Stats --&amp;gt; Passport[Nature Passport]&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;Rewards and recaps are calculated from local records. Mission rewards are keyed to the local date, and walk rewards are recorded only after a timer completes. The data is not synchronized to a server and may be removed if browser storage is cleared or evicted.&lt;/p&gt;

&lt;h3&gt;
  
  
  Offline and Privacy Boundaries
&lt;/h3&gt;



&lt;pre data-lang="mermaid"&gt;&lt;code&gt;flowchart LR
    subgraph Device[On the device]
        App[App shell]
        Quests[Curated quests]
        Records[Journal and progress]
        Inference[Image inference]
        CachedModel[Previously cached model assets]
    end
    subgraph Network[Network, when needed]
        Host[Hugging Face model repository]
    end

    App --&amp;gt; Quests
    App --&amp;gt; Records
    App --&amp;gt; Inference
    Inference -. First download or missing asset .-&amp;gt; Host
    Host -. Successful model responses may be cached .-&amp;gt; CachedModel
    CachedModel --&amp;gt; Inference&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;Quest content and saved records are local. A first model download needs a connection, and future offline inference depends on the browser retaining the required cached files. Offline model availability is not guaranteed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Safety and Limitations
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Missions invite observation without picking plants, disturbing wildlife, or leaving safe paths.&lt;/li&gt;
&lt;li&gt;No location permission is needed; environments are selected manually when relevant.&lt;/li&gt;
&lt;li&gt;The classifier is general-purpose and may return misleading labels, especially for local species. Its output is exploratory, not expert identification.&lt;/li&gt;
&lt;li&gt;Model assets can be large, and inference depends on browser support, available memory, and storage quotas.&lt;/li&gt;
&lt;li&gt;Clearing browser data may remove the journal, progress, and cached model files.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Open Innovation Matters
&lt;/h2&gt;

&lt;p&gt;WildSense uses a browser-compatible model and open web tooling to make experimentation inspectable and keep inference on the user's device. It also keeps the core outdoor experience independent of the model: the curated prompts, walk timer, journal, and progress calculations continue to work without AI.&lt;/p&gt;

&lt;p&gt;That separation is intentional. AI can offer a starting point for curiosity, while transparent limitations and local-first design keep it from being treated as an authority—or a requirement—for spending time outside.&lt;/p&gt;




&lt;p&gt;WildSense is an invitation to put the phone away for a little while, notice one small thing, and keep only the memory you choose to record.&lt;/p&gt;

&lt;p&gt;🌱 &lt;strong&gt;Notice more. Scroll a little less.&lt;/strong&gt;&lt;/p&gt;

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