Skip to content

Projects

Apps, backend systems, hackathon builds, and research projects. Filter by technology to narrow the list.

All projects

10 of 10 shown
PlayState home page with the headline Find the right game for right now and a grid of game covers with three highlighted picks
2026githubcase study

PlayState

A game picker that matches your own library to the time you have tonight and the kind of experience you want.

You own more games than you have evenings. PlayState lets you build a library from the IGDB catalog or a Steam import, answer three quick questions about time, genre, and single-player or multiplayer, and get three picks with plain reasons such as "Matches Adventure". There is a random spinner, a Discover page of well-rated games that fit what you already play, and parties for comparing libraries with friends. Suggestions come from a small, explainable point system with no machine learning and no invented match percentage. The Next.js frontend talks to an Express API that verifies Clerk sessions, scopes every library query to the signed-in user, and keeps IGDB and Twitch credentials on the server. Game data lives in PostgreSQL on Supabase through Prisma, with Zod validation and Vitest tests on the API.

  • TypeScript
  • Next.js
  • React
  • Tailwind CSS
  • Clerk
  • PostgreSQL
  • Prisma
  • Supabase
  • Vercel
Handle With Care title screen with the courier, a package on a delivery mat, and Start, Options, Credits, and Exit buttons
2026githubcase study

Handle With Care

A 2D platformer about the laziest delivery job in the hotel business, where the only way to deliver a package is to kick it.

You play a hotel "Yeet" courier who has to get packages into every delivery zone before time runs out. Hold the mouse to charge a kick, aim with the cursor, and release, but every kick damages the box and it breaks after five. Levels add hazards, pressure plates, levers, and hotel guests who explain the rules as you go, and each level awards bonus stars for finishing quickly and for breaking nothing. I built it with two teammates in Godot 4.7 and GDScript. My part was the interface and presentation around the gameplay: the HUD and objectives, result screen, menus and settings, tutorial signs, pixel art, music and sound, and the Windows export.

  • Godot
  • GDScript
  • Aseprite
Inspire Columbia homepage introducing its community events and opportunities
2026githubcase study

Inspire Columbia Website

Inspire Columbia's public website and the application platform its staff use to recruit, review, and communicate with new team members.

As CTO and the primary contributor to the current codebase, I work across the public site and the internal hiring workflow. Visitors can learn about the nonprofit, explore events and open positions, donate, and submit an application without leaving the site. I built the Supabase data model and row-level security tests, Clerk-based staff roles, position and application management, document review, reviewer notes, status history, applicant email tools, spreadsheet exports, feature settings, and approval-gated database deployments. Unit, RLS, and Playwright tests cover the workflows that handle applicant data.

  • TypeScript
  • Next.js
  • Supabase
  • Clerk
  • Resend
  • Playwright
D&W Property Services homepage with estimate and phone calls to action
2026case study

D&W Property Services

A production website that turns local property-maintenance searches into estimate requests for a Columbia, South Carolina business.

I designed and built the site as the sole developer. It presents D&W's exterior cleaning and grounds-maintenance services, shows completed work through interactive before-and-after comparisons, and gives visitors clear paths to call or request an estimate. The Next.js quote form validates each request and sends it to the business through Resend. I also added responsive navigation, structured metadata, a sitemap, Vercel Analytics, and the privacy and SMS consent language needed to support the company's A2P 10DLC registration.

  • TypeScript
  • Next.js
  • React
  • Tailwind CSS
  • Resend
  • Vercel
TEDxCongaree Vista homepage presenting the event and its published talks
2026github

TEDxCongaree Vista

The public event site for TEDxCongaree Vista, with speakers, sponsors, event photography, news, and on-page talk previews.

I contributed to Inspire Columbia's React and Vite website for TEDxCongaree Vista, a locally organized TEDx event in Columbia, South Carolina. My work focused on the talk-viewing experience: I added an in-page video preview to the homepage carousel, reworked playlist behavior, fixed YouTube embeds in the Vercel deployment, and used device capabilities to keep the preview interaction appropriate across desktop and mobile.

  • TypeScript
  • React
  • Vite
  • Motion
  • React Router
  • Vercel
Three Habit Hearth screens showing a story decision, the hex-grid village map, and habits assigned to a building
2026githubcase study

Habit Hearth

An Android habit tracker where completed tasks earn the resources needed to rebuild a fantasy village.

Every completed task earns category-specific gems and experience. Those rewards unlock buildings, story choices, and new sections of a hex-grid village threatened by the Veil of Stagnation. I built the app in Kotlin and Jetpack Compose with MVVM and StateFlow. Typed DataStore repositories keep tasks, story choices, resources, settings, and reminder preferences on-device, so the core experience works without an account or network connection.

  • Kotlin
  • Jetpack Compose
  • MVVM
  • DataStore
InsureFlow AI interface presenting insurance claim intake and damage assessment workflows
2026case study

InsureFlow AI

An insurance operations copilot for broker submissions, claims intake, multilingual service, and catastrophe response.

Built with a four-person team during the 12-hour PalmettoHacks 2026 competition, InsureFlow AI placed second in Capgemini's challenge. I built the FNOL triage APIs, sent damage photos to Azure AI Vision for severity classification, extracted underwriting fields from broker documents, and added confidence-based approve, override, and escalation flows.

  • Python
  • FastAPI
  • Next.js
  • PostgreSQL
  • OpenAI
  • Azure AI Vision
SC Economics volunteer event directory with filters for location, event type, age group, and expertise
2026githubcase study

SC Economics Volunteer Platform

A volunteer portal for applications, event sign-ups, service hours, and staff review.

Built for the South Carolina Council on Economic Education, the portal lets volunteers apply, browse events, sign up or withdraw, and log service hours. Managers and administrators review applications, edit events, and track participation. I led the backend work across TypeScript route handlers, Prisma data access, Neon Postgres and Neon Auth, role checks, sign-up and withdrawal flows, volunteer self-service endpoints, and seed tooling for a shared database.

  • TypeScript
  • Next.js
  • React
  • Prisma
  • PostgreSQL
  • Neon
Lingua Franca running local extraction on three uploaded inspection images
2026githubcase study

Lingua Franca

A local pipeline that turns inspection emails, spreadsheets, images, and PDFs into validated routing decisions.

Built in 24 hours at GridStorm Hacks 2026, Lingua Franca accepts inspection screenshots, spreadsheets, images, and PDF reports, then converts them into structured records. I built the ingestion and extraction layer with OpenCV, Tesseract, openpyxl, and pypdf. A local Mistral model extracts fields; Pydantic validation, completeness scoring, and deterministic rules decide where each record goes and when a person should review it.

  • Python
  • Streamlit
  • OpenCV
  • Tesseract
  • Ollama
  • Pydantic
Project Qoconut presentation comparing a quantum random number circuit with quantum and pseudorandom bit distributions
2024githubcase study

Project Qoconut

A comparison of quantum and pseudorandom bit strings using IBM hardware, noise simulation, and an ensemble classifier.

Created for the SC Quantathon 2024 DoraHacks challenge, Project Qoconut builds Hadamard-gate circuits in Qiskit, runs them in Aer and on IBM Brisbane, and compares the resulting bit strings with NumPy-generated samples. A separate notebook models readout and thermal-relaxation noise with fake IBM backends. The machine-learning pipeline combines a one-dimensional CNN and Random Forest, then feeds both predictions into a Logistic Regression meta-learner.

  • Python
  • Qiskit
  • Jupyter
  • Machine Learning