Writing
Blog
Thoughts on software architecture, AI, algorithmic trading, investing, and building for the long term.
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.
Content and Container Separation: Building a PowerPoint Generator with JSON as Source of Truth
A weekly training series needed consistent PowerPoint decks without manual formatting. The solution: JSON as source of truth, a Python generator as the renderer, and a clean separation between content and presentation.
Drift Detection for Live Trading Strategies: Comparing Broker Performance Against Backtest Baselines
How the DriftEngine evaluates live broker metrics against backtest baselines, generates recommendations, and gates strategy deployment through statistical drift analysis.
Pairing Blood Pressure Readings from Health Connect: The Millisecond Problem
How the Hermes Health Connect app pairs systolic and diastolic readings from Android Health Connect using one-second buckets and fuzzy matching, before exporting to a Laravel backend.
Natural Unit Prices for Grocery Flyers: Why $/kg Hides What You Actually Pay
When your grocery price scraper normalises everything to $/kg, you lose the signal consumers actually see. Here is how Panier Futé learned to parse 473 ml, barquette, sac, and botte without hardcoding a lookup table.
From Circular to Alert: Building a Grocery Price Intelligence Pipeline in Laravel
How a Laravel app scrapes weekly grocery circulars, normalizes prices into a historical time series, predicts optimal buy moments with linear regression on SQLite, and fires Telegram alerts when a staple hits its floor price.
Three Bugs Before Breakfast: Integrating Flutter with Google Health Connect
A walk through three sequential bugs that blocked a Flutter app from reading Google Health Connect data, how each was discovered, and what the health package v13.3.1 actually needs from your AndroidManifest.
Binary Bars and Byte Orders: Building a High-Performance Backtest Data Pipeline
How I built a custom binary bar format with MappedByteBuffer, chased an endianness bug across Python and Java, and organized 11 Maven modules around zero circular dependencies.
Stop Treating AI Like Autocomplete: 5 Game-Changing Lessons from the OpenCode / Crush Revolution
Agentic coding is not about better prompts. The OpenCode-to-Crush lineage of Plan/Build agents, persistent AGENTS.md context, granular permissions, and provider sovereignty changes how developers collaborate with AI.