Projects

Filter projects by category

Datum's interface: a fossil's provenance record with verified and broken-seal badges.

Datum

Tamper-evident provenance records for fossils, from discovery to sale.

  • React
  • TypeScript
2026
Tonify's interface: a Mandarin word with its tones scattered for practice.

Tonify

Mandarin pronunciation, graded.

  • React
  • TypeScript
2026
The instrument on a breadboard beside four steel electrodes driven into soil, with the serial output showing apparent resistivity.

Electrical Resistivity Tomograph (ERT)

An Arduino-based instrument that images subsurface soil by injecting current into the ground and measuring millivolt potentials. Validated on 1D, expanding to 2D.

  • Arduino
  • C++
  • Analog electronics
  • Instrumentation
2026
Shaded render of the machine's cable spool: two slotted flange discs on a cross-braced hub.

NEMA 17 Cable Line Spool

A cable spool fitted to a stepper-driven NEMA 17 and motor bracket; modeled in Fusion 360.

  • Fusion 360
  • CAD
2026

Shakespeare GPT

A decoder-only GPT built from scratch in PyTorch with every component implemented by hand; trained to generate Shakespeare.

  • Python
  • PyTorch
  • LLM
  • Transformers
  • Hugging Face
2026
Two rows of CarRacing frames: real frames above, the VAE's slightly soft reconstructions below.

CarRacing World Model

A world model in PyTorch. A conv-VAE compresses CarRacing frames into a latent space where an MDN-LSTM learns the dynamics, then dreams coherent driving that never happened.

  • PyTorch
  • VAE
  • MDN-LSTM
  • World Models
2026
Shaded render of a ribbed cylindrical bike grip with a flanged end.

Bike Grip

A ribbed replacement handlebar grip, modeled in Fusion 360 for 3D printing.

  • Fusion 360
  • CAD
2026
The projects page: filter chips above a grid of cover-led project cards.

This Site

A static portfolio I built.

  • Astro
  • TypeScript
  • CSS
2026

API Weather App(opens in a new tab)

A desktop weather application that uses the OpenWeatherMap API to fetch real-time weather data for any city. Built with Python and PyQt5, it displays the current temperature, weather condition, and a corresponding emoji through a clean GUI interface.

  • python
2026 ↗

Character-Level LSTM

A character-level LSTM in PyTorch that learns to predict and generate text one character at a time. Demonstration of the recurrent memory and the sequence-modeling components behind world models.

  • python
  • PyTorch
  • RNN
  • Deep Learning
2026

Git Producer Tag

A git hook that gives your commits a producer tag. Your Mac announces commits, pushes, and merges with macOS speech synthesis. Zero dependencies, never blocks git.

  • bash
  • git-hooks
  • macos
  • text-to-speech
2026
The Streamlit app: an uploaded photo of a handwritten letter beside the model's prediction and confidence scores.

Handwritten Letter Classifier

A convolutional neural network that classifies handwritten letters from real photos with the OpenCV preprocessing pipeline

  • python
  • pytorch
  • opencv
  • streamlit
2026
A grid of handwritten digits, every one generated by decoding random noise.

MNIST VAE

From-scratch Variational Autoencoder in PyTorch with digits generated from pure noise, and the reconstruction-versus-KL tradeoff made visible.

  • python
  • pytorch
  • vae
  • generative-models
2026
PPO training curve on CartPole: the moving average climbs to high reward and recovers from dips instead of collapsing.

Policy Gradients on CartPole

REINFORCE, Actor-Critic, and PPO implemented from scratch in PyTorch: a progression where each method fixes the collapse mode of the one before it.

  • python
  • PyTorch
  • reinforcement-learning
  • PPO
2026
A morning digest in Telegram: a three-bullet 'above the fold' intro composed by the bot.

Tech Digest

A self-hosted bot that composes a personalized morning tech digest: primary sources detect, press confirms, and thumbs-up/down feedback tunes tomorrow's ranking.

  • python
  • claude-api
  • embeddings
  • telegram
2026