<?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: Pradeep</title>
    <description>The latest articles on DEV Community by Pradeep (@pradeepa_17).</description>
    <link>https://dev.to/pradeepa_17</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%2F1379098%2Fd0fa81d3-b4e5-4a60-acbc-9d6b612229ff.png</url>
      <title>DEV Community: Pradeep</title>
      <link>https://dev.to/pradeepa_17</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pradeepa_17"/>
    <language>en</language>
    <item>
      <title>Wildmon: Find More Outside</title>
      <dc:creator>Pradeep</dc:creator>
      <pubDate>Mon, 12 Oct 2026 06:04:18 +0000</pubDate>
      <link>https://dev.to/pradeepa_17/wildmon-find-more-outside-493a</link>
      <guid>https://dev.to/pradeepa_17/wildmon-find-more-outside-493a</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;For the Hacktoberfest Touch Grass challenge, I wanted to give people a reason to head outside, notice what is around them, and spend a little longer there. A photo can start that experience. Waiting for an AI response should not have to interrupt it.&lt;/p&gt;

&lt;p&gt;Wildmon turns those photos into a nature discovery game. You can collect your own findings, take on an ecosystem checklist, or challenge a friend to find the same targets before time runs out. Gemma handles identification in the background. When you come back, there are discoveries to open, progress to review, and rewards for what you found.&lt;/p&gt;

&lt;p&gt;Keeping the walk uninterrupted shaped both the interface and the architecture. The camera needs to be quick. The processing needs to survive a closed tab. The game needs to keep its own time.&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%2Fqdjn665altecrzlxuhlt.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%2Fqdjn665altecrzlxuhlt.png" alt="Wildmon landing page with the Touch grass. Look closer. headline and a prominent Start exploring button" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Wildmon: take a fresh photo, look closer, and explore with friends.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;There are two main ways to explore: &lt;strong&gt;Discovery mode&lt;/strong&gt; starts with something you noticed; &lt;strong&gt;Ecosystem mode&lt;/strong&gt; starts with something you want to find. Both feed into your collection and total XP.&lt;/p&gt;

&lt;h3&gt;
  
  
  Discovery mode: save what caught your eye
&lt;/h3&gt;

&lt;p&gt;A discovery can happen in the middle of an ordinary walk. Open quick capture, photograph one clear plant, bird, or insect, and submit it. There is no timer to start or checklist to commit to.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Take a picture&lt;/strong&gt;, submit your finding, and carry on exploring.&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%2Flklt9yzf6haimt7p40sk.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%2Flklt9yzf6haimt7p40sk.png" alt="Wildmon quick capture screen inviting the explorer to photograph one organism" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Capture comes first. The screen asks for one clear organism and keeps the interaction short.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Once the upload is accepted, identification continues in the background. A valid, supported result earns discovery XP. An ambiguous image shows &lt;strong&gt;Uncertain identification&lt;/strong&gt;, while a processing failure offers a retry. Those states give the user a clearer answer than leaving every unsuccessful photo at “processing.”&lt;/p&gt;

&lt;p&gt;Every discovery has a detail page in the collection, where you can revisit the photo, identification, category, and awarded XP. This papaya was one of my real test results:&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%2F6jwyyu4o42f4stv1rok5.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%2F6jwyyu4o42f4stv1rok5.png" alt="Papaya discovery with a callout explaining the timed-hunt focus bonus of up to 100 XP" width="799" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;A papaya discovery worth 10 XP, alongside the focus bonus available during timed hunts.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Put your phone away and earn a focus bonus.&lt;/strong&gt; During a timed hunt, take a photo, let Wildmon identify it, and spend time exploring with your phone tucked away. After at least one verified discovery, eligible time away from the app can earn &lt;strong&gt;25 XP for 5 minutes, 60 XP for 10 minutes, or 100 XP for 20 minutes&lt;/strong&gt;. This is an estimate of time away from Wildmon; the website cannot verify that the physical screen was off. The bonus belongs to timed hunts, while quick discoveries earn their usual discovery XP.&lt;/p&gt;

&lt;p&gt;A retry works on the same discovery, with protection against duplicate XP. &lt;/p&gt;

&lt;h3&gt;
  
  
  Ecosystem mode: give the walk a checklist
&lt;/h3&gt;

&lt;p&gt;An ecosystem is a timed solo challenge. Choose from &lt;strong&gt;Backyard Biodiversity, Urban Wildlife, Garden Life, Pollinator Path, or Birdwatch Trail&lt;/strong&gt;, set a duration from one hour to seven days, and start your attempt.&lt;/p&gt;

