Distributed real-time architecture, ML classification on imbalanced data, vector retrieval, and full-stack competition platforms. Each prioritizes reliability and measurable impact over surface polish.
2026
Real-Time · VR · Distributed Systems
Server-Authoritative Multiplayer VR Sandbox
The fundamental problem in multiplayer VR is state authority: when clients own their world, desync and divergence are inevitable. The challenge was building a sandbox where the server owns all terrain, physics, and object state, distributing updates to N Quest headsets at 72Hz without perceptible lag. Server-authoritative design from the ground up — no client-side state mutations.
Frame-rate sync
72Hz
Multi-Quest sync
N→N
Terrain streaming
CSV
Built on Unity 2022.3 with Netcode for GameObjects, using a strict server-authoritative model — clients send input intentions, never state mutations. Terrain data streams from CSV frame buffers parsed server-side and distributed via Netcode's NetworkVariable system, ensuring every connected Quest headset renders identical geometry. The authority pattern prevents desync across N clients without expensive reconciliation. Designed as a research-grade collaborative simulation platform — the architecture prioritizes deterministic state replication over cosmetic polish.
Unity 2022.3
Netcode for GameObjects
Meta Quest
Server-Authoritative Model
CSV Terrain Streaming
NetworkVariable Sync
2026
Full-Stack · Backend Systems · Competition Platform
Arcanum — AI-Era Puzzle Competition Platform
Build a competition platform that handles high-volume concurrent submissions, prevents abuse without blocking legitimate players, and returns semantic feedback fast enough that it feels instant. 10 progressive levels. 10,000+ submissions in the first 10 hours. 90+ concurrent players. The puzzle concept is the product skin — the backend systems are the actual engineering problem.
Submissions in 10h
10k+
Active players
90+
Progressive levels
10
React on Vercel with a Flask API on Render backed by Supabase PostgreSQL. All puzzle validation is server-side — no answer state reachable via client inspection. The semantic feedback engine encodes player guesses into dense embeddings and scores cosine similarity against the solution, returning a graduated warmth signal in place of binary feedback. Harder levels intentionally degrade signal resolution. A hint system with 24-hour refresh cycles gates progression without blocking it. Rate limiting and OTP-based account verification held under 10,000+ competitive submissions in the first session — abuse prevention was a design requirement, not an afterthought.
Mnemo — Vocabulary Builder for Neurodivergent Learners
Vocabulary apps built around alphabetical rote memorization fail ADHD learners — flat lists collapse attention and treat all words as interchangeable. The challenge: design a vocab app where mnemonics carry the cognitive load, sourced from both AI generation and a community submission/voting layer, with per-user progress, saves, and notes that survive long enough to compound into real recall.
Mnemonic sources
AI + crowd
Progress + notes
Per-user
Community quality signal
Voting
Designed for ADHD attention patterns first — every screen privileges a single high-salience artifact (the mnemonic) over list density. Mnemonics are generated on demand via an LLM with prompt scaffolding that emphasizes vivid imagery, then surfaced alongside community submissions. A voting layer turns the crowd into the quality signal so weak mnemonics decay without explicit moderation. Per-user progress, saves, and notes are persisted in Postgres with row-level scoping; each word becomes a long-lived object the user can return to, not a flashcard that disappears after a session.
Canvas RAG — Conversational Coursework with Voice I/O
Canvas LMS scatters lectures, syllabi, readings, and assignments across modules with no unified query layer — students re-read the same material to find one sentence. The build: a conversational RAG layer over a student's entire Canvas catalog with bidirectional voice, so reviewing a course feels like asking a TA, not Ctrl-F across PDFs.
Bidirectional I/O
Voice
Full course corpus
Canvas
Retrieval eval
RAGAS
A FastAPI backend pulls coursework from Canvas, encrypts at rest with Fernet, and chunks documents into a ChromaDB vector store keyed per-course and per-user. Retrieval is augmented by GPT OSS for the conversational layer — keeping inference and embeddings out of third-party APIs where coursework privacy matters. Voice input runs through Whisper for transcription; responses are spoken back via TTS so the entire loop is hands-free. Retrieval quality is continuously evaluated using RAGAS metrics (faithfulness, answer relevancy, context precision) so regressions in chunking or prompt strategy are caught before they ship.
Emergency departments generate thousands of unstructured clinical notes daily. Triage depends on clinicians reading every note — a bottleneck that delays critical interventions. The task: classify free-text EHR notes into Stable, Deteriorating, or Critical urgency, on a dataset where critical cases represent less than 8% of samples.
Urgency taxonomy
3-class
Critical class ratio
<8%
Primary metric
F1
The core challenge was class imbalance — with Critical cases at <8%, accuracy alone is meaningless. The pipeline starts with text preprocessing and TF-IDF feature extraction, then embedding-based representations that capture semantic similarity between symptom descriptions. Classification uses Logistic Regression — chosen deliberately over deep models because interpretability matters in clinical settings and the dataset doesn't justify transformer-scale compute. Evaluation prioritizes F1, precision, and recall per class, with particular attention to recall on Critical where a false negative has real patient cost.
Puzzle Feedback Engine — Vector Similarity Hint System
Traditional puzzle hint systems are binary — right or wrong. They tell you nothing about directionality. The challenge: build a feedback engine that understands how semantically close a player's attempt is to the solution and returns graduated "warmer / colder" signals.
Query latency
<50ms
Similarity search
pgvector
Distance metric
Cosine
Player inputs are encoded into dense vector embeddings and compared against the solution embedding using cosine similarity via Postgres pgvector. The distance maps to a graduated warmth scale — not binary correct/incorrect but a continuous proximity signal. A milestone-based hint system triggers at semantic distance thresholds. End-to-end runs in under 50ms — indistinguishable from a static lookup to the player.
Postgres
pgvector
Embeddings
Cosine Similarity
Node.js
Supabase
Semantic Search
2026
Full-Stack · Product · Gamification
HabitFlow — Gamified Habit Tracker
Habit trackers fail because their feedback loops are flat — checkboxes reward compliance, not consistency. HabitFlow makes the tracking surface itself the reward: the daily grid mirrors a GitHub contribution heatmap, and long-term streaks visibly grow a plant from seed to full tree. The metaphor is the retention mechanism.
GitHub-style heatmap
Grid
Growth metaphor
Plant
Color customization
Themes
The core interaction is a commit-table grid — each cell is a day, saturation encodes consistency. Layered on top is a gamification loop where cumulative streaks progress a virtual plant through defined growth stages, giving each habit a visual object the user is invested in maintaining. Color themes and grid customizations personalize the feedback aesthetic; the underlying model tracks streaks, resets, and per-habit history independently. Built as a lightweight product experiment in what a habit tracker becomes when the metaphor — not the checkbox — carries the retention.
How does 'time' become a spatial control in VR? TimeLayers is an experiment in room-scale VR where the player scans a physical room with a Meta Quest, that scan becomes the shared geometry, and the player traverses three thematic states of the same space — prehistoric, present, and future — by swapping asset layers in real time. The question: does temporal navigation feel embodied when the physical space stays constant and only the asset skin changes?
Prehistoric · Present · Future
3 eras
Meta Quest scan
Room-scale
Themed asset pipeline
Blender
Built in Unity for Meta Quest. The headset's room-scan capability captures physical space geometry, and three parallel asset sets — themed and modeled in Blender — are anchored to that geometry. Traversal between eras is a state switch that swaps the active asset layer while preserving player position and gaze; the physical room becomes the canvas the player is embedded in, and each temporal state is a curated re-skinning. Scope was intentionally small — a study in temporal traversal as a VR interaction primitive, not a full game.
A coursework exercise in translating classic programming-fundamentals concepts — state machines, command parsing, object hierarchies — into a working artifact. The output: a terminal-only text adventure game built with nothing beyond the standard library. The value is not the game — it's what building it forces you to internalize about program structure.
State-machine driven
State
Terminal-only
CLI
Class hierarchy design
OOP
Structured around a small hierarchy — Room, Item, Player, Action — where world state lives in a graph of rooms and items, and player commands are parsed against a controlled verb vocabulary. Game progression is a deterministic state machine: each command either mutates world state, moves the player, or reports back to the CLI. Written as a coursework project during the MS program with deliberate emphasis on OOP fundamentals over engine sophistication.