Software engineer at Guitar Center. I work across full-stack web, retail POS, and developer tooling. Right now I'm shipping OpenDev — an AI-first IDE I built from scratch because every existing editor felt ten years behind, and Claude deserved better than a chat panel taped to the side.
Software engineer focused on what other engineers depend on.
Engineer at Guitar Center, working across retail POS, full-stack web, and the integration plumbing between them. Before that: a stack of full-stack systems where the interesting problem was always whatever the framework wouldn't do for you.
I care most about the kind of work other engineers depend on — tools, primitives, the plumbing that disappears when it's done well. Lately that's meant building AI deeper into the development loop, rather than parking it in a sidebar and calling it integrated.
The most recent expression of that is OpenDev. It started as a weekend experiment and turned into a full IDE.
Guitar CenterEngineer
Full-stack webTS · React · Node
Point-of-saleRetail systems
Developer toolingIDEs · CLIs · MCP
AI integrationAnthropic · OpenAI
DatabasesMySQL · Postgres · ES
02Ancient History
Almost thirty years of debugging production, briefly.
I've been writing software long enough to remember table-based layouts, FTP deployments, Dreamweaver, debugging Internet Explorer 6, PHP forums held together with hope, and manually centering divs before Stack Overflow existed. Here's the short version.
1997
AUSD Student Webmaster
Started building websites as a student webmaster for the Alhambra Unified School District. Back when "full stack" meant HTML, inline CSS, maybe one terrifying CGI script, and praying that Netscape and Internet Explorer rendered things the same way. They did not.
The Early Internet
Christiansingles.com
Early web applications during the chaotic golden age of the internet. Everything was PHP, MySQL, server restarts, mystery production bugs, and code deployed straight to production — because staging environments were, apparently, against God's plan.
The Corporate Years
Added Value · Harley-Davidson
Enterprise and marketing tech, including projects connected to brands like Harley-Davidson. Discovered meetings, corporate architecture diagrams, PowerPoint, and the empirical fact that "synergy" can physically damage the human spirit.
The Studios
5th Kind · Marvel · Universal Studios
Digital asset management systems and enterprise software used by Marvel and Universal Studios, among others. Large-scale systems, metadata, workflows, permissions, pipelines — plus many afternoons spent explaining to non-technical people why deleting the production database is generally discouraged.
Now
Guitar Center
Building systems and tools at Guitar Center. Still writing software. Still debugging production. Still explaining why turning it off and back on again occasionally works.
For most of those years I was a deeply traditional engineer. I believed good software required craftsmanship. That AI coding tools were mostly hype. That autocomplete wasn't intelligence. That real engineering required human judgment, all the way down.
Editorial · Spring 2026
Then Claude Code
ruinedthat worldview.
— filed under: tooling, second chances
I'm now probably happier coding with AI than without it. Not because AI replaces engineers — but because, after decades of writing software, this is the first time tooling has felt like an actual force multiplier rather than a gimmick.
After surviving multiple eras of web development, enterprise software, production outages, half a dozen JavaScript frameworks, and Internet Explorer 6 through 11, I unexpectedly found myself excited about programming again.
03Why OpenDev
Most IDEs feel like software from ten years ago, with AI taped on the side.
I've spent the past year using Claude Code daily, and loving it. The model is genuinely excellent. The IDE around it, no matter which one I tried, was the problem. VS Code drowning under a dozen AI plugins fighting each other for control of the editor. JetBrains charging monthly for an experience that hasn't meaningfully changed in a decade. Every AI plugin treating Claude like an external service to pipe text to and from — not something that should live inside the editor, the browser, the database client.
The push to actually do something about it came from my boss, Charlie Forrest. Charlie loves Replit; he kept pointing at it and asking why we couldn't just ship faster. The velocity question was fair, and at some point I'd used up my room to complain about IDEs without building one of my own. My answer wasn't going to be moving into someone else's hosted IDE — it was going to be building the one I'd actually use every day.
OpenDev started as a weekend experiment to see if I could embed the Anthropic SDK directly and skip the plugin layer entirely. A few months later it had a TypeScript language server, a SQL client, an element-picker browser, and a real terminal. I kept using it because it was faster, more honest, and finally let Claude see and manipulate the app I was building — not just the file I happened to have open.
It's opinionated. macOS only, for now. No plugin marketplace, no settings sprawl, no monthly bill. JavaScript and TypeScript are first-class — full language server, the AI loop built around them. Java and C# come along for the ride with proper syntax and service detection for Maven, Gradle, and dotnet. Speed, ownership, and developer control — that's the trade I made, and the trade is the product.
OpenDev
v0.5.25macOS · Apple SiliconMIT LicenseElectron · React · TS
An AI-first IDE for JavaScript, TypeScript, Java, and C#. Claude lives in the editor, the browser, and the database client — not in a sidebar.
OpenDev — my-app / src / pricing.ts
index.ts
pricing.ts
routes.ts
import{Anthropic}from'@anthropic-ai/sdk'
import{getRules}from'./rules'
// price tier resolver — pulled from live MySQL
export async functionresolveTier(sku:string){
construles=awaitgetRules(sku)
returnrules.tier??1
}
main↑0 ↓0TypeScript● LSP ready
UTF-8LFLn 7, Col 28
Claude in the core
The Anthropic SDK and Claude CLI ship embedded. Every panel — files, editor, browser, DB — is also an MCP endpoint. Claude reads and writes through the same surface you do, no plugin glue.
Element picker → patch
Click anything in the embedded browser. The IDE captures the CSS path, computed styles, HTML, and a screenshot, then routes them to Claude with your instruction. The change lands in a git worktree you can accept or discard.
SQL alongside code
MySQL, Postgres, and Elasticsearch profiles. Schema browser, autocomplete from the live schema, editable results grid with safe parameterized updates. No DataGrip, no TablePlus, no context switch.
JS, TS, Java, C#
JavaScript and TypeScript get a real typescript-language-server — hover, go-to-definition, completions, diagnostics. Java and C# get full syntax plus service detection for Maven, Gradle, and dotnet run. Not an exhaustive plugin matrix — just the languages I actually use.
Services & ports
Auto-detects runnable services across monorepo packages. Start, stop, restart with live log capture. Port panel shows every listening TCP port and the process bound to it — one-click free.
Built for shipping
Git status in the file tree, inline diff, real terminal via node-pty, fuzzy file finder, ripgrep search, tab tear-off into popout windows. The basics, done right.
Note. This build is unsigned — a Developer ID signature is on the roadmap. On first launch, right-click OpenDev.app and choose Open to bypass Gatekeeper. Source is MIT-licensed; build it yourself with npm run dist if you'd rather verify locally.
04Under the hood
How it actually works.
— 01
Electron with a typed IPC contract
The main process owns workspace state, subprocess management (TypeScript LSP, ripgrep, Claude CLI, node-pty), DB pools, and the MCP HTTP server. The renderer is React + Zustand and talks to main exclusively through contextBridge. Every channel is namespaced (fs:read, ai:send, db:query) and typed end-to-end via src/shared/.
— 02
Back-pressure at the process boundary
Long-running data sources — PTY output, AI streams, service logs, DB results — are all capped and coalesced at the main-process boundary. A runaway producer can't drown the renderer or crash the IDE. Hard caps on file read size, DB row count, subprocess output, AI streams; a memory watchdog warns before OOM territory.
— 03
Built-in MCP server
An HTTP MCP server runs on 127.0.0.1:53825. External CLIs (claude, codex) can connect for read access to IDE state — open files, services, workspace tree, listening ports. Same surface area the in-app Claude has, exposed cleanly.
— 04
Webview isolation for user content
The embedded browser uses nodeIntegration: false with a contextBridge-only surface, so a hostile page in your dev server can't reach the renderer's state or the host filesystem. The element picker runs as an injected script with a narrow IPC channel.
— 05
Secrets in the OS keychain
Database passwords are stored in macOS Keychain through keytar — never on disk in plaintext, never in the workspace. API keys live in user-scoped settings under Application Support, isolated from project files.
— 06
Worktree-isolated AI edits
When the AI proposes file changes, they're applied inside a git worktree, not your working copy. You see a real diff against your branch and accept or discard with one click — no half-applied patches, no surprise overwrites.
05Try it
Built for engineers who'd rather own their tools.
OpenDev is free, open source, and MIT-licensed. No account, no subscription, no plugin marketplace. It either fits your workflow or it doesn't — and either way, the code is yours to read.