&lt;p&gt;For example, Urban Wildlife asks you to look for a tree, bird, plant, insect, and flowering plant. The checklist turns “go for a walk” into a set of things to notice.&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%2Fkmdgszguqohlhb45paei.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%2Fkmdgszguqohlhb45paei.png" alt="Urban Wildlife ecosystem setup showing five checklist targets, a 24-hour duration, and the Start ecosystem button" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Urban Wildlife before starting. The duration and checklist belong to a new timed attempt; earlier pack history stays separate.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Only new discoveries submitted through that ecosystem's capture flow count toward the attempt. Old photos from your collection cannot fill the checklist, and each verified photo fills at most one spot. Ecosystem discoveries also appear in the collection with an ecosystem tag.&lt;/p&gt;

&lt;p&gt;You can finish early, or let the server deadline end the challenge automatically. Already accepted photos get a short verification grace period before the result becomes &lt;strong&gt;Completed&lt;/strong&gt;, &lt;strong&gt;Partially completed&lt;/strong&gt;, or &lt;strong&gt;Couldn't complete&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Completion adds a milestone bonus to total XP, once per attempt:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Progress when the attempt settles&lt;/th&gt;
&lt;th&gt;Ecosystem bonus&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;No matched targets&lt;/td&gt;
&lt;td&gt;0 XP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Some progress, below half&lt;/td&gt;
&lt;td&gt;50 XP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;At least half, below full completion&lt;/td&gt;
&lt;td&gt;150 XP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Every checklist spot&lt;/td&gt;
&lt;td&gt;300 XP&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This gives ecosystems a beginning and an ending. You choose the outing, make progress with new observations, and receive a result based on what you actually submitted.&lt;/p&gt;

&lt;h3&gt;
  
  
  Friends: take the same challenge outside
&lt;/h3&gt;

&lt;p&gt;Add a friend, send a challenge invitation, and choose a shared target list. Targets can be supported species, broader categories such as a bird or plant, or visual traits such as a yellow flower.&lt;/p&gt;

&lt;p&gt;Once the invitation is accepted, both players mark themselves &lt;strong&gt;Ready&lt;/strong&gt; before the clock starts. The backend creates one shared start time and deadline, so neither player gets a head start from opening the page first.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Invite a friend → Accept → Both tap Ready
                               │
                       Shared clock starts
                               │
                 Each player photographs targets
                               │
                Both finish, or the deadline arrives
                               │
                 Worker verifies → Winner or draw
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2F5cv35tsaih3kx3ydxvnz.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%2F5cv35tsaih3kx3ydxvnz.png" alt="An active Wildmon friend challenge with plant, bird, and yellow-flower targets, a shared countdown, and Capture target and Done for now buttons" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;A real two-account challenge after both players marked Ready. The recorded accounts had matching server start and deadline timestamps.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Each participant photographs their own targets and taps &lt;strong&gt;Done for now&lt;/strong&gt; when finished. The worker settles the result after both finish or the deadline arrives, allowing identification to complete in the background. The shared clock gives the competition a clear boundary without requiring either player to keep watching it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Leaderboards and badges: reasons to come back
&lt;/h3&gt;

&lt;p&gt;For competition beyond a single walk, the leaderboard has &lt;strong&gt;Global&lt;/strong&gt; and &lt;strong&gt;Friends&lt;/strong&gt; views, with weekly and all-time rankings. Global participation is opt-in, and the friends view uses accepted friendships.&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%2Fx0ww4c7m7vagv6fue077.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%2Fx0ww4c7m7vagv6fue077.png" alt="Wildmon global weekly leaderboard showing the Global and Friends scope tabs and weekly and all-time period tabs" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The global weekly view. These are development accounts.&lt;/em&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%2F1606x0ejpbyx8w1lwygi.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%2F1606x0ejpbyx8w1lwygi.png" alt="Wildmon friends weekly leaderboard showing two connected development accounts" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The same ranking system scoped to a friend circle.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Badges mark the smaller achievements along the way: your first discovery, category collections, challenge wins, and ecosystem progress. They give a new explorer something achievable to work toward before a leaderboard position matters.&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%2Fsie30dh3lmfeftbxzwrj.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%2Fsie30dh3lmfeftbxzwrj.png" alt="Wildmon badges screen with First Discovery earned and future milestones still locked" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;First Discovery is earned here; the remaining badges show goals to work toward.&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/eyGy4yaowKo" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;The walkthrough follows the discovery flow, ecosystem setup, friend challenge, leaderboards, and badges.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wildmon is live at:&lt;/strong&gt; &lt;a href="https://wildmon.vercel.app/" rel="noopener noreferrer"&gt;wildmon.vercel.app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To try it, create an account and take one clear photo of a plant, bird, or insect. Start with a discovery; &lt;strong&gt;choose an ecosystem when you want a checklist for your next outing&lt;/strong&gt;.&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/pradeept/wildmon" rel="noopener noreferrer"&gt;github.com/pradeept/wildmon&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The project contains the Next.js frontend, FastAPI backend, independent worker, seed/index scripts, and an identification evaluation harness. The latest recorded checks include &lt;strong&gt;38 passing API tests&lt;/strong&gt; and a passing frontend production build. The README covers local setup and deployment; credentials stay in environment variables.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Keep the camera fast; let the worker handle the wait
&lt;/h3&gt;

