Software Engineering

I'm a software developer with experience across big tech at Microsoft and DoorDash, as well as several early-stage startups . I hold a Bachelor's degree in Computer Science from Texas A&M University.

Jan 2025

A first-person 3D world on the web. You can walk, sprint, and jump around, collect gems, browse my art in a fancy digital museum, walk right up to my software projects, draw a picture and submit it (it might end up hanging on the wall), get roasted by the omnipotent computer from Courage the Cowardly Dog, chill in a quiet forest, or practice multiplication in a 3D take on Meteor Multiplication.

Why I Built It

I wanted this website to feel like a place you could inhabit rather than a page you scroll. Making a world you can actually walk around in meant working through graphics programming, spatial UX, and keeping it all running smoothly in a browser. It was fun. Also I wanted it to exist. Isn't that reason enough?

Technologies

TypeScriptReactThree.jsReact-Three-FiberWebGL

Tags

3D DesignInteractive DesignOpen Source
click to explore

Feb 2026

A gallery room inside the holodeck where my paintings hang on the walls. Walk up close to look at the brushwork or step back to see the whole piece.

Why I Built It

Art looks different on a wall than in a grid of thumbnails. Being able to approach a piece and step away from it changes how you experience it, and I wanted that in the browser. The art is served from a small Go API backed by Cloud Storage.

Technologies

TypeScriptReactThree.jsReact-Three-FiberWebGLGoGoogle Cloud StorageDocker

Tags

3D DesignInteractive DesignOpen Source
click to explore

Jan 2025

A multi-room virtual museum inside the holodeck that holds my art collection. Wander through it at your own pace.

Why I Built It

Going from one room to a whole museum meant thinking like an architect: how people find their way around, how pacing works from room to room, and what story the layout tells. All inside a browser tab.

Technologies

TypeScriptReactThree.jsReact-Three-FiberWebGL

Tags

3D DesignInteractive DesignOpen Source
click to explore

Jan 2025

Walk up to screens in a 3D room and use my projects right there on them. Press escape to get your cursor back.

Why I Built It

It seemed like a really sci-fi way to showcase my projects.

Technologies

TypeScriptReactThree.jsReact-Three-FiberWebGL

Tags

3D DesignInteractive DesignOpen Source
click to explore

Nov 2025

A retro computer lab inside the holodeck, starring the smug, all-knowing computer from Courage the Cowardly Dog.

Why I Built It

I wanted to capture the feeling of an old computer room as a space you can stand in. It's environmental storytelling with a lot of nostalgia, and a computer that's mean to you.

Technologies

TypeScriptReactThree.jsReact-Three-FiberWebGL

Tags

3D DesignInteractive DesignOpen Source
click to explore

Jan 2025

A 3D room inside the holodeck where equations, shapes, and math concepts are objects you can walk around and explore.

Why I Built It

Math is spatial. I wanted to see what it looks like when a math idea is an environment instead of notation on a page.

Technologies

TypeScriptReactThree.jsReact-Three-FiberWebGL

Tags

3D DesignInteractive DesignOpen Source
click to explore

Apr 2026

Like that one toy. Hold click and drag on the ball to attract the electricity! Desktop and mobile.

Why I Built It

