Cat Plants
Point your phone at a plant. Find out whether it can hurt your cat.
An engineering solution for in-store safety decisions. Built around one unwavering principle: Identification names the plant; an offline ASPCA database determines safety.
Three Ways In
Camera framing, on-device ML Kit tag OCR, or offline fuzzy name search. Wakes the cloud proxy when camera intent starts.
High-Contrast Signal Band
Red "KEEP AWAY" or green "ALL CLEAR" band, exact taxonomy match, toxicity symptoms, and Wikipedia reference photo.
Check Its Work
Side-by-side comparison of user photograph vs. reference shot with raw confidence score metrics.
569
ASPCA Plant Species1,784
Common Name Aliases< 50ms
Offline Search Latency30.5 MB
ARM64 Optimized ReleaseAsymmetric Failure Mode Design
In physical systems engineering, a false negative safety call is a catastrophic failure mode. Software for pet safety must treat ambiguity with the same conservatism.
Decoupled Identification & Safety Authority
PlantNet identifies botanical names. It knows nothing about cats. The safe/toxic call is strictly a map lookup against a bundled ASPCA-derived JSON database.
Toxic-Biased Genus Fallback
If a species is unlisted but belongs to a genus with any toxic member, the lookup engine resolves as Toxic. Exact species matches always take precedence over genus defaults.
Zero AI Hallucination Risk
Unindexed or low-confidence species return an explicit "Not in our database — treat as potentially unsafe" warning. It never guesses or queries an LLM.
Technical Architecture
Flutter Background Isolate Index
Flutter / Dart569 species and 1,784 aliases indexed once at load on a background isolate, enabling instant O(1) map hits without UI thread stutter.
On-Device ML Kit Label Scanning
Google ML KitScans nursery plant tags on-device using ML Kit OCR. Runs completely offline without network latency or API key requirements.
Serverless Azure Proxy & Pre-Warming
Azure Container AppsDart `shelf` backend proxy gates API keys, hashes images for caching, and caps daily calls. Pre-warms container on camera-open intent to eliminate 17s cold start.
Release Binary Size Optimization
R8 / ABI SplittingSplit per-ABI release builds reduce APK size from 79.4 MB to 30.5 MB by packaging only native ML Kit binaries required for arm64.
From Photo to Safety Verdict
Intent & Capture
Camera frames plant or OCR reads tag. Background ping wakes serverless Azure proxy from zero-scale state during framing.
Proxy Identification
Azure Container Apps Dart proxy verifies client token, checks SHA-256 image cache, and retrieves taxonomy name from PlantNet.
ASPCA Rule Evaluation
On-device isolate queries ASPCA dataset. Resolves toxic-biased fallback rules and renders high-contrast signal band.
Need Custom Mobile & Cloud Engineering?
We bring mechanical and systems engineering discipline to software development—building robust mobile apps, IoT integrations, and cloud infrastructure.