DEV Community

Cover image for WildWise: An Open-Model Field Guide That Wants You Off Your Screen
Pranjal Saraswat
Pranjal Saraswat

Posted on

WildWise: An Open-Model Field Guide That Wants You Off Your Screen

This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass.

What I Built

WildWise is a nature exploration app that sends you outside. You choose where you are, how long you have and what you're curious about. It gives you a short quest of observation-only challenges, such as "Watch two birds in flight. Does one glide while the other flaps in quick bursts?" Then you put the phone away. Afterwards, you write down what you noticed and ask an open-weight AI model to explain it.

The screen is meant to be the shortest part of the experience.

Features

  • Quest generator. Pick an environment (Garden, Park, Forest or Anywhere Outdoors), a duration (10, 20 or 30 minutes), your interests (Plants, Birds, Insects, Textures or General Discovery) and a difficulty (Beginner or Curious Explorer).
  • Offline mode. Turn it on and the app loads a curated quest from bundled data, with no network request at all. It works in a park with no signal and with the backend down. If online generation fails or is slow, the app falls back to a bundled quest instead of showing an error.
  • Observation field. Write what you noticed, felt or discovered for each challenge, and mark challenges as completed.
  • Ask AI. Online only. It explains your observation in six parts: what it might be, why it looks or behaves that way, real-world uses, a practical tip, what to explore next, and what is known versus uncertain. It never claims a certain species ID from text alone.
  • Field journal. Save an answer to your journal. Your journal is kept in your browser's storage and is never uploaded.
  • Safety rules. Quests are observation-only: no tasting, smelling or touching unfamiliar plants or animals, and no entering restricted areas.

Demo

Try it: https://wildwise-1.onrender.com

Heads-up: the backend runs on Render's free plan, so after a quiet period the first online request can take up to a minute while it wakes up. Offline mode works immediately.


Code

https://github.com/panjo-labs/WildWise

How I Built It

  • Model: NVIDIA Nemotron 3.5 Lightning (nvidia/nemotron-3.5-lightning:free), an open-weight model, called through OpenRouter's free tier. I did not self-host it.
  • Backend: FastAPI (Python) with Pydantic validating every request and every model response. The backend holds the API key, builds the prompts, rate-limits requests and checks the model's output.
  • Frontend: React and Vite.
  • Hosting: Render. The FastAPI backend runs as a Render Web Service and the React app as a Render Static Site.
  • Tests: 48 backend tests with the model mocked, so none need the network or a key.

The bug that taught me the most. Ask AI first failed with a vague "invalid explanation" message. I added logging that records a reason for each failure without logging keys or user text. It showed finish_reason=length: Nemotron is a reasoning model, so it was spending its whole token budget thinking and never finished the JSON. A higher limit and shorter-answer prompts didn't fix it. Turning reasoning off in the request did.

After the fix, in my own runs:

  • Ask AI answered in about 5 to 8 seconds.
  • Quest generation dropped from about 99 seconds to about 7 to 9 seconds once I also asked for exactly three short challenges.

These come from a couple of runs each, and a free model's speed varies with load.

Other choices:

  • Strict validation: the model must return exactly six string fields, or the user gets a retry message. I never fill in missing fields.
  • Untrusted input: observation text goes into the prompt as data, with an instruction to ignore any instructions inside it.
  • Rate limiting: Ask AI has a per-IP limit, so one visitor can't drain the free model.

Shortcomings

  1. Cold starts. On Render's free plan, the backend sleeps when idle and takes up to a minute to wake. The first AI quest may fall back to an offline one, and the first Ask AI click may fail until it's awake.
  2. Free-model limits. The model's speed varies, and OpenRouter's free endpoint logs prompts, so please don't enter personal details in observations. Self-hosting the model would remove the privacy concern, and that's my next step.

Taking It Outside

I tested the "Flight Pattern Observation" quest and wrote the observation "the pigeon is flapping its wings." Ask AI replied that it was likely a common city bird, explained why pigeons flap in quick bursts near buildings, and suggested I compare wing shape to tell flapping from soaring birds.

Why Does Open Innovation Matter?

I built this as a student project with no budget. A free open-weight model let me add a real AI feature, and an open-source stack (FastAPI, React, Pydantic) let me read, test and debug every layer. The reasoning-token problem was easy to diagnose because I could inspect the request, its parameters and the model's behaviour.

Open weights don't automatically mean private, though. The free hosted endpoint logs prompts, which is why I warn users about it and why self-hosting is on my list. I think that honesty is part of the point of open innovation.

Prize Categories

Best Use of Render (#render). Render runs the whole deployed app: the FastAPI backend as a Web Service, where the AI calls are made, the key is kept and the output is validated, and the React frontend as a Static Site.

Built for the #hacktoberfest Open-Source AI Challenge Week 1: Touch Grass 🌱

Now close this tab and go look at something growing outside. WildWise can wait.

Top comments (0)

Some comments may only be visible to logged-in visitors. Sign in to view all comments.