Writing
Blog
Thoughts on software architecture, AI, algorithmic trading, investing, and building for the long term.
The Batch Backtest Workflow: From 500 Strategies to a Go/No-Go Decision
Running individual backtests one at a time does not scale. Here is the workflow I built to run 500+ strategy/symbol combinations in parallel, filter for quality, and produce a ranked decision list — all from a single shell command.
What 40 Automated Drafts Taught Me About Building a Cron-Powered Technical Blog
Three runs per day, every day: an AI agent drafts technical blog posts from git history, project context, and recent working sessions. After 40+ automated drafts, here is what the architecture looks like and where it breaks.
Semiotics of a Desktop Trading App: Why I Hand-Picked Every Icon in Trading Bridge
26 Lucide icons, 7 navigation items, and a dark theme built on amber. How icon choice shapes the feel of a desktop trading application.
Self-Hosted Server Analytics with GoAccess and Laravel: No JavaScript, No SaaS
How to pipe nginx access logs through GoAccess on Fly.io, embed the HTML report inside a Filament admin panel, and keep your visitor data off third-party servers.
The Testing Pyramid That Actually Works for Trading Software
Unit tests catch bugs. Integration tests catch regressions. Golden backtest baselines catch the silent failures that make you lose money at 3 AM.
Parsing StrategyQuant XML to Java: What 40+ Strategy Conversions Taught Us About Code Generation
Building a parser to convert StrategyQuant XML strategies into pure Java revealed hard truths about automated code generation for trading systems.
Position Sizing Is the Only Free Lunch: ATR, Risk Units, and Sensitivity Heatmaps in Java
The Dukascopy Downloader Rewrite: Extracting Node.js from a Java Trading Monorepo
Why I replaced a Python/Node hybrid data pipeline with 166 lines of pure Java 21, removing shell dependencies, fixing cross-platform crashes, and cutting build complexity in a Maven monorepo.
Tailwind v4 CSS-First Config: Deleting tailwind.config.js for a theme Block
How Tailwind CSS v4 replaces the old JavaScript config file with a CSS-native @theme block, and what that means for theme management, build tooling, and the developer experience gap between v3 and v4.
A Stock-Up Alert Service in Laravel: Comparing Current Deals Against Months of Price History
How a Laravel service scores every grocery circular deal against its 6-month price floor and fires a notification when the timing is right.
From Gemini Flash to Imagen 4.0: Migrating Recipe Image Generation in a Weekly Meal Pipeline
How I migrated a weekly meal pipeline from direct Gemini Flash image generation to Imagen 4.0 via a shared gemini_image module. Better quality, consistent prompting, WebP output, and one less env var to manage.
SQLite as a Backtest Results Store: Schema Design, Query Interface, and Sensitivity Heatmaps
How the trading-bridge project replaced ephemeral console logs with a structured SQLite store for backtest results — schema, auto-save hooks, CLI query API, desktop history views, and parameter sensitivity heatmaps.