Writing
Blog
Thoughts on software architecture, AI, algorithmic trading, investing, and building for the long term.
GoAccess in Filament: A Zero-Dependency, Privacy-First Analytics Pipeline for Laravel
A deep dive into building a self-hosted web analytics dashboard inside Filament using GoAccess, Nginx log parsing, and secure local file serving without tracking cookies or GDPR banners.
Automated Blog Hero Images: Gemini Generation, GD Thumbnails, and Eloquent Observer Wiring
How a Gemini API call, a PHP GD thumbnailer, and a single Eloquent observer turned blog hero images into a zero-touch pipeline. No admin panel interaction required.
AppImage CI for PyQt6 Desktop Apps: From uv sync to a Distributable Artifact
Packaging a Python desktop app as an AppImage means bundling Tesseract OCR, a GGUF ML model, Qt platform libs, and a PyInstaller-built binary into a single distributable file. Here is the exact workflow.
Operations Manifest for a Trading System: What 900 Lines of Runbook Taught About Running Code That Handles Money
After 14 weeks of paper trading, the engineering team realized the code wasn't the problem -- the operational layer was missing. Enter a 900-line operations manifest and an 800-line reliability engineering guide.
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.
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.
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.