Sean Campbell

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.

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

Sean Campbell

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.