Projects

Pingoo

Problem:
I wanted to build a 2D platformer that runs at a locked 60 fps not just on new hardware, but on older devices like the iPhone 11 and 12 — where naive SpriteKit implementations commonly stutter due to overdraw, texture thrashing, and per-frame allocations.
Tools:
Engine: SpriteKit
Audio: CoreAudio, AVFoundation
Language/UI: Swift, SwiftUI (menus and overlays)
Architecture: MVVM, SwiftPM
Profiling: Instruments (Time Profiler, Core Animation, Metal System Trace)
Testing: Swift Testing
Action:
  • Profiled frame time on real iPhone 11/12 hardware with Instruments to find the actual bottlenecks instead of guessing.
  • Packed all sprites into texture atlases to minimize draw calls and let SpriteKit batch rendering efficiently.
  • Implemented object pooling for particles, and projectiles eliminating per-frame allocations during gameplay.
  • Reduced physics cost by simplifying collision bodies and culling off-screen node updates.
  • Moved audio to preloaded buffers so sound effects never block the render loop.
Result:
  • Achieved a stable 60 fps on iPhone 11 and 12, with no frame drops during heavy particle and enemy scenes.
  • Shipped the game to the App Store as a smooth, responsive platformer that feels great even on 5-year-old hardware.
  • The project sharpened my skills in performance profiling, GPU/CPU frame budgeting, and real-time rendering optimization on iOS.
App Store: Pingoo

Anarchy Online Guide

Problem:
Anarchy Online is a 25-year-old MMORPG with a massive item and NPC database, but existing reference tools are outdated websites that require a constant internet connection. Players wanted a fast, reliable way to look up items, nanos, and game data on mobile — including in situations with poor or no connectivity.
Tools:
Language/UI: Swift, SwiftUI, Combine
Data layer: SQLite (bundled, fully offline database)
Architecture: MVVM, SwiftPM modules
Testing: Swift Testing
Action:
  • Extracted and normalized game data from the game's resource files into a compact SQLite database shipped inside the app bundle.
  • Designed an offline-first architecture: every search, filter, and detail view queries the local database directly — no network calls, no loading spinners.
  • Structured the app into reusable SwiftPM packages (data layer, UI components) for maintainability.
Result:
  • Shipped a fully offline reference app to the App Store. It works identically on a plane, in a basement, or mid-raid with no connection.
  • The project gave me deep hands-on experience with data pipeline design, SQLite optimization on iOS, and offline-first architecture.