All Projects / Case Studies
A detailed look at more of my projects and case studies.
Mobile + AI EngineeringTestFlight
StudyForge
What it is: Build your own courses on any subject. Paste notes, drop in a document, or point it at a URL and StudyForge generates a full curriculum: flashcards with spaced review, quizzes, code labs, deep-dives, and reference cards, with you approving the sources and steering the outline along the way. Works offline once a course is saved.
The engineering: The AI's only job is to produce one schema; the app renders whatever it's given, which makes new study formats cheap to add. Generation is a pipeline with user checkpoints (you approve the sources and steer the outline), and every milestone is validated and journaled, so a crash resumes instead of restarting and credits are only debited once. A Cloudflare Worker backend keeps all provider keys off the device, including bring-your-own-key.
Status: In TestFlight testing ahead of launch, with a repeatable release pipeline and a documented on-device QA pass on iOS and Android.
React Native / Expo · TypeScript · Zod · Cloudflare Workers · Durable Objects
Mobile + AI AgentsPublished on npm
Codemote
What it is: One control surface on your phone for every AI coding agent running on your computer. Pair by QR code or PIN, then start a session or pick up one already running. Prompt it, watch the output live, and approve or reject the changes it wants to make, across every project at once. It keeps running as a background service, so the machine is reachable without starting anything first. Your work stays on your computer and the phone drives it. Works with Claude Code, Codex, OpenCode, and Gemini.
The engineering: One executor abstraction normalizes several independently evolving vendor CLIs into a single streaming session model. Work runs in managed git worktrees backed by a crash-recoverable operation journal with idempotent retries. Transport security: PIN pairing with rate limiting, TLS certificate pinning, replay protection, and optional NaCl end-to-end encryption. The iOS client carries the full security model. Android and a macOS menu-bar companion speak the same protocol.
Status: Installable from npm; iOS companion on TestFlight.
TypeScript · Fastify WebSockets · SwiftUI · Kotlin · tweetnacl
AI EngineeringPython
SongFinder
What it is: An AI music recommender built as the final project for the CodePath Applied AI Fellowship: free-text listener profiles in, explained recommendations out.
The engineering: Profile extraction runs through a capped self-critique loop, then a deterministic scorer ranks the catalog and writes explanations grounded in a hand-authored knowledge base. The part I'm proudest of is the citation check: every explanation must quote its source text word for word, or it falls back to a plain, auditable score breakdown, so the system can't fabricate justifications. The eval harness sits behind a cost-confirmation gate, with 99 offline tests against a stub LLM client.
Status: Complete; public repository.
Python · Streamlit · Gemini API · RAG · pytest
Game EngineeringUnity 6 · C#
Capy Swarm
What it is: A portrait arcade survival game: grow a capybara herd, win herd-vs-herd battles, unlock six themed arenas, pick abilities mid-run.
The engineering: The simulation core has no engine references, and the build enforces it: a stray UnityEngine import fails compilation, and the identical source files also compile and pass tests under plain .NET 8. All randomness flows through one seeded source, checked by an IL audit at build time, so any run can be reproduced headless. A CLI autopilot replays seeded runs for regression QA.
Status: Unity rewrite complete; on TestFlight with an internal test group.
Unity 6 · C# · .NET 8 · NUnit · Fastlane
Mobile GameReact Native · TypeScript
Rune Match Quest
What it is: An idle-RPG about building a fantasy adventurer guild. Recruit heroes across four classes (Warrior, Guardian, Priest, Wizard), fight a 30-mission, three-chapter campaign and multi-phase bosses through tactical match-3 combat, grow the Guild Hall, and send veteran teams on Dispatch assignments that pay out while you're away. Recruitment is non-gacha, and everything feeds one shared economy.
The engineering: The game rules are a pure, deterministic library. RNG and time are injected, nothing from React or the state layer gets imported, and lint enforces that boundary at zero warnings. The render layer replays resolved facts and can't decide outcomes, which is how one rules engine drives two completely different renderers (React Native Skia and an RN fallback). Saves verify writes by read-back and recover from unknown schema versions.
Status: Playable pre-release; on TestFlight with invited testers.
React Native / Expo · Skia · TypeScript · Zustand · Reanimated
AI ToolingGodot GDScript
GodotAgent
What it is: An AI coding agent that lives inside the Godot 4 editor as a docked panel, with tabbed chat sessions, saved history, and seven switchable LLM providers.
The engineering: The model gets twelve project tools, including file operations, exact-match edits, and a self-diagnosis tool that reloads scripts and reads the editor's own error log to check its work, all bounded by a step limit. It can also screenshot the editor viewport and send the image to vision-capable providers. New providers drop in as a resource-plus-script pair discovered at runtime.
Status: v0.1.0 released, MIT licensed.
Godot 4 · GDScript · EditorPlugin · Multi-provider LLM
Full-Stack + AI AgentsCase Study
GuildForge
What it is: A spec-first AI development platform: a prompt becomes a spec, the spec becomes a plan, and a 20-agent roster builds it in reviewable steps.
The engineering: The orchestrator has no file editor and no terminal. It only holds task-tracking and delegation tools, so "never writes code, only delegates and verifies" is enforced by tool policy rather than by a prompt asking nicely. Underneath: semantic code search over pgvector, row-level-security multitenancy, live run streaming, and git-worktree isolation so agents can work in parallel safely.
Status: Private codebase; case study and architecture walkthrough available on request.
React 19 · FastAPI · PostgreSQL + pgvector · OpenHands SDK · Docker Compose
Data VisualizationAngular
World Bank Data Explorer
The Challenge: Visualizing complex economic data from a public API that often returns null or inconsistent values.
The Solution: Built an Angular service to normalize API responses before they reach the UI. Implemented a custom SVG map component where clicking a country triggers a distinct API call, managed via RxJS switchMap to cancel stale requests.
Key Learning: Handling asynchronous data streams and error states gracefully in a single-page application.
Angular · TypeScript · API Integration · SVG
Backend EngineeringSpring Boot
PC Parts Hub
The Challenge: Enforce strict inventory controls (min/max limits) in a web application while preventing race conditions during "Buy Now" actions.
The Solution: Leveraged Spring Data JPA's transaction management and custom Validator classes. Created a Bootstrapper component to seed sample data for consistent dev/test environments.
Key Learning: The importance of input validation at both the Controller layer (DTOs) and the Entity layer to ensure data integrity.
Java · Spring MVC · Thymeleaf · H2 Database
Full-StackSpring Boot · Angular
Travel Itinerary Planner
The Challenge: Build a robust booking system that handles relational data complexity (customers, bookings, excursions) while maintaining a clean separation of concerns.
The Solution: Architected a normalized MySQL schema to reduce data redundancy. Implemented a Spring Boot REST API with distinct Controller, Service, and Repository layers. The Angular frontend uses RxJS to manage cart state asynchronously without page reloads.
Key Learning: Managing atomic transactions during checkout to ensure that if an excursion booking fails, the entire vacation package booking rolls back to prevent data inconsistency.
Spring Boot · Angular 17 · MySQL · Transaction Management
Native AndroidWGU Capstone
VacaTracker
What it is: An offline-first vacation planner for Android. Save trips and their excursions, search by title or destination, set alerts for upcoming dates, share trip details, and view a travel-history report. Everything lives on the device; no account or connection is required.
The engineering: Java with a layered architecture: Activities talk to a single repository, which runs Room (SQLite) queries on a background executor, so the UI never touches the database directly. Optional local accounts use salted PBKDF2 password hashing. Validation guards the data model (end dates after start dates; no deleting a vacation that still has excursions), with JVM unit tests on validation, hashing, and report serialization plus instrumented DAO tests. Extended from an earlier coursework build into the WGU Software Engineering capstone, shipped as a signed APK with a GitHub Pages distribution page.
Java · Android SDK · Room / SQLite · JUnit · Espresso