Friend Castle
2023 - Present
Waxheart
2024 - Present
Games & Tools
2026 - Present
This Website
2016 - Present
The College Years
2013 - 2017
Friend Castle
Friend Castle Splash Image

An indie game development LLC I co-founded with friends. We handle everything from design and engineering to production and publishing.

Check out the website!
Schedazzle

  • Description:
    A free event scheduling companion app for conventions and expos. Promoters input schedules, attendees customize their personal itinerary on-device.

  • Role:
    Engineer/Lead, Technical Producer
  • Schedazzle event scheduling app promo App Store Google Play
    Box Dog

  • Description:
    A hidden object game with hand-drawn levels. Guide Joget and Box Dog through vibrant worlds searching for mischievous Imps.

  • Role:
    Engineer/Lead, Technical Producer
  • Contract Work
    Gnome Hunt

  • Description:
    AR game built as contract work for Niantic to showcase their Lightship SDK/API.

  • Role:
    Engineer/Lead, Technical Producer
  • Fairy Finder

  • Description:
    AR game built as contract work for Niantic to showcase their Lightship SDK/API.

  • Role:
    Engineer/Lead, Technical Producer
  • Waxheart
    Waxheart Splash Image

    An indie game project where I wear multiple hats as both engineer and technical producer.
    Owning the client and engine side — handling engine upgrades and building custom debug tools for performance monitoring and QA testing.
    Built a custom Discord bot integrated with Jenkins to streamline the team's build pipeline.
    Helped form and lead the QA team — establishing RC test cycles, writing test case master sheets, and owning all QA documentation.
    Handling production and leadership meetings, agile sprint planning, roadmap planning, and task management via Trello.

    Check out the game!
    Jenkins Build Pipeline
    Waxheart Jenkins build pipeline
    Discord Bot — Build Instructions
    Waxheart Discord bot build instructions
    Discord Bot — Error Reporting
    Waxheart Jenkins Discord bot error reporting
    QA Test Case Master Sheet
    Waxheart QA test case master sheet
    Games & Tools — Built with AI

    I started using Claude Code on March 14th, 2026. Within a week, everything below was live — two complete daily puzzle games with 365 puzzles each, and a room layout planner with a full furniture library. That kind of turnaround would have been impossible working solo in my spare time — especially in languages I'm not deeply familiar with.

    I barely know HTML, CSS, or JavaScript — but I know game design, I know how to code, and I know how to direct an AI tool effectively. I bring the creative direction, design sensibility, and vision for what the end product should feel like. Claude handles the implementation details — the CSS quirks, the JavaScript patterns, the beam-tracing math. I direct, review, and iterate. It's like having a very fast junior developer who never gets tired, and knowing how to steer that effectively is a skill in itself.

    These projects are proof of concept for a workflow I believe in: AI doesn't replace creative direction or design judgment — it removes the friction between having an idea and shipping it.

    Claude Developer Misery Index
    Claude Developer Misery Index dashboard

    A real-time dashboard tracking how miserable developers are when Claude AI goes down. Combines official Anthropic status page data, incident history, Reddit and Bluesky social chatter into a single 0-10 misery score.

    How it started:

    • Simple status page scraper with a numeric score
    • Single social signal source with basic keyword matching

    Where it is now:

    • Four data sources — status page, incidents, Reddit, and Bluesky
    • Discord bot fetches all sources (Reddit, Bluesky, status page), calculates score, and alerts on level changes
    • Multi-layer post filtering to avoid false positives (exclusion patterns, signal tiering, proximity checks)
    • Data refreshed every 15 minutes, pushed to an orphan branch
    • History chart with time range toggles (24h / 3d / 7d)
    • Light/dark theme with misery-level visual escalation (screen shake at apocalypse level)
    View Misery Index
    SnapLayout
    SnapLayout room layout planner

    A free, mobile-friendly room layout planner. Import a floorplan image (or draw rooms from scratch), set the scale, and drag and drop furniture with real-world dimensions. No sign-up required.

    How it started:

    • Basic canvas with draggable furniture rectangles
    • Simple image import for floorplan backgrounds

    Where it is now:

    • Scale calibration — draw a line between known points and enter the real distance
    • Wall drawing tool for creating rooms from scratch
    • Furniture library across 6 categories with real dimensions (in/ft/cm/m)
    • Z-ordering, undo/redo, keyboard shortcuts, snap-to-grid
    • Export to PNG at 2x resolution
    • Auto-saves to localStorage
    Open SnapLayout
    Beamlab
    Beamlab daily laser puzzle game

    A daily laser puzzle. Place mirrors and beam splitters on a 6x6 grid to route a laser beam from the source to all targets. Fewer pieces = better score.

    How it started:

    • Basic mirror placement (/ and \) with a single laser source and target
    • Simple brute-force puzzle generation
    • Tap-to-cycle interaction for piece types

    How it evolved:

    • Added beam splitters that split the laser into two paths, each needing its own target
    • Splitters now have two rotatable orientations — tap to flip which direction they reflect
    • Pre-placed gold "fixed" mirrors that constrain the puzzle and can't be moved
    • Optional gem collectibles that require creative detours from the main solution
    • Walls-first generation algorithm with recursive backtracking for natural difficulty scaling
    • Beam-aware solver with inventory-based pruning for fast validation
    • Multiprocessed puzzle regeneration leveraging all CPU cores

    Where it is now:

    • 365 daily puzzles across three difficulty tiers (medium, hard, expert)
    • Scoring system: Brilliant / Focused / Aligned / Scattered / Refracted
    • Daily streaks, shareable results, and gem collection stats
    Play Beamlab
    Parsed
    Parsed daily code puzzle game

    A daily code puzzle. Swap scrambled tokens in a buggy program to make it produce the correct output. Think Wordle meets debugging.

    How it started:

    • Simple token-swapping on short code snippets
    • Basic interpreter for arithmetic and variable assignments
    • Static puzzle set with manual difficulty tuning

    How it evolved:

    • Full pseudo-interpreter supporting for loops, while loops, if/else, and nested logic
    • Themed puzzles with real-world narratives — counting inventory, tracking scores, managing budgets
    • Execution animation that plays through each step with inline variable annotations
    • Themed scene strips with emoji progress bars driven by the code's key variable
    • Tappable code lines for step-by-step explanations after solving
    • Automated verification pipeline checking solvability, narrative consistency, and duplicate detection

    Where it is now:

    • 365 daily puzzles across medium and hard tiers with six programming concepts
    • Scoring system: Genius / Hacker / Optimized / Compiled / Verbose / Spaghetti
    • Daily streaks, shareable results, and walkthrough replays
    Play Parsed
    raggedydoc.com

    What started as a college assignment in 2016 has become my longest-running personal project. This portfolio website has evolved alongside my career — from a basic student page built for a UCI informatics course, to the interactive, game-inspired experience you're browsing right now.

    It's a project I keep coming back to, constantly improving and rebuilding as I learn new things and grow as a developer. Every version reflects where I was at that point in my career, and the current iteration is the most ambitious yet.

    2016
    The Origin — UCI

    This site began as a project for an informatics course at UC Irvine. The assignment required user research, competitor analysis, feature prioritization, and user testing — the full UX process. I interviewed classmates, analyzed other portfolios, and iterated on the design based on real feedback.

    The original version was simple — static HTML/CSS with a space-themed background. But going through that UX process taught me how much thought goes into even a personal website. That foundation stuck with me.

    View Original Research
    2017 — 2025
    Evolution Through My Career

    As I moved through the game industry — from Trigger to Sega/Atlus to MobilityWare and now Blizzard — the site grew with me. New projects meant new pages. New skills meant new ways to present them. Every major career milestone was an excuse to revisit and improve the portfolio.

    The site has always been plain HTML, CSS, and JavaScript — no frameworks, no build tools, no dependencies. That simplicity is intentional. It keeps the focus on the content and makes it easy to jump in and iterate quickly. GitHub Pages handles hosting, and I can push changes and see them live immediately.

    2026
    The Current Version

    The latest overhaul is the most ambitious the site has ever been. It draws from my game development background with features like:

    • A dark glassmorphism design system with semi-transparent cards and backdrop blur
    • An interactive career timeline with an animated sprite character that walks between entries
    • Floating game-themed particles (cards, diamonds, D-pad crosses) replacing the old starfield
    • A gamification layer — achievements, an exploration progress bar, and click burst effects
    • A game-style loading screen with rotating tips
    • A custom 404 page where the sprite character looks around confused

    It's a portfolio that feels like a game — because that's the industry I work in and the kind of experience I want to create.

    Now & Beyond
    AI-Powered Development

    The current version of this site was built with the help of AI — specifically Claude. Using Claude Code as a development tool has made it possible to move faster, iterate more ambitiously, and ship features that would have taken significantly longer to build solo.

    From the achievement system to the sprite animation logic to the responsive timeline, AI helped accelerate the development without replacing the creative direction. I drive the vision and design decisions; AI helps me execute on them efficiently. It's a workflow multiplier — the ideas are still mine, but the time from idea to implementation has shrunk dramatically.

    This site is a showcase of that philosophy: AI is a tool, and knowing how to use it effectively is a skill in itself.

    Spooky Spoils eye-tracking puzzle game title screen
    Spooky Spoils

  • Description:
    Puzzle, Survival, Story, Eye-tracking
    Utilize your eyes to make it out of the haunted house!

  • Role:
    Engineer

  • Awards:
    Award for Creativity — IEEE GameSig, May 2016
    Best Game Design — VGDC at UCI, April 2016
  • Watch Video View Details
    Going Home rogue-like survival game title screen
    Going Home

  • Description:
    Rogue-like, Story, Survival, Resource Management, Python/Pygame
    Try to make it home in the rough seas with limited power!

  • Role:
    Engineer
  • Watch Video View Details
    Left 2 Die puzzle platformer title screen
    Left 2 Die

  • Description:
    Puzzle, Platformer, Python/Pygame
    Turn left and right to invert the level and solve the puzzle without dying!

  • Role:
    Engineer, Designer

  • Awards:
    2nd Place — VGDC at UCI, January 2015
  • Watch Video View Details
    Monochrome Memories puzzle platformer title screen
    Monochrome Memories card push gameplay mechanic
    Monochrome Memories card jump gameplay mechanic
    Monochrome Memories debug gameplay clip
    Monochrome Memories

  • Description:
    Puzzle, Platformer, Story
    Walk through the 5 stages of grief with your counterpart.

  • Role:
    Lead Engineer, Producer
  • View Details
    Microscums microwave cooking gameplay
    Microscums

  • Description:
    Python/Pygame VGDC Game Jam, Time/Money Management
    Struggle as a college student with only a microwave.

  • Role:
    Lead Engineer
  • View Details
    Scuminvaders multiplayer bullet hell gameplay
    Scuminvaders

  • Description:
    Python/Pygame, Multiplayer TCP Networking
    Space invaders but multiplayer with some pizzazz.

  • Role:
    Lead Engineer, Producer
  • Watch Video View Details
    Life of Py educational Python game menu screen
    Life of Py

  • Description:
    Educational, Programming, Kids
    Show kids how to learn the basics of Python in a fun way!

  • Role:
    Lead Engineer, Lead Designer, Producer
  • View Details
    Scallywags pirate card game cover
    Scallywags

  • Description:
    Card, Survival, Competitive Solitaire, Multiplayer, PVP
    Stack against other pirates for the title of Captain!

  • Role:
    Designer
  • View Details
    Date or Die dating simulator visual novel title screen
    Date or Die

  • Description:
    Dating Simulator, Visual Novel
    Fall madly in love... or die trying!

  • Role:
    Designer
  • View Details