Inspiration
California grows a third of the country's vegetables and two-thirds of its fruits and nuts, and every grower navigates the same fragmented decision when a pest shows up: figure out what it is, what to spray, whether to spray at all, and whether spraying will hurt the beekeeper or organic farm next door. That workflow is split across a Pest Control Advisor, the UC IPM website, the county Ag Commissioner, and a glance at the morning's wind forecast. We wanted to compress it into one screen — with every claim traceable to a real source.
What it does
AgriGuard is a pest identification and treatment tool for California growers. Pick your crop, upload a pest photo, and the app:
- Identifies the pest using a specialized insect vision API
- Surfaces two treatment paths — biological and chemical — pulled from UC IPM with citation links and IRAC group classifications
- Generates pros/cons specific to the pest-crop pairing, factoring in pollinator risk, resistance, and drift sensitivity
- Maps local pest pressure as a heatmap of nearby sightings, scoring it HIGH/MED/LOW and feeding it back into the recommendation
- Visualizes spray drift with a wind cone from live weather data, highlighting any apiary or organic farm in the impact zone
How we built it
Next.js 14, TypeScript, Tailwind, deployed on Vercel. Image classification runs through the Kindwise Insect Vision API, which is purpose-built for insect identification and returns species-level predictions with confidence scores. Recommendations come from a structured Claude prompt that takes the pest, crop, and pressure score and returns JSON pros/cons. The map is Mapbox GL JS with a built-in heatmap layer that switches to individual circles at high zoom. Drift cone math uses Turf.js — wind direction plus 180° gives the cone bearing, length scales with wind speed, half-angle of 15°. Pest data is hand-curated from UC IPM. Sightings combine real iNaturalist data with synthesized seed data and persistent user submissions.
Challenges we ran into
No hosted IP102 inference. Our first plan was to call a HuggingFace IP102 classifier — every realistic candidate had no inference provider attached. We evaluated self-hosting a YOLO model and using Claude vision before landing on Kindwise, which gave us species-level insect classification out of the box and let us focus engineering time on the recommendation and map layers instead.
Apiary data is confidential. California's BeeWhere registry is restricted to County Ag Commissioners. We synthesized plausible apiary pins and labeled them clearly as demo data — the honesty plays better than fake authenticity.
Bearing math. Our drift cone first pointed the wrong direction because meteorological wind direction is where wind comes FROM, not where it's going. Cardinal-direction unit tests caught it.
Sparse sighting data. Hobbyists photograph spider mites; nobody photographs navel orangeworm. We seeded synthesized sightings for the commercial-only pests around realistic growing regions.
Accomplishments that we're proud of
Every claim on screen has a citation — UC IPM for pests, OpenWeather for wind, iNaturalist for sightings. The pressure score genuinely flows back into the recommendation, so the map isn't decorative. And the demo never breaks: hashed demo images return canned predictions if the live classifier fails.
What we learned
Real domain workflows are messier than they look. The "obvious" data sources turn out to be a patchwork of confidential registries, scraped directories, and citizen-science data of wildly varying density. Being explicit about what's real vs. synthesized forced better architectural decisions. We also learned the most defensible feature isn't the flashiest — the drift cone is the memorable visual, but the pressure-feeds-recommendation loop is what actually makes a grower's decision sharper.
What's next for AgriGuard
Automating beekeeper notification. California law requires growers to notify every beekeeper within a one-mile radius before spraying bee-toxic pesticides on blossoming crops — today that's done by manually pulling a list from the county and making phone calls one by one. It's the kind of friction that means it gets skipped, and bees pay the cost.
Once a grower commits to a spray plan in AgriGuard, the app should query the county apiary registry, identify every affected beekeeper, generate the legally required notification (date, site, crop, pesticide, dosage) pre-filled from data already in the app, and send it via the beekeeper's preferred channel — phone, text, or email, all of which BeeWhere already collects at registration. One click instead of an afternoon. Same model extends to organic farm notifications.
Built With
- anthropic
- claude
- css
- exifr
- gl
- inaturalist
- insect
- javascript
- kindwise
- mapbox
- next.js
- node.js
- openweather
- react
- tailwind
- turf.js
- typescript
- vercel
Log in or sign up for Devpost to join the conversation.