Everything I've built, written and taught, in the order it happened.
Software engineer in Dallas. Go, Rust and .NET. Click any clip to open it.
- Writing 3 essays
- Building 1 live, 1 in progress
- Learning 3 in progress
- Community 1 appearance
- Mar 2023 Community: Engineer team lead, DSD cohort Dallas Software Developers
- Jun 2023 Building: Songle Angular, .NET, Python, PostgreSQL, Docker
- Sep 2024 Building: RSWebTWAIN Rust, Tauri v2, WebSocket, Angular, FFI
- Mar 2025 Building: Roaming.Camp Next.js, Go, PostGIS, Mapbox, Docker
- Apr 2025 Community: Talk: architecture patterns Dallas Software Developers
- Dec 2025 Writing: No One Cares About Your Work (And Why That's a Great Thing) Career Growth, Mental Health, Software Engineering, Leadership
- Dec 2025 Writing: Composition Over Inheritance in Angular: A Practical Guide Angular, TypeScript, Architecture, Best Practices
- Jan Learning: Foundations
- Jan Learning: Reading
- Mar Community: Talk: developer productivity Dallas Software Developers
- May Writing: Creative Frontend Designs With AI AI, Frontend Design, Harness, LLM
- Jun Building: Browser DAW engine Rust, WASM, AudioWorklet, TypeScript
- Jun Learning: Build
- Jul Writing: How Apps Like Redis Are So Efficient I/O Multiplexing, Redis, Performance, Architecture
- Sep Writing: I Won't Stop Coding Coding, AI, Mental Health, Fuuuuture
Community, March 2023 to February 2024
Engineer team lead, DSD cohort
Mentored aspiring developers through their learning journey, conducting code reviews and pair programming sessions.
Building, live
Songle
A daily music guessing game where players identify songs from isolated audio stems — vocals, drums, bass, or instrumentation.
Problem
Music trivia games rely on playing full tracks, making it too easy to identify songs. There’s no game that challenges players with isolated stems — just vocals, drums, or bass — for a genuinely difficult guessing experience.
Solution
Built a daily Wordle-style music guessing game where players identify songs from isolated audio stems. A .NET API orchestrates Python ML models (Spleeter/Demucs) to separate uploaded tracks into vocals, drums, bass, and instrumentation.
Tradeoffs
Audio separation runs Python ML models invoked via subprocess from .NET rather than porting to native code. This adds deployment complexity (multi-container Docker setup) but leverages battle-tested models that would take months to reimplement.
Impact
Players get 4 attempts with scoring based on speed (100/75/50/25 points). A daily background job auto-selects the Song of the Day, and the hybrid .NET/Python pipeline processes tracks end-to-end from YouTube URL to separated stems stored in cloud storage.
Building, September 2024 to April 2025
RSWebTWAIN
An open-source, headless Rust/Tauri desktop agent that bridges web browsers to TWAIN document scanners, replacing expensive proprietary libraries.
Problem
Enterprise web apps need browser-based document scanning, but the go-to commercial library is expensive and can’t handle legacy 32-bit-only scanner drivers on modern 64-bit systems.
Solution
Built a headless Tauri v2 system-tray agent that exposes a WebSocket API on localhost for browser-to-scanner communication. Uses a typestate pattern for the TWAIN state machine — seven state transitions verified at compile time — and spawns a 32-bit sidecar process to bridge the architecture gap for legacy drivers.
Tradeoffs
Chose Rust’s typestate pattern to make invalid TWAIN state transitions compile-time errors instead of runtime bugs. This added upfront design complexity but eliminated an entire class of scanner communication failures. A 32-bit sidecar over JSON-line IPC was simpler than forcing the whole app to 32-bit, at the cost of cross-process coordination.
Impact
Eliminates per-seat licensing costs for commercial scanning SDKs. Supports both modern 64-bit and legacy 32-bit TWAIN drivers in a single install — critical for enterprise deployments with mixed hardware. DPAPI-encrypted auth and origin validation secure the localhost WebSocket without TLS certificate complexity.
Building, live
Roaming.Camp
A geospatial campsite discovery platform that unifies NPS, weather, cell coverage, and reservation data into a single interactive map.
Problem
Planning outdoor trips requires juggling multiple disconnected sources — NPS, Recreation.gov, weather services, cell coverage maps — with no unified way to discover and evaluate campsites.
Solution
Built a full-stack geospatial platform with a Next.js frontend backed by 4 Go microservices that aggregate NPS, RIDB, NWS, and FCC data into an interactive Mapbox map with site details, weather, and cell coverage.
Tradeoffs
Chose microservices over a monolith — each service (places, weather, coverage, reservations) scales and deploys independently, but adds orchestration complexity. PostGIS handles spatial queries correctly (Earth curvature) at the cost of a heavier database dependency.
Impact
Consolidates 4+ data sources into a single map-based interface. Background sync keeps data fresh without blocking users, and the BFF pattern keeps internal services unexposed.
Community, April 1, 2025
Talk: architecture patterns
Backend and frontend architecture patterns, for the Dallas Software Developers meetup.
Writing, December 21, 2025
No One Cares About Your Work (And Why That's a Great Thing)
Navigating the rough waters of being a Software Engineer in 2026
Writing, December 30, 2025
Composition Over Inheritance in Angular: A Practical Guide
How switching from class-based inheritance to composition patterns improves reusability and maintainability.
Learning, in progress since January 2026
Foundations
Data-structures and algorithms fundamentals, courses then NeetCode 150.
Learning, in progress since January 2026
Reading
Reading deeply alongside the builds — the anchor books and a lighter read.
Community, March 1, 2026
Talk: developer productivity
Developer productivity, for the Dallas Software Developers meetup.
Writing, May 16, 2026
Creative Frontend Designs With AI
Harness design to give you unique frontends with agentic workflows
Building, in progress since June 2026
Browser DAW engine
Low-latency audio in the browser: Rust compiled to WASM, running inside an AudioWorklet with sample-accurate scheduling.
Where it stands
In progress. The engine is Rust compiled to WASM, running inside an AudioWorklet so scheduling stays sample-accurate and never waits on the main thread. Notes and decisions will land here as the build goes.
Learning, in progress since June 2026
Build
Building real systems from raw sockets up, one CodeCrafters course at a time.
Writing, July 22, 2026
How Apps Like Redis Are So Efficient
The mechanism behind handling thousands of concurrent open connections.
Writing, September 1, 2026
I Won't Stop Coding
Why, in the era of Agentic Coding, I will still be coding by hand
Get in touch
Whether you're looking for a software engineer who can hit the ground running, or you just want to talk shop about architecture patterns, I'd love to hear from you.