
A practical look at building Budget Warden as a native macOS app with Swift and SwiftUI, covering language design, error handling, concurrency, state, and app architecture.

I'm a front-end developer transitioning toward C++, Rust, Linux, and systems programming. I enjoy building native applications and learning through hands-on projects.
Alongside my full-time work, I create educational content on my YouTube channel and build all kinds of side projects.
This is my personal website, where I share my projects, technical work, research, and things I'm learning along the way.
About Me
A practical look at building Budget Warden as a native macOS app with Swift and SwiftUI, covering language design, error handling, concurrency, state, and app architecture.

Explains why information systems fail before implementation, and why analysis, process modeling, and design matter more than generating code with AI.

Walks through the decision to rebuild Budget Warden as local-first native software with user-controlled files, simpler architecture, and a one-time payment model.

GNOME 50 shipped a meaningful performance fix for Nvidia users through a pull request making Mutter's compositor non-blocking via file descriptors and GLib event sources.
Native applications, systems software, graphics tools, and Rust/C++ libraries.



Cross-platform native budgeting application built around a shared Rust core.

This article walks through the problem of concurrent file editing in a local, single-instance desktop application and explains how the author solved it with Conflict-free Replicated Data Types (CRDTs), using a Hybrid Logical Clock with a device id as a tie-breaker to guarantee deterministic convergence.
A study of GNOME/Mutter MR 4725, which fixes a compositor thread stall on Nvidia GPUs by replacing a blocking buffer lock call with an event-driven approach using sync file descriptors and GLib's main loop.
Apple's "The Illusion of Thinking" suggests reasoning models may simulate, not perform, true reasoning—excelling at pattern matching but failing as problem complexity rises.