Over a few months I built a series of scanner apps — plant, jewelry, rock, math, and physics/chemistry — that all follow the same basic idea: point your camera at something, and get an instant AI-powered read on what it is.
The part that stayed the same
The core pipeline barely changed between apps: capture an image on the mobile client, send it to a backend endpoint, run it through a vision model, and return a structured result the UI can render. Once I had this working cleanly for the first app, reusing it for the next domain was mostly a matter of swapping the model and the result schema.
The part that had to change every time
What actually took the work was each domain's specifics. Plant identification needed confidence thresholds and care-tip lookups. Jewelry and rock scanning needed prompts tuned so the model wouldn't just guess a generic material name. Math and physics/chemistry scanners needed OCR-style parsing of handwritten or printed problems before the model could even attempt an answer — a completely different failure mode than the image-classification apps.
The takeaway
Building a reusable scan-and-classify pipeline once, then treating each new domain as a prompt and validation problem rather than a new architecture, let me ship five apps in the time it would've taken to build two from scratch. The lesson that stuck with me: invest in the boring plumbing early, because that's the part you'll reuse the most.