&lt;p&gt;The backend had to support the promise in the interface: submit the photo and carry on. I separated accepting a discovery from identifying it, with a durable MongoDB job between the API and the worker.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Phone browser · Next.js on Vercel
  │
  ├── Request signed upload ───────────► FastAPI on Render
  ├── Upload photo ────────────────────► Private object storage
  └── Submit discovery ────────────────► FastAPI
                                           │
                                    MongoDB Atlas
                                    Discovery + queued job
                                           │
                                Python worker on Render
                                           │
                                    Prepare the image
                                           │
                                Gemma 4 · Google AI Studio
                                  │                 │
                                Success       Request failure
                                  │                 ▼
                                  │        Backboard · same Gemma model
                                  │                 │
                                  └────────┬────────┘
                                           ▼
                                Pydantic output validation
                                           │
                                Supported-target matching
                                           │
                                Save result + once-only XP
                                           │
                                User returns to their discovery
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Next.js, Tailwind CSS, and Radix UI&lt;/strong&gt; handle the interface, with Geist typography, deep greens, and warm coral accents. The camera is easy to reach, and the navigation follows the main activities: explore, take an ecosystem challenge, revisit the collection, or meet friends. Leaderboards and badges sit together under Rewards.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;FastAPI and Pydantic&lt;/strong&gt; handle authentication, input validation, discovery state, and game rules. &lt;strong&gt;MongoDB Atlas&lt;/strong&gt; stores the records, friendships, attempts, leased jobs, and XP ledger. The images live in private object storage, with signed uploads from the browser.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Python worker on Render&lt;/strong&gt; claims jobs, fetches and prepares images, calls Gemma, and saves results. It also finalizes expired activities and reconciles rewards independently of the browser. LangChain composes the prompt and inference call; Pydantic checks the structured answer before it reaches the game rules.&lt;/p&gt;

&lt;p&gt;Running the API and worker as separate services matters here. The API can acknowledge a discovery while inference takes its time, and a challenge can expire even after both players have closed their tabs.&lt;/p&gt;

&lt;p&gt;Large phone photos get special attention. Browser uploads target 2 MB, and the worker independently bounds the image sent to the model. That reduces payload and processing overhead. I have not established image size as the cause of the Google errors described below.&lt;/p&gt;

&lt;h3&gt;
  
  
  Backboard came to the rescue when Gemma requests kept failing
&lt;/h3&gt;

&lt;p&gt;A frustrating blocker was right in the middle of Wildmon's core experience: identifying the photo someone had gone outside to take.&lt;/p&gt;

&lt;p&gt;Google AI Studio accepted my key. The configured &lt;strong&gt;Gemma 4 31B&lt;/strong&gt; model appeared in the model list, and a text-generation test worked. But image requests repeatedly failed with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Gemma HTTP 500 INTERNAL: Internal error encountered.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A discovery could make it through capture and upload, only to fail at the step that gave it meaning. That affected the collection, ecosystem progress, and friend challenges—all of them depend on getting an identification back.&lt;/p&gt;

&lt;p&gt;I checked the stages separately: credentials, model access, text generation, and image generation. I allowed more time for slow responses and added retries. The key worked, but image requests still hit server errors. The response did not tell me whether a quota was involved, and another retry could end in the same place.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Backboard came to the rescue.&lt;/strong&gt; I added it as a fallback after a failed Google request, keeping the &lt;strong&gt;same Gemma model, image, and prompt&lt;/strong&gt;. The worker could now try another route and receive a response instead of repeatedly stopping at Google's &lt;code&gt;500&lt;/code&gt; error.&lt;/p&gt;

&lt;h3&gt;
  
  
  Retries must not become extra rewards
&lt;/h3&gt;

