Blog
Technical writeups, devlogs, project case studies, and engineering updates.
Algorithmic Trading Signals: From Indicators to Backtests
RSI, MACD, and moving averages are the vocabulary of signal engines — but turning indicators into a tradable edge is a statistics problem. This post covers signal construction, backtesting without overfitting, walk-forwa
Read MoreSeptember 05, 20264 min readBuilding My Portfolio: Glassmorphism, MDX, and SEO on Next.js
My first portfolio was a Vite + React site. It looked fine and loaded fast, but Google could barely see it. No metadata, no sitemap, no structured data — so I rebuilt it on Next.js.
Read MoreSeptember 05, 20262 min readDesign Tokens and Theme Systems with Tailwind
A theme that survives a redesign is a token system, not a palette. This post covers the three-layer token architecture (primitive → semantic → component), CSS-variable theming with data attributes, dark mode, and extendi
Read MoreSeptember 03, 20262 min readCrawling at Scale: Scheduling, Deduplication, and Storage
A crawler that fetches one page is a script; one that fetches a thousand is a pipeline. This post covers frontier management, politeness policies, content deduplication, incremental re-crawls, and storage decisions for c
Read MoreSeptember 01, 20262 min readGitHub Automation with the gh CLI: Triage, PRs, and Workflows
The gh CLI turns GitHub into a scriptable platform: issue triage, PR review automation, workflow control, and cross-repo coordination from shell scripts. This post covers real automation patterns for maintainers and heav
Read MoreAugust 31, 20267 min readTransformers Explained: From Attention to GPT
At 1:15 AM on a Wednesday, I was staring at a matrix multiplication that refused to converge. The loss curve looked like a seismograph during an earthquake. I had been debugging a transformer implementation for six hours
Read MoreAugust 29, 20262 min readRunning a Local LLM Proxy: OpenAI-Compatible Gateways
An OpenAI-compatible proxy in front of a local model turns every AI tool you own into a free, private endpoint. This post covers the gateway pattern: API compatibility, streaming, timeouts, caching, and routing between p
Read MoreAugust 27, 20262 min readVite Plugin Development: Hooks, Transforms, and Virtual Modules
Vite's plugin API is how tools like Tailwind, sitemaps, and OG-image generators become one-line integrations. This post covers the plugin lifecycle, transform hooks, virtual modules, and building a real sitemap plugin fr
Read MoreAugust 25, 20262 min readBrowser Automation That Looks Human
Undetected automation is an engineering problem: fingerprints, navigator properties, input cadence, and session persistence. This post covers stealth browser architecture — what detection systems measure, how to defeat e
Read MoreAugust 24, 20265 min readMLOps: From Notebook to Production Pipeline
My machine learning model had 97% accuracy in the notebook. It had 71% accuracy in production. The gap was not mysterious: the notebook used clean, preprocessed data. Production received raw data with missing values, inc
Read MoreAugust 23, 20266 min readBuilding RAG Systems That Actually Work: Lessons from Production
The demo worked perfectly. The documents loaded, the embeddings computed, the retrieval returned relevant chunks, and the language model produced fluent, accurate answers. Then I pointed it at real data and everything br
Read MoreAugust 22, 20262 min readSupabase as a Production Backend: Auth, RLS, and Realtime
Supabase gives you Postgres, auth, and realtime without renting servers. But production-grade usage means row-level security done right, session handling, and understanding what's free vs what costs. This post covers the
Read MoreAugust 20, 202610 min readOrchestrating 24/7 AI Agents on a Mac
At 2:47 AM on a Thursday, the agent I trusted to watch a price feed stopped answering. It hadn't crashed. It hadn't logged an error. The process was alive, the network socket was open, and the LLM loop had simply deadloc
Read MoreAugust 18, 202614 min readBuilding Custom MCP Servers: Extending AI with Tools
We’ve all watched the same demo: an AI agent confidently inventing a function name that doesn't exist, citing a file path that's 90% right, and producing a plan that would break CI within three hours. The problem isn't t
Read MoreAugust 16, 20261 min readGlassmorphism Is Back — and This Tailwind Plugin Makes It Painless
Frosted-glass UI is everywhere again — every dashboard, every AI chat sidebar, every "spatial" web app. But hand-rolling the effect means repeating the same four-line blur recipe in every component:
Read MoreAugust 16, 20261 min readSitemaps Are Free SEO — Here's the Vite Plugin That Generates Yours
Every static site I've shipped has gone through the same ritual: build the site, then manually write a sitemap.xml, forget to update it when a route changes, and discover a month later that Google indexed half my pages.
Read MoreAugust 15, 202615 min readBuilding HELIOS: A Gesture-Controlled AI OS in the Browser
Every operating system is a set of physical metaphors, and most of them are stuck in 1984. I spent years punching a mouse to move rectangles across a screen, clicking tiny close targets, and dragging windows by title bar
Read MoreAugust 13, 202613 min readA Zero-Cost Stack That Actually Works: AuraFinance
For six months, my entire financial life lived inside a spreadsheet that had grown to 4,187 rows. It worked, in the way that a fraying rope works: nobody wants to test it. CSVs were imported by hand, categories were gues
Read MoreAugust 13, 202612 min readBuilding a Web Scraper That Survives: Anti-Bot Evasion Tactics
At 9:42 PM on a Tuesday, DoxDock hit production for the first time. By 9:47 PM, 47 pages in, Cloudflare had slammed the door. The request logs showed the pattern clearly: 200, 200, 200, 200, then a 403, then a challenge
Read MoreAugust 13, 202614 min readLLM Inference Optimization: From Quantization to Speculative Decoding
Two weeks before we pushed HELIOS into our production path, I watched a single request take down a serving node. The GPU had 80GB of HBM, the 7B model weights occupied only 14GB of it, and the request was a 4,000-token s
Read MoreAugust 12, 202614 min readWhy Rust is the Future of Systems Programming
I spent the first two hours of a 2019 flight fighting error[E0505]: cannot move out of 's' because it is borrowed. By the time we landed, I had fixed exactly one function and learned to read the compiler's error messages
Read MoreAugust 11, 202614 min readSoftware Architecture for Solo Developers
When I greenfielded 3ni8ma — leetspeak for "enigma" — I had a microservices architecture in mind before I had a feature list. I sketched an auth service, a puzzle service, a scoring service, and an event bus to glue them
Read MoreAugust 10, 202613 min readUnderstanding GPU Memory: VRAM, Bandwidth, and Why Your Model Won't Fit
It was 1:47 a.m. on a Sunday, and I was watching a two-megabyte allocation kill eleven hours of work.
Read MoreAugust 09, 202612 min readDesigning CLI Tools That People Actually Enjoy Using
Most command-line tools are designed for the computer that executes them, not for the human staring at the terminal at the end of a long day. I have written both kinds, and the first release of astro-tasks was aggressive
Read MoreAugust 07, 202612 min readProduction ML Pipelines: From Notebook to Serving
In my first attempt at production machine learning, the model worked beautifully in the notebook. It had an AUC of 0.81 on a holdout set, feature importance plots that made sense, and a clean confusion matrix. Two weeks
Read MoreAugust 06, 202615 min readPostgreSQL Internals: What Happens When You Run SELECT *
Every developer has a SELECT story. Mine started as a dashboard query that was fast on my laptop, then fell apart when DoxDock finally had real users. DoxDock is a document search service that stores OCR’d PDFs, extract
Read MoreAugust 05, 202614 min readThe State of WebAssembly in 2026: Beyond the Browser
It started with a memory graph that would not stop climbing. In 2021, I was iterating on the prototype that became knowledge-globe — an interactive 3D map of how research papers cite across disciplines. The force-directe
Read MoreAugust 04, 202612 min readContainerization Without Docker: Alternatives for Development and Production
Somewhere between a Friday renewal notice from Docker, Inc. and a Monday CI outage, we stopped treating Docker as a default and started treating it as a choice.
Read MoreAugust 03, 202612 min readReact Server Components: A Mental Model Shift
I’ve spent the last year rebuilding my personal site with Next.js’s App Router, and the thing that broke my brain wasn’t the file conventions or the routing API. It was React Server Components. Every pattern I had intern
Read MoreAugust 02, 202614 min readThe Architecture of Real-Time Dashboards: WebSockets, Polling, and Event Sourcing
The first version of Aura Finance's dashboard was a lie. It showed portfolio balances that were five seconds old, occasionally stale by thirty, and completely wrong whenever the WebSocket that fed the backend silently di
Read MoreJuly 30, 202612 min readCivic Tech and Open Source Data Platforms: Building CommunityOne
At 11 PM on a rainy Tuesday, I was doing what too many concerned residents do: clicking through a county website trying to find out why a zoning variance hearing had been moved. The notice was on page three of a "News" s
Read MoreJuly 29, 202613 min readTracking 200+ Hours: Automated Pipeline Infrastructure for 100% Heartbeat Acceptance
I have a number sitting in a dashboard right now: 214 hours, 23 minutes. That is the amount of time I have spent with files open and code on the screen this year. Most people would read that number and think about discip
Read MoreJuly 28, 202614 min readSpatial Computing on the Web: MediaPipe + Three.js
The first time a Three.js cube followed my index finger across a laptop screen — no controller, no touchscreen, no click — I felt the same small shock I remember from the first time a GPS arrow moved as I walked. Then th
Read MoreJuly 27, 202614 min readBuilding astro-tasks: A Python CLI Developer Dashboard for NASA Space Apps
At 11:47 PM on a Friday in October, I deleted six hours of work without telling anyone. The file was 372 lines of argparse boilerplate, and it was the only thing standing between my team and a demo that was due in less t
Read More