I absolutely adore electricity and wanted to create a 3D environment that allows you to play with it. I've been fascinated with physical phenomena like electricity and magnetism, and how the basis of computers is manipulating an electron using a difference in electromagnetic force to make a transistor, which can be used to make logic gates, which can be used to make circuits, which can be used to make arithmetic logic units. With the inclusion of a clock and memory, you can create an entire computer architecture. On the newly formed computer, you can run programs directly on the hardware (baremetal) using binary instructions written for that computer architecture, or you could write a hardware abstraction layer that transpiles a common higher level language like assembly into the language the computer speaks. You can also write a language that's more readable to coders, that compiles into assembly, which is then translated into instructions for your computer! Using that higher level language, developers can move quickly and develop operating systems for a computer. Operating systems make it easier to write programs for the computer, because they handle the allocation of computer resources (they talk to the computer so your program doesn't have to worry about that). They also provide the illusion of isolation, meaning a software program written for an OS does not know other programs exist, and doesn't need to worry about playing nice with the hundreds of other applications running on the computer. The browser is a program on the OS. And this website is written for the browser! And it's all powered by 100 billion electrons jumping from one side of a microscopic germanium-doped silicon trough to the other.

Technologies

JavaScriptThree.jsWebGL

Tags

3D DesignInteractive DesignTouch InteractionsPhysicsOpen Source
click to explore

Nov 2023

A vanilla Three.js site built around a spinning 3D sphere. The hello world of 3D on the web.

Why I Built It

I wanted to get my hands dirty with Three.js and WebGL for the first time. A sphere is the hello world of 3D.

Technologies

JavaScriptThree.jsWebGL

Tags

3D DesignInteractive DesignOpen Source
hover · click

Sep 2025

Rank anything, made for your phone. Drag items into tiers with your thumb and share the result.

Why I Built It

I thought the Tiermaker mobile site could use some improvement. Dragging things between tiers on a phone was frustrating, so I built one where touch is the main way you use it, not an afterthought, with a clean UI that stays out of the way of the ranking.

Technologies

TypeScriptReact

Tags

Mobile UXTouch InteractionsDrag & DropProgressive Web AppOpen Source
hover · click
hover · click

Oct 2025

A pokédex for your friends. A zany, mobile-first app for collecting and organizing what you know about the people in your life.

Why I Built It

I wanted a fun way to remember the details about my friends that felt like a game, not a contacts app. The pokédex idea makes filling it in feel like collecting, and I designed it phone-first because that's what you have on you when you're out with people.

Technologies

TypeScriptReactFirebase Auth

Tags

Mobile-FirstSocial AppWeb DevelopmentResponsive UIOpen Source
hover · click
hover · click

Jun 2025

Write a journal entry and get it back as video game quests, so you can live your life like an RPG.

Why I Built It

I wanted journaling and getting things done to feel more like playing a game. Turning what you write into quests gives you something to chase, and finishing one feels like leveling up instead of crossing off a chore.

Technologies

TypeScriptReactTailwind CSSFramer MotionNest.jsNode.jsLLM APIs

Tags

AI IntegrationProductivity ToolsGamificationJournaling
hover · click
hover · click

Nov 2025

Keep track of every project you're working on in one place, without it feeling like a work tracker.

Why I Built It

I have a lot of hobbies that I bounce between. I was getting overwhelmed by how many projects I had going, so I built Passionfruit to keep track of them in a way that wouldn't stifle my creativity.

Technologies

TypeScriptReact

Tags

Project ManagementProductivity ToolsOpen Source
hover · click

Mar 2026

Your life's goals as a 3D network: what depends on what, what to prioritize, and how it all connects.

Why I Built It

I wanted to see how my goals relate to each other and what has to happen first. It's generic so you can map your own. It's meant to include basic foundational behaviors like sleeping and eating well, since that's how you're at your best.

Technologies

TypeScriptReactThree.jsWebGL

Tags

AI Integration3D DesignInteractive DesignData VisualizationOpen Source
hover · click

Apr 2026

One persistent global room where up to 8 people can be on camera and mic at once over a WebRTC mesh. Everyone else watches as the audience. No accounts, no room codes, no database.

Why I Built It

I wanted something that felt truly live. Not a chat box, but actual video with strangers. Wiring up WebRTC peer connections, Django Channels signaling, and Redis room state from scratch was the challenge. (Visit it directly. It won't work inside an iframe.)

Technologies

ReactTypeScriptDjangoWebSocketsWebRTCRedisDocker

Tags

Real-timeWeb DevelopmentOpen Source

Nov 2025

A desktop OS in your browser: app grid, app tray, draggable windows, and a swipeable mobile mode. Every little web thing I make lives here.

Why I Built It

I wanted a website that was "a website of websites" so I could/can give any little web thing I build a home 💖 I also wanted somewhere to put my art. A desktop OS seemed like the perfect container since pretty much everyone already knows how to get around one.

Technologies

TypeScriptReactNext.js

Tags

Interactive DesignResponsive UITouch InteractionsOpen Source
hover · click

Mar 2020

A daily routine page that generates analogous color schemes on the fly, every one of them WCAG AAA compliant.

Why I Built It

I wanted to play with algorithmic color theory while making something I'd actually use. Getting palettes to stay harmonious and still pass the strictest contrast level was the fun constraint.

Technologies

JavaScript

Tags

Design SystemAccessibilityColor Theory AlgorithmsOpen Source
hover · click

Nov 2025

An online piano that looks at the key you're in and what you just played, then suggests good next notes.

Why I Built It

I wanted a way to learn music theory by playing instead of memorizing scales. The suggestions help you make something that sounds nice even if you're not an expert yet.

Technologies

TypeScriptReactWeb Audio APINext.js

Tags

Music Theory AlgorithmsInteractive DesignOpen Source
hover · click

Apr 2026

Records what you play on a MIDI keyboard and shows the key, the scale, and good next notes in real time to help you improvise.

Why I Built It

I play piano and wanted help improvising with more confidence. It surfaces the "right" notes for the key I'm in while still capturing everything I play.

Technologies

JavaScriptWeb Audio APIHTMLCSS

Tags

Music Theory AlgorithmsInteractive DesignReal-timeMIDIOpen Source
hover · click

Apr 2026

Sing or play a MIDI keyboard to hit scrolling notes as they cross the target line. Scores your pitch accuracy in real time from your mic or keyboard.

Why I Built It

I wanted pitch training to feel like a rhythm game instead of an exercise. I built the pitch detection and the scrolling note renderer from scratch on the Web Audio API.

Technologies

JavaScriptWeb Audio APICanvas APIHTMLCSS

Tags

Music Theory AlgorithmsInteractive DesignReal-timeMIDIPitch DetectionGamificationOpen Source
hover · click

Apr 2026

Turns music into animated particles, waveforms, geometry, and spectrum effects. Upload an MP3 or use your mic, then tweak the color, speed, and intensity.

Why I Built It

I wanted to see my music, not just hear it. Hooking the Web Audio API up to a canvas and watching a track turn into motion in real time never gets old.

Technologies

JavaScriptWeb Audio APICanvas APIHTMLCSS

Tags

Audio ProcessingInteractive DesignReal-timeAnimationOpen Source
hover · click

Dec 2025

A Python desktop app for singers that tracks vocal performance across takes. Measures pitch, resonance, weight, brightness, and consistency.

Why I Built It

I wanted objective feedback on my singing practice instead of relying only on my ear. Tracking the numbers across takes makes it easy to see what's actually improving.

Technologies

Python

Tags

Machine LearningAudio ProcessingPitch DetectionOpen Source

Oct 2026

Counter-Strike Highlight Analysis and Organization System. Point it at hours of gameplay footage and it finds the moments worth keeping (kills, funny voice chat, good conversations) and clips them for you. Runs entirely on your own machine.

Why I Built It

I have 700+ GB of my own Counter-Strike footage from 10+ years of playing and making videos, and scrubbing through it by hand was never going to happen. The rewrite made it a lot faster and more accurate. Classical computer vision does most of the work and OCR only runs on small crops. It samples every couple of seconds, then binary searches for the exact frame of a kill, which was the big speed win. An audio tagger catches laughter in voice chat, Whisper adds burned-in subtitles, and a resource planner sizes the workers from each model's measured memory so it doesn't eat my whole computer. It can resume where it left off, recompute only what changed, and throttle itself while I'm gaming. No LLMs, no cloud calls.

Technologies

PythonPyQt6OpenCVPyTorchWhisperFFmpeg

Tags

Machine LearningComputer VisionOCRSpeech-to-TextAudio ProcessingVideo ProcessingBatch ProcessingOpen Source

Dec 2025

Ask the same questions (like 'How many books are in this image?') about a whole batch of product images at once. Bring your own LLM.

Why I Built It

While doing product image analysis work, I kept asking the same questions about image after image. This lets you write the questions once and run them across an entire batch, with whichever model you want.

Technologies

TypeScriptReactLLM APIs

Tags

Image ProcessingBatch ProcessingAI IntegrationOpen Source
hover · click

Nov 2023

An interactive chart of what Star Wars starships cost, from X-wings to Star Destroyers, using the SWAPI dataset.

Why I Built It

A fun excuse to mix Star Wars with data viz. I pulled the ship data from the Star Wars API, cleaned it up on a Nest backend, and charted it so you can compare ships side by side.

Technologies

ReactTypeScriptNivoNest.jsNode.js

Tags

Data VisualizationWeb DevelopmentOpen Source
hover · click

Sep 2025

A dashboard for monitoring services, incidents, and logs. A Python/Flask backend serves hypermedia through HTMX, and the frontend is Lit web components.

Why I Built It

I wanted to try a stack that leans into the platform instead of abstracting it away. HTMX lets the server own state and send back HTML fragments, which cuts out a lot of client-side complexity. Lit is what web components always should have been: lightweight, declarative, and framework-agnostic. I don't think enough people know how powerful the native component model has gotten.

Technologies

PythonLitHTMXFlask

Tags

SREDashboardData VisualizationDeveloper ToolsOpen Source
hover · click

A test harness device makers use on the factory floor to flash and test Windows on their hardware. I helped build it at Microsoft and helped open-source it.

Why I Built It

This was my Microsoft internship. Besides the app itself, I worked with Ted, a tech writer, on the product docs and the open-source announcement. It's still my go-to story for working with someone outside engineering.

Technologies

C#UWPXAML

Tags

Open SourceDeveloper Tools

May 2026

A 3D multiplayer wizard first-person shooter that runs in your browser. Nothing to download, just open it and play.

Why I Built It

Technologies

WebRTCThree.jsReactReact-Three-Fiber

Tags

MultiplayerReal-time3D DesignPhysicsOpen Source
hover · click

Sometime in like Oct 2025

Test your knowledge! Can you tell a Pokémon name from a technology term?

Why I Built It

One day I noticed Pokémon and technology have similar sounding names, so I made this quiz game.

Technologies

TypeScriptReactNext.js

Tags

Quiz
hover · click

Oct 2019

My first real website, from a 2019 college class. It explores the media I consume and polls my classmates on theirs.

Why I Built It

It was a class assignment, but it was also genuinely my first real website. Everyone starts somewhere.

Technologies

HTMLCSSJavaScript

Tags

Open Source
hover · click