&lt;p&gt;Once users could retry failed discoveries, “award XP after identification” needed a precise boundary. The same job can run again, and two worker attempts can overlap around a lease expiry.&lt;/p&gt;

&lt;p&gt;The reward ledger uses a unique discovery source key, and retrying transitions the existing job instead of creating another discovery. Ecosystem milestone rewards also have a once-only key. These safeguards matter because the collection, badges, and leaderboard all depend on the integrity of that score.&lt;/p&gt;

&lt;p&gt;The same principle applies to matching: a model proposes an identification, then ordinary server code checks eligibility and assigns each photo to at most one target. The model does not set XP, start a timer, or choose a challenge winner.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Testing Changed
&lt;/h3&gt;

&lt;p&gt;While building, I tried to make testing convenient: drawings, then pictures displayed on my laptop screen. Gemma identified I'm not clicking real living organisms and complained! Eventually, I went outside and took actual photos.&lt;/p&gt;

&lt;p&gt;The papaya and Golden Pothos findings made it through identification, into the collection, and into the XP total. Testing had made me do the thing I was building the app to encourage.&lt;/p&gt;

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

&lt;p&gt;Open innovation made it possible for me to build Wildmon around an idea I cared about: helping people spend more time outside and notice the life around them. Having access to Gemma meant I could explore that idea without having to build an image-identification model myself.&lt;/p&gt;

&lt;p&gt;Nature also makes this a project worth opening up. The plants and birds around my home will be different from those around someone else's. Other people could contribute local knowledge, suggest ecosystem challenges for their region, or point out a finding Wildmon got wrong. Those contributions could make the experience more useful in places I have never visited.&lt;/p&gt;

&lt;p&gt;By sharing Wildmon's source, I hope to give others a starting point for their own outdoor experiences—a nature activity for a classroom, a challenge for a walking group, or a way to explore a neighbourhood with friends. Someone should be able to take what I built, improve it, and make it meaningful where they live.&lt;/p&gt;

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

&lt;p&gt;Wildmon uses &lt;strong&gt;Gemma&lt;/strong&gt; for image interpretation, &lt;strong&gt;Backboard&lt;/strong&gt; for fallback inference, &lt;strong&gt;MongoDB Atlas&lt;/strong&gt; for durable records and jobs, and &lt;strong&gt;Render&lt;/strong&gt; for the deployed API and worker. &lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>gemma</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Noteesta: A Study Pal I Built for My Two Little Sisters</title>
      <dc:creator>Pradeep</dc:creator>
      <pubDate>Mon, 05 Oct 2026 06:22:05 +0000</pubDate>
      <link>https://dev.to/pradeepa_17/noteesta-a-study-pal-i-built-for-my-two-little-sisters-1ij0</link>
      <guid>https://dev.to/pradeepa_17/noteesta-a-study-pal-i-built-for-my-two-little-sisters-1ij0</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-weekend-2026-10-01"&gt;Hacktoberfest Weekend Challenge: Build for a Friend&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;My two little sisters are studying for their Bachelor of Science degrees. Preparing for exams means juggling YouTube videos, handwritten notes, and references from their teachers. Before they can even start revising, they have to bring all those materials together.&lt;/p&gt;

&lt;p&gt;I wanted to make that part easier for them. So I built &lt;strong&gt;Noteesta&lt;/strong&gt;, a study pal that turns different learning materials into a &lt;strong&gt;Study Pill 💊&lt;/strong&gt;: organized notes with optional tools for revision and practice.&lt;/p&gt;

&lt;p&gt;Students can add PDFs, Word documents, presentations, images of handwritten notes, recorded lectures, or YouTube links with accessible captions. They can then choose flashcards, multiple-choice questions, true/false questions, and a study roadmap alongside their notes.&lt;/p&gt;

&lt;p&gt;Each Pill can be tailored to their exam date, available study hours, preferred level of detail, and learning level. Collections and tags help organize subjects, while reading preferences and Focus mode make longer notes easier to read.&lt;/p&gt;

&lt;p&gt;There is also a &lt;strong&gt;“Got a doubt? 🤔”&lt;/strong&gt; chat for questions about the selected Pill. Answers use retrieved source material, and the system is instructed to acknowledge when the evidence is insufficient. Notes carry source references, can include supporting visuals, and can be exported with their assets.&lt;/p&gt;

&lt;p&gt;Processing happens in the background, so students can leave the page and return later. While they wait, a rotating Wikipedia fact card gives them something new to explore—mostly science and basic mathematics.&lt;/p&gt;

&lt;h3&gt;
  
  
  The first test: my sisters' own materials
