Inspiration
We wanted ordinary objects in nature to feel like a treasure hunt, so trails and hikes feel rewarding, every step of the way, not just the destination.
What it does
We built a program that can generate unique shapes of sticks, leaves, and rocks, which then you can choose a challenge for whatever's available, or if you're feeling like it, randomize between all 3 types! If you don't want to find the shape it gives you, you can reroll! The better the accuracy, the more XP that is rewarded to the user, which then can be compared on a leaderboard. Careful not to get demoted! Get more XP to upgrade to higher leagues with more competitive players. There's also a daily streak system to reward consistency. To keep accounts secure, we also have a quick and intuitive login system.
How we built it
- Frontend: Vanilla HTML/CSS/JS, no framework — kept dependency-free and fast. UI designed in Google Stitch, then hand-integrated (Tailwind CSS via CDN, Material Symbols icons).
- 3D shape rendering: Three.js, procedurally generating each target shape (stick/rock/leaf) from a seeded RNG — infinite variety, never the same shape twice, so nothing can be "gamed" with a saved photo.
- Shape verification: OpenCV.js running in a Web Worker (off the main thread) — extracts the contour from the user's photo and compares it to the target outline via Hu-moment shape matching. Fully client-side, free.
- AI double-check: Google Gemini API (
gemini-3.5-flash) as a second-opinion layer — only called after OpenCV already thinks it's a match, to confirm the photo shows a real object and not a screenshot/stock photo. Runs through a Vercel serverless function so the API key stays server-side. - Backend: Vercel serverless functions (Node) for auth (signup/login,
scryptpassword hashing, bearer tokens), XP/streak calculation, and league standings. - Database: Redis (Vercel/Upstash) — sorted sets for leaderboards, hashes for user records.
- Gamification: XP scaled to match closeness (not just pass/fail), daily streaks, Duolingo-style weekly leagues (Bronze → Diamond) with automatic promotion/demotion.
- Hosting: Deployed on Vercel, fully serverless.
Challenges we ran into
Our first AI model (OpenCV) was too weak and our second AI (Gemini API) was too expensive, so we combined the benefits of both to create a working version of Niche Nature.
Accomplishments that we're proud of
We are proud that we made something as boring as sticks and rocks into a competitive and gamified environment, which motivates people to go outside.
What we learned
Anything can be fun if you know how to work with it!
What's next for NicheNature
If we get better servers, we may add cloud recognition for more variety!
Log in or sign up for Devpost to join the conversation.