Mobile App for Gardeners: Smart Plant Recognition & Offline Watering Planner
Picture this: a gardener uploads a photo of a suspicious spot on a tomato leaf — in seconds the app returns a diagnosis (late blight, 87% confidence) and recommends copper sulfate treatment. All offline, in a remote countryside. Building this for iOS and Android requires attention to every detail: from ML model selection to background synchronization.
We create apps where CV models, weather triggers, and offline mode work as a single mechanism. We bring 6 years of mobile development and 50+ AgriTech projects. The challenge isn't individual components, but their seamless integration: rain sensor via OpenWeatherMap, local SQLite database, recognition via CoreML or TFLite — all running reliably on five-year-old devices.
How Plant Recognition Works
The core feature — identifying plants and diseases from photos. Two approaches: cloud API (Plant.id, PlantNet) or on-device model (CoreML/TFLite). Let's compare:
| Parameter | Cloud API (Plant.id / PlantNet) | On-device (CoreML / TFLite) |
|---|---|---|
| Accuracy | 85–95% | 70–80% |
| Speed | 1–3 seconds (depends on network) | 0.2–0.5 seconds |
| Internet | Required | Not required |
| Cost | Paid subscription ($0.01–$0.10 per request) | Free (development only) |
| Offline | No | Yes |
On-device recognition is 5x faster than cloud — 0.2 s vs 1–3 s — but accuracy is 15–20% lower. For a cabin without internet, it's the only option.
The Plant.id API returns the name, diseases with confidence score, and treatment recommendations. The photo is base64-encoded and sent via POST; the response contains suggestions with probability. Important: the API requires a well-lit shot of a leaf or flower — a wide shot gives low accuracy. We always teach the user proper shooting technique.
struct PlantIdentificationRequest: Encodable { let images: [String] // base64 let modifiers: [String] // ["crops_fast", "similar_images"] let plant_language: String // "ru" let plant_details: [String] // ["common_names", "url", "description", "treatment"] } The on-device approach uses models from iNaturalist or trained on the PlantVillage dataset (54,000 images, 38 leaf disease classes). Accuracy is 15–20% lower than cloud, but fully offline.
Why Weather Integration Matters
Sounds simple, but a common mistake is setting fixed-time notifications and wondering why users miss waterings. The problem: notifications aren't recalculated when precipitation changes.
The correct logic: every morning fetch the weather forecast via the OpenWeatherMap API or Apple WeatherKit. If rain >5 mm is forecasted, skip watering and cancel the notification via UNUserNotificationCenter.removePendingNotificationRequests. This requires a background task: BGAppRefreshTask on iOS or WorkManager on Android.
On Android we use WorkManager with PeriodicWorkRequest and NetworkType.CONNECTED constraint. Not AlarmManager directly — on Android 12+ SCHEDULE_EXACT_ALARM permission is required and rarely granted by users.
Time saved on manual watering planning — up to 2 hours per week. Water savings from smart rainfall accounting — up to 30% per season.
What's Included in the Work
Ordering a turnkey development includes:
- Architecture design and stack selection (iOS/Android/cross-platform)
- Integration of all APIs (weather, recognition)
- Offline plant database with image caching
- Configuration of push notifications and background tasks
- Operations documentation and access links
- Assistance with publishing to App Store and Google Play
- Code warranty — 3 months of free support
Offline Mode & Plant Database
The local plant database (name, description, care instructions, sowing calendar) is stored in SQLite. For 500–1000 records we use Room on Android, Core Data or GRDB on iOS. Images are cached on first viewing with an LRU policy (Kingfisher on iOS, Coil on Android).
No internet at the dacha — a reality. All basic functions (adding plants, viewing tips, setting reminders) work offline. Synchronization when connection is restored runs via a queue of deferred operations.
Weather Integration
OpenWeatherMap is the standard for such apps: the free tier covers 1000 requests per day. WeatherKit on iOS (from newer versions) is more accurate and doesn't require your own key, but is only available on Apple platforms. For a gardening app, besides temperature, humidity, uvi, and rain (1-hour and 3-hour precipitation) are crucial — available in OWM's current endpoint.
Process
- Analytics — define the feature set: which plants (only vegetables or also garden + houseplants), whether a social component is needed, whether an offline disease database is required.
- Design — create the architecture, choose the stack (native or cross-platform).
- Development — offline database → plant addition → watering schedule with notifications → weather integration → recognition. Recognition last because API keys and pricing need agreement.
- Testing — cover core logic with unit tests, run field tests on real devices.
- Deployment — publish to stores, set up Crashlytics monitoring and analytics.
Contact us for a consultation on your project — we'll help choose the optimal stack and estimate deadlines.
Timeline Guide
| Configuration | Timeline |
|---|---|
| Base + schedule + weather | 5–7 weeks |
| With plant/disease recognition | 9–12 weeks |
| Full functionality (offline + social network) | 12–16 weeks |
To estimate your project, contact us — we'll prepare a precise quote and suggest the best solution. We guarantee passing App Store Review and Google Play Review on the first attempt.