&lt;/h3&gt;

&lt;p&gt;I asked my sisters to send me some references they were already using. They sent a Word document and photos of handwritten notes, which I processed locally with Noteesta.&lt;/p&gt;

&lt;p&gt;Then I sent them the resulting notes and asked whether they could follow them. Their response was: &lt;strong&gt;“This is perfect. This is much better.”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That was the most rewarding part of the weekend. They have seen the notes, but I haven't told them yet that I built an app for them! 😁 They also haven't discovered the flashcards, MCQs, roadmap, or true/false questions. That part is still a surprise.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;[Add a video demo or deployed app link here before publishing.]&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/_2Bphk7JLCk" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://github.com/pradeept/noteesta" rel="noopener noreferrer"&gt;View Noteesta on GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The repository includes setup instructions, separate frontend and backend environment examples, the system architecture, and Promptfoo evaluation suites.&lt;/p&gt;

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

&lt;p&gt;Noteesta has a Next.js frontend and a FastAPI backend. Celery workers handle the longer processing jobs, with Redis as the task broker. The frontend polls for progress so the student can see which stage their Pill has reached.&lt;/p&gt;

&lt;p&gt;The AI workflow is built around open-weight models and open-source tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Docling with RapidOCR&lt;/strong&gt; extracts structured content from documents and images. I configured Docling to use the CPU for this version. LangChain splits the extracted text into chunks for indexing and retrieval.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;faster-whisper with Whisper small&lt;/strong&gt; transcribes audio from recordings. It provides a relatively lightweight transcription option without sending recordings to a paid speech API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;yt-dlp&lt;/strong&gt; retrieves accessible YouTube captions and preserves timestamps. Caption availability is a limitation: a link alone does not guarantee that a video can be processed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Qwen3-VL-8B-Instruct through Ollama&lt;/strong&gt; runs locally to synthesize notes, create the selected practice materials, and answer source-grounded questions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;nomic-embed-text through Ollama&lt;/strong&gt; generates embeddings. &lt;strong&gt;MongoDB Atlas Vector Search&lt;/strong&gt;, accessed through LangChain, retrieves relevant chunks for chat. Retrieval is filtered by the user and selected Pill.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SeaweedFS&lt;/strong&gt; provides S3-compatible storage for original files and generated artifacts in the local setup.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One design choice matters here: generating the notes processes the extracted source sections; it does not depend only on the handful of chunks retrieved for a chat question. Retrieval serves focused questions, while the note-generation workflow aims for broader source coverage.&lt;/p&gt;

&lt;p&gt;I also added &lt;strong&gt;Promptfoo evaluations&lt;/strong&gt; for section extraction, note synthesis, practice materials, visual specifications, and grounded chat. These use the same prompt files as the backend. For example, the materials suite checks for at least two MCQs from concise notes and five distinct questions from fuller notes, with evidence supporting the answers.&lt;/p&gt;

&lt;p&gt;Building this reminded me that a model response still needs validation. Structured output can be incomplete, and a successful generation call does not necessarily mean the study material is ready to use.&lt;/p&gt;

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

&lt;p&gt;Study materials can add up quickly: a lecture recording, several documents, photos of handwritten notes, and follow-up questions. With local inference, each new source or question does not create another usage charge from a hosted LLM API. Processing still costs time, electricity, and hardware resources, but I can experiment without a per-token bill growing alongside the reading list.&lt;/p&gt;

&lt;p&gt;It also gives me more control over where the model runs. Text generation, embeddings, OCR, and transcription happen locally in this setup. &lt;strong&gt;Noteesta is not entirely offline or entirely local&lt;/strong&gt;, though: MongoDB Atlas stores metadata and searchable source chunks remotely, and YouTube captions and Wikipedia facts require network access.&lt;/p&gt;

&lt;p&gt;Open models and frameworks also let me change the system as my sisters' needs become clearer. I can adjust prompts, test different models, inspect the retrieval workflow, and rerun evaluations. Their feedback can guide those changes without tying the app to one hosted model provider.&lt;/p&gt;

&lt;p&gt;For me, that is the practical value of open innovation: the ability to build a useful tool, understand how it works, and keep improving it for the people I built it for.&lt;/p&gt;

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

&lt;p&gt;This writeup was edited with AI assistance from my own notes.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of MongoDB Atlas:&lt;/strong&gt; Noteesta uses Atlas for application data and Atlas Vector Search for retrieving source chunks through LangChain. Those retrieved chunks provide the evidence for questions about a selected Study Pill.&lt;/li&gt;
&lt;/ul&gt;

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