Blog
Thoughts on software development, Rust, and systems programming.
Validating Real-World JavaScript with a PEG Grammar
Testing the ES2025 grammar against 69 production JS files — what broke, what worked.
The Arrow Function Lookahead Trick
How balanced-paren scanning before => gave a 38% speedup in my PEG parser.
57 new() Calls, 2 free() Calls
Porting from Go to Odin — what happens when you bring GC assumptions to manual memory.
Building a TUI From Scratch in Odin
Raw termios, alternate screen buffer, differential rendering — no libraries.
The Elm Architecture in a Systems Language
Implementing TEA (Model-Update-View) in Odin for a TUI — without closures or generics.
Why I Built a Shell Config Manager
The problem with monolithic .zshrc files and how Wayu fixes it.
AI Agents as Coworkers, Not Tools
The inversion of control pattern — letting AI drive workflows while using FSM as GPS.
Building 7 MCP Servers for a Frontend Factory
How we gave AI agents access to GraphQL schemas, design systems, and browser automation.
Decomposing a Monolith into Smart Surfaces
The 4-stage pipeline: catalog → spec → prototype → surface.
Migrating from REST to GraphQL in Production
N+1 queries, 403 errors, debouncing, and the real-world pain of API migration.
Tagged Unions Are All You Need
Why Odin's tagged unions replace interfaces, inheritance, and visitor patterns.
Writing a Bytecode VM for PEG Parsing
34 opcodes, explicit backtracking via stack, and how it differs from recursive descent.
Self-Hosting a Parser: The Bootstrap Problem
How Pegasus uses a meta-grammar to parse user PEG grammars — a miniature compiler bootstrap.
The PATH Management Problem Nobody Talks About
Why v2's approach broke and how v3's array-based system fixed it.
The Strategy Pattern Without Objects
Using function pointers in Odin to build a generic config CRUD system.
Wiring Vue Components to GraphQL
Patterns for connecting Nuxt 3 micro-apps to a GraphQL domain gateway.
Making a Design System AI-Readable
Publishing 6K+ component docs as MCP resources so AI agents can use them correctly.
Migrating from Cypress to Playwright
Why we switched, the migration patterns, and how coverage went from 40% to 90%.
Building Real-Time Chat with Go and WebSockets
gorilla/websocket, RabbitMQ for the stock bot, and why decoupled microservices matter.
Load Testing a Chat Server with k6
6 scenarios: connection storms, active chat, stock bot stress, spike tests, soak tests.
Writing a Build System in 10 Files
Why I built bld — type-safe compiler flags, self-rebuilding scripts, and flat packages.
Building a Fuzzy Finder in Raw Terminal Mode
1,068 lines of Odin: raw termios, scoring algorithms, and incremental search.
An ANSI Styling Pipeline in Odin
Three-tier adaptive color: TrueColor → ANSI256 → ANSI, auto-detecting terminal capabilities.
25 Micro-Apps in One Nuxt Shell
How Upwork's Smart Surfaces architecture works — SPA bundles, App Shell, shared auth.
Packrat Memoization with AVL Trees
Selective memoization, memory/speed tradeoffs, and AVL-balanced interval trees.
Eliminating Left Recursion in PEG Grammars
Why PEG can't handle left recursion natively, and the iteration-based rewrite patterns.
Rate Limiting and Auth Hardening in Production
Brute-force protections that reduced unauthorized access by 80%.
Arena Allocators: The Simple Solution to Memory Management
Why arenas are the 80/20 of memory management — two lifecycles, zero complexity.
Shipping an Ads Unit from Concept to Production
Cross-functional coordination — frontend, backend, analytics — building a new revenue stream.
Why I Write Odin
Data-oriented design, no hidden control flow, manual memory without the pain.
Processing images in rust
Here I try to understand how images work down to the bytes
Building a simple http server in rust
Getting a better understanding of http