Projects

A collection of technical things I’ve built and explored.

Local Taste homepage featuring local dining experiences and hosts

Local Taste

A full-stack platform that connects travelers with local hosts through food experiences, bookings, and conversation.

React, TypeScript, Node.js, MongoDB, Socket.IO

Paper Research chat with model settings and a prompt for asking research questions

Paper Research Agent

A local research assistant that searches academic literature, reads papers, follows citation trails, and builds source-grounded answers in a streaming chat.

Python, Streamlit, LLM tools, arXiv

Slack thread where HC-bot replies that an unknown HC is not in the catalog and asks a clarifying question

Minerva HC Agent

An LLM agent that explains, compares, and suggests Minerva's HCs by reading the full description docs, with every answer citing the HCs it used.

Python, OpenAI, LLM agents, Slack

LIME explanation highlighting image regions used to classify a comedy thumbnail

YouTube Thumbnail Classifier

A machine learning notebook that predicts a video's content category from its thumbnail and uses LIME to explain individual predictions.

Machine learning, Computer vision, LIME

Odinbook

A lightweight social discussion app built with Ruby on Rails, with a feed for sharing posts and joining conversations.

Ruby, Ruby on Rails

Hierarchical Todo List showing nested tasks in an expandable work list

Hierarchical Todo List

A full-stack task manager with multiple lists and arbitrarily nested subtasks. Branches can be collapsed so the current work stays in focus.

React, Flask, SQLAlchemy, SQLite

Local Taste homepage featuring local dining experiences and hosts

Local Taste

A full-stack platform that connects travelers with local hosts through food experiences, bookings, and conversation.

ReactTypeScriptNode.jsMongoDBSocket.IO

Local Taste brings discovery, booking, and communication into one experience for travelers and hosts. The team built event browsing, maps, payments, chat, and social features.

The stack spans a React and TypeScript client, a Node.js server, MongoDB, and real-time messaging with Socket.IO.

Paper Research chat with model settings and a prompt for asking research questions

Paper Research Agent

A local research assistant that searches academic literature, reads papers, follows citation trails, and builds source-grounded answers in a streaming chat.

PythonStreamlitLLM toolsarXiv

Paper Research Agent turns an open-ended question into an iterative research workflow. The model decides when to search arXiv, read page-addressable text from a PDF, trace references or later citations through Semantic Scholar, and use optional web search to find supporting code and project pages. Its final response distinguishes sourced evidence from interpretation and cites specific paper versions and PDF pages.

I built both a command-line workflow and a local Streamlit chat. The chat streams the answer, shows each tool call with its status and result preview, and retains context for follow-up questions within a conversation. Research artifacts are cached in a shared workspace, so the agent can inspect full extracted text without pushing an entire paper into the model context on every turn.

The implementation separates model-facing LangChain tools from provider integrations and multi-step services. That boundary keeps arXiv retrieval, PDF extraction, citation lookup, and Tavily search independently testable while letting the agent combine them dynamically. It also makes partial coverage explicit: the interface surfaces missing credentials, provider errors, and incomplete citation data instead of quietly presenting a confident but under-sourced answer.

Diagram showing how Netty matches a user query with relevant people

Netty AI

A full-stack networking assistant for live events, built around a chat experience that helps people make useful connections.

ReactTypeScriptNode.jsMongoDB

Netty AI combines a chat interface with a separate backend to support networking at live events. The frontend and backend are available in separate repositories.

Slack thread where HC-bot replies that an unknown HC is not in the catalog and asks a clarifying question

Minerva HC Agent

An LLM agent that explains, compares, and suggests Minerva's HCs by reading the full description docs, with every answer citing the HCs it used.

PythonOpenAILLM agentsSlack

Minerva HC Agent answers questions about Minerva’s Habits of Mind and Foundational Concepts. It can explain a single HC, compare two, suggest HCs that fit a situation, and say plainly when the HC descriptions don’t cover a question before giving a clearly labelled general answer.

The corpus is small (76 docs of roughly 3k tokens each), so most questions are really a routing problem: which HC is this about? Instead of chunking and vector search, the agent gets a one-line-per-HC catalog in its system prompt, reads the whole docs it picks through a sandboxed read_file tool, and finishes with a structured answer that lists its cited HCs. The code then checks that every cited HC was actually read.

There is no vector database or agent framework, just a plain Python loop over the OpenAI Responses API. Domain knowledge lives in a skill file, so new domains can be added as new skill folders. The agent runs from a CLI or as a Slack bot that replies in threads, and an eval harness tracks routing recall, status match, tokens, and latency across dev and holdout question sets.

Step through a recorded run to see how it routes three sample questions, what it reads, and what the eval measured.

LIME explanation highlighting image regions used to classify a comedy thumbnail

YouTube Thumbnail Classifier

A machine learning notebook that predicts a video's content category from its thumbnail and uses LIME to explain individual predictions.

Machine learningComputer visionLIME

This project explores whether visual cues in a YouTube thumbnail can identify the video’s content category. LIME adds a way to inspect which parts of an image influenced a prediction.

Odinbook

A lightweight social discussion app built with Ruby on Rails, with a feed for sharing posts and joining conversations.

RubyRuby on Rails

Odinbook is a small social app in the style of Threads. It uses Ruby on Rails for the web application.

Hierarchical Todo List showing nested tasks in an expandable work list

Hierarchical Todo List

A full-stack task manager with multiple lists and arbitrarily nested subtasks. Branches can be collapsed so the current work stays in focus.

ReactFlaskSQLAlchemySQLite

The app supports private lists for multiple users, session-based authentication, and nested tasks that can be expanded, completed, edited, or moved.

Its React frontend talks to a Flask API backed by SQLAlchemy and SQLite. The task model refers to itself to support nesting at any depth.