Inspiration
Most of us walk past dozens of plants every day without realizing some of them are invasive species quietly displacing native ecosystems. At OregonHacks 2026's "Nature + Tech" track, we wanted to turn that everyday blindness into a game: snap a photo, learn what you're looking at, and help build a real picture of your region's biodiversity health, one catch at a time. We were inspired by Strava's ability to motivate people into consistent habits and Pokémon's game system, combining aspects of both to create an incentive to learn more about your local ecosystem.
What it does
Memoflora is a citizen-science progressive web app. Point your camera at a plant and get a real-time AI identification. Native species become "catches" you collect in your personal Catalogue; invasive species become "threat reports" that feed a regional biodiversity health score. Every submission (location, species, rarity) builds a live map of what's actually growing where, turning individual walks into collective ecological data.
How we built it
The frontend is React/Vite with react-leaflet for mapping, deployed on Vercel. The backend is Node/Express on Railway, backed by Supabase (Postgres + storage) for catches, users, and photos. Plant identification runs through the PlantNet API, cross-referenced against iNaturalist for species classification, conservation status, and rarity scoring. We designed the capture flow to be confidence-gated: identifications above 75% confidence auto-proceed. At the same time, lower-confidence results trigger a retry ladder with contextual tips and the best result tracked across attempts.
Challenges we ran into
PlantNet and iNaturalist use different taxon ID systems, so we had to build a fallback that matches species by scientific name via iNaturalist's /v1/taxa search rather than relying on a shared ID. Railway's backend isn't wired to auto-deploy from GitHub, which cost us time until we caught it. We also hit a region-detection bug in which the app defaulted to Oregon even when GPS coordinates indicated the user was elsewhere. And with the time limitations, we had to cut scope: limited game system development, no background geolocation, just a lightweight display-name approach and a simple "keep the app open 5 minutes" daily task. However, we look forward to adding such features in the future.
Accomplishments that we're proud of
We've shipped a fully working, visually polished app end-to-end, i.e., live capture, AI identification, a working leaderboard-ready backend, and a real Supabase-backed catalogue. The confidence-gated capture flow with its retry logic was a pretty nice piece of UX to get right under time pressure, and the app is architected to scale to the entire world, since both PlantNet and iNaturalist are global APIs.
What we learned
Integration seams are where hackathon time actually goes: reconciling two APIs' ID systems taught us to design for mismatches upfront rather than patch them later. Even though it was uncomfortable, we had to cut back on a lot of our original ambitions and aspirations. We've learned to navigate the constraints on creativity by real-time circumstances.
What's next for Memoflora
Next up: progressive milestone badges (1/5/10/25/50/75/100 catches, tracked separately for native finds and invasive reports), rare-plant goals driven by iNaturalist's conservation status and local observation counts, and daily streaks. Longer term, we want an Instagram-style expanded card view in the Catalogue with environmental context on each species and a more complete friends/social layer. We also want to lean more on the game system. We've discussed the concept of users being able to grow a "virtual plant" where they can spend points to feed the plant, add decorations, customizations, etc. Oro Valley (which one of our members lives in) has many high school-run gardening clubs, which we plan to collaborate with to test this product's actual viability.
AI Tool Assistance
We are using the following tools for coding assistance only: Claude Ai, ChatGPT, Gemini Code Assist.
Built With
- clerk
- express.js
- node.js
- react
- supabase
- vite
Log in or sign up for Devpost to join the conversation.