Projects

DiatoMeter · computer vision for microscope images

Python, FastAPI, FastSAM, scikit-learn, OpenCV, React, TypeScript, Modal

A grey electron-microscope image of small round algae shells. Eighteen are outlined in green where DiatoMeter found and measured them.
Fig. 2.1: Unedited output on a 3,000× image of Thalassiosira pseudonana. Each green circle is one of the 18 shells it found and measured.
  • Building a platform with W&M's Nano & Biomaterials Lab that automates diatom analysis in scanning-electron-microscope images.
  • Designed a pipeline that calibrates scale, segments shells with FastSAM, filters debris, and grades damage.
  • Measured 136 shells in one image in about 15 seconds on 2 CPUs, replacing one-at-a-time manual measurement.
  • Trained a random forest on 44 multi-scale texture features to identify samples, abstaining when unsure. It reached 77% accuracy on held-out imaging sessions (86% when confident), beating 47% and 59% baselines.
  • Validated the output: scale within 0.12% of the instrument's calibration, and median shell size inside the published range.
  • Deployed on Modal serverless behind a Cloudflare Worker, with a REST API, saved run history, and Excel export.

Visit Source

Nepalingo · learning Nepal's indigenous languages

React, TypeScript, Vite, Tailwind CSS, Supabase

Nepalingo's home screen: a greeting, a three-day streak badge, and a Take a quiz card for Nepali vocabulary.
Fig. 2.2: Nepalingo's home screen.
  • An open-source web app, built by Incubate Nepal participants, for learning the indigenous languages of Nepal.
  • Built the flashcard, daily quiz, and activity card components, with audio playback and loading/error states.
  • Merged 11 PRs, the 4th most of 10 contributors to the codebase.

Visit Source

SATitude · digital SAT prep platform

TypeScript, React 19, Vite, Express, Prisma, PostgreSQL, Clerk

SATitude's landing page: the headline 'Make your Digital SAT prep feel brilliantly clear', buttons to start practicing, and the site's mascot, a colorful bird in a blue jacket and Nepali topi.
Fig. 2.3: SATitude's landing page.
  • Set up an npm-workspaces monorepo: a React 19 + Vite client and a TypeScript Express API hosted on Render.
  • Synced Clerk accounts to PostgreSQL with idempotent Prisma upserts, fed by signed webhooks and a client hook.
  • Validated request bodies with Zod and added Helmet headers, a CORS allow-list, and per-IP rate limiting.

Visit

walden.life · Thoreau's Walden, one day at a time

JavaScript, React, Express, MongoDB, Mongoose

The opening page of walden.life: the title Walden, a short introduction, a Thoreau quote, and a Begin Day 1 button.
Fig. 2.4: The opening page of walden.life.
  • Built a full-stack app that lays out 100 sourced daily entries, drawn from 12 of Walden's 18 chapters, on a timeline.
  • Cut the timeline's initial payload 53% by serving a 5-field projection of each 10-field MongoDB record.
  • Centralized fetching, loading, and error state in custom React hooks reused across every routed view.

Visit Source