portfolio

Forager | Full Stack Ecological Intelligence App

Forager identifying a wild mushroom: species, safety verdict, nutrition, and model heatmap

Forager identifies wild edible plants and fungi from a photo, then streams back species, safety, nutrition, and weather data while you're still on the trail.

I built this from the ground up, and what I really enjoyed was diving into the core architectural and engineering choices to make it fast, reliable, and cost-effective:

  • Custom Machine Learning: I trained an EfficientNet-B7 classifier to 95.7% accuracy across 101 species using ~177K iNaturalist images. To keep costs low, I exported it as a dual-output ONNX model that runs entirely on CPU, returning predictions and CAM explainability heatmaps in a single forward pass with no PyTorch in production.
  • Resilient Data Streaming: The backend uses a progressive Server-Sent Events pipeline that streams results to the client as each stage completes. Data persists incrementally, so a failure in one downstream service never invalidates results from earlier stages.
  • Deterministic Safety: I made the deliberate choice to keep LLMs out of the safety pipeline. Instead, it pulls verdicts from a curated, citation-backed knowledge base and defaults to caution on low confidence—because an app that tells you what's safe to eat has to be right every time.

Stack: React 19 / TypeScript (Zustand, Tailwind, shadcn/ui), FastAPI with async SQLAlchemy, PostgreSQL. Deployed on a single AWS EC2 instance via Terraform and Docker Compose.

View Forager Live  ·  View codebase on GitHub

What's next:

  • Out-of-distribution (OOD) detection so the model can reject uncertain inputs instead of guessing.
  • Exploring transfer learning to distill a smaller model for an offline mobile PWA.
  • RAG-powered chat for follow-up questions about an identified species.

Citizen Science App for Kids | OSU Capstone

For my capstone at Oregon State, our team of four built a citizen science platform that helps teachers bring real data collection into their classrooms. Students grab a project code, head outside, and start logging wildlife and plant observations from any device, no account required. The goal was to provide equitable access to STEM education by removing barriers like costly lab materials and limited classroom resources.

I was the sole backend engineer on a team of four. The system had three components communicating over HTTPS: a React Native mobile field app, a React admin website, and the Flask backend I built.

Capstone project diagrams: system architecture, database schema, and data visualization

My contributions:

Stack: Python, Flask, MySQL, SQLAlchemy, Alembic, Chart.js, Pytest, Gunicorn, Railway.

View codebase on GitHub