portfolio
Forager | Full Stack Ecological Intelligence App
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.
My contributions:
- REST API: Built all endpoints in Flask — authentication, project and form CRUD, observation management, and session-based access so students could join projects with just a code.
- Database design: Designed the relational schema in MySQL (users, projects, dynamic form templates, observations) with SQLAlchemy and managed migrations with Alembic.
- Data visualizations: Built Chart.js visualizations on the admin dashboard so teachers could explore student submissions across their projects.
- Documentation and testing: Authored full API endpoint documentation and a Pytest test suite.
Stack: Python, Flask, MySQL, SQLAlchemy, Alembic, Chart.js, Pytest, Gunicorn, Railway.