Shipped University Project · 2026

LeafLens

A mobile-first plant identification and collection system. Users capture a leaf photo and get structured analysis — identity, traits, habitat, care, safety — plus searchable medicinal-use metadata, delivered through a React Native client backed by a TypeScript API and Gemini.

LeafLens collection screen showing owned plants with scientific names and conditions
Fig 01 — Your Collection: owned plants with conditions

The problem

Plant identification apps stop at a name. Users foraging or studying local flora need structured context — traits, habitat, care, safety, and medicinal relevance — plus a way to search their own finds and public plants by name, use, or condition.

Role & responsibilities

Sole developer across the whole stack. Rebuilt an earlier Java implementation as a TypeScript monorepo, tracking the migration capability-by-capability in a feature-parity matrix; designed the mobile client, the REST API, the Gemini analysis pipeline, and the search model.

Architecture

Expo/React Native client sends a multipart image to an Express + TypeScript API, which normalizes it with multer and sharp, calls Gemini for structured analysis, validates the output with zod, and persists results in MongoDB with images in S3-compatible object storage. JWT auth with bcrypt; six versioned route modules under /api/v1.

Key features

  • Analyze-and-save pipeline returning identity, traits, habitat, care, and safety metadata
  • Personal collections plus a public explore feed with keyword, tag, and condition-term search
  • Cavite-localized enrichment flagging plants known to grow in the region
  • Consistent status, empty, and progress UI states across the mobile client
  • Java-to-TypeScript rewrite tracked against a 17-capability feature-parity matrix
  • Account lifecycle including profile management and confirmed account deletion
LeafLens explore feed with public plant cards
Fig 02 — Explore feed of public identifications
LeafLens plant detail cards with scientific names, medicinal uses, and ownership badges
Fig 03 — Plant cards with scientific name, uses, and ownership badge

Outcomes

6

versioned REST route modules

17

capabilities tracked through the migration

3

implementations — RN client, TS API, legacy Java

Stack

React NativeExpoTypeScriptExpressMongoDBGemini APIJWT