Experience
2026Independent research · Multimodal AI researcherTested whether vision-language models truly see fine-grained differences or just read the label.Evaluation
- Question
- Do vision-language models see fine-grained differences, or just read the names in the text?
- Built
- Evaluation pipelines with leakage guards and controls, refined across several framings of the question.
- Found
- Showed the model was reading, not seeing: removing species names cut accuracy from 86.7% to 25.4% on 5,794 images.
2026 – nowVirginia Tech · Teaching assistant, Data Structures & AlgorithmsTeach students to debug data structures by writing the failing test first.
Algorithm analysis, structure trade-offs, and test design on the course forum.
2025HICE Lab · DBWorkout · Software developerDrove a live SQL-learning platform's move to TypeScript and fed its APIs malformed input to catch failures before release.
Traced failures in database-backed REST workflows through Docker logs.
Things I've built
ScoutPulls fresh internship postings from company job boards on a schedule, and flags when a board silently returns nothing.Data infrastructure
Live
Scout, from a scheduled scan to your feed A scheduler starts the scanner, which reads 999 company job boards. A filter keeps recent US internships, merges repeats and skips deleted or applied roles; new roles land in the database and show up in your feed. On full scans, an empty-scan check opens an alert when a board that had 3 or more postings returns zero on two scans in a row. postings new roles Scheduler 999 company boards Scanner Filter Database Your feed Empty-scan check Alert 1 2 3 4 5 - 1Step 1: A scheduler starts scans: 232 target-company boards every 30 minutes, all 999 every 3 hours.
- 2Step 2: The scanner reads each board's open postings.
- 3Step 3: The filter keeps recent US internships, merges repeats, and skips deleted or applied roles.
- 4Step 4: New roles land in the database and appear in your feed.
- 5Step 5: Check: a board that had 3+ postings, then zero on two full scans, opens an alert.
- Problem
- A job board can return HTTP 200 with zero postings. Nothing fails.
- Chose
- Each board keeps a baseline; one that returned 3 or more postings is flagged after two empty runs.
- Proof
- A canary watches 877 of 999 boards, a run where under half answer opens an outage issue, and 450+ tests cover it.
ProspectPlans a student's courses and clubs toward a target job; models read, code decides.Agentic systems
Prospect, from a resume to a checked plan You upload a resume and transcript. Each agent passes a GoDaddy identity check, then models read both and propose courses, clubs and the kind of role you fit. Code drops any course or club that is not in the real catalog of 5,956 courses and 765 clubs, while code ranks recent US job listings against your target role. Your checked plan and ranked jobs are saved, and progress streams back to you. PDFs proposed plan target role matched jobs checked plan Resume + transcript Agent identity Models read, propose Job listings US, last 30 days Code ranks jobs Your plan + matches Catalog check Real catalog 5,956 courses 765 clubs Dropped: not in catalog 1 2 3 4 Prospect, from a resume to a checked plan You upload a resume and transcript. Each agent passes a GoDaddy identity check, then models read both and propose courses, clubs and the kind of role you fit. Code drops any course or club that is not in the real catalog of 5,956 courses and 765 clubs, while code ranks recent US job listings against your target role. Your checked plan and ranked jobs are saved, and progress streams back to you. PDFs proposed plan target role matched jobs checked plan Resume + transcript Agent identity Models read, propose Job listings Code ranks jobs Your plan + matches Catalog check Real catalog 5,956 courses 765 clubs Dropped: not in catalog 1 2 3 4 - 1Step 1: You upload a resume and transcript; each agent first passes a GoDaddy identity check.
- 2Step 2: Models read both, then propose courses and clubs and the kind of role you fit.
- 3Step 3: Check: code drops any course or club not in the real catalog, while code ranks jobs.
- 4Step 4: Your checked plan and ranked jobs are saved, and progress streams back to you.
- Problem
- A plan built by language models can name courses that do not exist or rank jobs by guesswork.
- Chose
- Models only read and propose; code ranks the jobs and checks every course and club against the real catalog.
- Proof
- Checked against 5,956 VT courses and 765 clubs; four agent identities active on GoDaddy ANS; 1,243 tests pass.
WitnessTurns a photo of a housing problem into a complaint that cites the exact statute, and drops any citation that matches no real one.Multimodal AI
Witness, from a photo to a cited complaint You upload a photo of a housing problem and enter its address. A vision model describes what it sees, by category. Statute matching pulls the provisions for those categories from 30+ Virginia provisions, and a model drafts violations. A citation check keeps a citation only if it exactly matches a provision retrieved for this request, which proves the provision exists, not that it applies; the rest are dropped. A model then writes the complaint letter with the enforcement contacts for your area. photo observations draft violations matched citations no exact match Your photo + address Vision model Statute matching 30+ Virginia provisions Citation check Dropped Letter model Enforcement contacts Complaint letter 1 2 3 4 5 Witness, from a photo to a cited complaint You upload a photo of a housing problem and enter its address. A vision model describes what it sees, by category. Statute matching pulls the provisions for those categories from 30+ Virginia provisions, and a model drafts violations. A citation check keeps a citation only if it exactly matches a provision retrieved for this request, which proves the provision exists, not that it applies; the rest are dropped. A model then writes the complaint letter with the enforcement contacts for your area. photo observations draft violations matched citations no exact match Your photo + address Vision model Statute matching 30+ Virginia provisions Citation check Dropped Letter model Enforcement contacts Complaint letter 1 2 3 4 5 - 1Step 1: You upload a photo of the housing problem and enter its address.
- 2Step 2: A vision model describes what it sees, tagging each observation with a category.
- 3Step 3: Matching pulls the provisions for each category, and a model drafts violations from them.
- 4Step 4: Check: a citation survives only if it exactly matches a provision retrieved for this request.
- 5Step 5: A model writes the complaint letter with the enforcement contacts for your area.
- Problem
- A model writing a legal complaint can cite a statute that does not exist.
- Chose
- Keep a model citation only if its section label exactly matches a statute row retrieved for that request.
- Proof
- Every citation the model proposes is checked against a statute store of 30+ Virginia provisions. It proves existence, not applicability.
What I work with
Languages
ML & vision
LLM systems
Web & data
Cloud & tooling
Off the keyboard
I play golf, love traveling to new places, and watch a lot of movies.